如何简便实现R语言10阶多项式回归?
生成10阶多项式回归的简便方法
不用手动写每一项,有几种更高效的方式:
方法1:用R内置的poly()函数(最推荐)
这是最简洁的写法,只需指定自变量和阶数,注意加上raw = TRUE来生成和手动写法一致的原始多项式项(默认是正交多项式,系数含义与手动展开的项不同):
reg_poly10 = lm_robust(testscr ~ poly(avginc, 10, raw = TRUE), data = school)
如果只是做多项式拟合、不纠结系数对应avginc^k的直接效应,也可以去掉raw = TRUE,正交多项式在数值计算上更稳定。
方法2:构造公式字符串(和手动写法完全一致)
如果想生成和课程里3阶写法完全相同的公式,可以用字符串拼接自动生成所有项:
# 生成1到10阶的多项式项字符串 poly_terms <- paste0("I(avginc^", 1:10, ")", collapse = " + ") # 拼接成完整公式字符串 full_formula <- paste("testscr ~", poly_terms) # 转换为公式对象并拟合 reg_poly10 <- lm_robust(as.formula(full_formula), data = school)
生成的公式和手动写testscr ~ I(avginc^1) + I(avginc^2) + ... + I(avginc^10)完全一致。
方法3:用循环构造公式(适合理解过程)
如果一定要用for循环,也可以逐步拼接公式项:
# 初始化公式项 terms <- "I(avginc^1)" # 循环添加2到10阶的项 for(k in 2:10) { terms <- paste(terms, paste0("I(avginc^", k, ")"), sep = " + ") } # 构造完整公式并拟合 reg_poly10 <- lm_robust(as.formula(paste("testscr ~", terms)), data = school)
不过这种写法不如前两种简洁,一般推荐方法1或2。
内容的提问来源于stack exchange,提问作者BlankerHans
相关产品推荐
相关产品推荐

