r - 在 R 中使用 anova 测试找到多项式的最佳次数
问题描述
data=structure(list(Y = c(31.2, 33.3, 35.6, 36.4, 36.7, 38.4, 40.4,
40.3, 41.8, 40.4, 40.7, 40.1, 42.7, 44.1, 46.7, 50.6, 50.1, 51.7,
52.9), X1 = c(492.9, 528.6, 560.3, 624.6, 666.4, 717.8, 768.2,
843.3, 911.6, 931.1, 1021.5, 1165.9, 1349.6, 1449.4, 1575.5,
1759.1, 1994.2, 2258.1, 2478.7), X2 = c(37.3, 38.1, 39.3, 37.8,
38.4, 40.1, 38.6, 39.8, 39.7, 52.1, 48.9, 58.3, 57.9, 56.5, 63.7,
61.6, 58.9, 66.4, 70.4), X3 = c(54.7, 63.7, 69.8, 65.9, 64.5,
70, 73.2, 67.8, 79.1, 95.4, 94.2, 123.5, 129.9, 117.6, 130.9,
129.8, 128, 141, 168.2), X4 = c(77.4, 80.2, 80.4, 83.9, 85.5,
93.7, 106.1, 104.8, 114, 124.1, 127.6, 142.9, 143.6, 139.2, 165.5,
203.3, 219.6, 221.6, 232.6)), class = "data.frame", row.names = c(NA,
-19L))
我想使用不同程度的多项式构建几个多项式回归。但是问题是如何选择最优多项式次数来使用 ANOVA 测试来建模这种依赖关系?我用这种方式
fit1 <- lm(Y ~ X1 + I(X1^2)+X2 + I(X2^3)+X3 + I(X3^2)+X4 + I(X4^2), data=data)
summary(fit1)
AIC(fit1)
但是使用循环如何定义多项式的最佳次数。
多项式的最优次数是AIC最小,F值最大。
解决方案
使用逐步回归和 AIC 标准:
fm <- lm(Y ~ .^3, data)
step(fm)
给予:
Call:
lm(formula = Y ~ X1 + X2 + X3 + X4 + X1:X2 + X1:X3 + X1:X4 +
X2:X3 + X2:X4 + X3:X4 + X1:X2:X4 + X2:X3:X4, data = data)
Coefficients:
(Intercept) X1 X2 X3 X4 X1:X2
5.204e+00 1.388e-02 -2.004e+00 2.701e+00 -1.757e-01 -2.628e-03
X1:X3 X1:X4 X2:X3 X2:X4 X3:X4 X1:X2:X4
1.246e-03 7.076e-04 -2.836e-02 4.470e-02 -3.541e-02 -1.244e-05
X2:X3:X4
2.782e-04
stepAIC
MASS 包中也有。
另一种方法是套索回归。
library(glmnet)
X <- model.matrix(fm)
fm2 <- cv.glmnet(X, data$Y)
coef(fm2, s = fm2$lambda.min)
给予:
(Intercept) 2.829759e+01
(Intercept) .
X1 9.319929e-03
X2 -8.658000e-02
X3 .
X4 6.620549e-02
X1:X2 .
X1:X3 .
X1:X4 .
X2:X3 .
X2:X4 .
X3:X4 .
X1:X2:X3 .
X1:X2:X4 .
X1:X3:X4 -8.318340e-08
X2:X3:X4 .
查看此链接以了解各种方法https://rpubs.com/McCloud77/300677
推荐阅读
- python - 一些 Unix 命令失败并显示“
未找到”,当使用 Python Paramiko exec_command 执行时 - pdf-generation - 使用 DinkToPdf 分隔分页符
- com - SafeArrayTypeMismatchException
- scala - 在 Scala 中设计一个通用特征
- android - MapBox Android 插件:在活动中显示位置搜索栏
- javascript - 无法单击表格单元格以打开记录
- python-3.x - 比较两个日期时间字符串python
- dart - 隐藏在键盘后面的文本字段
- python - ModuleNotFoundError: 没有名为 'mport pandas as pd\r' 的模块
- python - 如何在一段代码中跟踪变量的使用?