为什么不';我的回归系数在我的R模型中有意义吗?
我正在用大量的数据(2146次观察)建立一个回归模型。这些都是重复的度量,所以我将使用一个混合模型,但是,我总是喜欢从一个更简单的模型开始,以帮助查看数据的外观。问题是,我的回归系数对我来说没有意义,我无法理解为什么它们在添加到模型中时会发生如此剧烈的变化 以下是第一个简单回归模型的示例:为什么不';我的回归系数在我的R模型中有意义吗?,r,regression,modeling,R,Regression,Modeling,我正在用大量的数据(2146次观察)建立一个回归模型。这些都是重复的度量,所以我将使用一个混合模型,但是,我总是喜欢从一个更简单的模型开始,以帮助查看数据的外观。问题是,我的回归系数对我来说没有意义,我无法理解为什么它们在添加到模型中时会发生如此剧烈的变化 以下是第一个简单回归模型的示例: fit1 <- lm(Outcome.Variable ~ Group, data = dat) summary(fit1) Call: lm(formula = Outcome.Variable ~
fit1 <- lm(Outcome.Variable ~ Group, data = dat)
summary(fit1)
Call:
lm(formula = Outcome.Variable ~ Group, data = dat)
Residuals:
Min 1Q Median 3Q Max
-225.63 -75.96 -4.60 67.78 356.84
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 364.104 4.677 77.847 < 2e-16 ***
GroupB -65.187 7.268 -8.969 < 2e-16 ***
GroupC -31.776 6.982 -4.551 5.63e-06 ***
GroupD -37.268 6.337 -5.881 4.73e-09 ***
GroupE -11.172 7.661 -1.458 0.144902
GroupF -29.707 8.188 -3.628 0.000292 ***
GroupG -10.443 6.963 -1.500 0.133853
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 91.42 on 2139 degrees of freedom
Multiple R-squared: 0.0464, Adjusted R-squared: 0.04372
F-statistic: 17.35 on 6 and 2139 DF, p-value: < 2.2e-16
这里发生了什么?我不想在不首先了解这个更基本的模型中发生了什么的情况下,继续讨论一个混合模型。为什么截距不能代表第1天A组的平均值?甚至截距和其他估计值之间的差异也不正确。例如,截距与第2天之间的差值为-5.8。然而,GroupA在第1天与GroupA在第2天的差距为15分
如果您能帮助理解此处发生的情况,我们将不胜感激。您忽略了术语之间的相互作用。让我演示如何使用mtcars数据: 首先,我运行一个回归
disp~factor(cyl)
(我必须调用factor
,因为默认情况下mtcars
中的所有变量都是数字):
库(dplyr)
lm(显示系数(气缸),mtcars)
#>
#>电话:
#>lm(公式=disp~系数(气缸),数据=mtcars)
#>
#>系数:
#>(截距)系数(气缸)6系数(气缸)8
#> 105.14 78.18 247.96
mtcars%%>%分组依据(气缸)%%>%汇总(平均值=平均值(显示))
#>#tibble:3 x 2
#>共青团平均数
#>
#> 1 4 105.1364
#> 2 6 183.3143
#> 3 8 353.1000
如您所见,回归将截距设置为组cyl=4的平均显示
接下来,我运行一个回归disp~因子(齿轮)
:
lm(显示系数(档位),mtcars)
#>
#>电话:
#>lm(公式=disp~系数(档位),数据=mtcars)
#>
#>系数:
#>(截距)系数(档位)4系数(档位)5
#> 326.3 -203.3 -123.8
mtcars%%>%分组依据(档位)%%>%汇总(平均值=平均值(显示))
#>#tibble:3 x 2
#>齿轮平均值
#>
#> 1 3 326.3000
#> 2 4 123.0167
#> 3 5 202.4800
同样,回归的输出是组平均值
现在把它们结合起来,我的回归公式是disp~因子(cyl)*因子(gear)
,相当于disp~因子(cyl)+因子(gear)+因子(cyl):因子(gear)
:
lm(显示系数(气缸)*系数(档位),mtcars)
#>
#>电话:
#>lm(公式=disp~系数(气缸)*系数(档位),数据=mtcars)
#>
#>系数:
#>(截距)系数(气缸)6
#> 120.10 121.40
#>系数(气缸)8系数(档位)4
#> 237.52 -17.47
#>系数(档位)5系数(气缸)6:系数(档位)4
#> -12.40 -60.23
#>系数(气缸)8:系数(档位)4系数(气缸)6:系数(档位)5
#>NA-84.10
#>系数(气缸)8:系数(档位)5
#> -19.22
mtcars%%>%分组依据(气缸,档位)%%>%汇总(平均值(显示))
#>#tibble:8 x 3
#>#组别:共青团[?]
#>气缸档位平均值(显示)`
#>
#> 1 4 3 120.1000
#> 2 4 4 102.6250
#> 3 4 5 107.7000
#> 4 6 3 241.5000
#> 5 6 4 163.8000
#> 6 6 5 145.0000
#> 7 8 3 357.6167
#> 8 8 5 326.0000
您忽略了术语之间的交互作用。让我演示如何使用mtcars数据:
首先,我运行一个回归disp~factor(cyl)
(我必须调用factor
,因为默认情况下mtcars
中的所有变量都是数字):
库(dplyr)
lm(显示系数(气缸),mtcars)
#>
#>电话:
#>lm(公式=disp~系数(气缸),数据=mtcars)
#>
#>系数:
#>(截距)系数(气缸)6系数(气缸)8
#> 105.14 78.18 247.96
mtcars%%>%分组依据(气缸)%%>%汇总(平均值=平均值(显示))
#>#tibble:3 x 2
#>共青团平均数
#>
#> 1 4 105.1364
#> 2 6 183.3143
#> 3 8 353.1000
如您所见,回归将截距设置为组cyl=4的平均显示
接下来,我运行一个回归disp~因子(齿轮)
:
lm(显示系数(档位),mtcars)
#>
#>电话:
#>lm(公式=disp~系数(档位),数据=mtcars)
#>
#>系数:
#>(截距)系数(档位)4系数(档位)5
#> 326.3 -203.3 -123.8
mtcars%%>%分组依据(档位)%%>%汇总(平均值=平均值(显示))
#>#tibble:3 x 2
#>齿轮平均值
#>
#> 1 3 326.3000
#> 2 4 123.0167
#> 3 5 202.4800
同样,回归的输出是组平均值
现在把它们结合起来,我的回归公式是disp~因子(cyl)*因子(gear)
,相当于disp~因子(cyl)+因子(gear)+因子(cyl):因子(gear)
:
lm(显示系数(气缸)*系数(档位),mtcars)
#>
#>电话:
#>lm(公式=disp~系数(气缸)*系数(档位),数据=mtcars)
#>
#>系数:
#>(截距)系数(气缸)6
#> 120.10 121.40
#>系数(气缸)8系数(档位)4
#> 237.52 -17.47
#>系数(档位)5系数(气缸)6:系数(档位)4
#> -12.40 -60.23
#>系数(气缸)8:系数(档位)4系数(气缸)6:系数(档位)5
#>NA-84.10
#>系数(气缸)8:系数(档位)5
#> -19.22
mtcars%%>%分组依据(气缸,档位)%%>%汇总(平均值(显示))
#>#tibble:8 x 3
#>#Gr
library(dplyr)
dat %>%
group_by(Group) %>%
summarize(Outcome.Variable.Mean = mean(Outcome.Variable))
# A tibble: 7 × 2
Group Outcome.Variable.Mean
<chr> <dbl>
1 A 364.1045
2 B 298.9173
3 C 332.3286
4 D 326.8360
5 E 352.9324
6 F 334.3972
7 G 353.6617
fit2 <- lm(Outcome.Variable ~ Day, data = dat)
summary(fit2)
Call:
lm(formula = Outcome.Variable ~ Day, data = dat)
Residuals:
Min 1Q Median 3Q Max
-228.56 -43.45 -4.70 44.41 321.77
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 388.003 2.598 149.367 <2e-16 ***
Day2 -5.278 3.668 -1.439 0.15
Day3 -136.108 3.589 -37.921 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 68.28 on 2143 degrees of freedom
Multiple R-squared: 0.4669, Adjusted R-squared: 0.4664
F-statistic: 938.6 on 2 and 2143 DF, p-value: < 2.2e-16
dat %>%
group_by(Day) %>%
summarize(Outcome.Variable.Mean = mean(Outcome.Variable))
# A tibble: 3 × 2
Day Outcome.Variable.Mean
<fctr> <dbl>
1 1 388.0027
2 2 382.7242
3 3 251.8942
fit3 <- lm(Outcome.Variable ~ Day + Group, data = dat)
summary(fit3)
Call:
lm(formula = Outcome.Variable ~ Day + Group, data = dat)
Residuals:
Min 1Q Median 3Q Max
-212.456 -43.442 -2.864 41.000 305.607
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 413.942 3.912 105.806 < 2e-16 ***
Day2 -5.801 3.504 -1.656 0.0979 .
Day3 -136.663 3.429 -39.859 < 2e-16 ***
GroupB -66.126 5.185 -12.753 < 2e-16 ***
GroupC -31.813 4.980 -6.388 2.06e-10 ***
GroupD -37.654 4.521 -8.329 < 2e-16 ***
GroupE -9.777 5.465 -1.789 0.0738 .
GroupF -24.570 5.842 -4.206 2.71e-05 ***
GroupG -10.067 4.967 -2.027 0.0428 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 65.21 on 2137 degrees of freedom
Multiple R-squared: 0.5152, Adjusted R-squared: 0.5134
F-statistic: 283.9 on 8 and 2137 DF, p-value: < 2.2e-16
as.data.frame(dat %>%
group_by(Day, Group) %>%
summarize(Outcome.Variable.Mean = mean(Outcome.Variable)))
Day Group Outcome.Variable.Mean
1 1 A 420.5681
2 1 B 331.6633
3 1 C 380.9213
4 1 D 382.2743
5 1 E 405.1115
6 1 F 392.5020
7 1 G 400.5005
8 2 A 405.3756
9 2 B 339.2346
10 2 C 389.3252
11 2 D 374.0798
12 2 E 388.7488
13 2 F 377.9685
14 2 G 395.5381
15 3 A 273.7767
16 3 B 229.6742
17 3 C 234.4119
18 3 D 230.6635
19 3 E 275.2313
20 3 F 254.7107
21 3 G 272.6063