我正在通过查看别人的 R 代码来学习如何构建线性回归模型。这是我正在使用的示例数据:
v1 v2 v3 response
0.417655013 -0.012026453 -0.528416414 48.55555556
-0.018445979 -0.460809371 0.054017873 47.76666667
-0.246110341 0.092230159 0.057435968 49.14444444
-0.521980295 -0.428499038 0.119640369 51.08888889
0.633310578 -0.224215856 -0.153917427 48.97777778
0.41522316 0.050609412 -0.642394965 48.5
-0.07349941 0.547128578 -0.539018121 53.95555556
-0.313950353 0.207853678 0.713903994 48.16666667
0.404643796 -0.326782199 -0.785848428 47.7
0.028246796 -0.424323318 0.289313911 49.34444444
0.720822953 -0.166712488 0.323246062 50.78888889
-0.430825851 -0.308119827 0.543823856 52.65555556
-0.964175294 0.661700584 -0.11905972 51.03333333
-0.178955757 -0.11148414 -0.151179885 48.28888889
0.488388035 0.515903257 -0.087738159 48.68888889
-0.097527627 0.188292773 0.207321867 49.86666667
0.481853599 0.21142728 -0.226700254 48.38888889
1.139561277 -0.293574756 0.574855693 54.55555556
0.104077762 0.16075114 -0.131124443 48.61111111
我读入数据并使用调用lm()
来构建模型:
> my_data<- read.table("data.csv", header = T, sep = ",")
> my_lm <- lm(response~v1 + v2 + v3 + v1:v2 + v1:v3 + v2:v3, data=my_data)
> summary(my_lm)
Call:
lm(formula = response ~ v1 + v2 + v3 + v1:v2 + v1:v3 + v2:v3,
data = my_data)
Residuals:
Min 1Q Median 3Q Max
-2.0603 -0.6615 -0.1891 1.0395 1.8280
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 49.33944 0.42089 117.226 < 2e-16 ***
v1 0.06611 0.82320 0.080 0.93732
v2 -0.36725 1.06359 -0.345 0.73585
v3 0.72741 1.00973 0.720 0.48508
v1:v2 -2.54544 2.21663 -1.148 0.27321
v1:v3 0.80641 2.77603 0.290 0.77640
v2:v3 -12.16017 3.62473 -3.355 0.00573 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.375 on 12 degrees of freedom
Multiple R-squared: 0.697, Adjusted R-squared: 0.5455
F-statistic: 4.6 on 6 and 12 DF, p-value: 0.01191
跟随他们的代码,然后我调用anova()
:
> my_lm_anova <- anova(my_lm)
> my_lm_anova
Analysis of Variance Table
Response: response
Df Sum Sq Mean Sq F value Pr(>F)
v1 1 0.0010 0.0010 0.0005 0.982400
v2 1 0.2842 0.2842 0.1503 0.705036
v3 1 9.8059 9.8059 5.1856 0.041891 *
v1:v2 1 4.3653 4.3653 2.3084 0.154573
v1:v3 1 16.4582 16.4582 8.7034 0.012141 *
v2:v3 1 21.2824 21.2824 11.2545 0.005729 **
Residuals 12 22.6921 1.8910
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
但是,我不确定:
- 为什么我会在这种情况下使用对 ANOVA 的调用,以及
- ANOVA 表告诉我有关预测变量的信息。
从代码中,他们似乎使用了 ANOVA 表,如下所示。对于预测变量 v1,结果
- 添加 v1 的“Sum Sq”条目以及 v1:v2 的一半“Sum Sq”条目和 v1:v3 的一半“Sum Sq”条目,
- 除以整个“Sum Sq”列的总和,以及
- 乘以 100
给出模型中由预测变量 v1 解释的响应变量的方差百分比lm()
. 我不明白为什么这也不是为什么 v1:v2 的“Sum Sq”条目的一半归因于 v1 而一半归因于 v2。这只是方便吗?