打ち切り分位回帰モデルのフィッティングのエラー


8

私はこのような正しい検閲の結果を持っています:

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.5、右打ち切り値です。次に、quantreg::crq検閲済み分位回帰モデルを当てはめるためにを使用して、バイナリ介入変数から始めます。

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

モデル1

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'

モデル2

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'

ここの誰かがモデルの何が悪いのか知っていますか?それはyの関係によるものですか?解決策はありますか?

回答:


15

このような人為的なデータの問題では、パウエル法のデフォルトの開始値はあまり有益ではありません。これが何が起こっているかです。crq.fit.pow単純にrq、打ち切りを無視して解決策を見つけようとすることから始まります。あなたのケースでは、共変量は応答から独立していて、共変量の1つがバイナリであるため、ハードゼロの処理係数を持つ解が得られる可能性があります。次に、アルゴリズムはこのソリューションから開始しようとし、この基本ソリューション(初期適合を特徴付ける観測値のペア)の両方に処理インジケーター0(または1)があり、その時点で開始値の結果を求めて解決しようとします。特異な線形システムでエラーが発生します。

したがって、問題は、複製されたデータとモデル信号の欠如、および率直に言って、開始値を選択するためのプロトコルのかなり素朴な選択に関係する、かなり厄介な陰謀から生じます。Rに答えを強制的に生成させたい場合は、start = "global"を使用できます-(少なくとも、このような小さな問題の場合)crqグローバルに最適なソリューションが生成されます。しかし、私はより良い道はモデルをいくらか変えることだと思います。


10
この質問にご参加いただきありがとうございます。このような権威あるアドバイスをいただければ幸いです。
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.