我正在尝试拟合具有大约 60 个预测变量和 30 个观察值的多元线性回归模型,因此我使用glmnet包进行正则化回归,因为 p>n。
我一直在阅读文档和其他问题,但我仍然无法解释结果,这是一个示例代码(有 20 个预测变量和 10 个观察值来简化):
我创建了一个矩阵 x,其中 num rows = num 观察值和 num cols = num 个预测变量和一个表示响应变量的向量 y
> x=matrix(rnorm(10*20),10,20)
> y=rnorm(10)
我拟合了一个 glmnet 模型,将 alpha 作为默认值(= 1 表示 lasso 惩罚)
> fit1=glmnet(x,y)
> print(fit1)
我知道随着 lambda 值的减小(即惩罚),我得到了不同的预测
Call:  glmnet(x = x, y = y) 
        Df    %Dev   Lambda
  [1,]  0 0.00000 0.890700
  [2,]  1 0.06159 0.850200
  [3,]  1 0.11770 0.811500
  [4,]  1 0.16880 0.774600
   .
   .
   .
  [96,] 10 0.99740 0.010730
  [97,] 10 0.99760 0.010240
  [98,] 10 0.99780 0.009775
  [99,] 10 0.99800 0.009331
 [100,] 10 0.99820 0.008907
现在我预测我的 Beta 值,例如,选择从glmnet
> predict(fit1,type="coef", s = 0.008907)
21 x 1 sparse Matrix of class "dgCMatrix"
                  1
(Intercept) -0.08872364
V1           0.23734885
V2          -0.35472137
V3          -0.08088463
V4           .         
V5           .         
V6           .         
V7           0.31127123
V8           .         
V9           .         
V10          .         
V11          0.10636867
V12          .         
V13         -0.20328200
V14         -0.77717745
V15          .         
V16         -0.25924281
V17          .         
V18          .         
V19         -0.57989929
V20         -0.22522859
相反,如果我选择 lambda
cv <- cv.glmnet(x,y)
model=glmnet(x,y,lambda=cv$lambda.min)
所有变量都是 (.)。
疑问和问题:
- 我不确定如何选择 lambda。
 - 我应该使用非 (.) 变量来拟合另一个模型吗?就我而言,我想保留尽可能多的变量。
 - 我如何知道 p 值,即哪些变量可以显着预测响应?
 
我为我糟糕的统计知识道歉!谢谢你的帮助。