为什么 R 中的 drop1 函数给我零自由度并且没有显着性检验结果用于 GLM 中的连续固定效应?
Why does the drop1 function in R give me zero degrees of freedom and no significance test result for a continuous fixed effect in a GLM?
我正在尝试使用 R 中的 GLM 确定五个分类和一个连续自变量对某些生态计数数据的影响。这是我使用的数据的示例:
No. DateNum Tunnel Trt Row Time AvgTemp sqTotal.L
1 44382 1 A 3 AM 30.0 1.41
2 44384 3 C 2 PM 21.0 2.23
3 44384 7 D 3 AM 24.0 3.65
4 44400 4 B 1 AM 27.5 2.78
固定效应 DateNum、Tunnel 和 Row 被编码为有序因子,Trt 和 Time 是无序因子,AvgTemp 被编码为数值。 'sqTotal.L'是平方根变换后的计数数据,是正态分布的响应变量。我决定使用 GLM 而不是 ANOVA,因为实验设计不平衡,并且来自不同实验地块的样本数量不同。
当我 运行 为 GLM 使用以下代码,然后在生成的模型上使用 drop1() 函数时,我的连续固定效应 (AvgTemp) 的效果似乎没有包含在 drop1 的结果中() 函数:
> rowfvs.glm <- glm(sqTotal.L ~ AvgTemp + Row + DateNum + Time + Tunnel + Trt,
+ family = gaussian, data = rowfvs2)
> summary(rowfvs.glm)
Call:
glm(formula = sqTotal.L ~ AvgTemp + Row + DateNum + Time + Tunnel +
Trt, family = gaussian, data = rowfvs2)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.63548 -0.38868 0.06587 0.41777 1.31886
Coefficients: (1 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 8.89037 5.98768 1.485 0.1492
AvgTemp -0.28191 0.24566 -1.148 0.2612
Row.L -0.46085 0.24735 -1.863 0.0734 .
Row.Q 0.08047 0.25153 0.320 0.7515
DateNum.L -1.17448 0.85015 -1.382 0.1785
DateNum.Q 0.57857 0.64731 0.894 0.3793
DateNum.C -2.17331 2.15684 -1.008 0.3226
DateNum^4 -0.76025 1.09723 -0.693 0.4943
DateNum^5 -1.62269 0.68388 -2.373 0.0250 *
DateNum^6 0.63799 0.70822 0.901 0.3756
DateNum^7 NA NA NA NA
TimePM -0.31436 0.87881 -0.358 0.7233
Tunnel.L 1.38420 0.62199 2.225 0.0346 *
Tunnel.Q -0.03521 0.56561 -0.062 0.9508
Tunnel.C 0.81639 0.54880 1.488 0.1484
Tunnel^4 0.24029 0.61180 0.393 0.6976
Tunnel^5 0.30665 0.51849 0.591 0.5592
Tunnel^6 0.67603 0.53728 1.258 0.2191
TrtB 0.10067 0.40771 0.247 0.8068
TrtC 0.31278 0.41048 0.762 0.4527
TrtD -0.49857 0.46461 -1.073 0.2927
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 0.7583716)
Null deviance: 50.340 on 46 degrees of freedom
Residual deviance: 20.476 on 27 degrees of freedom
AIC: 136.33
Number of Fisher Scoring iterations: 2
> drop1(rowfvs.glm, test = "Chi")
Single term deletions
Model:
sqTotal.L ~ AvgTemp + Row + DateNum + Time + Tunnel + Trt
Df Deviance AIC scaled dev. Pr(>Chi)
<none> 20.476 136.33
AvgTemp 0 20.476 136.33 0.0000
Row 2 23.128 138.05 5.7249 0.05713 .
DateNum 6 25.517 134.67 10.3447 0.11087
Time 1 20.573 134.55 0.2222 0.63736
Tunnel 6 27.525 138.23 13.9039 0.03073 *
Trt 3 23.201 136.20 5.8725 0.11798
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
相比之下,当我尝试 运行 在模型上使用 anova() 函数时,我确实分析了 AvgTemp 对 sqTotal.L:
的影响
> anova(rowfvs.glm, test = "Chi")
Analysis of Deviance Table
Model: gaussian, link: identity
Response: sqTotal.L
Terms added sequentially (first to last)
Df Deviance Resid. Df Resid. Dev Pr(>Chi)
NULL 46 50.340
AvgTemp 1 0.7885 45 49.551 0.3078945
Row 2 1.0141 43 48.537 0.5124277
DateNum 6 17.6585 37 30.879 0.0007065 ***
Time 1 0.3552 36 30.523 0.4937536
Tunnel 6 7.3222 30 23.201 0.1399428
Trt 3 2.7251 27 20.476 0.3088504
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
所以,我的问题是为什么 drop1() 函数没有考虑 AvgTemp,在我的结果报告中使用 anova() 函数的结果是否足够,或者我是否需要弄清楚如何让 drop1() 函数合并这个连续预测变量?
这有点猜测,因为我们没有您的数据,但是:我相信答案与您的设计矩阵中的多重共线性有关(如消息“1 由于奇异性未定义”所示)以及 DateNum^7
参数的 NA
估计的存在)。
当您的设计矩阵中有共线(完全相关)列时,它们的处理方式可能有点不可预测。 lm()
选择要丢弃的列之一:在本例中为 DateNum^7
。但是,假设 AvgTemp
在共线列集中 也是 ,如果您从模型中删除 AvgTemp
,那么当模型重新拟合时 lm()
将 不会 丢弃 DateNum^7
(因为它不再需要),但您仍将获得相同的拟合优度(AIC/log-likelihood/etc。)——因为你删除了一个多余的变量。
您应该能够通过 caret::findLinearCombos(model.matrix(rowfvs.glm))
探索这种可能性,尽管仔细考虑您的 observational/experimental 设计可能也会启发您了解为什么这些变量是共线的...
我正在尝试使用 R 中的 GLM 确定五个分类和一个连续自变量对某些生态计数数据的影响。这是我使用的数据的示例:
No. DateNum Tunnel Trt Row Time AvgTemp sqTotal.L
1 44382 1 A 3 AM 30.0 1.41
2 44384 3 C 2 PM 21.0 2.23
3 44384 7 D 3 AM 24.0 3.65
4 44400 4 B 1 AM 27.5 2.78
固定效应 DateNum、Tunnel 和 Row 被编码为有序因子,Trt 和 Time 是无序因子,AvgTemp 被编码为数值。 'sqTotal.L'是平方根变换后的计数数据,是正态分布的响应变量。我决定使用 GLM 而不是 ANOVA,因为实验设计不平衡,并且来自不同实验地块的样本数量不同。
当我 运行 为 GLM 使用以下代码,然后在生成的模型上使用 drop1() 函数时,我的连续固定效应 (AvgTemp) 的效果似乎没有包含在 drop1 的结果中() 函数:
> rowfvs.glm <- glm(sqTotal.L ~ AvgTemp + Row + DateNum + Time + Tunnel + Trt,
+ family = gaussian, data = rowfvs2)
> summary(rowfvs.glm)
Call:
glm(formula = sqTotal.L ~ AvgTemp + Row + DateNum + Time + Tunnel +
Trt, family = gaussian, data = rowfvs2)
Deviance Residuals:
Min 1Q Median 3Q Max
-1.63548 -0.38868 0.06587 0.41777 1.31886
Coefficients: (1 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 8.89037 5.98768 1.485 0.1492
AvgTemp -0.28191 0.24566 -1.148 0.2612
Row.L -0.46085 0.24735 -1.863 0.0734 .
Row.Q 0.08047 0.25153 0.320 0.7515
DateNum.L -1.17448 0.85015 -1.382 0.1785
DateNum.Q 0.57857 0.64731 0.894 0.3793
DateNum.C -2.17331 2.15684 -1.008 0.3226
DateNum^4 -0.76025 1.09723 -0.693 0.4943
DateNum^5 -1.62269 0.68388 -2.373 0.0250 *
DateNum^6 0.63799 0.70822 0.901 0.3756
DateNum^7 NA NA NA NA
TimePM -0.31436 0.87881 -0.358 0.7233
Tunnel.L 1.38420 0.62199 2.225 0.0346 *
Tunnel.Q -0.03521 0.56561 -0.062 0.9508
Tunnel.C 0.81639 0.54880 1.488 0.1484
Tunnel^4 0.24029 0.61180 0.393 0.6976
Tunnel^5 0.30665 0.51849 0.591 0.5592
Tunnel^6 0.67603 0.53728 1.258 0.2191
TrtB 0.10067 0.40771 0.247 0.8068
TrtC 0.31278 0.41048 0.762 0.4527
TrtD -0.49857 0.46461 -1.073 0.2927
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for gaussian family taken to be 0.7583716)
Null deviance: 50.340 on 46 degrees of freedom
Residual deviance: 20.476 on 27 degrees of freedom
AIC: 136.33
Number of Fisher Scoring iterations: 2
> drop1(rowfvs.glm, test = "Chi")
Single term deletions
Model:
sqTotal.L ~ AvgTemp + Row + DateNum + Time + Tunnel + Trt
Df Deviance AIC scaled dev. Pr(>Chi)
<none> 20.476 136.33
AvgTemp 0 20.476 136.33 0.0000
Row 2 23.128 138.05 5.7249 0.05713 .
DateNum 6 25.517 134.67 10.3447 0.11087
Time 1 20.573 134.55 0.2222 0.63736
Tunnel 6 27.525 138.23 13.9039 0.03073 *
Trt 3 23.201 136.20 5.8725 0.11798
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
相比之下,当我尝试 运行 在模型上使用 anova() 函数时,我确实分析了 AvgTemp 对 sqTotal.L:
的影响> anova(rowfvs.glm, test = "Chi")
Analysis of Deviance Table
Model: gaussian, link: identity
Response: sqTotal.L
Terms added sequentially (first to last)
Df Deviance Resid. Df Resid. Dev Pr(>Chi)
NULL 46 50.340
AvgTemp 1 0.7885 45 49.551 0.3078945
Row 2 1.0141 43 48.537 0.5124277
DateNum 6 17.6585 37 30.879 0.0007065 ***
Time 1 0.3552 36 30.523 0.4937536
Tunnel 6 7.3222 30 23.201 0.1399428
Trt 3 2.7251 27 20.476 0.3088504
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
所以,我的问题是为什么 drop1() 函数没有考虑 AvgTemp,在我的结果报告中使用 anova() 函数的结果是否足够,或者我是否需要弄清楚如何让 drop1() 函数合并这个连续预测变量?
这有点猜测,因为我们没有您的数据,但是:我相信答案与您的设计矩阵中的多重共线性有关(如消息“1 由于奇异性未定义”所示)以及 DateNum^7
参数的 NA
估计的存在)。
当您的设计矩阵中有共线(完全相关)列时,它们的处理方式可能有点不可预测。 lm()
选择要丢弃的列之一:在本例中为 DateNum^7
。但是,假设 AvgTemp
在共线列集中 也是 ,如果您从模型中删除 AvgTemp
,那么当模型重新拟合时 lm()
将 不会 丢弃 DateNum^7
(因为它不再需要),但您仍将获得相同的拟合优度(AIC/log-likelihood/etc。)——因为你删除了一个多余的变量。
您应该能够通过 caret::findLinearCombos(model.matrix(rowfvs.glm))
探索这种可能性,尽管仔细考虑您的 observational/experimental 设计可能也会启发您了解为什么这些变量是共线的...