Obliczanie wartości p z dowolnego rozkładu

14

Mam nadzieję, że to nie jest głupie pytanie. Powiedzmy, że mam dowolną ciągłą dystrybucję. Mam również statystyki i chciałbym użyć tego dowolnego rozkładu, aby uzyskać wartość p dla tej statystyki.

Zdaję sobie sprawę, że w R łatwo to zrobić, o ile twoja dystrybucja pasuje do jednego z wbudowanych, tak jakby to było normalne. Ale czy istnieje prosty sposób na zrobienie tego z dowolną dystrybucją, bez takiego założenia?

Alan H.
źródło

Odpowiedzi:

12

Jeśli masz funkcję rozkładu skumulowanego , to obliczenie wartości p dla danej statystyki T wynosi po prostu 1 - F ( T ) . Jest to proste w R. Jeśli natomiast masz funkcję gęstości prawdopodobieństwa , to F ( x ) = x - p ( t ) d t . Możesz znaleźć tę całkę analitycznie lub numerycznie. W R będzie to wyglądać następująco:FpT1F(T)F(x)=xp(t)dt

dF <- function(x)dnorm(x)
pF <- function(q)integrate(dF,-Inf,q)$value 

> pF(1)
[1] 0.8413448
> pnorm(1)
[1] 0.8413447

Możesz dostroić, integrateaby uzyskać większą dokładność. Może się to oczywiście nie udać w szczególnych przypadkach, gdy całka nie zachowuje się dobrze, ale powinna działać dla większości funkcji gęstości.

Możesz oczywiście przekazać parametry pF, jeśli masz kilka wartości parametrów do wypróbowania i nie chcesz za dFkażdym razem zmieniać definicji .

dF <- function(x,mean=0,sd=1)dnorm(x,mean=mean,sd=sd)
pF <- function(q,mean=0,sd=1)integrate(dF,-Inf,q,mean=mean,sd=sd)$value 

> pF(1,1,1)
[1] 0.5
> pnorm(1,1,1)
[1] 0.5

Oczywiście możesz także użyć metod Monte-Carlo, jak wyszczególniono w @suncoolsu, byłaby to tylko kolejna numeryczna metoda integracji.

mpiktas
źródło
Myślę, że twoja metoda jest o wiele łatwiejsza niż sugerowałem, szczególnie jeśli nie ma ograniczeń dla funkcji, którą integrujesz. Nie znam techniki numerycznej. w R.
suncoolsu
Tak, myślę, że jest to bardziej zgodne z moimi obecnymi umiejętnościami. Dzięki!
Alan H.
Właściwie nie jestem pewien, czy śledzę, jak działają te funkcje. W przykładach podano wyniki dla rozkładu normalnego, ale gdzie mogę podłączyć funkcję gęstości prawdopodobieństwa?
Alan H.
(Przeprowadziłem testy i wydaje mi się, że moje dane nie są wcale normalne.)
Alan H.,
@Alan H., podłącz swoją funkcję gęstości do dF. To dFpowinno zwrócić wartość funkcji gęstości przy danym argumencie.
mpiktas,
9

Tak, możliwe jest użycie dowolnego rozkładu, aby uzyskać wartość p dla dowolnej statystyki . Teoretycznie i praktycznie można obliczyć (jednostronną) wartość p według tego wzoru.

p-vzalumi=P.[T.>T.obsmirvmire|H.0holres]

T.T.obsmirvmire

T.H.0T.

Jedynym założeniem, które tu przyjmujesz, jest to, że znasz zerowy rozkład T (który może nie być w standardowych formatach generatora liczb losowych R). To wszystko - o ile znasz rozkład zerowy, wartość p można obliczyć.

suncoolsu
źródło
1
Muszę zauważyć - jest to jeden z powodów, dla których wartości p są tak popularne i łatwe do błędnego zrozumienia. (IMHO)
suncoolsu
Ok, to ma sens. Mam coś, co uważam za dobre oszacowanie rozkładu zerowego. Wszelkie wskazówki, jak zaimplementować to w języku R? Dzięki!
Alan H.,
1
@Alan - Czy wiesz, jak generować losowe wartości z Null Distribution? Jeśli tak, załóżmy, że - T = c (T1, ..., TN) są ciągnione z rozkładu zerowego - wartość p = suma (T> T_obs) / N. Jeśli nie wiesz, jak wygenerować, być może musisz użyć Metropolis Sampling lub Gibbs Sampling, aby uzyskać T1 ... TN, ale jest to bardzo możliwe.
suncoolsu,