GLM之后的多重比较包括交互术语

时间:2016-08-18 14:20:32

标签: r glm interaction tukey

我正在分析参与者对某些问题的二元答案的数据集。我使用glm函数来测试Var * Base_con如何影响Dec的结果。在合适之后,我试图比较" Var"因素会影响每个" Base_con"要素水平。在this vignette之后,我尝试了以下(失败)方法,我相信可以复制(请告诉我,如果它不起作用):

# load example dataset with relevant columns
require(RCurl)
my_csv = getURL("https://docs.google.com/spreadsheets/d/1sBVW7QbnfumeRmY1uEDdiDNJE7QfmCXH0wMmV2lZSH4/pub?gid=0&single=true&output=csv")
eg_data = read.csv(textConnection(my_csv))
# set columns as factors because they are numerically coded
eg_data$Base_con = as.factor(eg_data$Base_con)
eg_data$Var = as.factor(eg_data$Var)
eg_data$Dec = as.factor(eg_data$Dec)

# GLM fit
m1 = glm(Dec ~ Var * Base_con, data = eg_data, family = "binomial")

# strategy for Tukey multiple comparisons
require(multcomp)
tmp = expand.grid(Base_con = unique(eg_data$Base_con), Var = unique(eg_data$Var))
X = model.matrix(~Base_con : Var, data = tmp)
mc = glht(m1, linfct = X)

最后一个命令的输出是:

Error in glht.matrix(m1, linfct = X) : 
  ‘ncol(linfct)’ is not equal to ‘length(coef(model))’

实际上,错误消息报告的两个元素的列数和长度是不同的:

> ncol(X)
[1] 7
> length(coef(m1))
[1] 6

到目前为止,这是我所能取得的成就。有任何想法吗?谢谢大家。

1 个答案:

答案 0 :(得分:1)

如果您的目标是比较Base_conVar的互动效果,更直接的方法可能是为这些互动创建一个新术语(这里我已将数据框名称更改为{ {1}}):

d

然后拟合模型并进行比较:

d$BV <- interaction(d$Base_con, d$Var)