Erreurs dans l'ajustement d'un modèle de régression quantile censuré

8

J'ai un résultat avec une censure à droite comme ceci:

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

y=10.5sont les bonnes valeurs de censure. Ensuite, j'essaierais d'utiliser quantreg::crqpour ajuster un modèle de régression quantile censuré et commencer avec une variable d'intervention binaire:

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

modèle1

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'

modèle2

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'

Quelqu'un ici peut-il savoir ce qui ne va pas dans les modèles? Est-ce à cause des liens en y? Y a-t-il une solution?

David Z
la source

Réponses:

15

Dans de tels problèmes de données artificielles, les valeurs de départ par défaut pour la méthode Powell ne sont pas très favorables. Voici ce qui se passe: crq.fit.powcommence naïvement en essayant de trouver une rqsolution en ignorant la censure. Dans votre cas, étant donné que vos covariables sont indépendantes de la réponse et que l'une des covariables est binaire, cela donnera probablement une solution avec un coefficient de traitement nul. Ensuite, l'algorithme essaie de commencer à cette solution et constate que cette solution de base (la paire d'observations qui caractérisent l'ajustement initial) a à la fois l'indicateur de traitement 0, (ou 1), et à ce moment, essayant de résoudre pour les rendements de valeur de départ un système linéaire singulier et vous obtenez votre erreur.

Le problème découle donc d'une conspiration plutôt désagréable de problèmes liés à vos données répliquées, l'absence d'un signal modèle et, franchement, d'un choix plutôt naïf d'un protocole pour choisir une valeur de départ. Si vous voulez vraiment forcer R à produire une réponse, vous pouvez utiliser start = "global" - et (au moins pour les petits problèmes comme celui-ci) crqproduira une solution globalement optimale. Mais je soupçonne que le meilleur chemin est de changer quelque peu le modèle.

R. Koenker
la source
10
Merci beaucoup de vous joindre à nous pour répondre à cette question! Nous sommes reconnaissants d'avoir de tels conseils faisant autorité.
whuber