Ręczne obliczanie wartości P z wartości t w teście t


49

Mam przykładowy zestaw danych z 31 wartościami. Przeprowadziłem dwustronny test t za pomocą R, aby sprawdzić, czy prawdziwa średnia jest równa 10:

t.test(x=data, mu=10, conf.level=0.95)

Wynik:

t = 11.244, df = 30, p-value = 2.786e-12
alternative hypothesis: true mean is not equal to 10 
95 percent confidence interval:
 19.18980 23.26907 
sample estimates:
mean of x 
 21.22944 

Teraz próbuję zrobić to samo ręcznie:

t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data))) 
p.value = dt(t.value, df=length(lengths-1))

Wartość t obliczona przy użyciu tej metody jest taka sama, jak wynik uzyskany za pomocą funkcji t-testu R. Okazuje się jednak, że wartość p wynosi 3,025803e-12.

Jakieś pomysły, co robię źle?

Dzięki!

EDYTOWAĆ

Oto pełny kod R, w tym mój zestaw danych:

# Raw dataset -- 32 observations
data = c(21.75, 18.0875, 18.75, 23.5, 14.125, 16.75, 11.125, 11.125, 14.875, 15.5, 20.875,
            17.125, 19.075, 25.125, 27.75, 29.825, 17.825, 28.375, 22.625, 28.75, 27, 12.825, 
            26, 32.825, 25.375, 24.825, 25.825, 15.625, 26.825, 24.625, 26.625, 19.625)

# Student t-Test
t.test(x=data, mu=10, conf.level=0.95)

# Manually calculate p-value
t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data)))
p.value = dt(t.value, df=length(data) - 1)

Odpowiedzi:


43

Użyj pti uczyń go dwustronnym.

> 2*pt(11.244, 30, lower=FALSE)
[1] 2.785806e-12

1
Myślę, że brakuje jakiegoś szczegółu: kiedy użyć lower = F? - Proszę zobaczyć moje pytanie tutaj: stats.stackexchange.com/questions/133091/…
vonjd

3
Wartość musi być dodatnia, więc jeśli używasz tego ze zmienną, która może być ujemna, zawiń abs.
Aaron - Przywróć Monikę

3
W przypadku testu dwustronnego szukasz prawdopodobieństwa, że ​​wartość jest mniejsza niż -11,244 lub większa niż +11.244. lower = F mówi R, aby obliczyć prawdopodobieństwo, że wartość będzie większa niż pierwszy parametr. W przeciwnym razie daje prawdopodobieństwo, że wartość będzie mniejsza niż pierwszy parametr. Jako taki, możesz również zrobić 2 * pt (-11,244, 30). Osobiście zwykle robię 2 * pt (-abs (q), df = n-1), ponieważ R domyślnie ma wartość niższą = T.
ashic

9

Opublikowałem to jako komentarz, ale kiedy chciałem dodać trochę więcej w edycji, stało się to zbyt długie, więc przeniosłem to tutaj.

Edycja : Twoje statystyki testowe i df są poprawne. Druga odpowiedź zwraca uwagę na problem z obliczeniem powierzchni ogona w wezwaniu do pt()i podwojeniem dla dwóch ogonów, co rozwiązuje różnicę. Niemniej jednak zostawię moją wcześniejszą dyskusję / komentarz, ponieważ zawiera bardziej ogólne uwagi na temat wartości p w skrajnych ogonach:

Możliwe, że nie robisz nic złego i nadal odczuwasz różnicę, ale jeśli opublikujesz powtarzalny przykład, możliwe będzie dalsze zbadanie, czy masz jakiś błąd (powiedzmy w df).

Te rzeczy są obliczane na podstawie przybliżeń, które mogą nie być szczególnie dokładne w skrajnym ogonie.

Jeśli te dwie rzeczy nie używają identycznych przybliżeń, mogą się nie zgadzać ściśle, ale ten brak porozumienia nie powinien mieć znaczenia (dla dokładnego obszaru ogona, który jest tak daleko, aby być znaczącą liczbą, wymagane założenia musiałyby przyjąć zdumiewające stopnie precyzja). Czy naprawdę masz dokładną normalność, dokładną niezależność, dokładnie stałą wariancję?

2)×10-123)×10-120,0001


7

Najlepszym sposobem na obliczenie go ręcznie jest:

t.value = (mean(data) - 10) / (sd(data) / sqrt(length(data))) 
p.value = 2*pt(-abs(t.value), df=length(data)-1)

1


0

Bardzo podoba mi się odpowiedź udzielona przez @Aaron wraz z abskomentarzami. Przydatnym potwierdzeniem jest uruchomienie

pt(1.96, 1000000, lower.tail = F) * 2

co daje 0.04999607.

Wykorzystujemy tutaj dobrze znaną właściwość polegającą na tym, że 95% powierzchni w rozkładzie normalnym występuje przy ~ 1,96 odchyleń standardowych, a zatem wydajność ~ 0,05 daje naszą wartość p. Użyłem 1000000, ponieważ gdy N jest ogromne, rozkład t jest prawie taki sam jak rozkład normalny. Uruchomienie tego dało mi komfort w rozwiązaniu @ Aaron.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.