我有一个数据框,其正值范围为 0 到 21(min = 0,1stQ = 0,Median = 2,Mean = 3.1,3rdQ = 4,Max = 21),如下所示:
我知道一个事实(基于我研究的科学文献)存在很大比例的负值。
由于我的实际数据被限制为正值,我怎样才能得到允许负值的分布估计?
包的 ecdf (经验分布函数)参数以ggridges
某种方式产生了我想要的,但我不明白它是如何工作的,也无法提取估计值,因为它只产生一个图:
library(tidyverse)
library(ggridges)
# Example data
a <-rep(0, 59)
b <- rep(1, 31)
c <- rep(2, 23)
d <- rep(3, 20)
e <- rep(4, 10)
f <- rep(5, 9)
g <- rep(6, 6)
h <- rep(7,6)
i <- rep(8:21, by = 1)
df <- data.frame(config1 = c(a,b,c,d,e,f,g,h,i),
config2 = c(a+2,b+2,c+2,d+2,e+2,f+2,g+2,h+2,i+2)) %>%
pivot_longer(cols= c(config1, config2) ,names_to = "config", values_to= "values")
# my distribution "config1" (pink)
p1<-df %>%
ggplot() +
aes(x = values, fill = config) +
geom_density(alpha = 0.4)
# ggridges' estimate
p2<-df %>% ggplot() +
aes(x = values, y = config,fill = 0.5 - abs(0.5 - stat(ecdf))) +
stat_density_ridges(geom = "density_ridges_gradient", calc_ecdf = TRUE) +
scale_fill_viridis_c(name = "Tail probability", direction = -1)+
scale_x_continuous(breaks = c(-5:20))
p1
p2
其中 config1 是我的实际数据集,config2 只是将 (+2) 添加到我的分布中,因此我可以将 y aes() 添加到 ggridges 函数中。
p1 是我的“截断为 0”的实际分布(粉红色)。p2/config1 是 ggridges 对我的负值高达 -2.5 的分布的估计: ggridges 分布包括负值
ggridges 是如何估计这种分布的?有没有标准的方法可以在没有包的情况下在 R 中执行此操作,以便我可以提取估计值?
非常感谢