在R中手动计算脊估计,简单

时间:2015-05-30 16:59:04

标签: r regression manual

我正在尝试了解岭回归,而我正在使用R.根据我的理解,下面的代码beta.r1beta.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?

1 个答案:

答案 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