Wie sind diese benutzerdefinierten Kontraste zu interpretieren?

10

Ich mache eine Einweg-ANOVA (pro Art) mit benutzerdefinierten Kontrasten.

     [,1] [,2] [,3] [,4]
0.5    -1    0    0    0
5       1   -1    0    0
12.5    0    1   -1    0
25      0    0    1   -1
50      0    0    0    1

wo ich Intensität 0,5 gegen 5, 5 gegen 12,5 und so weiter vergleiche. Dies sind die Daten, an denen ich arbeite

Geben Sie hier die Bildbeschreibung ein

mit den folgenden Ergebnissen

Generalized least squares fit by REML
  Model: dark ~ intensity 
  Data: skofijski.diurnal[skofijski.diurnal$species == "niphargus", ] 
       AIC      BIC    logLik
  63.41333 67.66163 -25.70667

Coefficients:
            Value Std.Error  t-value p-value
(Intercept) 16.95 0.2140872 79.17334  0.0000
intensity1   2.20 0.4281744  5.13809  0.0001
intensity2   1.40 0.5244044  2.66970  0.0175
intensity3   2.10 0.5244044  4.00454  0.0011
intensity4   1.80 0.4281744  4.20389  0.0008

 Correlation: 
           (Intr) intns1 intns2 intns3
intensity1 0.000                      
intensity2 0.000  0.612               
intensity3 0.000  0.408  0.667        
intensity4 0.000  0.250  0.408  0.612 

Standardized residuals:
       Min         Q1        Med         Q3        Max 
-2.3500484 -0.7833495  0.2611165  0.7833495  1.3055824 

Residual standard error: 0.9574271 
Degrees of freedom: 20 total; 15 residual

16,95 ist das globale Mittel für "Niphargus". In Intensität1 vergleiche ich Mittelwerte für Intensität 0,5 mit 5.

Wenn ich dieses Recht verstanden habe, sollte der Koeffizient für Intensität1 von 2,2 die Hälfte der Differenz zwischen den Intensitätsstufen 0,5 und 5 betragen. Meine Handberechnungen stimmen jedoch nicht mit denen der Zusammenfassung überein. Kann jemand einschneiden, was ich falsch mache?

ce1 <- skofijski.diurnal$intensity
levels(ce1) <- c("0.5", "5", "0", "0", "0")
ce1 <- as.factor(as.character(ce1))
tapply(skofijski.diurnal$dark, ce1, mean)
       0    0.5      5 
  14.500 11.875 13.000 
diff(tapply(skofijski.diurnal$dark, ce1, mean))/2
      0.5       5 
  -1.3125  0.5625 
Roman Luštrik
quelle
Könnten Sie die Funktion lm () aus R bereitstellen, die Sie zur Schätzung verwendet haben? Wie genau haben Sie die Kontrastfunktion verwendet?
Philippe
Übrigens geom_points(position=position_dodge(width=0.75))wird festgelegt, wie die Punkte in Ihrem Plot nicht mit den Feldern übereinstimmen .
fliegt
@flies seit meiner Frage gibt es eine Einführung von geom_jitter, die eine Verknüpfung für alle geom_point () -Parameter ist, die zittern.
Roman Luštrik
Ich habe den Jitter dort nicht bemerkt. funktioniert geom_jitter(position_dodge)? Ich habe verwendet geom_points(position_jitterdodge), um Boxplots mit Ausweichen Punkte hinzuzufügen.
fliegt
@flies siehe die Dokumentation geom_jitter hier . Nach meiner Erfahrung seit meiner obigen Antwort finde ich es unnötig, Boxplots zu verwenden. Je. Wenn ich viele Punkte habe, verwende ich Geigenplots, die die Punktedichte in viel feineren Details zeigen als Boxplots. Boxplots wurden erfunden, als viele Punkte aufgetragen wurden oder ihre Dichte nicht zweckmäßig war. Vielleicht ist es an der Zeit, darüber nachzudenken, diese (behinderte) Visualisierung fallen zu lassen.
Roman Luštrik

