【问题标题】:Testing ratio of density distributions for normality正态性密度分布的检验率
【发布时间】:2014-04-16 12:04:12
【问题描述】:

我有一个正态分布和一个均匀分布。我想计算一个比率:正态分布的密度与均匀分布的密度。然后我想测试这个比率是否正常。

ht <- runif(3000, 1, 18585056)           # Uniform distribution
hm <- rnorm(35, 10000000, 5000000)       # Normal distribution
hmd <- density(hm, from=0, to=18585056)  # Kernel density of distributions over range 
htd <- density(ht, from=0, to=18585056)
ratio <- hmd$y/htd$y                     # Ratio of kernel density values

上面的分布hmht 是我的实验数据显示的示例;我将实际使用的向量不是在 R 中随机生成的。

我知道我可以从 QQ 图的相关系数中很好地了解正态性:

qqp <- qqnorm(hm)
cor(qqp$x,qqp$y)

对于正态分布的hm,这给出了接近 1 的值。

有没有办法确定密度向量的正态性?例如hmdratio

(附加信息:hmht 正在对长度为 18585056 的基因组中的纯合和杂合 SNP 建模)

【问题讨论】:

  • 首先,R 具有用于概率密度的内置函数 - 查找 dnorm(...)dunif(...)。其次,您似乎想用pdf = dnorm/dunif 测试随机变量X。这没有意义,因为dnorm/dunif 不是密度函数(它不积分为 1)。相反,如果你想测试一个随机变量Z = X/Y,其中X ~ normalY ~ uniform,这是有意义的。那是你想要做的吗?这个问题已经解决了:Z有所谓的"slash" distribution
  • 嗨@jlhoward。我没有正确解释(将编辑)我要测试的分布来自实验数据:这里使用rnormrunif 只是为了展示它们的外观。

标签: r bioinformatics normal-distribution kernel-density


【解决方案1】:

首先,这确实是一个统计问题;您应该考虑将其发布到 stats.stackexchange.com - 您可能会得到更好的答案。

其次,对您的问题的简短回答是“测试两个密度函数的正态性比率”不是一个有意义的想法。如评论中所述,两个密度函数的比率不是密度函数。除其他外,密度函数必须在 (-Inf,+Inf) 上积分为 1,而这个比率不会(通常)。

然而,测试两个随机变量的比率分布是否正态是有意义的。如果你知道分子是正态分布的,分母是均匀分布的,那么这个比率肯定不是正态分布的,如下面斜线分布的讨论所示。

如果您不知道分子和分母的分布,但只有随机样本,则应计算随机变量的比率并检验其是否符合正态性。在您的情况下(稍作修改):

set.seed(123)
ht <- runif(3000, 1, 18585056)           
hm <- rnorm(3500, 10000000, 5000000)
Z  <- sample(hm,1000)/sample(ht,1000)   # numer. and denom. must be same length
par(mfrow=c(1,2))
# histogram of Z
hist(Z,xlim=c(-5,5), breaks=c(-Inf,seq(-5,5,0.2),Inf),freq=F, ylim=c(0,.4))
# normal Q-Q plot    
qqnorm(Z,ylim=c(-5,5))
qqline(Z,xlim=c(-5,5),lty=2,col="blue")

显然,比率分布是正态的。

斜线分布

特殊情况

X ~ N[0,1] = φ(x)       (-Inf ≤ x ≤ Inf),并且

Y ~ U[0,1] = 1           (0 ≤ x ≤ 1); 0 其他地方

Z = X/Y ~ [ φ(0) - φ(x) ]/x2

也就是说,一个随机变量形成为两个其他(独立)随机变量的比率,分子分布为 N(0,1),分母分布为 U(0,1),具有slash distribution,定义如上。我们可以在 R 代码中显示如下

set.seed(123)
X <- rnorm(10000)
Y <- runif(10000)
Z <- X/Y
dslash <- function(x) (dnorm(0)-dnorm(x))/x^2

x <- seq(-5,5,0.02)
par(mfrow=c(1,2))
hist(Z,xlim=c(-5,5), breaks=c(-Inf,seq(-5,5,0.2),Inf),freq=F, ylim=c(0,.4))
lines(x,dslash(x),xlim=c(-5,5),col="red")
lines(x,dnorm(x),xlim=c(-5,5),col="blue",lty=2)

qqnorm(Z,ylim=c(-5,5))
qqline(Z,xlim=c(-5,5),lty=2,col="blue")

条形代表Z = X/Y的直方图,红色曲线为斜线分布,蓝色曲线为N[0,1]的pdf供参考。因为红色曲线是“钟形”,所以很容易认为 Z 是正态分布的,只是方差更大。 QQ 图清楚地表明,情况并非如此。斜线分布的尾部比正态分布的预期要大得多。

【讨论】:

  • 这太棒了@jlhoward!我可以清楚地看到这是我将要处理的斜线分布。关于如何测试这个的任何想法?我可以将qqplot 与预期分布一起使用为rslash,但我不确定这将如何工作:我认为我不能使用Z 作为我的测试比率(如果错了请纠正我)。
猜你喜欢
  • 2014-04-06
  • 2012-11-08
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多