2016-08-18 18 views
1

Я анализирую набор данных участников двоичных ответов на некоторые вопросы. Я использую функцию glm, чтобы проверить, как Var * Base_con влияет на результат Dec. После подгонки я пытаюсь сравнить, как фактор «Var» влияет на результат в каждом из уровней фактора «Base_con». После this vignette я попробовал следующее (неисправный) подход, который я считаю, может быть воспроизведен (пожалуйста, дайте мне знать, если он не работает):Несколько сравнений после GLM, включая условия взаимодействия

# 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 

это все, что я был в состоянии продвинуться так далеко. Есть идеи? Спасибо всем.

+0

Обратите внимание, что 'lme4' пакет * не * есть' glm' функция; 'glm()' находится в базовом пакете. Если у вас есть несколько ответов для каждого участника, вам, вероятно, нужно использовать 'glmer'. – gung

+0

@gung, ты прав. Это основная функция 'glm'. На этот раз нет повторных мер, поэтому нет необходимости использовать 'glmer'. @Silverfish, я попытаюсь отредактировать, используя воспроизводимый пример, хотя я не уверен, что смогу воспроизвести ошибку. –

+0

Если * вы * не можете воспроизвести ошибку, @Lea_Casiraghi, как бы * мы * уметь? & как мы сможем найти решение без воспроизведения ошибки? – gung

ответ

1

Если ваша цель состоит в том, чтобы сравнить эффекты для взаимодействия Base_con и Var, более прямой путь может быть, чтобы создать новый термин для этих взаимодействий (здесь я изменил название dataframe к d):

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

Затем установите модель и делать сравнение:

# GLM fit 
m1 <- glm(Dec ~ -1 + BV, data = d, family = "binomial") 

library(multcomp) 
summary(glht(m1, linfct = mcp(BV = "Tukey"))) 

    # Simultaneous Tests for General Linear Hypotheses 

    # Multiple Comparisons of Means: Tukey Contrasts 


    # Fit: glm(formula = Dec ~ -1 + BV, family = "binomial", data = d) 

    # Linear Hypotheses: 
    #    Estimate Std. Error z value Pr(>|z|)  
    # 2.0 - 1.0 == 0 -1.7988  0.4632 -3.883 0.00133 ** 
    # 3.0 - 1.0 == 0 -4.9702  0.4846 -10.255 < 0.001 *** 
    # 1.1 - 1.0 == 0 -1.6596  0.4523 -3.669 0.00308 ** 
    # 2.1 - 1.0 == 0 -3.0593  0.4392 -6.965 < 0.001 *** 
    # 3.1 - 1.0 == 0 -5.3893  0.4759 -11.325 < 0.001 *** 
    # 3.0 - 2.0 == 0 -3.1714  0.3190 -9.941 < 0.001 *** 
    # 1.1 - 2.0 == 0 0.1392  0.2673 0.521 0.99498  
    # 2.1 - 2.0 == 0 -1.2605  0.2446 -5.154 < 0.001 *** 
    # 3.1 - 2.0 == 0 -3.5905  0.3055 -11.751 < 0.001 *** 
    # 1.1 - 3.0 == 0 3.3106  0.3029 10.930 < 0.001 *** 
    # 2.1 - 3.0 == 0 1.9109  0.2830 6.751 < 0.001 *** 
    # 3.1 - 3.0 == 0 -0.4191  0.3371 -1.243 0.80488  
    # 2.1 - 1.1 == 0 -1.3997  0.2231 -6.273 < 0.001 *** 
    # 3.1 - 1.1 == 0 -3.7297  0.2887 -12.920 < 0.001 *** 
    # 3.1 - 2.1 == 0 -2.3300  0.2678 -8.702 < 0.001 *** 
    # --- 
    # Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 
    # (Adjusted p values reported -- single-step method) 
+0

Я мог воспроизвести этот результат, но я понятия не имею, что это значит или что он сравнивает. –

+0

Должны быть 6 комбинаций Var и Base_con и, следовательно, в общей сложности 15 возможных сравнений и три сравнения значений Var в пределах уровней Base_con. Я не уверен, что здесь тестирует, или почему он не работает в моем примере. –

+0

Сравнение здесь, например. 'Var0: Base_con1 == 0', то есть тест отличия от 0. Если вы хотите сравнить эффекты, вам придется устанавливать' X' по-другому. Я посмотрю, смогу ли я что-то сделать, когда я получу пару минут. –