R 正态性密度分布的检验比率

R 正态性密度分布的检验比率,r,bioinformatics,normal-distribution,kernel-density,R,Bioinformatics,Normal Distribution,Kernel Density,我有正态分布和均匀分布。我想计算一个比率:正态分布的密度,均匀分布的密度。然后我想测试这个比率的正态性 ht <- runif(3000, 1, 18585056) # Uniform distribution hm <- rnorm(35, 10000000, 5000000) # Normal distribution hmd <- density(hm, from=0, to=18585056) # Kernel density of d

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

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
对于正态分布的
hm
,该值接近1

有没有办法确定密度向量的正态性?e、 g.
hmd
比率


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

首先,这确实是一个统计学问题;你应该考虑一下——你可能会得到一个更好的答案。

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

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

如果你不知道分子和分母的分布,但只有随机样本,你应该计算随机变量的比率并测试其正态性。在您的情况下(进行少量编辑):

set.seed(123)

首先,R具有概率密度的内置函数-查找
dnorm(…)
dunif(…)
。第二,看起来您想用
pdf=dnorm/dunif
测试一个随机变量
X
。这没有意义,因为
dnorm/dunif
不是密度函数(它不积分为1)。相反,如果您想测试一个随机变量
Z=X/Y
,其中
X~normal
Y~uniform
,这是有意义的。这就是你想做的吗?这个问题已经解决了:Z有所谓的.Hi@jlhoward。我没有正确地解释(将编辑)我想要测试的分布是来自实验数据的:这里使用
rnorm
runif
只是为了展示它们的样子。这太棒了@jlhoward!我可以清楚地看到,这是一个斜线分布,我将处理。关于如何测试这个有什么想法吗?我可以使用带有预期分布的
qqplot
作为测试,但我不确定这将如何工作:我不认为我可以使用
Z
作为我的测试比率(如果错误,请更正我)。
qqp <- qqnorm(hm)
cor(qqp$x,qqp$y)
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")
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")