Dunnetts Test in R liefert jedes Mal andere Werte

13

Ich benutze die R "Multcomp" -Bibliothek ( http://cran.r-project.org/web/packages/multcomp/ ), um Dunnetts Test zu berechnen. Ich benutze das folgende Skript:

Group <- factor(c("A","A","B","B","B","C","C","C","D","D","D","E","E","F","F","F"))
Value <- c(5,5.09901951359278,4.69041575982343,4.58257569495584,4.79583152331272,5,5.09901951359278,4.24264068711928,5.09901951359278,5.19615242270663,4.58257569495584,6.16441400296898,6.85565460040104,7.68114574786861,7.07106781186548,6.48074069840786)
data <- data.frame(Group, Value)
aov <- aov(Value ~ Group, data)
summary(glht(aov, linfct=mcp(Group="Dunnett")))

Wenn ich dieses Skript nun mehrmals über die R-Konsole ausführe, erhalte ich jedes Mal geringfügig andere Ergebnisse. Hier ist ein Beispiel:

         Simultaneous Tests for General Linear Hypotheses

Multiple Comparisons of Means: Dunnett Contrasts


Fit: aov(formula = Value ~ Group, data = data)

Linear Hypotheses:
           Estimate Std. Error t value Pr(>|t|)   
B - A == 0 -0.35990    0.37009  -0.972  0.76545   
C - A == 0 -0.26896    0.37009  -0.727  0.90019   
D - A == 0 -0.09026    0.37009  -0.244  0.99894   
E - A == 0  1.46052    0.40541   3.603  0.01710 * 
F - A == 0  2.02814    0.37009   5.480  0.00104 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1
(Adjusted p values reported -- single-step method)

Und hier ist noch einer:

         Simultaneous Tests for General Linear Hypotheses

Multiple Comparisons of Means: Dunnett Contrasts


Fit: aov(formula = Value ~ Group, data = data)

Linear Hypotheses:
           Estimate Std. Error t value Pr(>|t|)    
B - A == 0 -0.35990    0.37009  -0.972   0.7654    
C - A == 0 -0.26896    0.37009  -0.727   0.9001    
D - A == 0 -0.09026    0.37009  -0.244   0.9989    
E - A == 0  1.46052    0.40541   3.603   0.0173 *  
F - A == 0  2.02814    0.37009   5.480   <0.001 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1
(Adjusted p values reported -- single-step method)

Wie Sie sehen, unterscheiden sich die beiden obigen Ergebnisse geringfügig, aber es reicht aus, um die endgültige Gruppe (F) von zwei auf drei Sterne zu verschieben, was ich beunruhigend finde.

Ich habe dazu mehrere Fragen:

  1. Warum passiert dies?! Wenn Sie jedes Mal die gleichen Daten eingeben, sollten Sie die gleichen Daten ausgeben.
  2. Gibt es eine Art Zufallszahl, die irgendwo in der Berechnung des Dunnett verwendet wird?
  3. Ist diese kleine Abweichung tatsächlich jedes Mal ein Problem?
user1578653
quelle

Antworten:

7

Ich beantworte Ihre ersten beiden Fragen gemeinsam anhand eines Beispiels.

library(multcomp)

Group <- factor(c("A","A","B","B","B","C","C","C","D","D","D","E","E","F","F","F"))
Value <- c(5,5.09901951359278,4.69041575982343,4.58257569495584,4.79583152331272,5,5.09901951359278,4.24264068711928,5.09901951359278,5.19615242270663,4.58257569495584,6.16441400296898,6.85565460040104,7.68114574786861,7.07106781186548,6.48074069840786)
data <- data.frame(Group, Value)

fit <- aov(Value ~ Group, data)

set.seed(20140123)
Dunnet <- glht(fit, linfct=mcp(Group="Dunnett"))
summary(Dunnet)

Ergebnisse:

     Simultaneous Tests for General Linear Hypotheses

Multiple Comparisons of Means: Dunnett Contrasts


Fit: aov(formula = Value ~ Group, data = data)

Linear Hypotheses:
           Estimate Std. Error t value Pr(>|t|)   
B - A == 0 -0.35990    0.37009  -0.972  0.76536   
C - A == 0 -0.26896    0.37009  -0.727  0.90012   
D - A == 0 -0.09026    0.37009  -0.244  0.99895   
E - A == 0  1.46052    0.40541   3.603  0.01794 * 
F - A == 0  2.02814    0.37009   5.480  0.00112 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1
(Adjusted p values reported -- single-step method)

Führen Sie erneut aus (ohne den Startwert festzulegen):

summary(Dunnet)

Unterschiedliche Ergebnisse:

     Simultaneous Tests for General Linear Hypotheses

Multiple Comparisons of Means: Dunnett Contrasts


Fit: aov(formula = Value ~ Group, data = data)

Linear Hypotheses:
           Estimate Std. Error t value Pr(>|t|)   
B - A == 0 -0.35990    0.37009  -0.972  0.76535   
C - A == 0 -0.26896    0.37009  -0.727  0.90020   
D - A == 0 -0.09026    0.37009  -0.244  0.99895   
E - A == 0  1.46052    0.40541   3.603  0.01767 * 
F - A == 0  2.02814    0.37009   5.480  0.00105 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1
(Adjusted p values reported -- single-step method)

Führen Sie erneut aus (mit einem festgelegten Startwert):

set.seed(20140123)
Dunnet <- glht(fit, linfct=mcp(Group="Dunnett"))
summary(Dunnet)

Gleiche Ergebnisse:

     Simultaneous Tests for General Linear Hypotheses

Multiple Comparisons of Means: Dunnett Contrasts


Fit: aov(formula = Value ~ Group, data = data)

Linear Hypotheses:
           Estimate Std. Error t value Pr(>|t|)   
B - A == 0 -0.35990    0.37009  -0.972  0.76536   
C - A == 0 -0.26896    0.37009  -0.727  0.90012   
D - A == 0 -0.09026    0.37009  -0.244  0.99895   
E - A == 0  1.46052    0.40541   3.603  0.01794 * 
F - A == 0  2.02814    0.37009   5.480  0.00112 **
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1
(Adjusted p values reported -- single-step method)

Wenn Sie den Startwert vor jedem Lauf einstellen, erhalten Sie konsistente Ergebnisse. Daher scheint es, dass bei der Berechnung der p-Werte eine Zufallszahl verwendet wird.

einlphein

Ellis Valentiner
quelle
Vielen Dank für Ihre Antwort. Ich denke, Sie haben Recht, wenn Sie nicht daran denken, wie viele Sterne es gibt - die Leute sollten sich sowieso den P-Wert ansehen. Ich denke, ich muss den Startwert auf einen bekannten Wert setzen, da die Ergebnisse zur Validierung meines Programms genau reproduzierbar sein müssen. Nur noch eine Frage - wissen Sie, warum der Zufallssamen verwendet wird?
user1578653
1
Weitere Informationen finden Sie in der Antwort von @Aniko. Beachten Sie, dass ich das heutige Datum als Ausgangswert verwendet habe.
Ellis Valentiner
10

Sie haben Recht, es ist eine Zufallsgenerierung erforderlich, und die Berechnungen variieren von Lauf zu Lauf. Der Schuldige ist eigentlich nicht Dunnetts Verfahren, sondern die für die einstufige Anpassung erforderliche multivariate t-Verteilung.

P(X<0)XT5

> library(mvtnorm)
> cr2 <- matrix(rep(0.3, 25), nr=5); diag(cr2) <- 1
> cr2
     [,1] [,2] [,3] [,4] [,5]
[1,]  1.0  0.3  0.3  0.3  0.3
[2,]  0.3  1.0  0.3  0.3  0.3
[3,]  0.3  0.3  1.0  0.3  0.3
[4,]  0.3  0.3  0.3  1.0  0.3
[5,]  0.3  0.3  0.3  0.3  1.0
> b <- pmvt(lower=rep(-Inf,5), upper=rep(0,5), delta=rep(0,5), df=5, corr=cr2)
> a <- pmvt(lower=rep(-Inf,5), upper=rep(0,5), delta=rep(0,5), df=5, corr=cr2)
> all.equal(a,b)
[1] "Attributes: < Component 1: Mean relative difference: 0.1527122 >"
[2] "Mean relative difference: 0.0003698006"     

Wenn dies von Belang ist, rufen Sie einfach set.seedvor der Berechnung ein Argument auf, um die Reproduzierbarkeit zu gewährleisten.

Übrigens gibt es eine Bestätigung und Quantifizierung des Fehlers in der Ausgabe von glht:

> ss <- summary(glht(aov, linfct=mcp(Group="Dunnett")))
> attr(ss$test$pvalues, "error")
[1] 0.0006597562
Aniko
quelle