计算具有异方差性的组的标准误差
Calculating standard errors for groups with heteroskedasticity
我正在尝试计算几个实验组的标准误差 (SE),以便绘制图表。然而,数据不满足方差同质性——治疗之间的适应度方差差异很大,无法通过我尝试过的转换来解决。
我的模型很简单:Fitness ~ History * Treatment
。
在 R 中,我尝试将 emmeans
与我的模型一起用作 lm,这为每个组提供了与预期完全相同的 SE,因为它假定方差同质性。我读过包 nlme
的 gls 函数应该通过允许方差的异质性来解决这个问题 here,但即使 运行 emmeans
on nlme::gls()
给出各组之间的 SE 极为相似(下图)。
> SM2 <- gls(Seed_mass_mg~History*Treatment, data1, na.action = na.omit)
emmeans(SM2, ~History * Treatment)
History Treatment emmean SE df lower.CL upper.CL
ancestral drought 35.0 5.93 909 23.3 46.6
dry drought 56.3 6.29 909 44.0 68.7
wet drought 39.1 6.12 909 27.1 51.1
ancestral watered 102.9 6.02 909 91.1 114.8
dry watered 131.0 6.38 909 118.5 143.6
wet watered 140.2 5.97 909 128.4 151.9
Degrees-of-freedom method: df.error
Confidence level used: 0.95
然而,当我通过公式计算SE时,我得到了完全不同的SE:
History Treatment Seed_mass_mg_SE
Ancestral Watered 7.008392
Ancestral Drought 1.60024
Drought Watered 8.693766
Drought Drought 2.740732
Watered Watered 9.229806
Watered Drought 2.234901
谁能帮我理解我对 SE 的误解?
没有 weights
参数的 gls()
调用就像 lm()
调用一样,因为它默认为同方差模型。特别是,我建议添加 weights = varIdent(form = ~ 1 | History*Treatment)
。请参阅 varIdent
的文档,然后再看一下 FAQs vignette in emmeans。
我正在尝试计算几个实验组的标准误差 (SE),以便绘制图表。然而,数据不满足方差同质性——治疗之间的适应度方差差异很大,无法通过我尝试过的转换来解决。
我的模型很简单:Fitness ~ History * Treatment
。
在 R 中,我尝试将 emmeans
与我的模型一起用作 lm,这为每个组提供了与预期完全相同的 SE,因为它假定方差同质性。我读过包 nlme
的 gls 函数应该通过允许方差的异质性来解决这个问题 here,但即使 运行 emmeans
on nlme::gls()
给出各组之间的 SE 极为相似(下图)。
> SM2 <- gls(Seed_mass_mg~History*Treatment, data1, na.action = na.omit)
emmeans(SM2, ~History * Treatment)
History Treatment emmean SE df lower.CL upper.CL
ancestral drought 35.0 5.93 909 23.3 46.6
dry drought 56.3 6.29 909 44.0 68.7
wet drought 39.1 6.12 909 27.1 51.1
ancestral watered 102.9 6.02 909 91.1 114.8
dry watered 131.0 6.38 909 118.5 143.6
wet watered 140.2 5.97 909 128.4 151.9
Degrees-of-freedom method: df.error
Confidence level used: 0.95
然而,当我通过公式计算SE时,我得到了完全不同的SE:
History Treatment Seed_mass_mg_SE
Ancestral Watered 7.008392
Ancestral Drought 1.60024
Drought Watered 8.693766
Drought Drought 2.740732
Watered Watered 9.229806
Watered Drought 2.234901
谁能帮我理解我对 SE 的误解?
没有 weights
参数的 gls()
调用就像 lm()
调用一样,因为它默认为同方差模型。特别是,我建议添加 weights = varIdent(form = ~ 1 | History*Treatment)
。请参阅 varIdent
的文档,然后再看一下 FAQs vignette in emmeans。