2016-08-18 4 views
1

Ich analysiere einen Datensatz von Teilnehmern binäre Antworten auf bestimmte Fragen. Ich verwende die glm Funktion, um zu testen, wie Var * Base_con das Ergebnis von Dec beeinflussen. Nach der Anpassung versuche ich zu vergleichen, wie der "Var" -Faktor das Ergebnis in jedem der "Base_con" -Faktorstufen beeinflusst. Nach this vignette habe ich die folgende (andernfalls) Ansatz versucht, die ich glauben kann, dass reproduziert werden (bitte lassen Sie mich wissen, wenn es nicht funktioniert):Mehrere Vergleiche nach GLM mit Interaktionstermen

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

Der Ausgang für den letzten Befehl lautet:

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

Tatsächlich wird die Anzahl der Spalten und Länge der beiden Elemente durch die Fehlermeldung gemeldet sind unterschiedlich:

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

, dass alles, was ich in der Lage gewesen voran bisher. Irgendwelche Ideen? Dank an alle.

+0

Beachten Sie, dass die 'lme4' Paket * nicht * eine' glm' Funktion; 'glm()' ist im Basispaket enthalten. Wenn Sie mehrere Antworten pro Teilnehmer haben, müssen Sie vermutlich 'glmer' verwenden. – gung

+0

@gung, du hast Recht. Es ist die grundlegende 'Glm'-Funktion. Dieses Mal gibt es keine wiederholten Takte, es ist also nicht nötig, 'glmer' zu verwenden. @Silverfish, ich werde versuchen, mit einem reproduzierbaren Beispiel zu bearbeiten, obwohl ich nicht sicher bin, ob ich den Fehler reproduzieren kann. –

+0

Wenn * you * den Fehler @Lea_Casiraghi nicht reproduzieren kann, wie können * wir * dies tun? und wie könnten wir eine Lösung finden, ohne den Fehler zu reproduzieren? – gung

Antwort

1

Wenn Ihr Ziel ist es Auswirkungen für die Interaktion von Base_con und Var, ein direkteren Weg, um einen neuen Begriff für diese Wechselwirkungen erstellen kann vergleichen sein (hier habe ich den Datenrahmen Namen d geändert):

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

Dann das Modell passen und machen die Vergleiche:

# 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

Ich könnte dieses Ergebnis reproduzieren, aber ich habe keine Ahnung, was es bedeutet, oder was es vergleicht. –

+0

Es sollten 6 Var- und Base_con-Kombinationen und somit insgesamt 15 mögliche Vergleiche und drei Vergleiche zwischen Var-Werten innerhalb der Base_con-Ebenen vorhanden sein. Ich bin mir nicht sicher, was es hier testet, oder warum es in meinem Beispiel nicht funktioniert. –

+0

Der Vergleich hier ist z.B. 'Var0: Base_con1 == 0', d. H. Ein Test der Differenz von 0. Wenn Sie Effekte vergleichen wollen, müssen Sie' X' anders einstellen. Ich werde sehen, ob ich etwas aufstellen kann, wenn ich ein paar Minuten brauche. –