@NickCox đã trình bày một cách tốt để trực quan hóa dữ liệu của bạn. Tôi lấy nó mà bạn muốn tìm một quy tắc để quyết định khi nào nên phân loại một giá trị là condition1 so với condition2.
Trong phiên bản trước của câu hỏi của bạn, bạn tự hỏi liệu bạn có nên gọi bất kỳ giá trị nào lớn hơn giá trị trung bình của điều kiện1 là thành viên của điều kiện2 không. Đây không phải là một quy tắc tốt để sử dụng. Lưu ý rằng theo định nghĩa, phân phối nằm trên trung vị. Do đó, bạn nhất thiết sẽ phân loại sai số thành viên condition1 thực sự. Dựa trên dữ liệu của bạn, tôi tập hợp bạn cũng sẽ phân loại sai thành viên điều kiện2 thực sự của bạn. 50 %50 %18 %
Một cách để suy nghĩ về giá trị của một quy tắc như của bạn là hình thành một ma trận nhầm lẫn . Trong R, bạn có thể sử dụng ? ConfMaxMatrix trong gói caret . Dưới đây là một ví dụ sử dụng dữ liệu của bạn và quy tắc được đề xuất của bạn:
library(caret)
dat = stack(list(cond1=Cond.1, cond2=Cond.2))
pred = ifelse(dat$values>median(Cond.1), "cond2", "cond1")
confusionMatrix(pred, dat$ind)
# Confusion Matrix and Statistics
#
# Reference
# Prediction cond1 cond2
# cond1 20 7
# cond2 19 32
#
# Accuracy : 0.6667
# ...
#
# Sensitivity : 0.5128
# Specificity : 0.8205
# Pos Pred Value : 0.7407
# Neg Pred Value : 0.6275
# Prevalence : 0.5000
# Detection Rate : 0.2564
# Detection Prevalence : 0.3462
# Balanced Accuracy : 0.6667
Tôi cá là chúng ta có thể làm tốt hơn.
Một cách tiếp cận tự nhiên là sử dụng mô hình GIỎ HÀNG ( cây quyết định ), mà (khi chỉ có một biến) chỉ đơn giản là tìm thấy sự phân chia tối ưu. Trong R, bạn có thể làm điều đó với ? Ctree từ gói tiệc .
library(party)
cart.model = ctree(ind~values, dat)
windows()
plot(cart.model)
Bạn có thể thấy rằng mô hình sẽ gọi một giá trị là "condition1" nếu nó là và "condition2" nếu không (lưu ý rằng trung vị của điều là ). Đây là ma trận nhầm lẫn: ≤ 5,73.9
confusionMatrix(predict(cart.model), dat$ind)
# Confusion Matrix and Statistics
#
# Reference
# Prediction cond1 cond2
# cond1 39 15
# cond2 0 24
#
# Accuracy : 0.8077
# ...
#
# Sensitivity : 1.0000
# Specificity : 0.6154
# Pos Pred Value : 0.7222
# Neg Pred Value : 1.0000
# Prevalence : 0.5000
# Detection Rate : 0.5000
# Detection Prevalence : 0.6923
# Balanced Accuracy : 0.8077
Quy tắc này mang lại độ chính xác , thay vì . Từ cốt truyện và ma trận nhầm lẫn, bạn có thể thấy rằng các thành viên condition1 thực sự không bao giờ bị phân loại sai thành condition2. Điều này rơi ra khỏi việc tối ưu hóa tính chính xác của quy tắc và giả định rằng cả hai loại phân loại sai đều xấu như nhau; bạn có thể điều chỉnh quy trình điều chỉnh mô hình nếu điều đó không đúng. 0,80770,6667
Mặt khác, tôi sẽ cảm thấy hối hận nếu tôi không chỉ ra rằng một bộ phân loại nhất thiết phải loại bỏ rất nhiều thông tin và thường không tối ưu (trừ khi bạn thực sự cần phân loại). Bạn có thể muốn mô hình hóa dữ liệu để có thể có xác suất giá trị sẽ là thành viên của điều kiện2. Hồi quy logistic là sự lựa chọn tự nhiên ở đây. Lưu ý rằng vì condition2 của bạn trải rộng hơn nhiều so với condition1, tôi đã thêm một thuật ngữ bình phương để cho phép phù hợp với đường cong:
lr.model = glm(ind~values+I(values^2), dat, family="binomial")
lr.preds = predict(lr.model, type="response")
ord = order(dat$values)
dat = dat[ord,]
lr.preds = lr.preds[ord]
windows()
with(dat, plot(values, ifelse(ind=="cond2",1,0),
ylab="predicted probability of condition2"))
lines(dat$values, lr.preds)
Điều này rõ ràng cung cấp cho bạn nhiều hơn, và tốt hơn, thông tin. Bạn không nên bỏ đi thông tin bổ sung trong xác suất dự đoán của mình và phân chia chúng thành các phân loại, nhưng để so sánh với các quy tắc ở trên, tôi có thể chỉ cho bạn ma trận nhầm lẫn xuất phát từ mô hình hồi quy logistic của bạn:
lr.class = ifelse(lr.preds<.5, "cond1", "cond2")
confusionMatrix(lr.class, dat$ind)
# Confusion Matrix and Statistics
#
# Reference
# Prediction cond1 cond2
# cond1 36 8
# cond2 3 31
#
# Accuracy : 0.859
# ...
#
# Sensitivity : 0.9231
# Specificity : 0.7949
# Pos Pred Value : 0.8182
# Neg Pred Value : 0.9118
# Prevalence : 0.5000
# Detection Rate : 0.4615
# Detection Prevalence : 0.5641
# Balanced Accuracy : 0.8590
Độ chính xác bây giờ là , thay vì . 0,8590,8077