Kiểm tra giả thuyết cho sự khác biệt về trung vị giữa hơn hai mẫu


12

Câu hỏi

Điểm kiểm tra của ba nhóm người được lưu dưới dạng các vectơ riêng trong R.

set.seed(1)
group1 <- rnorm(100, mean = 75, sd = 10)
group2 <- rnorm(100, mean = 85, sd = 10)
group3 <- rnorm(100, mean = 95, sd = 10)

Tôi muốn biết liệu có sự khác biệt đáng kể về trung vị giữa các nhóm này không. Tôi biết rằng tôi có thể kiểm tra nhóm 1 so với nhóm 2 bằng cách sử dụng thử nghiệm Wilcoxon, như vậy.

wilcox.test(group1, group2)

Tuy nhiên, điều này chỉ so sánh hai nhóm cùng một lúc và tôi muốn so sánh cả ba nhóm cùng một lúc. Tôi muốn một thử nghiệm thống kê mang lại giá trị ap ở mức ý nghĩa 0,05. Ai đó có thể vui lòng giúp đỡ?

Chỉnh sửa # 1 - Kiểm tra trung bình của tâm trạng

Theo câu trả lời gợi ý của người dùng Hibernating, tôi đã thử kiểm tra trung bình của Mood.

median.test <- function(x, y){
    z <- c(x, y)
    g <- rep(1:2, c(length(x), length(y)))
    m <- median(z)
    fisher.test(z < m, g)$p.value
}

median.test(group1, group2)

Tuy nhiên, phương pháp này cho phép tôi kiểm tra sự khác biệt đáng kể giữa các trung vị chỉ có hai nhóm tại một thời điểm. Tôi không chắc chắn làm thế nào để sử dụng nó để so sánh trung bình của cả ba cùng một lúc.

Chỉnh sửa # 2 - Kiểm tra Kruskal-Wallis

Câu trả lời được đề xuất của người dùng dmartin dường như ít nhiều là những gì tôi cần và cho phép tôi kiểm tra đồng thời cả ba nhóm.

kruskal.test(list(group1, group2, group3))

Chỉnh sửa # 3

Người dùng Greg Snow lưu ý một cách hữu ích trong câu trả lời của mình rằng thử nghiệm Kruskal-Wallis là phù hợp miễn là nó đưa ra các giả định nghiêm ngặt khiến nó cũng là một thử nghiệm về phương tiện.


Đã có một số câu hỏi tương tự trên trang web này. Hãy tìm kiếm median test. Câu trả lời / ý kiến ​​của riêng tôi là ở đây .
ttnphns

Để so sánh trung bình của cả ba đồng thời, hãy xem chỉnh sửa của tôi cho mã R được sửa đổi một chút.
Ngủ đông

Câu trả lời:


4

Thử nghiệm Kruskal-Wallis cũng có thể được sử dụng, vì đây là một ANOVA không tham số. Ngoài ra, nó thường được coi là mạnh hơn bài kiểm tra trung bình của Tâm trạng . Nó có thể được thực hiện trong R bằng cách sử dụng hàm kruskal.test trong gói thống kê trong R.

Để đáp ứng với chỉnh sửa của bạn, việc diễn giải KW tương tự như ANOVA một chiều. Giá trị p đáng kể tương ứng với từ chối null mà cả ba phương tiện đều bằng nhau. Bạn phải sử dụng bài kiểm tra tiếp theo (một lần nữa, giống như ANOVA), để trả lời các câu hỏi về các nhóm cụ thể. Điều này thường theo sau các câu hỏi nghiên cứu cụ thể mà bạn có thể có. Chỉ cần nhìn vào các tham số của mô phỏng, cả ba nhóm sẽ khác biệt đáng kể với nhau nếu bạn thực hiện kiểm tra tiếp theo (vì tất cả chúng cách nhau 1 SD với N = 100).


1
Để làm rõ một vài điều. 1) Kruskal-Wallis không phải là một thử nghiệm về trung vị, trừ khi sự phân phối các quan sát trong các nhóm đáp ứng một số giả định nhất định. Nếu bạn thực sự muốn so sánh trung bình thì đó có thể không phải là thử nghiệm thích hợp. Tốt nhất là chọn một bài kiểm tra thực sự kiểm tra giả thuyết mà bạn quan tâm để kiểm tra. 2) Kruskal-Wallis không phải là "ANOVA". Đó là, nó không phải là một phân tích về phương sai. 3) Việc đề cập đến "phương tiện" trong câu trả lời này là không chính xác.
Sal Mangiafico

