如何用Tukey方法调整emmeans的置信区间?

时间:2018-04-20 07:56:07

标签: r confidence-interval emmeans

我很难回到emmeans包给出的“CL”值。

我的第一个目标是进行一种功效研究:我正在研究植物,我想看看我能在下个季节改进实验设计,以便在我的基因型之间产生更大的差异。我的基因型被重复,这被用作阻断因子。 我想玩重复次数(假设平均值和剩余SE保持不变)。最后,我想在预算问题和统计权力之间找到妥协。

我正在考虑查看置信区间(CI),记住如果两种基因型的CI涵盖至少一个共同值,则这两种基因型没有显着差异。所以我想知道在玩重复次数时我能减少多少CI。

我猜测使用Tukey方法进行多重比较的CI计算是:

  

μi±(σ/(2 *√(ni)))* q

     

,μi是第i个基因型的平均值

     

ni第i个基因型的观察数量,

     

σ残差标准误差和

     

q带有t(基因型数)和dfE(残差自由度)的学生化范围统计量作为α= 0.05的参数

相当于:

  

μi±(SEi * q)/ 2

     

SEi是第i个基因型的标准误差

以下是一个小型示例数据集,包含6种基因型和3次重复以及我运行的代码:

library(emmeans)

# import DF
df <- structure(list(Geno = structure(c(6L, 3L, 2L, 1L, 4L, 5L, 2L, 
                                     4L, 5L, 1L, 3L, 6L, 2L, 3L, 1L, 5L, 6L, 4L),
                                   .Label = c("A", "B", "C", "D", "E", "F"),
                                   class = "factor"), variable = c(2.279628571, 3.925157143, 3.089, 2.26, 2.503,
                                                                   2.495114286, 2.867166667, 3.069238095, 3.884285714, 3.409595238, 
                                                                   3.710714286, 1.763142857, 2.865285714, 4.219214286, 3.263452381, 
                                                                   3.359428571, 2.335285714, 2.443), 
                 Rep = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L), 
                                 .Label = c("1", "2", "3"), class = "factor")), .Names = c("Geno", "variable", "Rep"),
            row.names = c(NA, 18L), class = "data.frame")

# Number of observation
N <- nrow(df)

# Number of treatments
t <- nlevels(df$Geno)

# Define the model
model <- lm(data=df, variable ~ Geno + Rep)

# Compute means and confidence intervals
E_means <- as.data.frame(emmeans(model, pairwise~Geno)$emmean)

# Extract Standard Errors
se <- E_means[,"SE"]

# Studentized range statistic
q <- qtukey(0.95, nmeans=t, df=E_means[,"df"])

expected_CI <- se*q/2
emmeans_CI <- ((E_means[,"upper.CL"] - E_means[,"lower.CL"])/2)

print(expected_CI)
print(emmeans_CI)

请注意,我处理不平衡数据的大部分时间(因此我对每种基因型都有不同的SE)。我想首先明确一个简单的(=平衡的)案例。

expected_CI和emmeans_CI对于我到目前为止所完成的每个测试总是不同的(不是很不一样,但仍然不同)所以我想我的计算方式与emmeans包相同。所以这是我的问题:如何在emmeans包中完成?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

您似乎将EMM与EMM的差异混淆。此外,您使用的公式仅适用于平衡单向设计。

以您的示例为例,您将尝试:

emm <- emmeans(model, pairwise ~ Geno)

然后执行:

confint(emm$emmeans, adjust = "tukey")
confint(emm$contrasts, adjust = "tukey")
你会注意到一些事情。首先,EMM本身的CI不使用指定的Tukey调整(它用Sidak替换它),因为该调整仅适用于成对比较。其次,两个摘要具有不同数量的结果(除了恰好有3个处理时)和不同的标准误差。例如,通过4次治疗,有4个EMM,但有6个成对比较;如果设计不平衡,可能会有6种不同的SE与这些比较相关联。

如果您想了解成对比较的Tukey调整,您需要使用适合于成对比较的统计数据 - 第二个摘要。 Tukey调整的CI使用估计的差异加或减sqrt(0.5*qtukey(.95, nmeans, df)) * SE,其中SE来自成对差异的结果。