Trong R cách tính giá trị p cho diện tích theo ROC


12

Tôi đấu tranh để tìm cách tính giá trị p cho khu vực theo đặc tính toán tử máy thu (ROC). Tôi có một biến liên tục và kết quả xét nghiệm chẩn đoán. Tôi muốn xem AUROC có ý nghĩa thống kê hay không.

Tôi tìm thấy nhiều gói xử lý các đường cong ROC: pROC, ROCR, caTools, xác minh, Epi. Nhưng ngay cả sau nhiều giờ dành để đọc tài liệu và thử nghiệm, tôi không thể tìm thấy làm thế nào. Tôi nghĩ rằng tôi đã bỏ lỡ nó.


1
Điều gì có thể có nghĩa là cho khu vực dưới đường cong là 'đáng kể'?
gung - Phục hồi Monica

Tôi muốn nói thử nghiệm nếu giá trị AUC khác biệt về mặt thống kê so với 0,5
user32530

Đường cong ROC của bạn đến từ đâu? Có lẽ bạn muốn kiểm tra điều đó (ví dụ: có một giá trị p cho mô hình hồi quy logistic được lấy toàn bộ).
gung - Phục hồi Monica

Chà, dữ liệu của tôi giống như sau, tôi có một xét nghiệm tiêu chuẩn khiến cho việc phân nhóm có / không mắc bệnh và tôi muốn tìm giá trị giới hạn để xác định sinh học từ mẫu máu. Bên cạnh đó tôi cần khu vực dưới đường cong. Vì vậy, không, tôi không có bất kỳ mô hình hồi quy nào
user32530

Vì vậy, bạn có một số xét nghiệm được thực hiện trên một mẫu máu lấy từ bệnh nhân, cho bạn một con số; & bạn sẽ muốn sử dụng số đó để phân loại nếu bệnh nhân mắc bệnh. Hiện tại, bạn có một bộ số từ xét nghiệm này cho một nhóm bệnh nhân mà bạn biết tình trạng bệnh thực sự của họ. Là tất cả những điều đó đúng?
gung - Phục hồi Monica

Câu trả lời:


12

Trong tình huống của bạn, sẽ tốt khi vẽ đường cong ROC và tính diện tích dưới đường cong đó, nhưng điều này nên được coi là bổ sung cho phân tích chính của bạn, chứ không phải là phân tích chính. Thay vào đó, bạn muốn phù hợp với mô hình hồi quy logistic .

Mô hình hồi quy logistic sẽ đạt tiêu chuẩn với toàn bộ bài kiểm tra mô hình. (Trên thực tế, vì bạn chỉ có một biến, giá trị p đó sẽ giống với giá trị p cho biến kết quả kiểm tra của bạn.) Giá trị p đó là giá trị bạn theo sau. Mô hình sẽ cho phép bạn tính toán xác suất dự đoán của một quan sát bị bệnh. Một đặc trưng Receiver Operating nói với bạn như thế nào nhạy và độ đặc hiệu sẽ đánh đổi, nếu bạn sử dụng các ngưỡng khác nhau để chuyển đổi xác suất dự đoán vào một phân loại dự đoán. Vì xác suất dự đoán sẽ là một hàm của biến kết quả thử nghiệm của bạn, nó cũng cho bạn biết họ đánh đổi như thế nào nếu bạn sử dụng các giá trị kết quả thử nghiệm khác nhau làm ngưỡng của mình.


Nếu bạn không quen thuộc lắm với hồi quy logistic, có một số tài nguyên có sẵn trên internet (bên cạnh trang Wikipedia được liên kết ở trên):

  • Tôi thảo luận về một số điều cơ bản trong câu trả lời của tôi ở đây: Giải thích các dự đoán đơn giản cho tỷ lệ cược trong hồi quy logistic ; và (mặc dù được viết trong một ngữ cảnh khác) Tôi cung cấp tổng quan về hồi quy logistic là gì và nó liên quan đến hồi quy OLS (thông thường) như thế nào trong câu trả lời của tôi ở đây: Sự khác biệt giữa mô hình logit và probit .
  • Bạn cũng có thể đọc qua một số chủ đề được phân loại theo của chúng tôi thẻ .
  • Để biết làm thế nào để phù hợp với mô hình hồi quy logistic R, trang web trợ giúp thống kê UCLA nói chung là tuyệt vời và có một trang có liên quan ở đây .