10

Đầu tiên, thử nghiệm Wilcoxon (hoặc thử nghiệm Mann-Whitney) không phải là thử nghiệm về trung vị (trừ khi bạn đưa ra các giả định rất nghiêm ngặt cũng biến nó thành thử nghiệm về phương tiện). Và để so sánh hơn 2 nhóm, xét nghiệm Wilcoxon có thể dẫn đến một số kết quả nghịch lý (xem Xúc xắc của Efron ).

Vì xét nghiệm Wilcoxon chỉ là một trường hợp đặc biệt của xét nghiệm hoán vị và bạn đặc biệt quan tâm đến các trung vị, nên tôi sẽ đề xuất một thử nghiệm hoán vị trên các trung vị.

Đầu tiên, chọn một thước đo về sự khác biệt, một cái gì đó giống như lớn nhất trong số 3 trung vị trừ đi nhỏ nhất trong 3 (hoặc phương sai của 3 trung vị, hoặc MAD, v.v.).

Bây giờ hãy tính stat của bạn cho dữ liệu gốc.

gộp tất cả dữ liệu trong một bộ rồi phân vùng ngẫu nhiên các giá trị thành 3 nhóm

cùng kích thước với bản gốc và tính toán thống kê giống nhau.

lặp lại nhiều lần (như 9998)

So sánh cách thống kê từ dữ liệu thực so với phân phối của tất cả các số liệu thống kê cho bài kiểm tra của bạn.


Hãy nói rằng tôi sẵn sàng đưa ra các giả định nghiêm ngặt cần thiết cho thử nghiệm Wilcox cũng sẽ biến nó thành thử nghiệm phương tiện. Điều đó có yêu cầu thay đổi mã R tôi đã viết ở trên không? Điều này cũng có thể được thực hiện cho bài kiểm tra Kruskal-Wallis?
Alexander

1
@Alexander, Nếu bạn sẵn sàng đưa ra những giả định đó thì mã R vẫn ổn và Kruskal Wallis cũng sẽ ổn. Nhưng sau đó nếu bạn sẵn sàng đưa ra những giả định đó t.testaovcó lẽ cũng sẽ ổn thôi.
Greg Snow

+1. Nếu bạn đang nói về việc bạn Wilcoxon sum-rank testsẽ không chuyển đổi "Wilcox" sang tên đó chứ?
ttnphns

@GregSnow +1 cho các điểm được thực hiện ... nhưng tôi giả sử 'Wilcox' có nghĩa là bài kiểm tra được đặt theo tên của Frank Wilcoxon. (Sự nhầm lẫn này không may được gộp bởi R, mà - gây hiểu nhầm - gọi thử nghiệm tương ứng wilcox.test). Bạn có thể chỉnh sửa?
Glen_b -Reinstate Monica

8

Bài kiểm tra trung bình của Tâm trạng là một bài kiểm tra không tham số được sử dụng để kiểm tra sự bình đẳng của các trung vị từ hai hoặc nhiều quần thể. Xem ở đây cho phần R của câu hỏi của bạn. Xem thêm một câu hỏi liên quan ở đây . Cũng từ đây :

Kiểm tra trung bình của tâm trạng là cách dễ nhất để thực hiện bằng tay: tìm ra tổng trung vị (của tất cả các dữ liệu) và đếm xem có bao nhiêu giá trị ở trên và dưới trung vị trong mỗi nhóm. Nếu các nhóm đều giống nhau, các quan sát nên ở khoảng 50-50 trên và dưới trung bình tổng thể trong mỗi nhóm ... Tổng số dưới trung bình và trên trung bình ... tạo thành một bảng hai chiều, trong đó sau đó được phân tích bằng một bài kiểm tra chi bình phương. Bài kiểm tra trung bình của tâm trạng rất giống bài kiểm tra dấu hiệu được khái quát cho hai hoặc nhiều nhóm.

Chỉnh sửa: Đối với ba nhóm, bạn có thể xem xét khái quát hóa đơn giản mã R này mà tôi đã liên kết đến:

median.test2 <- function(x, y, z) {
  a <- c(x, y, z)
  g <- rep(1:3, c(length(x), length(y), length(z)))
  m <- median(a)
  fisher.test(a < m, g)$p.value
}

1
+1 để đặt tên cho bài kiểm tra. Tôi không biết rằng bài kiểm tra trung bình cũng được gọi là bài kiểm tra của Tâm trạng.
ttnphns

