2016-08-18 5 views
1

J'analyse un jeu de données de réponses binaires des participants à certaines questions. J'utilise la fonction glm pour tester comment Var * Base_con affecter le résultat de Dec. Après l'ajustement, j'essaie de comparer comment le facteur "Var" affecte le résultat dans chacun des niveaux de facteur "Base_con". A la suite this vignette, je l'ai essayé ce qui suit (à défaut) approche, que je crois peut être reproduit (s'il vous plaît laissez-moi savoir si cela ne fonctionne pas):Comparaisons multiples après GLM incluant les termes d'interaction

# 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) 

La sortie de la dernière commande est:

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

en effet, le nombre de colonnes et la longueur des deux éléments rapportés par le message d'erreur sont différentes:

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

C'est tout ce que je suis en mesure d'avancer jusque là. Des idées? Merci à tous.

+0

Notez que le paquet 'lme4' ne * pas * une fonction' glm'; 'glm()' est dans le paquet de base. Si vous avez plusieurs réponses par participant, vous devez probablement utiliser 'glmer'. – gung

+0

@gung, vous avez raison. C'est la fonction de base de 'glm'. Cette fois, il n'y a pas de mesures répétées, il n'est donc pas nécessaire d'utiliser 'glmer'. @ Silverfish, je vais essayer de modifier en utilisant un exemple reproductible, même si je ne suis pas sûr que je serai en mesure de reproduire l'erreur. –

+0

Si * vous * ne pouvez pas reproduire l'erreur, @Lea_Casiraghi, comment * serions-nous capables de le faire? Et comment pourrions-nous trouver une solution sans reproduire l'erreur? – gung

Répondre

1

Si votre objectif est de comparer les effets des interactions de Base_con et Var, d'une manière plus directe peut être de créer un nouveau terme pour ces interactions (ici, j'ai changé le nom de dataframe à d):

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

Montez ensuite le modèle et faire les comparaisons:

# 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

Je pourrais reproduire ce résultat mais je n'ai aucune idée de ce que cela signifie, ou de ce qu'il compare. –

+0

Il devrait y avoir 6 combinaisons Var et Base_con, et donc un total de 15 comparaisons possibles, et trois comparaisons entre les valeurs Var dans les niveaux Base_con. Je ne suis pas sûr de ce que ça fait ici, ou pourquoi ça ne marche pas dans mon exemple. –

+0

La comparaison ici est par ex. 'Var0: Base_con1 == 0', c'est-à-dire un test de différence par rapport à 0. Si vous voulez comparer des effets, vous devrez définir différemment X. Je vais voir si je peux mettre quelque chose quand j'aurai quelques minutes. –