Lasso回归是不是只能用OLS估计,不能用极大似然估计,为什么我用极大似然估计的结果和真实偏差那么大,而用OLS估计却很相近。希望大家帮我找出问题
代码如下:
library(lars)
set.seed(123)
suijishu=runif(1000,-3,2)
zhu=matrix(suijishu,100,10)
x0=zhu[,1:4]
x=zhu[,1:10]
beta0=matrix(c(1,3,3,4),4,1) #真实估计参数
y=x0%*%beta0
laa=lars(x,y)
cva <- cv.lars(x,y,K = 10, plot.it = TRUE) #10折交叉验证,并绘制cv的变化图lot(laa)
best <- cva$index[which.min(cva$cv)]
coef <- coef.lars(laa, mode = "fraction", s = best) #使得CV最小时的系数
coef[coef != 0] #通过CV选择的变量
n=length(y)
#极大似然估计如下
n=length(y)
L1=function(beta) #自编Lasso
{e=y-x%*%beta[1:10]
s=-.5*n*log(2*pi)-.5*n*log(beta[11])-(t(e)%*%e)/(2*beta[11])+best*sum(abs(beta[1:10]))
return(-s)}
LL1=nlm(L1,c(rep(1,11)))
LL1