+1 Cảm ơn đã giúp tôi với điều này, tôi thực sự đánh giá cao nó!
Alexander

Tôi biết một vài triển khai trong R. mood.medtesttrong gói RVAideMemoire dường như là thử nghiệm thông thường ngoại trừ việc nó sử dụng thử nghiệm chính xác của Fisher theo mặc định cho các cỡ mẫu nhỏ hơn. Các median_testchức năng trong gói đồng xu có thể cung cấp một kiểm tra tiệm cận hoặc sử dụng Monte Carlo.
Sal Mangiafico

0

Tôi biết điều này là muộn, nhưng tôi cũng không thể tìm thấy một gói tốt cho bài kiểm tra trung bình của Tâm trạng, vì vậy tôi đã tự mình lấy nó để thực hiện một chức năng trong R dường như thực hiện thủ thuật.

#Mood's median test for a data frame with one column containing data (d),
#and another containing a factor/grouping variable (f)

moods.median = function(d,f) {

    #make a new matrix data frame
    m = cbind(f,d)
    colnames(m) = c("group", "value")


    #get the names of the factors/groups
    facs = unique(f)

    #count the number of factors/groups
    factorN = length(unique(f))


    #Make a 2 by K table that will be saved to the global environment by using "<<-":
    #2 rows (number of values > overall median & number of values <= overall median)
    #K-many columns for each level of the factor
    MoodsMedianTable <<- matrix(NA, nrow = 2, ncol = factorN)

    rownames(MoodsMedianTable) <<- c("> overall median", "<= overall median")
    colnames(MoodsMedianTable) <<- c(facs[1:factorN])
    colnames(MoodsMedianTable) <<- paste("Factor: ",colnames(MoodsMedianTable))


    #get the overall median
    overallmedian = median(d)



    #put the following into the 2 by K table:
    for(j in 1:factorN){ #for each factor level

        g = facs[j] #assign a temporary "group name"


        #count the number of observations in the factor that are greater than
        #the overall median and save it to the table
        MoodsMedianTable[1,j] <<- sum(m[,2][ which(m[,1]==g)] > overallmedian)


        #count the number of observations in the factor that are less than
        # or equal to the overall median and save it to the table
        MoodsMedianTable[2,j] <<- sum(m[,2][ which(m[,1]==g)] <= overallmedian)

    }


    #percent of cells with expected values less than 5
    percLT5 = ((sum(chisq.test(MoodsMedianTable)$expected < 5)) /
        (length(chisq.test(MoodsMedianTable)$expected)))


    #if >20% of cells have expected values less than 5
    #then give chi-squared stat, df, and Fisher's exact p.value
    if (percLT5 > 0.2) {
        return(list(
            "Chi-squared" = chisq.test(MoodsMedianTable)$statistic,
            "df" = chisq.test(MoodsMedianTable)$parameter,
            "Fisher's exact p.value" = fisher.test(MoodsMedianTable)$p.value))

    }


    #if <= 20% of cells have expected values less than 5
    #then give chi-squared stat, df, and chi-squared p.value
    if (percLT5 <= 0.2) {
        return(list(
            "Chi-squared" = chisq.test(MoodsMedianTable)$statistic,
            "df" = chisq.test(MoodsMedianTable)$parameter,
            "Chi-squared p.value" = chisq.test(MoodsMedianTable)$p.value))

    }

}

Đối với câu hỏi của OP, trước tiên bạn sẽ chạy nó để tạo khung dữ liệu mới để giữ các giá trị từ ba vectơ nhóm của bạn với biến "nhóm" phù hợp.

require(reshape2)
df = cbind(group1, group2, group3)
df = melt(df)
colnames(df) = c("observation", "group", "value")

và chạy chức năng cho bài kiểm tra trung bình của Mood với moods.median(df$value, df$group)


Có vẻ như bài kiểm tra Kruskal-Wallis là câu trả lời. OP cần một giải pháp với 3 nhóm. Dường như ttnphns đã cung cấp mã R cho bài kiểm tra Tâm trạng.
Michael R. Chernick

1
Mã ttnphns chỉ cung cấp giá trị ap, mã tôi đã viết cũng cung cấp cho stat bình phương và df, và nó hoạt động cho bất kỳ số lượng nhóm nào. Tôi hầu như chỉ đăng ở đây vì bài đăng này là bài đầu tiên xuất hiện khi tìm kiếm cách thực hiện bài kiểm tra trung vị của Mood trong R.
JRF1111
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.