我正在尝试了解岭回归,而我正在使用R.根据我的理解,下面的代码beta.r1
和beta.r2
在下面的代码中是相同的
library(MASS)
n=50
v1=runif(n)
v2=v1+2
V=cbind(1,v1,v2)
w=3+v1+v2
I=diag(3)
lambda=2 #arbitrarily chosen
beta.r1=solve(t(V)%*%V+lambda*I)%*%t(V)%*%w
#Using library(MASS)
fit=lm.ridge(w~v1+v2,lambda=2, Inter=FALSE)
beta.r2=coef(fit)
#Shouldn't beta.r1 and beta.r2 be the same?
答案 0 :(得分:0)
我认为在lm.ridge
代码中执行的变量缩放(可以通过在{R}控制台中键入lm.ridge
来访问)可能会导致差异。代码按每个变量的均方根值缩放:
Xscale <- drop(rep(1/n, n) %*% X^2)^0.5
X <- X/rep(Xscale, rep(n, p))
您的代码不会执行任何变量缩放。
?lm.ridge
帮助页面中lm.ridge
返回的内容说明中提示了变量缩放:
scale:X矩阵上使用的缩放。
因此,您可以访问lm.ridge
使用的缩放:
fit$scales
# v1 v2
# 0.2650311 0.2650311