线性回归模型摘要中的 NA
NAs in linear regression model summary
我正在尝试 运行 内置 ChickWeight 数据的线性回归模型,其中预测变量小鸡、时间、饮食、时间饮食相互作用作为固定效应,体重作为结果。
我的模型摘要中出现了一些 NA。我做错了什么吗?
model2<-lm(weight~ Chick + Time + Diet + Time*Diet, data = Data)
summary(model2)
如果您查看模型的摘要,您会看到:
Coefficients: (3 not defined because of singularities)
这意味着您的某些预测变量完全相关——在本例中为 Chick
和 Diet
——这就是为什么某些系数显示为 NA
.
即使不是这种情况,我也不确定您为什么要为 Chick
添加固定效果。如果你想解释每只小鸡有多个观察的事实,你可以改为包括 Chick
的随机截距。使用 lme4
:
library(lme4)
Data <- ChickWeight
model2_mixed <- lmer(
weight ~ Time*Diet + (1 | Chick),
data = Data
)
summary(model2_mixed)
输出:
Linear mixed model fit by REML ['lmerMod']
Formula: weight ~ Time * Diet + (1 | Chick)
Data: Data
REML criterion at convergence: 5466.9
Scaled residuals:
Min 1Q Median 3Q Max
-3.3158 -0.5900 -0.0693 0.5361 3.6024
Random effects:
Groups Name Variance Std.Dev.
Chick (Intercept) 545.7 23.36
Residual 643.3 25.36
Number of obs: 578, groups: Chick, 50
Fixed effects:
Estimate Std. Error t value
(Intercept) 31.5143 6.1163 5.152
Time 6.7115 0.2584 25.976
Diet2 -2.8807 10.5479 -0.273
Diet3 -13.2640 10.5479 -1.258
Diet4 -0.4016 10.5565 -0.038
Time:Diet2 1.8977 0.4284 4.430
Time:Diet3 4.7114 0.4284 10.998
Time:Diet4 2.9506 0.4340 6.799
Correlation of Fixed Effects:
(Intr) Time Diet2 Diet3 Diet4 Tm:Dt2 Tm:Dt3
Time -0.426
Diet2 -0.580 0.247
Diet3 -0.580 0.247 0.336
Diet4 -0.579 0.247 0.336 0.336
Time:Diet2 0.257 -0.603 -0.431 -0.149 -0.149
Time:Diet3 0.257 -0.603 -0.149 -0.431 -0.149 0.364
Time:Diet4 0.254 -0.595 -0.147 -0.147 -0.432 0.359 0.359
正如@zephryl 指出的那样,在整个实验过程中,每只小鸡都喂食相同的食物,因此如果我们将 Chick 作为固定效应, Chick 效应与 Diet 效应混淆。直觉上,比如说,一只小鸡体重没有增加多少,我们不能说是因为他们的饮食不是很好,还是那只小鸡很不幸是一只虚弱的小鸡。
因此我们考虑了实验的设计:我们对每只小鸡进行了多次测量,因此每只小鸡都是一个 簇 测量值。
我们得到与@zephryl 的混合效应模型非常相似的估计,所以一切都很好。
fit.geeglm <- geepack::geeglm(
weight ~ Time * Diet,
id = ChickWeight$Chick,
family = "gaussian",
data = ChickWeight
)
broom::tidy(fit.geeglm)
#> # A tibble: 8 × 5
#> term estimate std.error statistic p.value
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 (Intercept) 30.9 3.06 102. 0
#> 2 Time 6.84 0.736 86.3 0
#> 3 Diet2 -2.30 5.22 0.194 0.660
#> 4 Diet3 -12.7 4.87 6.77 0.00925
#> 5 Diet4 -0.139 4.85 0.000820 0.977
#> 6 Time:Diet2 1.77 1.42 1.55 0.213
#> 7 Time:Diet3 4.58 1.29 12.6 0.000387
#> 8 Time:Diet4 2.87 0.968 8.80 0.00301
由 reprex package (v2.0.1)
于 2022-03-18 创建
我正在尝试 运行 内置 ChickWeight 数据的线性回归模型,其中预测变量小鸡、时间、饮食、时间饮食相互作用作为固定效应,体重作为结果。
我的模型摘要中出现了一些 NA。我做错了什么吗?
model2<-lm(weight~ Chick + Time + Diet + Time*Diet, data = Data)
summary(model2)
如果您查看模型的摘要,您会看到:
Coefficients: (3 not defined because of singularities)
这意味着您的某些预测变量完全相关——在本例中为 Chick
和 Diet
——这就是为什么某些系数显示为 NA
.
即使不是这种情况,我也不确定您为什么要为 Chick
添加固定效果。如果你想解释每只小鸡有多个观察的事实,你可以改为包括 Chick
的随机截距。使用 lme4
:
library(lme4)
Data <- ChickWeight
model2_mixed <- lmer(
weight ~ Time*Diet + (1 | Chick),
data = Data
)
summary(model2_mixed)
输出:
Linear mixed model fit by REML ['lmerMod']
Formula: weight ~ Time * Diet + (1 | Chick)
Data: Data
REML criterion at convergence: 5466.9
Scaled residuals:
Min 1Q Median 3Q Max
-3.3158 -0.5900 -0.0693 0.5361 3.6024
Random effects:
Groups Name Variance Std.Dev.
Chick (Intercept) 545.7 23.36
Residual 643.3 25.36
Number of obs: 578, groups: Chick, 50
Fixed effects:
Estimate Std. Error t value
(Intercept) 31.5143 6.1163 5.152
Time 6.7115 0.2584 25.976
Diet2 -2.8807 10.5479 -0.273
Diet3 -13.2640 10.5479 -1.258
Diet4 -0.4016 10.5565 -0.038
Time:Diet2 1.8977 0.4284 4.430
Time:Diet3 4.7114 0.4284 10.998
Time:Diet4 2.9506 0.4340 6.799
Correlation of Fixed Effects:
(Intr) Time Diet2 Diet3 Diet4 Tm:Dt2 Tm:Dt3
Time -0.426
Diet2 -0.580 0.247
Diet3 -0.580 0.247 0.336
Diet4 -0.579 0.247 0.336 0.336
Time:Diet2 0.257 -0.603 -0.431 -0.149 -0.149
Time:Diet3 0.257 -0.603 -0.149 -0.431 -0.149 0.364
Time:Diet4 0.254 -0.595 -0.147 -0.147 -0.432 0.359 0.359
正如@zephryl 指出的那样,在整个实验过程中,每只小鸡都喂食相同的食物,因此如果我们将 Chick 作为固定效应, Chick 效应与 Diet 效应混淆。直觉上,比如说,一只小鸡体重没有增加多少,我们不能说是因为他们的饮食不是很好,还是那只小鸡很不幸是一只虚弱的小鸡。
因此我们考虑了实验的设计:我们对每只小鸡进行了多次测量,因此每只小鸡都是一个 簇 测量值。
我们得到与@zephryl 的混合效应模型非常相似的估计,所以一切都很好。
fit.geeglm <- geepack::geeglm(
weight ~ Time * Diet,
id = ChickWeight$Chick,
family = "gaussian",
data = ChickWeight
)
broom::tidy(fit.geeglm)
#> # A tibble: 8 × 5
#> term estimate std.error statistic p.value
#> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 (Intercept) 30.9 3.06 102. 0
#> 2 Time 6.84 0.736 86.3 0
#> 3 Diet2 -2.30 5.22 0.194 0.660
#> 4 Diet3 -12.7 4.87 6.77 0.00925
#> 5 Diet4 -0.139 4.85 0.000820 0.977
#> 6 Time:Diet2 1.77 1.42 1.55 0.213
#> 7 Time:Diet3 4.58 1.29 12.6 0.000387
#> 8 Time:Diet4 2.87 0.968 8.80 0.00301
由 reprex package (v2.0.1)
于 2022-03-18 创建