如何根据第一个分位数找到第二个直方图的频率

How to find the frequency of second histogram based on quantile of first

我有两组数据。在第一组中,我可以计算第 25 个百分位数并输出 x 值。然后我想将该 x 值带到第二个数据集并确定同一点的频率和百分位数。

例如,这里有一些基于随机变量的代码(实际数据不是随机的)

data1 = rnorm(10000, mean=8, sd=1.3)
data2 = rnorm(10000, mean=4, sd=1.0)

#plot data1 histogram with 40 bins
hist(data1, breaks=40, col="red", xlim=c(2,14), ylim=c(0,800),
     main="Gaussian deviates :  mean=8, sigma=1.3", col.main="blue")
segments(quantile(data1,0.25), 0, quantile(data1,0.25), 600, col="green", lwd=4, lty=1)

#plot data2 histogram with 40 bins
hist(data2, breaks=40, col="red", xlim=c(2,14), ylim=c(0,900),
     main="Gaussian deviates :  mean=4, sigma=1.0", col.main="blue")
print(quantile(data1,0.25))

您可以对第二组数据使用 ecdf() 函数来创建经验累积分布函数。然后您可以输入值并查看它们在经验分布中的位置。所以在这种情况下,data1 的第 25 个百分位数是 data299.93 个百分位数。我不太确定 "the frequency" 指的是什么。

set.seed(100)
data1 = rnorm(10000, mean=8, sd=1.3)
data2 = rnorm(10000, mean=4, sd=1.0)

#plot data1 histogram with 40 bins
hist(data1, breaks=40, col="red", xlim=c(2,14), ylim=c(0,800),
     main="Gaussian deviates :  mean=8, sigma=1.3", col.main="blue")
segments(quantile(data1,0.25), 0, quantile(data1,0.25), 600, col="green", lwd=4, lty=1)



q1 <- quantile(data1, 0.25)
#plot data2 histogram with 40 bins
hist(data2, breaks=40, col="red", xlim=c(2,14), ylim=c(0,900),
     main="Gaussian deviates :  mean=4, sigma=1.0", col.main="blue")


print(quantile(data1,0.25))
#>      25% 
#> 7.133474
ecdf(data2)(q1)
#> [1] 0.9993

首先,让我们从第一个分布中找到 25th 个百分位数:

q25 <- quantile(data1,0.25)

其次,让我们为第二个数据集创建一个经验累积分布函数:

dist2 <- ecdf(data2)

第三,让我们为第二个数据集创建一个近似分布函数:

df <- approxfun(density(data2))

因此,第二个分布的百分位数是:

dist2.percentile <- dist2(q25)

> dist2.percentile
[1] 0.9986

dist2.percentile 上的密度是:

dist2.density <- df(q25)
> dist2.density
[1] 0.003380966

频率约为:

dist2.frequency <- dist2.density * 10000
> dist2.frequency
[1] 33.80966

最后检查近似密度函数下的面积是否足够准确,约等于1

> sum(df(quantile(dist2)[1]:quantile(dist2)[5]))
[1] 1.014089