簡體   English   中英

嶺回歸 - 如何從ridgelm對象創建lm對象

[英]Ridge regression - how to create lm object from ridgelm object

我在從ridgelm對象創建lm對象時遇到問題。

x1 <- rnorm(20)
x2 <- rnorm(20, mean=x1, sd=.01)
y <- rnorm(20, mean=2+x1+x2)
data <- data.frame(x1=x1, x2=x2, y=y)
model <- lm.ridge(y~x1+x2, lambda=1, data=data)

predict(model, newdata = data)

給出錯誤:

Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "ridgelm"

我試圖從ridgelm創建一個lm對象,以便將它與預測函數一起使用。 結果證明比我預期的要困難。

我的嘗試:

m <- lm(y~x1+x2, data=data)
m$coefficients[["r1"]] <- model$coef[["r1"]]
m$coefficients[["r2"]] <- model$coef[["r1"]]
m$coefficients[["r3"]] <- model$coef[["r3"]]
m$coefficients[["(Intercept)"]] <- ???

不知怎的,我無法從lm.ridge模型中讀取攔截。

由於您正在使用線性模型,我認為該解決方案是系數和新數據的簡單矩陣乘積。

請注意,您必須添加一個包含1的entiry列,表示截距,以對應第一個模型系數。

嘗試這個:

set.seed(1)
newdat <- data.frame(1, x1 = rnorm(5), x2=rnorm(5))
as.matrix(newdat) %*% coef(model)

          [,1]
[1,] 0.1648573
[2,] 2.5017097
[3,] 1.7058644
[4,] 4.0967116
[5,] 1.7597485

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM