T-статистика може нічого не говорити про передбачувальну здатність ознаки, і їх не слід використовувати для екранізації прогноктора з або передбачення прогнозів в прогностичну модель.
Р-значення кажуть, що помилкові функції важливі
Розглянемо наступне налаштування сценарію в Р. Створимо два вектори, перший - просто випадкових монет:5000
set.seed(154)
N <- 5000
y <- rnorm(N)
Другий вектор - спостережень, кожен випадковим чином віднесений до одного з однакових розмірів випадкових класів:5005000500
N.classes <- 500
rand.class <- factor(cut(1:N, N.classes))
Тепер ми підходимо до лінійної моделі для прогнозування y
заданого rand.classes
.
M <- lm(y ~ rand.class - 1) #(*)
Правильне значення для всіх коефіцієнтів дорівнює нулю, жоден з них не мають ніякого самий корінь сили. Не зважаючи на те, багато з них є значущими на рівні 5%
ps <- coef(summary(M))[, "Pr(>|t|)"]
hist(ps, breaks=30)
Насправді, ми повинні очікувати, що близько 5% з них будуть значущими, хоча вони не мають передбачувальної сили!
P-значення не виявляють важливих ознак
Ось приклад в іншому напрямку.
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)
Я створив два співвіднесених прогнози, кожен з яких має потужність прогнозування.
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
Значення р не вдається виявити прогнозовану силу обох змінних, оскільки кореляція впливає на те, наскільки точно модель може оцінити два окремих коефіцієнта з даних.
Конференційна статистика не існує, щоб розповісти про прогнозовану силу чи важливість змінної. Це зловживання цими вимірами, щоб використовувати їх таким чином. Існує набагато кращих варіантів для варіабельного вибору в лінійних прогнозних моделях glmnet
.
(*) Зауважте, що я залишаю тут перехоплення, тому всі порівняння - це базове значення нуля, а не середнє значення групи першого класу. Це було пропозицією @ whuber.
Оскільки це призвело до дуже цікавого обговорення в коментарях, оригінальний код був
rand.class <- factor(sample(1:N.classes, N, replace=TRUE))
і
M <- lm(y ~ rand.class)
що призвело до наступної гістограми