Якщо у вас є функція кумулятивного розподілу , то обчислити значення p- значення для даної статистики T просто 1 - F ( T ) . Це прямо в Р. Якщо у вас є функція щільності ймовірності з іншого боку, тоді F ( x ) = ∫ x - ∞ p ( t ) d t . Цей інтеграл можна знайти аналітично чи чисельно. У R це буде виглядати приблизно так: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
Ви можете налаштувати integrate
для кращої точності. Це, звичайно, може бути невдалим для конкретних випадків, коли інтеграл не веде себе добре, але він повинен працювати для більшості функцій щільності.
Звичайно, ви можете передати параметри pF
, якщо у вас є кілька значень параметрів для випробування, і ви не хочете dF
кожен раз переосмислювати їх .
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
Звичайно, ви також можете використовувати методи Монте-Карло, як це детально описав @suncoolsu, це був би ще один чисельний метод інтеграції.