2014-01-30 55 views
4

對於我的數據,我很難獲取由R包​​估算的模型。如何從套索線性模型(lars R包)中獲取截取線

例如我創建一個假數據集x和相應的整數y是這樣的:

x = cbind(runif(100),rnorm(100)) 
colnames(x) = c("a","b") 
y = 0.5 + 3 * x[,1,drop = FALSE] 

接着我訓練使用套索正規化使用拉斯函數的模型:

m = lars(x,y,type = "lasso", normalize = FALSE, intercept = TRUE) 

現在我喜歡知道什麼是估計模型(that I know to be: y = 0.5 + 3 * x[,1] + 0 * x[,2]

我只對最後一步獲得的係數感興趣:

cf = predict(m, x, s=1, mode = "fraction", type = "coef")$coef 
cf 
a b 
3 0 

這些是我所期望的係數,但我不能找到一種方法,從m獲得截距(0.5)。

我試圖檢查predict.lars,其中配合這樣做代碼:

fit = drop(scale(newx, 
      object$meanx, FALSE) %*% t(newbetas)) + object$mu) 

我可以看到變量進行縮放,而的y(對象$畝)均值爲使用,但我找不到一個簡單的方法來獲取我正在尋找的攔截的價值。我怎麼弄到的?

+0

嗨,你可以用'cbind(1代替'x',X )'添加一列並使用'intercept = FALSE'選項。 –

+0

...但這不是一個好主意,因爲lasso可以設置截取值爲0 –

回答

4

intercept=T in​​具有居中x變量和y變量的效果。它不包括具有係數的明確截距項。

話雖這麼說,你可以做predict(m,data.frame(a=0,b=0),s=2)$fit得到y的預測值時,協變量是0(傳統的截距的定義)

+1

謝謝,我正在尋找一種方式從數據結構訪問它們,但它不會縫成爲可能。 另一種方法我發現,正在使用的事實是,你有適合的模型(y - ym)= b1 *(x1 - x1m)+ b2 *(x2 - x2m),所以根據您的非中心變量的截距是y =(y -b1 * xm1-b2 * xm2)其中m表示變量的平均值 – lucacerone