1

我有一个数据框,其正值范围为 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 中执行此操作,以便我可以提取估计值?

非常感谢

4

0 回答 0