Erros no ajuste de um modelo de regressão quantílica censurada


8

Eu tenho um resultado com a censura correta assim:

y<-c(rep(2.83,3),
     rep(3.17,4),
     rep(3.83,4),
     rep(4.17,5),
     rep(4.83,8),
     rep(5.5,3),
     rep(7.17,5),
     rep(8.17,7),
     rep(8.83,12),
     rep(9.5, 12),
     rep(9.83,17),
     rep(10.17,30),
     rep(10.50,100)) 

onde y=10.5estão os valores de censura corretos. Então, eu tentaria usar quantreg::crqpara ajustar um modelo de regressão quantílica censurada e começar com uma variável de intervenção binária:

set.seed(123)
require(quantreg)
yc<-rep(10.5, length(y))
treat<-rbinom(length(y), 1, 0.5)
age<-as.integer(rnorm(length(y), 50, 2))

model1

fit1<-crq(Curv(y, yc, "right")~treat, taus=(1:4)/5, , method="Powell")
Error in solve.default(x[h, ]) : 
  Lapack routine dgesv: system is exactly singular: U[2,2] = 0
Error in crq.fit.pow(X, y, cen, tau = taus[i], weights, left = left, ...) : 
  Singular basic solution generated by 'start'

model2

fit2<-crq(Curv(y, yc, "right")~treat+age, taus=(1:4)/5)
Error in solve.default(x[h, ]) : 
  Lapack routine dgesv: system is exactly singular: U[2,2] = 0
Error in crq.fit.pow(X, y, cen, tau = taus[i], weights, left = left, ...) : 
  Singular basic solution generated by 'start'

Alguém aqui pode saber o que há de errado com os modelos? É por causa dos laços em y? Há uma solução?

Respostas:


15

Em tais problemas de dados artificiais, os valores iniciais padrão para o método Powell não são muito propícios. Aqui está o que está acontecendo: crq.fit.powingenuamente começa tentando encontrar uma rqsolução ignorando a censura. No seu caso, como suas covariáveis ​​são independentes da resposta e uma das covariáveis ​​é binária, é provável que isso produza uma solução com um coeficiente de tratamento zero. Em seguida, o algoritmo tenta iniciar nesta solução e descobre que essa solução básica (o par de observações que caracteriza o ajuste inicial) possui o indicador de tratamento 0, (ou 1) e, nesse ponto, tenta resolver o rendimento inicial. um sistema linear singular e você recebe seu erro.

Portanto, o problema surge de uma conspiração bastante desagradável que tem a ver com os dados replicados, a falta de um sinal de modelo e, francamente, uma escolha bastante ingênua de um protocolo para escolher um valor inicial. Se você realmente deseja forçar R a produzir uma resposta, pode usar start = "global" - e (pelo menos para pequenos problemas como esse) crqproduzirá uma solução globalmente ótima. Mas suspeito que o melhor caminho é mudar um pouco o modelo.


10
Muito obrigado por se juntar a nós para responder a esta pergunta! Somos gratos por receber esse conselho autoritário.
whuber
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.