Вычисление p-значения из произвольного распределения

14

Надеюсь, это не глупый вопрос. Допустим, у меня есть произвольное непрерывное распределение. У меня также есть статистика, и я хотел бы использовать это произвольное распределение, чтобы получить p-значение для этой статистики.

Я понимаю, что в R это легко сделать, если ваш дистрибутив соответствует одному из встроенных, как будто это нормально. Но есть ли простой способ сделать это с любым конкретным дистрибутивом, не делая такого предположения?

Алан Х.
источник

Ответы:

12

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

mpiktas
источник
Я думаю, что ваш метод намного проще, чем тот, который я предложил, особенно если нет ограничений на функцию, которую вы интегрируете. Я не знаю о численных технологиях. в R.
Suncoolsu
Да, я думаю, что это больше соответствует моим нынешним способностям. Благодарность!
Алан Х.
На самом деле, я не уверен, что полностью понимаю, как работают эти функции. Примеры дают результаты для нормального распределения, но где я могу подключить мою функцию плотности вероятности?
Алан Х.
(Я провел тесты, и мои данные, кажется, не являются нормальными.)
Алан Х.
@ Алан Х., подключи свою функцию плотности к dF. То есть dFдолжен возвращать значение функции плотности при заданном аргументе.
mpiktas
9

Да, можно использовать любое произвольное распределение, чтобы получить p-значение для любой статистики . Теоретически и практически вы можете рассчитать (одностороннее) p-значение по этой формуле.

pvalue=P[T>Tobserved|H0holds]

TTobserved

TH0T

Единственное допущение, которое вы здесь делаете, - вы знаете нулевое распределение T (которое может отсутствовать в стандартных форматах генератора случайных чисел R). Вот и все - до тех пор, пока вы знаете нулевое распределение, можно рассчитать значение p.

suncoolsu
источник
1
Я должен отметить - это одна из причин, почему p-значения настолько популярны и их легко понять неправильно. (ИМХО)
suncoolsu
Хорошо, это имеет смысл. У меня есть то, что я считаю хорошей оценкой нулевого распределения. Любые советы о том, как реализовать это в R? Благодарность!
Алан Х.
1
@ Алан - Вы знаете, как генерировать случайные значения из вашего Null Distribution? Если да, предположим, что - T = c (T1, ..., TN) взяты из нулевого распределения - p-value = sum (T> T_obs) / N. Если вы не знаете, как сгенерировать, вам может понадобиться использовать Метрополис сэмплинг или Гиббс сэмплинг, чтобы получить T1 ... TN, но это очень выполнимо.
Suncoolsu