Đó là rất giác ngộ. Cảm ơn bạn! Vì vậy, tôi phù hợp với một mô hình logistic glm binomial (logit). Sau đó, tôi so sánh nó với một mô hình null và thử nghiệm đó mang lại cho tôi giá trị p tôi đang tìm kiếm?
user32530

Vâng, điều đó nên làm điều đó cho bạn. LR cũng sẽ làm rất nhiều thứ khác có thể, nhưng đó có thể là tất cả những gì bạn cần.
gung - Phục hồi Monica

Vì vậy, mã sẽ như sau? Tóm tắt GLM.1 <- glm (Group ~ continVar, family = binomial (logit), data = chẩn đoán) (GLM.1) GLM.2 <- glm (Group ~ 1, Family = binomial (logit), data = chẩn đoán) anova (GLM.2, GLM.1, test = "Chisq")
user32530

summary(GLM.1)sẽ cung cấp cho bạn những gì bạn cần, và tôi nghĩ anova(GLM.1)sẽ kiểm tra nó với mô hình null với việc bạn thực sự phải phù hợp với nó. Nhưng cách của bạn chắc chắn sẽ làm việc, vâng.
gung - Phục hồi Monica

8

Về cơ bản, bạn muốn kiểm tra H0 = "AUC bằng 0,5".

Thực tế điều này tương đương với việc nói H0 = "Sự phân bố của các cấp bậc trong hai nhóm bằng nhau".

Thứ hai là giả thuyết khống về thử nghiệm Mann - Whitney (Wilcoxon) (xem ví dụ Gold, 1999 ).

Nói cách khác, bạn có thể sử dụng một cách an toàn bài kiểm tra Mann-Whitney-Wilcoxon để trả lời câu hỏi của bạn (xem ví dụ Mason & Graham, 2002 ). Đây chính xác là những gì gói xác minh được đề cập bởi Franck Dernoncourt.


Tại sao nó sẽ được quan tâm để chỉ ra rằng dự đoán không phải là ngẫu nhiên? Điều đó không đánh giá tính hữu dụng.
Frank Harrell

@FrankHarrell Bởi vì trong nhiều trường hợp, dự đoán của bạn có thể không tốt hơn ngẫu nhiên - trong trường hợp đó, tính hữu dụng mà bạn báo cáo thực sự là không. Chắc chắn, báo cáo một khoảng tin cậy của các biện pháp hữu ích (độ nhạy và độ đặc hiệu) sẽ hữu ích hơn. Nhưng kiểm tra sự khác biệt giữa hai nhóm là phổ biến trong tài liệu lâm sàng ít nhất (và trên thực tế có các nhóm thường không khác nhau) và tôi thấy các nhà phê bình yêu cầu cụ thể.
Calimo

Điều đó làm cho IMHO ít ý nghĩa. Tôi muốn biết làm thế nào một cái gì đó hữu ích, không phải là nó tốt hơn là chỉ lật một đồng xu.
Frank Harrell

Nếu nó không tốt hơn là lật một đồng xu, thì tại sao bạn lại trải qua tất cả công việc đó? Chỉ cần lật đồng xu.
Scott

4

Bạn có thể sử dụng roc.area () từ xác minh gói :

install.packages("verification")
library("verification")

# Data used from Mason and Graham (2002).
a<- c(1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990,
 1991, 1992, 1993, 1994, 1995)
d<- c(.928,.576, .008, .944, .832, .816, .136, .584, .032, .016, .28, .024, 0, .984, .952)

A<- data.frame(a,d)
names(A)<- c("year", "p2")

