Causa de singularidad en matriz para regresión cuantil

8

Estoy realizando regresiones cuantiles en R usando el paquete quantreg. Mi conjunto de datos incluye 12,328 observaciones que van desde 0,12 a 330. Los puntos de tiempo para mis datos no son exactamente continuos; Todos los datos caen en una de las pocas docenas de contenedores que van desde 73 a 397.

Cuando realicé una regresión lineal en estos datos usando la función lm (), pude hacerlo con polinomios de hasta 4:

lm(Y~poly(X,3,raw=TRUE),data=mydata)

Sin embargo, con el paquete quantreg y el comando rq (), no puedo usar ningún polinomio. Una regresión simple funciona bien:

rq(Y~X,data=mydata,tau=.15)

Pero tan pronto como me meto en los polinomios, no hay dados. Cuando entro en esto:

rq(Y~poly(X,2,raw=TRUE),data=mydata,tau=.15)

Me sale el siguiente mensaje de error:

Error in rq.fit.br(x, y, tau = tau, ...) : Singular design matrix

He leído sobre matrices singulares, y creo que podría haber dos razones para esto: (1) Solo tengo una variable en cada eje, o (2) mis datos están agrupados / la variable Y no es realmente continua.

¿Alguien puede decirme por qué recibo este error?

PD: así es como se ve el gráfico:

ingrese la descripción de la imagen aquí

Charcha
fuente
¿Recibiste alguna respuesta para esto? Parece que esto se debe al gran no. de valores repetidos [ stat.ethz.ch/pipermail/r-help//2013-April/351935.html]
Mohit Verma

Respuestas:

7

Creo que la razón por la que aparece como singular es su segunda razón, porque los datos están agrupados. Duplicar observaciones (para un solo valor de x, múltiples respuestas) aumenta las posibilidades de singularidad.

Recibí el mismo mensaje de error que usted con un conjunto de datos estructurado de manera similar. Tengo múltiples observaciones para cada valor de x, algunas de las cuales fueron idénticas. Lo solucioné 'sacudiendo' los datos, agregando una cantidad muy pequeña de ruido aleatorio a los valores de respuesta usando rnorm (). Esto significaba que aunque había múltiples observaciones para cada valor de x, no había repeticiones idénticas y la función rq () funciona. Mientras el ruido que agregue sea pequeño, no afectará notablemente el coeficiente y las estimaciones de SE de rq.

Jack Ballard
fuente
1

Una alternativa a la rnorm()propuesta por Jack Ballard está utilizando jitter()el paquete base.

florian
fuente