Thử nghiệm của Dunnett trong R trả về các giá trị khác nhau mỗi lần


13

Tôi đang sử dụng thư viện R 'multcomp' ( http://cran.r-project.org/web/packages/multcomp/ ) để tính toán thử nghiệm của Dunnett. Tôi đang sử dụng đoạn script dưới đây:

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

Bây giờ nếu tôi chạy tập lệnh này qua Bảng điều khiển R nhiều lần, tôi sẽ nhận được kết quả rất khác nhau mỗi lần. Đây là một ví dụ:

         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)

Và đây là một cái khác:

         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)

Như bạn có thể thấy, hai kết quả trên khác nhau rất ít, nhưng nó đủ để di chuyển nhóm cuối cùng (F) từ hai sao sang ba sao, điều mà tôi thấy đáng lo ngại.

Tôi có một số câu hỏi liên quan đến điều này:

  1. Tại sao chuyện này đang xảy ra?! Chắc chắn nếu bạn đặt cùng một dữ liệu mỗi lần bạn sẽ nhận được cùng một dữ liệu.
  2. Có một số loại số ngẫu nhiên đang được sử dụng ở đâu đó trong tính toán của Dunnett?
  3. Là sự thay đổi nhỏ mỗi lần thực sự là một vấn đề?

Câu trả lời:


7

Tôi đang trả lời hai câu hỏi đầu tiên của bạn với nhau thông qua ví dụ.

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)

Các kết quả:

     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)

Chạy lại (không đặt hạt giống):

summary(Dunnet)

Kết quả khác nhau:

     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)

Chạy lại (với một tập hợp hạt giống):

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

Kết quả tương tự:

     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)

Bằng cách đặt hạt giống trước mỗi lần chạy, bạn sẽ có được kết quả nhất quán. Do đó, có vẻ như một số ngẫu nhiên đang được sử dụng để tính toán các giá trị p.

mộttôiphmột


Cảm ơn rất nhiều cho câu trả lời của bạn. Tôi nghĩ bạn đã đúng khi không nghĩ đến việc có bao nhiêu ngôi sao - mọi người nên nhìn vào giá trị P nào. Tôi nghĩ rằng tôi sẽ phải đặt hạt giống thành một giá trị đã biết, bởi vì để xác nhận chương trình của tôi, các resuls phải được tái tạo chính xác. Chỉ một câu hỏi nữa - bạn có biết tại sao hạt giống ngẫu nhiên được sử dụng không?
dùng1578653

1
Xem câu trả lời được viết bởi @Aniko cung cấp giải thích chi tiết hơn. Thông báo tôi đã sử dụng ngày hôm nay là hạt giống.
Ellis Valentiner ngày

10

Bạn đã đúng, có một thế hệ số ngẫu nhiên có liên quan và nó làm cho các phép tính thay đổi từ chạy sang chạy. Thủ phạm thực sự không phải là thủ tục của Dunnett, mà là phân phối đa biến cần thiết cho việc điều chỉnh một bước.

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"     

Nếu điều này là đáng quan tâm, chỉ cần gọi set.seedvới bất kỳ đối số trước khi tính toán để làm cho nó có thể tái tạo chính xác.

Nhân tiện, có một sự thừa nhận và định lượng lỗi trong đầu ra của glht:

> ss <- summary(glht(aov, linfct=mcp(Group="Dunnett")))
> attr(ss$test$pvalues, "error")
[1] 0.0006597562
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.