# For model without ties
roc.area(A$event, A$p2)

Nó sẽ trở lại $p.value [1] 0.0069930071


Cảm ơn bạn rất nhiều, nhưng tôi không có bất kỳ giá trị c và d nào. Tôi có một xét nghiệm tiêu chuẩn làm cho việc phân nhóm có / không có bệnh và tôi muốn tìm giá trị giới hạn để xác định sinh học từ mẫu máu. Bên cạnh đó tôi cần khu vực dưới đường cong. Vì vậy, không, tôi không có bất kỳ hồi quy. Tôi có biến nhị phân stdtest và biến liên tục
biovalue

oh ok tôi nghĩ bạn đã có d, vì tôi giả sử bạn đã có đường cong ROC.
Franck Dernoncourt

3
Nó thường là một sai lầm khi tìm kiếm một sự cắt đứt tùy ý khi mối quan hệ thực sự với xác suất bệnh là suôn sẻ. Ngoài ra, kiểm tra giả thuyết null cho rằng diện tích ROC là 0,5 là một giả thuyết khá nhàm chán. Đối với hầu hết các dự đoán, bạn quan tâm dự đoán tốt như thế nào, không phải là ngẫu nhiên.
Frank Harrell

Không có vấn đề, và cảm ơn bạn, Frank Demoncourt, có lẽ có một cách để có được d.
dùng32530

Trong lĩnh vực y tế đôi khi họ cần những điểm cắt đó để tạo ra các xét nghiệm chẩn đoán. Với những người họ muốn tìm xem đối tượng có bị bệnh hay không, không dự đoán điều gì. Đôi khi họ cần cắt giảm chi phí với quyết tâm rẻ hơn để xác định tình trạng bệnh.
user32530

0

Hai đường cong ROC có thể được so sánh trong pROC bằng cách sử dụng roc.test(). Điều này cũng tạo ra một giá trị p. Ngoài ra, việc sử dụng roc(..., auc=TRUE, ci=TRUE)sẽ cung cấp cho bạn khoảng tin cậy thấp hơn và cao hơn cùng với AUC trong đầu ra trong khi tạo đối tượng ROC, có thể hữu ích.

Sau đây đang làm việc mã ví dụ rằng các xét nghiệm xem dặm cho mỗi gallon hoặc trọng lượng của một chiếc xe là một yếu tố dự báo tốt hơn về loại truyền nó được trang bị (tự động hoặc thủ công):

library(pROC)
roc_object_1 <- roc(mtcars$am, mtcars$mpg, auc=T, ci=T) #gives AUC and CI
roc_object_2 <- roc(mtcars$am, mtcars$wt, auc=T, ci=T) #gives AUC and CI

roc.test(roc_object_1, roc_object_2) #gives p-value

Trọng lượng là một yếu tố dự báo tốt hơn đáng kể so với mức tiêu thụ nhiên liệu, dường như. Tuy nhiên, đây là so sánh hai đường cong và không phải là một đường cong so với một số như 0,5. Nhìn vào khoảng tin cậy để xem liệu nó có chứa số 0,5 cho chúng ta biết liệu nó có khác biệt đáng kể hay không, nhưng nó không tạo ra giá trị p.


Nó cũng cung cấp giá trị p?
Michael R. Chernick

Mặc dù câu hỏi được hỏi cụ thể về R, chính sách chung của chúng tôi ở đây là chúng tôi là một trang web thống kê (học máy, v.v.). Do đó, Q cần có nội dung thống kê và điều được ưu tiên là As không chỉ được cung cấp trong các điều khoản cụ thể của phần mềm. Về vấn đề đó, bạn có thể nói thêm về thử nghiệm này là gì và cách thức hoạt động, ngoài việc đề cập đến việc nó tồn tại trong R & hiển thị mã R cho nó không?
gung - Phục hồi Monica

Ok, tôi sẽ cập nhật câu trả lời của mình để phản ánh một số nền tảng thống kê
naco
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.