将多项式回归代码改写为带for循环的函数以生成10阶ANOVA对比表
1-10阶多项式回归的ANOVA对比函数实现
可以用以下带for循环的函数实现需求,它支持指定预测变量、响应变量和数据集,自动生成1到10阶的多项式回归模型,并输出ANOVA对比结果:
compare_poly_anova <- function(predictor_var, response_var, data, max_degree = 10) { # 初始化空列表存储各阶模型 fit_list <- list() # 循环生成1至max_degree阶的多项式回归模型 for (degree in 1:max_degree) { # 动态构建回归公式 formula <- as.formula(paste(response_var, "~ poly(", predictor_var, ",", degree, ")", sep = "")) fit_list[[degree]] <- lm(formula, data = data) } # 执行多模型ANOVA对比并返回结果 anova_result <- do.call(anova, fit_list) print(anova_result) return(anova_result) }
使用示例
针对原代码中的Wage数据集,调用方式如下:
# 对比age对wage的1-10阶多项式拟合效果 compare_poly_anova(predictor_var = "age", response_var = "wage", data = Wage)
关键说明
- 用
paste()动态拼接公式,避免手动重复编写每个阶数的模型代码 - 用列表统一存储所有模型,通过
do.call()一次性将所有模型传入anova()函数,实现连续阶数的拟合效果对比 - 默认对比到10阶,可通过修改
max_degree参数调整对比的最高阶数(比如改回5阶只需设max_degree=5)
内容的提问来源于stack exchange,提问作者Rachel
相关产品推荐
相关产品推荐

