我有以下 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
对象的列表, lsm
和 prs
。您编码的是
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/