r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现2:https://developer.aliyun.com/article/1485110
泊松模型
Poisson回归用于在假设Poisson误差的情况下对计数数据进行建模,或者在均值和方差成比例的情况下使用非负数据进行建模。泊松也是指数分布族的成员。我们通常以对数建模: 。
给定观测值 的对数似然
和以前一样,我们优化了惩罚对数:
Glmnet使用外部牛顿循环和内部加权最小二乘循环(如逻辑回归)来优化此标准。
首先,我们加载一组泊松数据。
再次,绘制系数。
像以前一样,我们可以 分别使用coef
和 提取系数并在特定的λ处进行预测 predict
。
例如,我们可以
## 21 x 1 sparse Matrix of class "dgCMatrix" ## 1 ## (Intercept) 0.61123 ## V1 0.45820 ## V2 -0.77061 ## V3 1.34015 ## V4 0.04350 ## V5 -0.20326 ## V6 . ## V7 . ## V8 . ## V9 . ## V10 . ## V11 . ## V12 0.01816 ## V13 . ## V14 . ## V15 . ## V16 . ## V17 . ## V18 . ## V19 . ## V20 .
## 1 2 ## \[1,\] 2.4944 4.4263 ## \[2,\] 10.3513 11.0586 ## \[3,\] 0.1180 0.1782 ## \[4,\] 0.9713 1.6829 ## \[5,\] 1.1133 1.9935
我们还可以使用交叉验证来找到最佳的λ,从而进行推断。
选项几乎与正态族相同,不同之处在于 type.measure
,“ mse”代表均方误差,“ mae”代表均值绝对误差。
我们可以绘制 cv.glmnet
对象。
我们还可以显示最佳的λ和相应的系数。
## 21 x 2 sparse Matrix of class "dgCMatrix" ## 1 2 ## (Intercept) 0.031263 0.18570 ## V1 0.619053 0.57537 ## V2 -0.984550 -0.93212 ## V3 1.525234 1.47057 ## V4 0.231591 0.19692 ## V5 -0.336659 -0.30469 ## V6 0.001026 . ## V7 -0.012830 . ## V8 . . ## V9 . . ## V10 0.015983 . ## V11 . . ## V12 0.030867 0.02585 ## V13 -0.027971 . ## V14 0.032750 . ## V15 -0.005933 . ## V16 0.017506 . ## V17 . . ## V18 0.004026 . ## V19 -0.033579 . ## V20 0.012049 0.00993
Cox模型
Cox比例风险模型通常用于研究预测变量与生存时间之间的关系。
Cox比例风险回归模型,它不是直接考察 与X的关系,而是用 作为因变量,模型的基本形式为:
式中, 为自变量的偏回归系数,它是须从样本数据作出估计的参数; 是当X向量为0时, 的基准危险率,它是有待于从样本数据作出估计的量。简称为Cox回归模型。
由于Cox回归模型对 未作任何假定,因此Cox回归模型在处理问题时具有较大的灵活性;另一方面,在许多情况下,我们只需估计出参数 (如因素分析等),即使在 未知的情况下,仍可估计出参数 。这就是说,Cox回归模型由于含有 ,因此它不是完全的参数模型,但仍可根据公式(1)作出参数 的估计,故Cox回归模型属于半参数模型。
公式可以转化为:
我们使用一组预先生成的样本数据。用户可以加载自己的数据并遵循类似的过程。在这种情况下,x必须是协变量值的n×p矩阵-每行对应一个患者,每列对应一个协变量。y是一个n×2矩阵。
## time status ## \[1,\] 1.76878 1 ## \[2,\] 0.54528 1 ## \[3,\] 0.04486 0 ## \[4,\] 0.85032 0 ## \[5,\] 0.61488 1
Surv
包中的 函数 survival
可以创建这样的矩阵。
我们计算默认设置下的求解路径。
绘制系数。
提取特定值λ处的系数。
## 30 x 1 sparse Matrix of class "dgCMatrix" ## 1 ## V1 0.37694 ## V2 -0.09548 ## V3 -0.13596 ## V4 0.09814 ## V5 -0.11438 ## V6 -0.38899 ## V7 0.24291 ## V8 0.03648 ## V9 0.34740 ## V10 0.03865 ## V11 . ## V12 . ## V13 . ## V14 . ## V15 . ## V16 . ## V17 . ## V18 . ## V19 . ## V20 . ## V21 . ## V22 . ## V23 . ## V24 . ## V25 . ## V26 . ## V27 . ## V28 . ## V29 . ## V30 .
函数 cv.glmnet
可用于计算Cox模型的k折交叉验证。
拟合后,我们可以查看最佳λ值和交叉验证的误差图,帮助评估我们的模型。
如前所述,图中的左垂直线向我们显示了CV误差曲线达到最小值的位置。右边的垂直线向我们展示了正则化的模型,其CV误差在最小值的1个标准偏差之内。我们还提取了最优λ。
cvfit$lambda.min
## \[1\] 0.01594
cvfit$lambda.1se
## \[1\] 0.04869
我们可以检查模型中的协变量并查看其系数。
index.min
## \[1\] 0.491297 -0.174601 -0.218649 0.175112 -0.186673 -0.490250 0.335197 ## \[8\] 0.091587 0.450169 0.115922 0.017595 -0.018365 -0.002806 -0.001423 ## \[15\] -0.023429 0.001688 -0.008236
coef.min
## 30 x 1 sparse Matrix of class "dgCMatrix" ## 1 ## V1 0.491297 ## V2 -0.174601 ## V3 -0.218649 ## V4 0.175112 ## V5 -0.186673 ## V6 -0.490250 ## V7 0.335197 ## V8 0.091587 ## V9 0.450169 ## V10 0.115922 ## V11 . ## V12 . ## V13 0.017595 ## V14 . ## V15 . ## V16 . ## V17 -0.018365 ## V18 . ## V19 . ## V20 . ## V21 -0.002806 ## V22 -0.001423 ## V23 . ## V24 . ## V25 -0.023429 ## V26 . ## V27 0.001688 ## V28 . ## V29 . ## V30 -0.008236
稀疏矩阵
我们的程序包支持稀疏的输入矩阵,该矩阵可以高效地存储和操作大型矩阵,但只有少数几个非零条目。
我们加载一组预先创建的样本数据。
加载100 * 20的稀疏矩阵和 y
因向量。
## \[1\] "dgCMatrix" ## attr(,"package") ## \[1\] "Matrix"
我们可以像以前一样拟合模型。
fit = glmnet(x, y)
进行交叉验证并绘制结果对象。
预测新输入矩阵 。例如,
## 1 ## \[1,\] 0.3826 ## \[2,\] -0.2172 ## \[3,\] -1.6622 ## \[4,\] -0.4175 ## \[5,\] -1.3941
参考文献
Jerome Friedman, Trevor Hastie and Rob Tibshirani. (2008).
Regularization Paths for Generalized Linear Models via Coordinate Descent