如何用R语言通过向前、向后和逐步选择法筛选泊松回归最优模型?
R语言中泊松回归的最优子集筛选方法
先明确regsubsets()和step()的适用性
step():完全支持泊松回归。它基于AIC准则做逐步变量选择,只要你先拟合好带family = poisson的glm模型,直接传给step()就行。regsubsets()(来自leaps包):默认是给线性回归用的,但可以通过指定method = "glm"和family = poisson来适配泊松回归,实现最优子集筛选。
方法1:用step()做逐步变量选择
先拟合包含所有候选变量的全模型,再用逐步选择(支持向前、向后、双向三种模式):
# 示例用mtcars数据集,假设mpg为计数型响应变量(仅作演示) data(mtcars) # 拟合全泊松回归模型 full_pois <- glm(mpg ~ ., data = mtcars, family = poisson) # 双向逐步选择(direction可选"forward"/"backward"/"both") selected_step <- step(full_pois, direction = "both") # 查看最终模型结果 summary(selected_step)
方法2:用regsubsets()做最优子集筛选
需要先安装leaps包,然后指定泊松族来筛选所有可能的子集,再根据AIC/BIC等准则选最优:
install.packages("leaps") library(leaps) # 执行最优子集筛选 pois_subsets <- regsubsets(mpg ~ ., data = mtcars, method = "glm", family = poisson) # 查看各子集的统计指标 sub_summary <- summary(pois_subsets) # 比如选BIC最小的子集 best_bic <- which.min(sub_summary$bic) # 提取该子集的变量 names(coef(pois_subsets, best_bic))
额外推荐:高维数据用Lasso正则化筛选
如果你的变量很多,glmnet包的Lasso回归更合适,它能通过正则化自动压缩不重要变量的系数到0,实现变量筛选,同样支持泊松族:
install.packages("glmnet") library(glmnet) # 构造特征矩阵和响应变量 x <- model.matrix(mpg ~ ., mtcars)[,-1] # 去掉截距列 y <- mtcars$mpg # 拟合泊松Lasso模型 pois_lasso <- glmnet(x, y, family = "poisson", alpha = 1) # 交叉验证选最优正则化参数lambda cv_lasso <- cv.glmnet(x, y, family = "poisson", alpha = 1) # 提取最优模型的系数(系数为0的变量被筛选掉) coef(pois_lasso, s = cv_lasso$lambda.min)
内容的提问来源于stack exchange,提问作者Thiru Balaji G
相关产品推荐
相关产品推荐

