Вычисление 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, это будет просто еще один численный метод для интеграции.


Я думаю, что ваш метод намного проще, чем тот, который я предложил, особенно если нет ограничений на функцию, которую вы интегрируете. Я не знаю о численных технологиях. в R.
Suncoolsu

Да, я думаю, что это больше соответствует моим нынешним способностям. Благодарность!
Алан Х.

На самом деле, я не уверен, что полностью понимаю, как работают эти функции. Примеры дают результаты для нормального распределения, но где я могу подключить мою функцию плотности вероятности?
Алан Х.

(Я провел тесты, и мои данные, кажется, не являются нормальными.)
Алан Х.

@ Алан Х., подключи свою функцию плотности к dF. То есть dFдолжен возвращать значение функции плотности при заданном аргументе.
mpiktas

9

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

pvalue=P[T>Tobserved|H0holds]

TTobserved

TH0T

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


1
Я должен отметить - это одна из причин, почему p-значения настолько популярны и их легко понять неправильно. (ИМХО)
suncoolsu

Хорошо, это имеет смысл. У меня есть то, что я считаю хорошей оценкой нулевого распределения. Любые советы о том, как реализовать это в R? Благодарность!
Алан Х.

1
@ Алан - Вы знаете, как генерировать случайные значения из вашего Null Distribution? Если да, предположим, что - T = c (T1, ..., TN) взяты из нулевого распределения - p-value = sum (T> T_obs) / N. Если вы не знаете, как сгенерировать, вам может понадобиться использовать Метрополис сэмплинг или Гиббс сэмплинг, чтобы получить T1 ... TN, но это очень выполнимо.
Suncoolsu
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.