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")