R语言glmnet包拟合广义线性模型
R包glmnet是通过惩罚最大似然法拟合广义线性和类似模型的软件包。
1. 加载包和数据
#install.packages("glmnet", repos = "https://cran.us.r-project.org")library(glmnet)
ls("package:glmnet")# x = matrix(rnorm(100 * 20), 100, 20)*10
# y = rnorm(100)### 1. 加载包和数据
data(QuickStartExample)
x <- QuickStartExample$x
y <- QuickStartExample$y
2. 拟合模型
### 2. 拟合模型
fit = glmnet(x,y,alpha = 1,family = "gaussian",standardize=TRUE) # lasso回归
##glmnet主要参数说明:
# alpha: elasticnet mixing parameter,0≤α≤ 1,
# alpha=1(默认值) is the lasso penalty, and alpha=0 the ridge penalty.
# nlambda: 默认100
# lambda: 用户提供的lambda序列。默认是让程序根据nlambda和lambda计算的lambda序列
# standardize:数据是否要标准化处理,默认为TRUE
# intercept,线性模型的截距,默认为TRUE
# family:模型中使用的误差分布和链接函数,取值范围:"gaussian", "binomial",
# "poisson", "multinomial","cox", "mgaussian",默认为gaussian。#fit = glmnet(x,y,alpha = 0,family = "gaussian",standardize=TRUE) # Ridge回归
#fit = glmnet(x,y,alpha = 0.3,family = "gaussian",standardize=TRUE) # elasticnet# # 自定义lambdas
# lambdas <- 10^seq(2, -2, by = -.1) # 100和0.01之间
# fit = glmnet(x,y,alpha = 1,family = "gaussian",
# lambda=lambdas,standardize=TRUE)class(fit) # [1] "elnet" "glmnet"
print(fit)
# glmnet返回一系列模型供用户选择(不同lambda下训练好的模型)
## 输出结果解读:
# Df:the number of nonzero coefficients
# %dev:the percent deviance explained
# Lambda: the corresponding value of λ,可能小于指定的lambda数,由于算法停止规则# help(glmnet.control) # internal glmnet parameters
3.查看模型参数
### 3.查看模型参数
any(fit$lambda == 0.5)# 是否有此lambda值的模型(训练好的)# 所有lambda值下的模型参数
coef(fit)
# 指定lambda值下的模型参数
coef(fit,s = 0.01)
coef(fit,s = c(10,1,0.1))
4. 预测
### 4. 预测
# 不同lambda下模型的预测结果。注:一个lambda对应一个训练好的模型
predict(fit, newx = x[1:5,],type = "response")
# type:“link”, “response”, “coefficients”, “nonzero”其中的一个# 指定参数lambda,模型的预测结果
predict(fit, newx = x[1:5,], type = "response", s = 0.00351)
predict(fit, newx = x[1:5,], type = "response", s = 0.5)
5. 模型拟合过程作图
### 5. 模型拟合过程作图
plot(fit,label = TRUE)
plot(fit, xvar = "lambda", label = TRUE)
## 参数 xvar: “norm” for the ℓ1-norm of the coefficients (default),
# “lambda” for the log-lambda value and “dev” for %deviance explained
## 参数label: 是否显示变量名
6. 交叉验证确定模型的最佳lambda(超参数)
### 6. 交叉验证确定模型的最佳lambda(超参数)
# glmnet返回一系列模型供用户选择
cvfit <- cv.glmnet(x, y) # 默认10倍交叉验证(nfolds = 10)。
# 返回cv.glmnet对象,包含交叉验证的所有fits要素统计。
# lambda.min:is the value of λ that gives minimum mean cross-validated error
# lambda.1se: is the value of λ that gives the most regularized model such that
# the cross-validated error is within one standard error of the minimumplot(cvfit)cvfit$lambda.min # 交叉验证平均误差最小时模型的lambda
cvfit$lambda.1se
# 得到交叉验证平均误差最小的lambda时模型的系数(coefficients)
coef(cvfit, s = "lambda.min")
coef(cvfit) # 默认s = "lambda.1se"
coef(cvfit, s = "lambda.1se") predict(cvfit, newx = x[1:5,], s = "lambda.min")
predict(cvfit, newx = x[1:5,])
7. Cox 回归
### 7. Cox 回归
# Cox回归
data(CoxExample)
fit = glmnet(CoxExample$x,CoxExample$y,alpha = 1,family = "cox")
## alpha = 1,用于变量选择,去除系数为零的变量cvfit <- cv.glmnet(CoxExample$x,CoxExample$y,alpha = 1,family = "cox")
# type.measure :deviance# cvfit <- cv.glmnet(CoxExample$x,CoxExample$y,
# alpha = 1,family = "cox",
# type.measure= "C")plot(cvfit)# type.measure="C" is Harrel's concordance measure
cvfit$lambda.min
coef(cvfit,s = cvfit$lambda.min)
coef(cvfit,s = cvfit$lambda.1se)# 预测生存时间
predict(cvfit, newx = CoxExample$x[1:10, ], s = cvfit$lambda.min,type = "response")
# type:“link”, “response”, “coefficients”, “nonzero”其中的一个## 和survival包coxph比较
library(survival)
set.seed(1)
nobs <- 100; nvars <- 15
x <- matrix(rnorm(nobs * nvars), nrow = nobs)# create response
ty <- rep(rexp(nobs / 5), each = 5)
tcens <- rbinom(n = nobs, prob = 0.3, size = 1)
y <- Surv(ty, tcens)glmnet_fit <- glmnet(x, y, family = "cox", lambda = 0)
# lambda =0, 没有正则项,等于coxph_fit
coxph_fit <- coxph(y ~ x)
# glmnet函数,当lambda =0, 没有正则项,等于coxph_fit
plot(coef(glmnet_fit), coef(coxph_fit))
abline(0, 1)
8. 其他回归实例
###8. 其他回归实例## 当y仅包含两种分类时可以使用二分类模型,
data(BinomialExample)
x <- BinomialExample$x
y <- BinomialExample$y
fit = glmnet(x,y,alpha = 1,family = "binomial")
plot(fit,label = TRUE)
#指定lambda在0.05和0.01时预测新样本的类别,type = "class"指定输出值为类别
predict(fit, newx = x[1:5,], type = "class", s = c(0.05, 0.01))
#交叉验证
#cvfit = cv.glmnet(x, y, family = "binomial", type.measure = "class")
cvfit = cv.glmnet(x, y, family = "binomial", type.measure = "auc")
plot(cvfit)## 当y为多分类时
data(MultinomialExample)
x <- MultinomialExample$x
y <- MultinomialExample$y
#拟合模型
fit = glmnet(x, y, family = "multinomial", type.multinomial = "grouped")
predict(fit, newx = x[1:10,], type = "class")
#交叉验证
cvfit=cv.glmnet(x, y, family="multinomial", type.multinomial = "grouped", parallel = TRUE)
#cvfit = cv.glmnet(x, y, family = "multinomial", type.measure = "class")
# Only deviance, class, mse, mae available as type.measure for Multinomial models;
#绘图展示
plot(fit, xvar = "lambda", label = TRUE, type.coef = "2norm")
plot(cvfit)#预测模型
predict(cvfit, newx = x[1:10,], s = "lambda.min", type = "class")
R语言glmnet包拟合广义线性模型相关推荐
- 《R语言实战》:广义线性模型R实现
广义线性模型 理论部分取自<R语言实战>: 当因变量结果为计数型变量(非负有限值).二值变量或多分类变量时进行适用广义线性模型. 标准线性模型中假设y符合正态分布,而广义线性模型使用连接函 ...
- R语言glmnet包lasso回归中分类变量的处理
我们在既往文章<手把手教你使用R语言做LASSO 回归>中介绍了glmnet包进行lasso回归,后台不少粉丝发信息向我问到分类变量处理的问题,我后面查了一下资料之前文章分类变量没有处理, ...
- r语言glmnet包系数显示不全_第一章: R语言介绍
1:R语言的用途 R也是一种为统计计算和绘图而生的语言和环境,R是一个全面的统计研究平台,提供了各式各样的数据分析技术. 2:R语言的使用 R语句由函数和赋值构成,命令提示符为 > ⑴赋值: R ...
- R语言使用glmnet包拟合lasso-cox回归模型(包含生存时间和结果标签)、使用lasso-cox模型进行特征筛选、使用sapply函数对特征数据进行标准化z-score
R语言使用glmnet包拟合lasso-cox回归模型(包含生存时间和结果标签).使用lasso-cox模型进行特征筛选.使用sapply函数对特征数据进行标准化z-score 目录
- R语言使用glmnet包拟合lasso-cox回归模型(生存时间和结果标签)、lasso-cox模型进行特征筛选、plot函数可视化cv.glmnet模型获得的最佳lambda曲线位置及其1个标准差线
R语言使用glmnet包拟合lasso-cox回归模型(包含生存时间和结果标签).使用lasso-cox模型进行特征筛选.plot函数可视化cv.glmnet模型获得的最佳lambda曲线位置及其1个 ...
- R语言mgcv包中的gam函数拟合广义加性模型(Generalized Additive Model)GAM(对非线性变量进行样条处理、计算RMSE、R方、调整R方、可视化模型预测值与真实值的曲线)
R语言mgcv包中的gam函数拟合广义加性模型(Generalized Additive Model)GAM(对非线性变量进行样条处理.计算RMSE.R方.调整R方.可视化模型预测值与真实值的曲线) ...
- R语言glmnet拟合lasso回归模型实战:lasso回归模型的模型系数及可视化、lasso回归模型分类评估计算(混淆矩阵、accuracy、Deviance)
R语言glmnet拟合lasso回归模型实战:lasso回归模型的模型系数(lasso regression coefficients)及可视化.lasso回归模型分类评估计算(混淆矩阵.accura ...
- R语言glmnet拟合岭回归模型实战:岭回归模型的模型系数(ridge regression coefficients)及可视化、岭回归模型分类评估计算(混淆矩阵、accuracy、Deviance)
R语言glmnet拟合岭回归模型(ridge regression)实战:岭回归模型的模型系数(ridge regression coefficients)及可视化.岭回归模型分类评估计算(混淆矩阵. ...
- R语言glmnet交叉验证选择(alpha、lambda)拟合最优elastic回归模型:弹性网络(elasticNet)模型选择最优的alpha值、模型最优的lambda值,最终模型的拟合与评估
R语言glmnet交叉验证选择(alpha参数和lambda参数)拟合最优elastic回归模型:弹性网络(elasticNet)模型选择最优的alpha值.弹性网络(elasticNet)模型最优的 ...
最新文章
- 收藏:存储知识全面总结
- 阿里P7架构师谈:MySQL慢查询优化、索引优化、以及表等优化总结
- 对话王晶:音频人才亟待培养,高水平研究人员尤其欠缺
- maya 替换名称_maya替换对象,MAYA
- java某校在积极推行无人监考,结构化面试题:高校无人监考你怎么看?
- Linux系统安全基本措施及应用(关于账户安全以及sudo权限,安全认证等)
- ps新手零基础知识入门教程学习_图文
- python灰度雷达图_python 雷达图
- iOS-苹果官方开源网站;objc、Runloop、GCD、OC等开源代码
- Win10系统输入法(微软拼音)切换简体和繁体
- 基于微信小程序在线电子书阅读系统 电子书小程序毕业设计 毕业论文 开题报告和效果图参考
- Kali 开机报错解决方案
- 经乱离后天恩流夜郎忆旧游书怀赠江夏韦太守良宰
- 中文乱码——编码问题
- 美国造出最大电视 4K电视262英寸超大屏
- Java个人对接口的理解
- Unity3D 常用 英文单词
- ScyllaDB 1.2 国内安装更新源发布
- python 接口自动化测试王浩然 pdf_7-python接口自动化测试.pdf
- firefox 书签备份和还原
热门文章
- python中for循环缩进_Python减少循环层次和缩进的技巧分析
- 神经网络中参数量parameters和FLOPs计算
- sql查询父节点所有子节点id_5招搞定SQL棘手问题,同事看到直呼“内行”
- python读取大文件目录_Python读取系统文件夹内所有文件并统计数量的方法
- 3D IoU-Net:三维目标检测预测IoU
- 面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)...
- CVPR 2021|三维视觉相关论文汇总
- linux 安装jdk tar.gz
- OpenCV java 图片处理,蒙太奇图片(13)
- numpy 中的 squeeze() 函数