我想知道如何限制lm()
中的某些參數具有正係數。有一些軟件包或功能(例如display
)可以使所有係數和攔截正確。R - 強制某些參數在lm()中具有正係數
例如,在這個例子中,我想只強制x1
和x2
有正係數。
x1=c(NA,rnorm(99)*10)
x2=c(NA,NA,rnorm(98)*10)
x3=rnorm(100)*10
y=sin(x1)+cos(x2)-x3+rnorm(100)
lm(y~x1+x2+x3)
Call:
lm(formula = y ~ x1 + x2 + x3)
Coefficients:
(Intercept) x1 x2 x3
-0.06278 0.02261 -0.02233 -0.99626
我已經在包'nnls'
試圖功能nnnpls()
,它可以容易地控制係數的標誌。不幸的是,由於數據中的NA問題,我不能使用它,因爲這個功能不允許NA。
我看到函數glmc()
可以用來應用約束,但我無法得到它的工作。
有人能告訴我該怎麼辦?
謝謝,你說過「如果你把x1和x2的係數限制爲正值,它們就會變成零(如預期的)」,但爲什麼呢?另外,在函數罰(),似乎你必須定義每個參數是正面還是負面,你可以讓它們自由(例如,lambda3可以正面或負面,沒有我們指定它)。 – 2014-12-02 10:45:22
不,「positive = FALSE」的意思是「免費」。此外,如果平方和的實際最小值出現負值估計值,則極有可能是受限參數空間中的最小值發生爲零。 – Roland 2014-12-02 10:54:46
如果沒有包裹被涉及,這將會更有趣;說一個人會想在非OLS設置中應用它。 – 2017-10-19 22:34:32