我有以下 R 代码:

# load data
df = read.csv("https://gist.githubusercontent.com/ZeningQu/fa4dbe5a1e82b71f7ebf6e35ec56b72b/raw/3072410fb0ea900fae4dff9cb68c5a2e2a2bab2f/bookflights.csv")
View(df)
df$Subject = factor(df$Subject) # convert to nominal factor
df$International = factor(df$International) # convert to nominal factor
df$Ease = ordered(df$Ease) # convert to ordinal factor

# analyze Ease Likert ratings on Website * International with ordinal logistic regression
library(MASS) # for polr
library(car) # for Anova
# set sum-to-zero contrasts for the Anova call
contrasts(df$Website) <- "contr.sum"
contrasts(df$International) <- "contr.sum"
m = polr(Ease ~ Website * International, data=df, Hess=TRUE) # ordinal logistic
Anova(m, type=3)

# post hoc pairwise comparisons
library(multcomp)
library(lsmeans) # equivalent way using lsmeans, pairs, and as.glht
summary(as.glht(pairs(lsmeans(m, pairwise ~ Website * International))),
        test=adjusted(type="none"))

错误:
Error in as.glht.default(pairs(lsmeans(m, pairwise ~ Website * International))) :
  Cannot convert an object of class ‘list’ to a ‘glht’ object

我知道这是 as.glht 抛出的错误:https://github.com/cran/emmeans/blob/master/R/glht-support.R#L169
但是我该怎么做才能将 pairs 转换为 glht

最佳答案

了解为什么会发生这种情况很重要。电话:

lsmeans(m, pairwise ~ Website * International)

实际上是两步操作的简写:
lsm <- lsmeans(m, ~ Website * International)
prs <- pairs(lsm)

结果是两个 emmGrid 对象的列表, lsmprs

您编码的是 as.glht(pairs(lsmeans(m, pairwise ~ Website * International))) ,而内部部分 pairs(lsmeans(m, pairwise ~ Website * International)) 已经过大了,因为它会生成结果的每个元素的成对比较。因此,您会得到一个列表,其中包含 LS 均值的成对比较(这可能是您想要的)和成对比较的成对比较(这可能不是您想要的)。

这里有两种方法可以得到你想要的结果。一种是省略 l.h.s.公式的...
as.glht(pairs(lsmeans(m, ~ Website * International)))

另一种是省略pairs()并调用你想要的部分结果......
as.glht(lsmeans(m, pairwise ~ Website * International)[[2]])

作为 lsmeans/emmeans 的开发者,我最大的遗憾之一是该死的双面公式界面。它造成了很多困惑和很多像这样的问题。但我注定要保持它可用,因为人们急于一步而不是两步就得到他们想要的所有结果。便利的代价是相当高的。

关于r - as.glht : Cannot convert an object of class ‘list’ to a ‘glht’ object,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54321034/

10-12 20:12