I hope this isn't a silly question. Let's say I have some arbitrary continuous distribution. I also have a statistic, and I'd like to use this arbitrary distribution to get a p-value for this statistic.
I realize that in R it's easy to do this as long as your distribution fits one of the built-in ones, like if it's normal. But is there an easy way to do this with any given distribution, without making that kind of assumption?
Best Answer
If you have a cumulative distribution function $F$, then calculating the $p$-value for given statistic $T$ is simply $1-F(T)$. This is straightforward in R. If you have probability density function on the other hand, then $F(x)=\int_{-\infty}^xp(t)dt$. You can find this integral analytically or numerically. In R this will look like this:
You can tune
integrate
for better accuracy. This of course may fail for specific cases, when the integral does not behave well, but it should work for majority of the density functions.You can of course pass parameters into
pF
, if you have several parameter values to try-out and do not want to redefinedF
each time.Of course you can also use Monte-Carlo methods as detailed by @suncoolsu, this would be just another numerical method for integration.