【问题标题】:How to draw plot of comparing normal and binomial distribution R?如何绘制比较正态分布和二项分布 R 的图?
【发布时间】:2019-10-09 06:57:43
【问题描述】:

我必须绘制这种类型的情节,但我不明白该怎么做。我必须绘制这些函数。正常:

library(tidyverse)
tibble(x = sort(rnorm(1e5)),
       cumulative = cumsum(abs(x)/sum(abs(x)))/2.5) %>%
  ggplot(aes(x)) + 
  geom_histogram(aes(y = ..density..), bins = 500)+
  geom_density(color = "red")+
  geom_line(aes(y = cumulative), color = "navy")+
  scale_y_continuous(sec.axis = sec_axis(~.*2.5, name = "cumulative density"))

和二项式:

library(tidyverse)
set.seed(10)
tibble(x = sort(rbinom(1e5,1e5, 0.001))) %>%
  ggplot(aes(x)) + 
  geom_histogram(aes(y = ..density..), bins = 90)+
  geom_density(color = "red")

我不明白如何在 [0,1] 范围内的一个图上比较其中两个函数。也许我必须改变我的情节。但无论如何,我不知道如何在特定范围内添加两个地块。也许有人知道怎么做?

【问题讨论】:

  • range(sort(rbinom(1e5, 1e5, 0.001))) # 61 146 不在 [0,1] 范围内。因此,我目前还不清楚您的问题。

标签: r


【解决方案1】:

我不确定你想从这种比较中得到什么。在将两张图放在一起之前,我认为您的代码可能存在一些问题:1)您的cumsum(abs(x)/sum(abs(x))) 可能不正确,我将其替换为cumsum(abs(10-x)/sum(abs(10-x)))。 其次,对于二项分布,rbinom(1e5,1e5, 0.001) 会给你数字而不是概率,我用rbinom(1e5,1e5, 0.001)/1e5 替换它。

library(tidyverse)
df1<-tibble(x = sort(rnorm(1e5)),
       cumulative = cumsum(abs(10-x)/sum(abs(10-x)))/2.5)
df2<-tibble(x1 = sort(rbinom(1e5,1e5, 0.001)/1e5)) 

  ggplot(df1, aes(x=x)) + 
  geom_histogram(aes(y = ..density..), bins = 500)+
  geom_density(color = "red")+
  geom_line(aes(y = cumulative), color = "navy")+
  scale_y_continuous(sec.axis = sec_axis(~.*2.5, name = "cumulative density")) + 
    geom_histogram(data = df2, aes(x = x1, y = ..density..), bins = 90) 

这将产生:

您可以更改bins 来调整高度。但是,我们需要小心解释两种分布之间的差异:一种是均值 = 0 和 SD = 1 的个体分布(正态分布),另一种是概率为 0.001 和样本大小为 1e5。

ggplot(df1, aes(x=x)) + 
  geom_histogram(aes(y = ..density..), fill="red", bins = 15)+
  geom_density(color = "red")+
  geom_line(aes(y = cumulative), color = "navy")+
  scale_y_continuous(sec.axis = sec_axis(~.*2.5, name = "cumulative density")) +  
  geom_histogram(data = df2, aes(x = x1, y = ..density..), color = "green", fill="green", bins = 15)

【讨论】:

  • 总的来说它看起来很不错,但如果可能的话,我们可以扩大规模吗?
  • 不确定。你只用完了两个y轴标签,没有地方再添加一个。
  • 看来我说的有点不对:) 我们可以把这条大竖线变小一点吗?如果可能的话,并缩放更多或 hist 和 plot 线?
  • 可能的。我目前不在电脑旁,但稍后会尝试。
  • 我已经修改了答案。
【解决方案2】:

您可以保存您的数据,然后再次使用 ggplot() 将带有新数据和新 x 变量的新 geom_ 添加到您的绘图中。然后,您的情节将被添加到上一个情节中。 但是,xlim(范围)似乎太小了。

丝绸

data1 <- tibble(x = sort(rnorm(1e5)),
                 cumulative = cumsum(abs(x)/sum(abs(x)))/2.5)

                set.seed(10)
data2 <-          tibble(x = sort(rbinom(1e5,1e5, 0.001))) 

ggplot(data = data1, aes(x)) + 
  geom_histogram(aes(y = ..density..), bins = 500)+
  geom_density(color = "red")+
  geom_line(aes(y = cumulative), color = "navy")+
  scale_y_continuous(sec.axis = sec_axis(~.*2.5, name = "cumulative density")) +
  geom_histogram(data = data2,aes(x = x,y = ..density..), bins = 90)+
  geom_density(color = "green") + xlim(0,1)

【讨论】:

    猜你喜欢
    • 2020-06-18
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2015-01-04
    相关资源
    最近更新 更多