Có sai không khi jitter trước khi thực hiện xét nghiệm Wilcoxon?


9

Tôi đã viết một kịch bản kiểm tra dữ liệu bằng cách sử dụng wilcox.test, nhưng khi tôi nhận được kết quả, tất cả các giá trị p bằng 1. Tôi đọc trong một số trang web mà bạn có thể sử dụng jitter trước khi kiểm tra dữ liệu (để tránh ràng buộc như họ nói), Tôi đã làm điều này và bây giờ tôi có một kết quả chấp nhận được. Làm điều này có sai không?

test<- function(column,datacol){
    library(ggplot2)
t=read.table("data.txt", stringsAsFactors=FALSE)
uni=unique(c(t$V9))
    for (xp in uni) { 
          for(yp in uni) {
            testx <- subset(t, V9==xp)
            testy <- subset(t, V9==yp)
            zz <- wilcox.test(testx[[datacol]],jitter(testy[[datacol]]))
            p.value <- zz$p.value
          }
        }
}


Đây là đầu ra của dput(head(t))

structure(list(V1 = c(0.268912,
0.314681, 0.347078, 0.286945, 
0.39562, 0.282182), V2 = c(0.158921, 0.210526, 0.262024, 0.322006, 
0.133417, 0.283025), V3 = c(0.214082, 0.166895, 0.132547, 0.147361, 
0.09174, 0.169093), V4 = c(0.358085, 0.307898, 0.258352, 0.243688, 
0.379224, 0.2657), V5= c(-0.142223, 0.010895, 0.14655, 
0.08152, 0.02116, 0.030083), V6 = c(0.096408, -0.091896,

-0.331229, -0.446603, -0.088493, -0.262037), V7` = c(1.680946, 
1.649559, 1.534401, 1.130529, 3.441356, 1.211815), V8 = c("NC_000834",  "NC_000844",
"NC_000845", "NC_000846", "NC_000857",
"NC_000860" ), V9 = c("Chordata",
"Arthropoda", "Chordata", "Chordata", 
"Arthropoda", "Chordata"), V10 =
c("???:???", "Diplostraca", 
"???:???", "Rheiformes", "Diptera",
"Salmoniformes"), V11 = c("???:???",
"Branchiopoda", "Mammalia", "Aves",
"Insecta", "Actinopterygii" )), .Names
= c("V1", "V2", "V3", "V4", "V5", "V6",  "V7",
"V8", "V9", "V10",
"V11"), row.names = c(NA,  6L),
class = "data.frame")

Dữ liệu rất lớn và đó là luồng tôi đã bắt đầu và họ nói với tôi rằng có thể sai khi làm điều này

Lưu ý Câu hỏi này xuất phát từ tex.SE: tạo đầu ra PDFcontain R bên trong bảng latex


2
Bạn không cho chúng tôi biết dữ liệu của bạn là gì, nhưng tôi rất nghi ngờ về bất kỳ quy trình nào thêm nhiễu ngẫu nhiên vào dữ liệu và sau đó chạy thử nghiệm thống kê về dữ liệu đó. Ngoài ra, bạn có chắc chắn mã của bạn làm những gì bạn nghĩ nó làm? Tôi đọc là mặc dù vòng lặp của bạn, nó sẽ trả về một p.value duy nhất - đó là x = y = {lastvaluof} (uni)
Andrie

@Andrie: cảm ơn sự giúp đỡ của bạn, nhưng đó không phải là mã hoàn chỉnh, đó là một phần của hàm tính toán kiểm tra wilcox và mã tạo ra các giá trị p khác nhau cho mỗi (xp, yp), đó là một liên kết của một một phần dữ liệu của tôi, bạn có thể xem nó và kiểm tra xem tôi có thể làm điều này không, cảm ơn trước. mediafire.com/?mnj26kp4bv5lcr5

1
Tôi sẽ rất nghi ngờ về các liên kết đến dữ liệu yêu cầu chuyển hướng đến các liên kết khác, đặc biệt là khi R cung cấp dput()chức năng rất hữu ích giúp loại bỏ mọi nhu cầu thực hiện điều đó. Vui lòng cung cấp một ví dụ tái sản xuất để nhận được hỗ trợ.
Đuổi theo


@weblover Khi tôi đề nghị (trên tex.SE) đặt câu hỏi về số liệu thống kê của bạn ở đây, tôi không biết bạn đã hỏi về SO. Vui lòng xóa một trong hai bài đăng của bạn (có thể trên SO, vì đây là câu hỏi về số liệu thống kê).
chl

Câu trả lời:


6

Có một chủ đề trong danh sách trợ giúp về điều này; xem ví dụ: http://tolstoy.newcastle.edu.au/R/e8/help/09/12/9200.html

Gợi ý đầu tiên là lặp lại thử nghiệm nhiều lần với các lần xáo trộn khác nhau và sau đó kết hợp các giá trị p để có được giá trị p tổng thể, bằng cách lấy trung bình hoặc tối đa. Họ cũng đề xuất rằng một thử nghiệm hoán vị đơn giản có thể được sử dụng thay thế (trong số hai, đó là những gì tôi thích). Xem câu hỏi Thực hiện kiểm tra hoán vị nào trong R để sử dụng thay cho kiểm tra t (ghép và không ghép)? cho một số ví dụ về kiểm tra hoán vị.

Ở những nơi khác trong chủ đề đó, Greg Snow viết: Thêm tiếng ồn ngẫu nhiên vào dữ liệu để tránh cảnh báo cũng giống như tháo pin khỏi máy dò khói để tắt tiếng thay vì điều tra nguyên nhân khiến báo thức tắt. (Xem http://tolstoy.newcastle.edu.au/R/e8/help/09/12/9195.html )


cảm ơn bạn đã trả lời, nhưng tôi không hiểu, tôi nên làm gì bây giờ? thay đổi thử nghiệm hoặc điều chỉnh dữ liệu dựa trên một cái gì đó, và đây là cái gì ???
weblover

Tôi sẽ tóm tắt trang tôi liên kết đến.
Aaron rời Stack Overflow

3

(từ chối trách nhiệm: Tôi đã không kiểm tra mã, câu trả lời của tôi chỉ dựa trên mô tả của bạn)

Tôi có cảm giác rằng những gì bạn muốn làm là một ý tưởng thực sự tồi tệ . Wilcoxon là một thử nghiệm lấy mẫu lại (hoặc ngẫu nhiên) cho các cấp bậc. Đó là, nó lấy thứ hạng của các giá trị và so sánh các thứ hạng này với tất cả các hoán vị có thể có của các cấp bậc (xem ví dụ, ở đây ).

Vì vậy, như bạn đã nhận ra, các mối quan hệ khá tệ khi bạn không được xếp hạng trong số họ. Tuy nhiên, việc thêm nhiễu ngẫu nhiên (jitter) vào dữ liệu của bạn sẽ biến đổi tất cả các cấp bậc, để chúng có thứ hạng ngẫu nhiên! Đó là, nó làm biến dạng dữ liệu của bạn nghiêm trọng.

Do đó: Thật sai lầm khi làm như vậy .


Thnx cho bạn trả lời, nhưng tôi nên làm gì trong trường hợp này ??
weblover

2

Bạn đã hỏi nhiều người những gì bạn nên làm bây giờ. Theo quan điểm của tôi, điều bạn nên làm bây giờ là chấp nhận rằng giá trị p thích hợp ở đây là 1.000. Các nhóm của bạn không khác nhau.


xin chào, có hợp lý để chấp nhận điều này không ?? bởi vì tất cả các nhóm và nhóm con khi được so sánh với nhau, cho cùng một giá trị p, điều đó không hợp lý bởi vì trong mỗi trường hợp tôi đang kiểm tra 1 biến, ví dụ: test ("Ph", V1), giá trị soo p không giống nhau cho tất cả . có ý kiến ​​gì không ??
weblover

Chắc chắn, nó có thể là hợp lý. Giá trị p bằng 1 có nghĩa là hai nhóm càng gần nhau càng tốt. Nếu bạn đã có gần như tất cả các mối quan hệ, điều này có thể đúng.
Aaron rời Stack Overflow

@Aaron @Web Những dữ liệu này (từ V1 đến V7) không bị ràng buộc. Phải có lỗi xảy ra ở đâu đó khi lấy giá trị p là 1. Tôi nhận được rất nhiều giá trị p là 0,036 khi so sánh chúng với thử nghiệm xếp hạng có chữ ký Wilcoxon.
whuber

OP chỉ đăng một vài hàng đầu tiên của dữ liệu; rõ ràng phải có mối quan hệ hơn nữa, mặc dù điều đó dường như không thể xảy ra khi dữ liệu đi đến sáu chữ số thập phân. Vì vậy, có, có vẻ như có thể có một lỗi trong phân tích, mặc dù không chính xác như bạn chỉ ra.
Aaron rời Stack Overflow
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.