2015-05-04 18 views
5

Tôi gặp sự cố với wilcox.test trong R. Đối tượng dữ liệu của tôi là ma trận trong đó cột đầu tiên chứa tên và tất cả các cột khác chứa phép đo biểu thức gen , là số:Kiểm tra Wilcoxon trong R - x phải là lỗi số

str(myMatrix) 
'data.frame': 2000 obs. of 143 variables: 
$ precursor    : chr "name1" "name2" "name3" "name4" ... 
$ sample1: num 1.46e-03 2.64e+02 1.46e-03 1.46e-03 1.46e-03 ... 
$ sample2: num 1.46e-03 1.91e+02 1.46e-03 1.46e-03 1.46e-03 ... 
$ sample3: num 1.46e-03 3.01e+02 1.46e-03 1.46e-03 4.96 ... 

Đối với tất cả 2000 hàng tôi muốn kiểm tra xem có sự khác biệt giữa 2 phần nhất định của ma trận hay không. Tôi cố gắng này trong 4 cách khác nhau:

wilcox.test(as.numeric(myMatrix[i,2:87],myMatrix[i,88:98]))$p.value 
#[1] 1.549484e-16 

wilcox.test(myMatrix[i,2:87],myMatrix[i,88:98])$p.value 
#Error in wilcox.test.default(myMatrix[i, 2:87], myMatrix[i, 88:98]) : 
#'x' must be numeric 

t.test(as.numeric(myMatrix[i,2:87],myMatrix[i,88:98]))$p.value 
#[1] 0.2973957 

t.test(myMatrix[i,2:87],myMatrix[i,88:98])$p.value 
#[1] 0.3098505 

Như bạn có thể thấy, chỉ khi tôi sử dụng as.numeric() trên các giá trị đã được số tôi nhận được một kết quả mà không có một thông báo lỗi cho kỳ thi này Wilcoxon, nhưng kết quả hoàn toàn khác nhau từ t.test kết quả ngay cả khi họ không nên.

Xác minh thủ công bằng cách sử dụng công cụ trực tuyến cho thấy rằng kết quả t.test sử dụng giá trị as.numeric() sai.

Bất kỳ đề xuất nào về cách tôi có thể giải quyết vấn đề này và thực hiện kiểm tra Wilcoxon chính xác? Nếu bạn cần thêm thông tin, hãy cho tôi biết.

+3

Tôi không chắc tại sao bạn gặp lỗi trong mã mà không có 'as.numeric', nhưng' as.numeric (myMatrix [i, 2: 87], myMatrix [i, 88: 98 ]) 'bỏ qua đối số thứ hai và trả về kết quả tương tự như' as.numeric (myMatrix [i, 2: 87]) '. Có vẻ như bạn thực sự muốn 'as.numeric (myMatrix [i, 2: 87]), as.numeric (myMatrix [i, 88: 98])'. – eipi10

+0

Bạn có thể chạy điều này: 'colnames (myMatrix) [mà (unlist (lapply (1: dim (myMatrix) [2], hàm (x) class (myMatrix [[x]])))! =" Số ") ] ' Để kiểm tra xem tất cả các cols đều là số. – Nightwriter

+0

Cảm ơn sự giúp đỡ của bạn! Khi sử dụng as.numeric() cho cả hai đối số, nó có vẻ hoạt động! Chạy dòng của bạn Nightwriter trả về tất cả các tên cột, ngay cả khi các giá trị bên trong được hiển thị bằng số (xem ví dụ mã đầu tiên của tôi ở trên) – stefanie

Trả lời

1

Thực ra, myMatrix [i, 2:87] vẫn là data.frame. Xem ví dụ sau.

> myMat 
    fir X1 X2 X3 X4 
1 name1 1 5 9 13 
2 name2 2 6 10 14 
3 name3 3 7 11 15 
4 name4 4 8 12 16 
> class(myMat[1, 2:4]) 
[1] "data.frame" 
> as.numeric(myMat[1, 2:4]) 
[1] 1 5 9 

Thay đổi dữ liệu thành ma trận thực sẽ giải quyết được sự cố của bạn.

> myMat_01 <- myMat[, 2:5] 
> rownames(myMat_01) <- myMat$fir 
> myMat_01 <- as.matrix(myMat_01) 
> class(myMat_01[1, 2:4]) 
[1] "integer" 
Các vấn đề liên quan