Errores al ajustar un modelo de regresión cuantil censurado


8

Tengo un resultado con la censura correcta como esta:

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)) 

donde y=10.5están los valores correctos de censura. Luego, trataría de usar quantreg::crqpara ajustar un modelo de regresión cuantil censurado y comenzar con una variable de intervención binaria:

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))

modelo1

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'

modelo2

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'

¿Alguien aquí puede saber qué les pasa a las modelos? ¿Es por los lazos en y? ¿Hay una solución?

Respuestas:


15

En tales problemas de datos artificiales, los valores iniciales predeterminados para el método Powell no son muy propicios. Esto es lo que está sucediendo: crq.fit.powingenuamente comienza tratando de encontrar una rqsolución ignorando la censura. En su caso, dado que sus covariables son independientes de la respuesta y una de las covariables es binaria, es probable que esto produzca una solución con un coeficiente de tratamiento cero duro. Luego, el algoritmo intenta comenzar en esta solución y encuentra que esta solución básica (el par de observaciones que caracterizan el ajuste inicial) tienen el indicador de tratamiento 0, (o 1), y en ese punto, al tratar de resolver los rendimientos del valor inicial un sistema lineal singular y obtienes tu error.

Entonces, el problema surge de una conspiración bastante desagradable de problemas que tienen que ver con sus datos replicados, la falta de una señal modelo y, francamente, una elección bastante ingenua de un protocolo para elegir un valor inicial. Si realmente quiere forzar a R a producir una respuesta, puede usar start = "global" - y (al menos para pequeños problemas como este) crqproducirá una solución globalmente óptima. Pero sospecho que el mejor camino es cambiar un poco el modelo.


10
¡Muchas gracias por acompañarnos para responder esta pregunta! Estamos agradecidos de tener un consejo tan autorizado.
whuber
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.