为什么总结 R 中的线性模型不显示所有需要的级别?
Why summary a linear model in R does not show all the needed levels?
我想在 R 中做一个线性模型。我有 24 个实验(完整的因子分析)。我对这个模型有 3 个因素。但是,密度因子有 3 个级别(B、M、A)。我知道不需要出现 DensityB,因为如果 DensityM 和 DensityA 的值为 0,则间接激活 DensityB。但是在交互中我们需要DensityB:MatS。因为如果我们有 MatN,我们可以使用 0 激活它。但是会发生这种情况:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.35500 0.06094 5.826 2.03e-05 ***
Thickness2 0.11516 0.04606 2.500 0.02294 *
DensityM -0.05080 0.07978 -0.637 0.53279
DensityA -0.24315 0.07978 -3.048 0.00728 **
MatS 0.22882 0.07978 2.868 0.01066 *
**DensityM:MatS** -0.21393 0.11283 -1.896 0.07509 .
**DensityA:MatS** -0.27452 0.11283 -2.433 0.02631 *
当我不使用这个重新排序因子的水平时,它不会发生:
df$Density = factor(df$Density, levels=c("B", "M", "A"))
当我不使用它时,这些是结果:
(Intercept) 0.11185 0.06094 1.835 0.08399 .
Thickness2 0.11516 0.04606 2.500 0.02294 *
DensityB 0.24315 0.07978 3.048 0.00728 **
DensityM 0.19235 0.07978 2.411 0.02751 *
**DensityA:MatS** -0.04570 0.07978 -0.573 0.57426
**DensityB:MatS** 0.22882 0.07978 2.868 0.01066 *
**DensityM:MatS** 0.01489 0.07978 0.187 0.85412
他们是正确的。
为什么重新排序因子的水平会改变这种相互作用?我需要重新排序级别,因为我希望 DensistyM 和 DensityA 出现在线性模型中(并且 DensityB 作为较低级别;因此,如果 DensityM 和 DensityA 的值为 0,则激活 DensistyB)。
调整后的平方R和线性模型的p值相同
谢谢!
这只是过度参数化的结果,无需担心。您的建模代码只是将因子 Density
的最终水平作为参考水平。其他级别的效果只是与参考级别的区别。
要看到这一点,在您的第一个模型中,以“B”为参考水平,“A”和“M”之间的差异为 -0.05080 - -0.24315 = 0.19235。在你的第二个模型中,以“A”为参考水平,“M”的系数(即“A”和“M”之间的估计差异)为0.19235。完全相同的值。
您可以从任一模型计算出您喜欢的任何效果的值,并且这两个值将相同。您只需要考虑模型使用的参数化。
我投票结束这个问题,因为我相信它更适合 stackexchange:这是一个统计问题,而不是编程问题。
我想在 R 中做一个线性模型。我有 24 个实验(完整的因子分析)。我对这个模型有 3 个因素。但是,密度因子有 3 个级别(B、M、A)。我知道不需要出现 DensityB,因为如果 DensityM 和 DensityA 的值为 0,则间接激活 DensityB。但是在交互中我们需要DensityB:MatS。因为如果我们有 MatN,我们可以使用 0 激活它。但是会发生这种情况:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.35500 0.06094 5.826 2.03e-05 ***
Thickness2 0.11516 0.04606 2.500 0.02294 *
DensityM -0.05080 0.07978 -0.637 0.53279
DensityA -0.24315 0.07978 -3.048 0.00728 **
MatS 0.22882 0.07978 2.868 0.01066 *
**DensityM:MatS** -0.21393 0.11283 -1.896 0.07509 .
**DensityA:MatS** -0.27452 0.11283 -2.433 0.02631 *
当我不使用这个重新排序因子的水平时,它不会发生:
df$Density = factor(df$Density, levels=c("B", "M", "A"))
当我不使用它时,这些是结果:
(Intercept) 0.11185 0.06094 1.835 0.08399 .
Thickness2 0.11516 0.04606 2.500 0.02294 *
DensityB 0.24315 0.07978 3.048 0.00728 **
DensityM 0.19235 0.07978 2.411 0.02751 *
**DensityA:MatS** -0.04570 0.07978 -0.573 0.57426
**DensityB:MatS** 0.22882 0.07978 2.868 0.01066 *
**DensityM:MatS** 0.01489 0.07978 0.187 0.85412
他们是正确的。
为什么重新排序因子的水平会改变这种相互作用?我需要重新排序级别,因为我希望 DensistyM 和 DensityA 出现在线性模型中(并且 DensityB 作为较低级别;因此,如果 DensityM 和 DensityA 的值为 0,则激活 DensistyB)。
调整后的平方R和线性模型的p值相同
谢谢!
这只是过度参数化的结果,无需担心。您的建模代码只是将因子 Density
的最终水平作为参考水平。其他级别的效果只是与参考级别的区别。
要看到这一点,在您的第一个模型中,以“B”为参考水平,“A”和“M”之间的差异为 -0.05080 - -0.24315 = 0.19235。在你的第二个模型中,以“A”为参考水平,“M”的系数(即“A”和“M”之间的估计差异)为0.19235。完全相同的值。
您可以从任一模型计算出您喜欢的任何效果的值,并且这两个值将相同。您只需要考虑模型使用的参数化。
我投票结束这个问题,因为我相信它更适合 stackexchange:这是一个统计问题,而不是编程问题。