Answers:
如果您有一个累积分布函数 ,那么对于给定的统计量T计算p值就是1 - F (T )。这在R.直截了当如果概率密度函数在另一方面,然后˚F (X )= ∫ X - ∞ p (吨)d 吨。您可以通过分析或数字方式找到该积分。在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详述的Monte-Carlo方法,这只是积分的另一种数值方法。
dF
。那dF
应该在给定的参数处返回密度函数值。
是的,可以使用任意分布来获取任何统计信息的p值。从理论上和实践上,您都可以通过此公式计算(单侧)p值。
哪里 是感兴趣的检验统计量, 是您为观察数据计算的值。
如果你知道理论上的分布 下 太好了!否则,你可以使用MCMC模拟从产生零分布的并计算蒙特卡洛积分以获得p值。如果您不想使用(可能是)更简单的蒙特卡洛方法(尤其是在R中;在Mathematica中,积分可能会更容易,但是我没有使用它的经验),那么数值积分技术也将起作用。
您在这里所做的唯一假设是-您知道T 的零分布(它可能不是标准的R随机数生成器格式)。就这样-只要您知道零分布,就可以计算p值。