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:FpT1−F(T)F(x)=∫x−∞p(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ć, integrate
aby 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 dF
każ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.