R
擬合刪失分位數回歸模型的錯誤
我有這樣的正確審查結果:
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 的關係嗎?有解決辦法嗎?
在此類人工數據問題中,Powell 方法的默認起始值不是很有利。這就是正在發生的事情:
crq.fit.pow
天真地開始試圖rq
通過忽略審查來找到解決方案。在您的情況下,由於您的協變量獨立於響應並且協變量之一是二元的,因此這可能會產生具有硬零處理係數的解決方案。然後算法嘗試從這個解決方案開始,並發現這個基本解決方案(表徵初始擬合的一對觀測值)都具有處理指標 0(或 1),並且在那時,嘗試求解起始值產生一個奇異的線性系統,你會得到你的錯誤。因此,問題源於與您的複制數據有關的一個相當討厭的問題,缺少模型信號,坦率地說,是一個相當幼稚的協議選擇來選擇起始值。如果你真的想強制 R 產生一個答案,你可以使用 start = “global” – 並且(至少對於像這樣的小問題)
crq
將產生一個全局最優解。但我懷疑更好的方法是稍微改變模型。