Cálculo do valor p a partir de uma distribuição arbitrária

14

Espero que não seja uma pergunta boba. Digamos que eu tenha uma distribuição contínua arbitrária. Eu também tenho uma estatística e gostaria de usar essa distribuição arbitrária para obter um valor-p para essa estatística.

Percebo que no R é fácil fazer isso, desde que sua distribuição se encaixe em uma das incorporadas, como se fosse normal. Mas existe uma maneira fácil de fazer isso com qualquer distribuição, sem fazer esse tipo de suposição?

Alan H.
fonte

Respostas:

12

Se você possui uma função de distribuição cumulativa , o cálculo do valor- para a estatística dada é simplesmente . Isso é direto em R. Se você possui a função de densidade de probabilidade, por outro lado, então . Você pode encontrar essa integral analiticamente ou numericamente. Em R, será assim:FpT1F(T)F(x)=xp(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

Você pode ajustar integratepara uma melhor precisão. É claro que isso pode falhar em casos específicos, quando a integral não se comporta bem, mas deve funcionar para a maioria das funções de densidade.

É claro que você pode passar parâmetros para pF, se tiver vários valores de parâmetros para testar e não quiser redefinir a dFcada vez.

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

Obviamente, você também pode usar os métodos Monte-Carlo, conforme detalhado por @suncoolsu, este seria apenas outro método numérico para integração.

mpiktas
fonte
Eu acho que seu método é muito mais fácil do que sugeri, especialmente se não houver restrição na função que você está integrando. Eu não estou ciente da tecnologia numérica. em R.
suncoolsu
Sim, acho que isso está mais de acordo com minhas habilidades atuais. Obrigado!
Alan H.
Na verdade, não tenho certeza de seguir bem como essas funções funcionam. Os exemplos fornecem resultados para uma distribuição normal, mas onde conecto minha função de densidade de probabilidade?
Alan H.
(Eu fiz os testes, e os meus dados não parecem ser remotamente normal.)
Alan H.
@ Alan H., conecte sua função de densidade em dF. Ou seja, dFdeve retornar o valor da função de densidade em um determinado argumento.
mpiktas
9

Sim, é possível usar qualquer distribuição arbitrária para obter um valor-p para qualquer estatística . Teoricamente e praticamente você pode calcular o valor p (unilateral) por esta fórmula.

pvalue=P[T>Tobserved|H0holds]

Onde é a estatística de teste de interesse e é o valor que você calculou para os dados observados.TTobserved

Se você conhece a distribuição teórica de sob , ótimo! Caso contrário, você pode usar a simulação MCMC para gerar a partir da distribuição nula de e calcular a integral de Monte Carlo para obter o valor-p . As técnicas de integração numérica também funcionarão caso você não queira usar (pode ser) métodos Monte Carlo mais fáceis (especialmente em R; no Mathematica, a integração pode ser mais fácil, mas não tenho experiência em usá-lo)TH0T

A única suposição que você está fazendo aqui é: você conhece a distribuição nula de T (que pode não estar nos formatos padrão de gerador de números aleatórios R). É isso - desde que você saiba a distribuição nula, o valor p pode ser calculado.

suncoolsu
fonte
1
Devo observar - essa é uma das razões pelas quais os valores-p são tão populares e fáceis de serem mal interpretados. (IMHO)
suncoolsu
Ok, isso faz sentido. Eu tenho o que acredito ser uma boa estimativa da distribuição nula. Alguma dica sobre como implementar isso no R? Obrigado!
Alan H.
1
@ Alan - Você sabe como gerar valores aleatórios a partir de sua distribuição nula? Se sim, suponha que - T = c (T1, ..., TN) sejam retirados da distribuição nula - valor-p = soma (T> T_obs) / N. Se você não sabe gerar, pode precisar usar Metropolis Sampling ou Gibbs Sampling para obter T1 ... TN, mas é muito viável.
suncoolsu