Czy źle jest wybierać funkcje oparte na wartości p?

12

Istnieje kilka postów na temat wybierania funkcji. Jedna z metod opisuje ważność funkcji na podstawie statystyki t. W R varImp(model)zastosowanym na modelu liniowym ze znormalizowanymi cechami stosuje się wartość bezwzględną statystyki t dla każdego parametru modelu. Zasadniczo wybieramy funkcję na podstawie jej statystyki t, co oznacza, jak precyzyjny jest współczynnik. Ale czy dokładność mojego współczynnika mówi mi coś o zdolnościach predykcyjnych funkcji?

Czy może się zdarzyć, że moja funkcja ma niską statystykę t, ale nadal poprawi (powiedzmy) dokładność modelu? Jeśli tak, to kiedy należy wykluczyć zmienne na podstawie statystyki t? Czy może to tylko punkt wyjścia do sprawdzenia zdolności predykcyjnych nieistotnych zmiennych?

Alina
źródło
3
Dla testu średniej z jednej próby statystyka t jest po prostu średnią próbki podzieloną przez szacowany błąd standardowy (odchylenie standardowe próbki podzielone przez pierwiastek kwadratowy z wielkości próby). Ta statystyka sama w sobie nie zależy od żadnej konkretnej hipotezy. Wyprowadzania wartości ap z tej statystyki nie zależy od hipotezy.
Dan Hicks,
@ DanHicks Zredagowałem swoje pytanie.
Alina,
Nie znam się dobrze na karetce, ale wygląda na to, że varImp()ma ona być funkcją informacyjną lub diagnostyczną i nie jest bezpośrednio wykorzystywana do wyboru lub eliminacji funkcji.
david25272

Odpowiedzi:

11

Statystyka t nie może mieć prawie nic do powiedzenia na temat zdolności predykcyjnej cechy, i nie należy ich używać do wykluczania predyktora lub pozwalania predyktorom na model predykcyjny.

Wartości P mówią, że fałszywe cechy są ważne

Rozważ następujący scenariusz w R. Stwórzmy dwa wektory, pierwszy to po prostu losowych rzutów monetą:5000

set.seed(154)
N <- 5000
y <- rnorm(N)

Drugi wektor to obserwacji, z których każda jest losowo przypisana do jednej z losowych klas jednakowej wielkości:5005000500

N.classes <- 500
rand.class <- factor(cut(1:N, N.classes))

Teraz dopasowujemy model liniowy do przewidzenia ydanego rand.classes.

M <- lm(y ~ rand.class - 1) #(*)

Poprawna wartość dla wszystkich współczynników wynosi zero, żaden z nich nie mają żadnej mocy predykcyjnej. Niemniej jednak wiele z nich ma znaczenie na poziomie 5%

ps <- coef(summary(M))[, "Pr(>|t|)"]
hist(ps, breaks=30)

Histogram wartości p

W rzeczywistości powinniśmy oczekiwać, że około 5% z nich będzie znaczących, nawet jeśli nie mają mocy predykcyjnej!

Wartości P nie wykrywają ważnych funkcji

Oto przykład w innym kierunku.

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)

Stworzyłem dwa skorelowane predyktory, każdy z mocą predykcyjną.

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

Wartości p nie wykrywają mocy predykcyjnej obu zmiennych, ponieważ korelacja wpływa na to, jak dokładnie model może oszacować dwa indywidualne współczynniki na podstawie danych.

Statystyki wnioskowania nie są w stanie powiedzieć o mocy predykcyjnej lub znaczeniu zmiennej. Używanie ich w ten sposób jest nadużywaniem tych pomiarów. Dostępne są znacznie lepsze opcje wyboru zmiennych w predykcyjnych modelach liniowych, rozważ użycie glmnet.

(*) Zauważ, że pomijam tutaj przecięcie, więc wszystkie porównania dotyczą linii zerowej, a nie średniej grupy z pierwszej klasy. To była sugestia @ Whubera.

Ponieważ doprowadziło to do bardzo interesującej dyskusji w komentarzach, oryginalny kod był

rand.class <- factor(sample(1:N.classes, N, replace=TRUE))

i

M <- lm(y ~ rand.class)

co doprowadziło do następującego histogramu

Przekrzywiony histogram wartości p

Matthew Drury
źródło
2
Hmm, dlaczego ten rozkład wartości p nie jest jednolity?
ameba mówi Przywróć Monikę
4
Wow, jak wybrałeś numer nasion? Wszelkie inne wyniki w prawie jednolitym ps ...
psychOle
3
Zawsze staram się używać tego samego materiału siewnego do tego rodzaju rzeczy: en.wikipedia.org/wiki/154_(album)
Matthew Drury
9
Przeprowadzasz niewłaściwe testy: porównujesz średnie z 499 grup do średnich z pierwszej grupy. Z nasionem 154 średnia dla pierwszej grupy 1,18 ... jest niezwykle wysoka (co może się zdarzyć, ponieważ wielkość grupy 5 jest tak mała), więc większość innych ma znacząco negatywne skutki. Napraw to, uruchamiając model lm(y ~ rand.class - 1). Nie zmienia to ważności wszystkich twoich uwag (+1). Aby być jeszcze bardziej przekonującym, zrównoważyć rozmiary grup:rand.class <- cut(1:N, N.classes)
whuber
1
Oczywiście: / 100% spodziewałem się, że @whuber wpadnie i powie coś całkowicie jasnego i oczywistego, że przegapiłem. Naprawię to teraz.
Matthew Drury,
2

Statystyka t zależy od wielkości efektu i wielkości próby. Może się zdarzyć, że wielkość efektu jest różna od zera, ale wielkość próbki nie jest wystarczająco duża, aby uczynić ją znaczącą.

W prostym teście dla średniej zerowej (który jest analogiczny do testowania, czy wpływ cechy jest równy zero) statystyka T wynosit=(x¯s)n

x¯s to przykładowe oszacowanie wielkości efektu, jeśli jest małe, to wartość p nie pokaże się, dopóki się duży.n

W twoim przypadku dowolna funkcja z niezerowym efektem poprawi wydajność, ale możesz nie mieć wystarczającej ilości danych, aby wartość p tej funkcji była znacząca.

Hugh
źródło
4
Nie sądzę, że to prawda, że ​​jakakolwiek funkcja z niezerowym efektem poprawi wydajność. Może dotyczy to danych treningowych, ale na pewno nie dotyczy to danych testowych .
Matthew Drury,
@MatthewDrury Czy mówisz, że brakuje nam metod wnioskowania pomiarów populacji na podstawie próbek?
Todd D
Nie, ale prawdą jest, że fałszywe funkcje mogą zakłócać twoją zdolność do robienia tego dobrze.
Matthew Drury