Если у вас есть кумулятивная функция распределения , то для вычисления значения для данной статистики будет просто . Это просто в R. Если у вас есть функция плотности вероятности с другой стороны, то . Вы можете найти этот интеграл аналитически или численно. В R это будет выглядеть так:FпT1 - F( Т)F( х ) = ∫Икс- ∞р ( т ) дT
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, это будет просто еще один численный метод для интеграции.
dF
. То естьdF
должен возвращать значение функции плотности при заданном аргументе.Да, можно использовать любое произвольное распределение, чтобы получить p-значение для любой статистики . Теоретически и практически вы можете рассчитать (одностороннее) p-значение по этой формуле.
Единственное допущение, которое вы здесь делаете, - вы знаете нулевое распределение T (которое может отсутствовать в стандартных форматах генератора случайных чисел R). Вот и все - до тех пор, пока вы знаете нулевое распределение, можно рассчитать значение p.
источник