Fehler bei der Anpassung eines zensierten Quantil-Regressionsmodells

8

Ich habe ein Ergebnis mit der richtigen Zensur wie folgt:

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

Wo y=10.5sind die richtigen Zensurwerte? Dann würde ich versuchen, quantreg::crqein zensiertes Quantil-Regressionsmodell anzupassen und mit einer binären Interventionsvariablen zu beginnen:

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

Modell1

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'

Kann jemand hier wissen, was mit den Modellen los ist? Liegt es an den Bindungen in y? Gibt es eine Lösung?

David Z.
quelle

Antworten:

15

Bei solchen Problemen mit künstlichen Daten sind die Standardstartwerte für die Powell-Methode nicht sehr günstig. crq.fit.powFolgendes passiert: Naiv beginnt der Versuch, eine rqLösung zu finden, indem die Zensur ignoriert wird. In Ihrem Fall ergibt sich wahrscheinlich eine Lösung mit einem harten Null-Behandlungskoeffizienten, da Ihre Kovariaten unabhängig von der Reaktion sind und eine der Kovariaten binär ist. Dann versucht der Algorithmus, mit dieser Lösung zu beginnen, und stellt fest, dass diese Basislösung (das Beobachtungspaar, das die anfängliche Anpassung charakterisiert) beide den Behandlungsindikator 0 (oder 1) hat und zu diesem Zeitpunkt versucht, nach den Startwertausbeuten zu suchen ein singuläres lineares System und Sie erhalten Ihren Fehler.

Das Problem ergibt sich also aus einer ziemlich bösen Verschwörung von Problemen, die mit Ihren replizierten Daten zu tun haben, dem Fehlen eines Modellsignals und offen gesagt einer ziemlich naiven Wahl eines Protokolls zur Wahl eines Startwerts. Wenn Sie R wirklich zwingen möchten, eine Antwort zu erstellen, können Sie start = "global" verwenden - und (zumindest für kleine Probleme wie dieses) crqeine global optimale Lösung erstellen. Aber ich vermute, dass der bessere Weg darin besteht, das Modell etwas zu ändern.

R. Koenker
quelle
10
Vielen Dank, dass Sie sich uns angeschlossen haben, um diese Frage zu beantworten! Wir sind dankbar für diesen maßgeblichen Rat.
whuber