Statistik-t hampir tidak memiliki apa-apa untuk dikatakan tentang kemampuan prediksi fitur, dan mereka tidak boleh digunakan untuk menyaring prediktor keluar, atau memungkinkan prediktor ke dalam model prediksi.
Nilai-P mengatakan fitur palsu itu penting
Pertimbangkan pengaturan skenario berikut dalam R. Mari kita membuat dua vektor, yang pertama adalah hanya koin membalik secara acak:5000
set.seed(154)
N <- 5000
y <- rnorm(N)
Vektor kedua adalah pengamatan, masing-masing secara acak ditugaskan ke salah satu dari kelas acak berukuran sama:5005000500
N.classes <- 500
rand.class <- factor(cut(1:N, N.classes))
Sekarang kita cocok dengan model linier untuk memprediksi yang y
diberikan rand.classes
.
M <- lm(y ~ rand.class - 1) #(*)
The benar nilai untuk semua koefisien adalah nol, tidak satupun dari mereka memiliki setiap daya prediksi. Tidak ada yang kurang, banyak dari mereka yang signifikan pada level 5%
ps <- coef(summary(M))[, "Pr(>|t|)"]
hist(ps, breaks=30)
Bahkan, kita harus mengharapkan sekitar 5% dari mereka menjadi signifikan, meskipun mereka tidak memiliki kekuatan prediksi!
Nilai-P gagal mendeteksi fitur-fitur penting
Berikut ini contoh ke arah lain.
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)
Saya telah membuat dua prediksi berkorelasi , masing-masing dengan kekuatan prediksi.
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
Nilai-p gagal mendeteksi kekuatan prediksi kedua variabel karena korelasi mempengaruhi seberapa tepatnya model dapat memperkirakan dua koefisien individu dari data.
Statistik inferensial tidak ada untuk memberi tahu tentang kekuatan prediksi atau pentingnya suatu variabel. Ini merupakan penyalahgunaan pengukuran ini untuk menggunakannya dengan cara itu. Ada banyak pilihan yang lebih baik tersedia untuk pemilihan variabel dalam model linier prediktif, pertimbangkan untuk menggunakannya glmnet
.
(*) Perhatikan bahwa saya akan menghentikan intersep di sini, jadi semua perbandingannya adalah baseline dari nol, bukan ke rata-rata grup dari kelas pertama. Ini adalah saran @ whuber.
Karena itu mengarah pada diskusi yang sangat menarik di komentar, kode aslinya
rand.class <- factor(sample(1:N.classes, N, replace=TRUE))
dan
M <- lm(y ~ rand.class)
yang mengarah ke histogram berikut