5
我試圖進行線性迴歸,像這樣的模式:線性迴歸與係數的約束
Y = aX1 + bX2 + c
所以,Y ~ X1 + X2
假設我有以下響應向量:
set.seed(1)
Y <- runif(100, -1.0, 1.0)
以下矩陣的預測變量:
X1 <- runif(100, 0.4, 1.0)
X2 <- sample(rep(0:1,each=50))
X <- cbind(X1, X2)
我想使用係數以下限制:
a + c >= 0
c >= 0
因此,沒有b上的約束。
我知道glmc包可以用來應用約束,但我無法確定如何將它應用於我的約束。例如,我也知道可以使用contr.sum,以便所有係數總和爲0,但這不是我想要做的。 solve.QP()似乎是另一種可能性,其中可以使用設置meq=0
,以便所有係數> = 0(再次,這裏不是我的目標)。
注意:溶液必須能夠在響應向量Y來處理NA值,例如用:
Y <- runif(100, -1.0, 1.0)
Y[c(2,5,17,56,37,56,34,78)] <- NA
謝謝你的回答!爲了確保我理解正確,因爲我想要一個+ c> = 0且c> = 0,滿足這些約束但a和c不等於0的情況應該不受限制,它們應該保留爲是(標準線性迴歸的結果)。您的解決方案是否適用於係數可能符合約束條件的不同數據?如果使用標準線性迴歸來滿足約束條件(以便我可以在大型數據集上使用它),我希望能夠在不知道事先知道的情況下應用此功能。 – arielle
另外,在使用這種方法(我習慣於lm())時,如何處理響應中的潛在NAs,以及如何得到係數的標準誤差或p值? – arielle
是的,如果約束在原始線性迴歸中不具約束力,那麼您將返回這些結果。如果在標準線性迴歸中不滿足約束條件,約束條件只會改變。我不知道你有關P值的問題的答案;您可能可以通過stats.stackexchange.com獲得幫助。 – josliber