Causa de singularidade na matriz para regressão quantílica

8

Estou realizando regressões quantílicas em R usando o pacote quantreg. Meu conjunto de dados inclui 12.328 observações, variando de 0,12 a 330. Os pontos no tempo para meus dados não são exatamente contínuos; todos os dados se enquadram em uma das dezenas de posições que variam de 73 a 397.

Quando realizei uma regressão linear nesses dados usando a função lm (), consegui fazer isso com polinômios de até 4:

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

No entanto, com o pacote quantreg e o comando rq (), não posso usar nenhum polinômio. Uma regressão simples funciona bem:

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

Mas assim que eu entro em polinômios, não há dados. Quando eu insiro isso:

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

Eu recebi a seguinte mensagem de erro:

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

Eu li sobre matrizes singulares e acho que pode haver duas razões para isso: (1) só tenho uma variável em cada eixo ou (2) meus dados estão em bin / a variável Y não é verdadeiramente contínua.

Alguém pode me dizer por que estou recebendo esse erro?

PS - é assim que o gráfico se parece:

insira a descrição da imagem aqui

Charcha
fonte
Você recebeu alguma resposta para isso? Parece que isso se deve ao grande número não. de valores repetidos [ stat.ethz.ch/pipermail/r-help//2013-April/351935.html]
Mohit Verma

Respostas:

7

Acredito que o motivo pelo qual ele aparece como singular é o seu segundo motivo, porque os dados estão em um bin. A duplicação de observações (para um único valor x, múltiplas respostas) aumenta as chances de singularidade.

Eu recebi a mesma mensagem de erro que você com um conjunto de dados estruturado de maneira semelhante. Eu tenho várias observações para cada valor x, algumas das quais eram idênticas. Eu cheguei a isso 'agitando' os dados, adicionando uma quantidade muito pequena de ruído aleatório aos valores de resposta usando rnorm (). Isso significava que, embora houvesse várias observações para cada valor x, não havia repetições idênticas e a função rq () funciona. Contanto que o ruído adicionado seja pequeno, ele não afetará o coeficiente e as estimativas SE de rq visivelmente.

Jack Ballard
fonte
1

Uma alternativa à rnorm()proposta por Jack Ballard está usando jitter()o pacote base.

florian
fonte