Antworten:

10

Die Matrix, die Sie für die Kontraste angegeben haben, ist grundsätzlich korrekt. Um es in eine geeignete Kontrastmatrix umzuwandeln , müssen Sie die verallgemeinerte Inverse Ihrer ursprünglichen Matrix berechnen.

Wenn Mist Ihre Matrix:

M

#     [,1] [,2] [,3] [,4]
#0.5    -1    0    0    0
#5       1   -1    0    0
#12.5    0    1   -1    0
#25      0    0    1   -1
#50      0    0    0    1 

Berechnen Sie nun die verallgemeinerte Inverse mit ginvund transponieren Sie das Ergebnis mit t:

library(MASS)
t(ginv(M))

#     [,1] [,2] [,3] [,4]
#[1,] -0.8 -0.6 -0.4 -0.2
#[2,]  0.2 -0.6 -0.4 -0.2
#[3,]  0.2  0.4 -0.4 -0.2
#[4,]  0.2  0.4  0.6 -0.2
#[5,]  0.2  0.4  0.6  0.8

Das Ergebnis ist identisch mit dem von @Greg Snow. Verwenden Sie diese Matrix für Ihre Analyse.

Dies ist viel einfacher als manuell.


Es gibt eine noch einfachere Möglichkeit, eine Matrix gleitender Unterschiede (auch als wiederholte Kontraste bezeichnet ) zu erstellen . Dies kann mit der Funktion contr.sdifund der Anzahl der Faktorstufen als Parameter erfolgen. Wenn Sie fünf Faktorstufen haben, wie in Ihrem Beispiel:

library(MASS)
contr.sdif(5)

#   2-1  3-2  4-3  5-4
#1 -0.8 -0.6 -0.4 -0.2
#2  0.2 -0.6 -0.4 -0.2
#3  0.2  0.4 -0.4 -0.2
#4  0.2  0.4  0.6 -0.2
#5  0.2  0.4  0.6  0.8
Sven Hohenstein
quelle
4

Wenn die Matrix oben zeigt, wie Sie die Dummy-Variablen codieren (was Sie an die Funktion Coder contrastin R übergeben), vergleicht die erste die erste Ebene mit den anderen (tatsächlich wird das 0,8-fache der ersten von der 0,2-fachen subtrahiert Summe der anderen).

Der zweite Term vergleicht die ersten 2 Ebenen mit den letzten 3. Der dritte vergleicht die ersten drei Ebenen mit den letzten zwei und der vierte vergleicht die ersten vier Ebenen mit den letzten.

Wenn Sie die von Ihnen beschriebenen Vergleiche durchführen möchten (jedes Paar vergleichen), lautet die gewünschte Dummy-Variablencodierung:

      [,1] [,2] [,3] [,4]
[1,] -0.8 -0.6 -0.4 -0.2
[2,]  0.2 -0.6 -0.4 -0.2
[3,]  0.2  0.4 -0.4 -0.2
[4,]  0.2  0.4  0.6 -0.2
[5,]  0.2  0.4  0.6  0.8
Greg Snow
quelle
Ist die Verwendung dieser verallgemeinerten inversen Matrix auch bei Verwendung aov()anstelle von erforderlich lm()? Ich frage, weil ich mehrere Tutorials gelesen habe, in denen Kontrastmatrizen für aov()genau so konstruiert sind, wie sie von Roman angegeben wurden. Siehe z. B. Kapitel 5 in cran.r-project.org/doc/contrib/Vikneswaran-ED_companion.pdf
crsh
2
Die aovFunktion ruft die lmFunktion auf, um die Hauptberechnungen durchzuführen, sodass Dinge wie Kontrastmatrizen in beiden den gleichen Effekt haben.
Greg Snow