微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为 R 中的密度分布建模负值?

如何解决如何为 R 中的密度分布建模负值?

我有一个数据框,其正值范围为 0 到 21(min = 0,1stQ = 0,Median = 2,Mean = 3.1,3rdQ = 4,Max = 21),如下所示:

density plot from my actual data

我知道一个事实(根据我研究的科学文献)存在很大比例的负值。

由于我的实际数据被限制为正值,我如何获得允许负值的分布估计值?

ggridges 包的 ecdf(经验分布函数)参数以某种方式产生了我想要的,但我不明白它是如何工作的,无法提取估计值,因为它只产生一个情节:

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 distribution including negative values

ggridges 是如何估计这种分布的?有没有在没有包的情况下在 R 中执行此操作的标准方法,以便我可以提取估计值?

非常感谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。