根据任意分布计算p值


14

我希望这不是一个愚蠢的问题。假设我有一些任意的连续分布。我也有一个统计信息,我想使用此任意分布来获取此统计信息的p值。

我意识到,只要您的发行版适合内置发行版之一,就可以很容易地在R中执行此操作,就像正常情况一样。但是,是否有一种简单的方法可以对任何给定的分布执行此操作,而无需进行这种假设?

Answers:


12

如果您有一个累积分布函数 ,那么对于给定的统计量T计算p值就是1 - F T 。这在R.直截了当如果概率密度函数在另一方面,然后˚F X = X - p d 。您可以通过分析或数字方式找到该积分。在R中,它将如下所示:FpŤ1FŤ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

您可以调整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方法,这只是积分的另一种数值方法。


我认为您的方法比我建议的方法容易得多,特别是如果对要集成的功能没有限制的话。我不知道数字技术。在R.
suncoolsu 2011年

是的,我认为这更符合我目前的能力。谢谢!
艾伦·H。

实际上,我不确定我是否完全遵循这些功能的工作方式。这些示例给出了正态分布的结果,但是我应该在哪里插入概率密度函数呢?
艾伦·H。

(我已经做过测试,而且我的数据似乎不太正常。)
艾伦·H。

@Alan H.,将您的密度函数插入dF。那dF应该在给定的参数处返回密度函数值。
mpiktas 2011年

9

是的,可以使用任意分布来获取任何统计信息的p值。从理论上和实践上,您都可以通过此公式计算(单侧)p值。

p-v一种üË=P[Ť>ŤØbsË[RvËd|H0HØds]

哪里 Ť 是感兴趣的检验统计量, ŤØbsË[RvËd 是您为观察数据计算的值。

如果你知道理论上的分布 ŤH0太好了!否则,你可以使用MCMC模拟从产生零分布Ť并计算蒙特卡洛积分以获得p值。如果您不想使用(可能是)更简单的蒙特卡洛方法(尤其是在R中;在Mathematica中,积分可能会更容易,但是我没有使用它的经验),那么数值积分技术也将起作用。

您在这里所做的唯一假设是-您知道T 的零分布(它可能不是标准的R随机数生成器格式)。就这样-只要您知道零分布,就可以计算p值。


1
我必须指出-这是p值如此受欢迎且容易被误解的原因之一。(恕我直言)
suncoolsu 2011年

好的,这很有道理。我确实认为可以很好地估计零分布。关于如何在R中实现这一点的任何提示?谢谢!
艾伦·H。

1
@Alan-您知道如何从Null分布中生成随机值吗?如果是,则假定-T = c(T1,...,TN)从零分布中提取-p值= sum(T> T_obs)/ N。如果您不知道如何生成,可能需要使用Metropolis Sampling或Gibbs Sampling来获取T1 ... TN,但这是非常可行的。
suncoolsu 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.