我希望这不是一个愚蠢的问题。假设我有一些任意的连续分布。我也有一个统计数据,我想使用这个任意分布来获得这个统计数据的 p 值。
我意识到在 R 中很容易做到这一点,只要你的发行版适合内置的发行版之一,就像它是正常的一样。但是,对于任何给定的分布,是否有一种简单的方法可以做到这一点,而无需做出这种假设?
我希望这不是一个愚蠢的问题。假设我有一些任意的连续分布。我也有一个统计数据,我想使用这个任意分布来获得这个统计数据的 p 值。
我意识到在 R 中很容易做到这一点,只要你的发行版适合内置的发行版之一,就像它是正常的一样。但是,对于任何给定的分布,是否有一种简单的方法可以做到这一点,而无需做出这种假设?
如果您有一个累积分布函数 ,那么计算值就是。这在 R 中很简单。另一方面,如果你有概率密度函数。您可以通过解析或数值方式找到该积分。在 R 中,这将如下所示:
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 详述的蒙特卡洛方法,这只是另一种积分的数值方法。
是的,可以使用任意分布来获得任意 statistic的 p 值。从理论上和实践上,您可以通过此公式计算(单边)p 值。
其中是感兴趣的检验统计量,是您为观察到的数据计算的值。
如果您知道在下的理论分布,那就太好了!否则,您可以使用 MCMC 模拟从的零分布生成并计算蒙特卡洛积分以获得p 值。如果您不想使用(可能)更简单的 Monte Carlo 方法(尤其是在 R 中;在 Mathematica 中集成可能更容易,但我没有使用它的经验),数值积分技术也将起作用
您在这里所做的唯一假设是——您知道 T 的零分布(可能不在标准的 R 随机数生成器格式中)。就是这样——只要你知道零分布,就可以计算出p值。