Thống kê t có thể không có gì để nói về khả năng dự đoán của một tính năng và chúng không nên được sử dụng để sàng lọc dự đoán ra hoặc cho phép các dự đoán thành mô hình dự đoán.
Giá trị P cho biết các tính năng giả là quan trọng
Hãy xem xét thiết lập kịch bản sau đây trong R. Hãy tạo hai vectơ, đầu tiên chỉ đơn giản là lần lật đồng xu ngẫu nhiên:5000
set.seed(154)
N <- 5000
y <- rnorm(N)
Vectơ thứ hai là quan sát, mỗi quan sát được gán ngẫu nhiên cho một trong lớp ngẫu nhiên có kích thước bằng nhau:5005000500
N.classes <- 500
rand.class <- factor(cut(1:N, N.classes))
Bây giờ chúng tôi phù hợp với một mô hình tuyến tính để dự đoán y
đưa ra rand.classes
.
M <- lm(y ~ rand.class - 1) #(*)
Các đúng giá trị cho tất cả các hệ số là số không, ai trong số họ có bất kỳ sức mạnh tiên đoán. Không hơn không kém, nhiều trong số chúng có ý nghĩa ở mức 5%
ps <- coef(summary(M))[, "Pr(>|t|)"]
hist(ps, breaks=30)
Trên thực tế, chúng ta nên kỳ vọng khoảng 5% trong số chúng là đáng kể, mặc dù chúng không có sức mạnh dự đoán!
Giá trị P không phát hiện được các tính năng quan trọng
Đây là một ví dụ theo hướng khác.
set.seed(154)
N <- 100
x1 <- runif(N)
x2 <- x1 + rnorm(N, sd = 0.05)
y <- x1 + x2 + rnorm(N)
M <- lm(y ~ x1 + x2)
summary(M)
Tôi đã tạo ra hai yếu tố dự đoán tương quan , mỗi yếu tố có sức mạnh dự đoán.
M <- lm(y ~ x1 + x2)
summary(M)
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.1271 0.2092 0.608 0.545
x1 0.8369 2.0954 0.399 0.690
x2 0.9216 2.0097 0.459 0.648
Các giá trị p không phát hiện được khả năng dự đoán của cả hai biến vì mối tương quan ảnh hưởng đến mức độ chính xác của mô hình có thể ước tính hai hệ số riêng lẻ từ dữ liệu.
Số liệu thống kê suy luận không có để nói về sức mạnh dự đoán hoặc tầm quan trọng của một biến. Đó là lạm dụng các phép đo này để sử dụng chúng theo cách đó. Có nhiều tùy chọn tốt hơn có sẵn để lựa chọn biến trong các mô hình tuyến tính dự đoán, xem xét sử dụng glmnet
.
(*) Lưu ý rằng tôi đang bỏ qua một cuộc đánh chặn ở đây, vì vậy tất cả các so sánh là về đường cơ sở của số 0, không phải là ý nghĩa nhóm của lớp đầu tiên. Đây là đề xuất của @ whuber.
Vì nó dẫn đến một cuộc thảo luận rất thú vị trong các bình luận, mã ban đầu là
rand.class <- factor(sample(1:N.classes, N, replace=TRUE))
và
M <- lm(y ~ rand.class)
dẫn đến biểu đồ sau