【问题标题】:How to create a Q-Q plot with Poisson as theoretical distribution如何创建以泊松为理论分布的 QQ 图
【发布时间】:2016-10-17 20:59:11
【问题描述】:

我需要创建一个 QQ 图来检查我观察到的数据是否符合泊松分布。

这是我的data.frame:

df = read.table(text = 'Var1 Freq
 1975   10
 1976   12
 1977    9
 1978   14
 1979   14
 1980   11
 1981    8
 1982    7
 1983   10
 1984    8
 1985   12
 1986    9
 1987   10
 1988    9
 1989   10
 1990    9
 1991   11
 1992   12
 1993    9
 1994   10', header = TRUE)

df$Freq 列是我感兴趣的列,因为观察结果代表每年的事件数。

我知道我必须使用 qqplot 函数和 qpois 函数来创建理论分位数,但是如何?

【问题讨论】:

  • 您的数据不是泊松分布的。是什么让你认为它是?
  • 谢谢。我只需要对你所说的进行统计确认:)
  • 我不明白你在做什么。您的数据显然是非泊松的。看例如在 lambda=1 x <- seq(1975, 1994); plot(x, ppois(x, 1)); 或 PMF plot(x, rpois(x, 1)) 的 CDF。
  • 我感觉可能对Poisson distributionQ-Q plots 的用途或两者都有误解。
  • @MauritsEvers,我很好奇你为什么认为这里存在误解。对我来说,使用 QQ 图来可视化经验分布与理论分布的比较似乎是合理的。

标签: r plot quantile poisson


【解决方案1】:

此外,fitdistrplus 包可以用更少的代码完成此操作。比较经验和理论密度以及 CDF。

library('fitdistrplus')
plot(fitdist(df$Freq,"pois"))

您可以获取您的 lambda 等,并检查其他发行版。不如ggplot 方法灵活,但适合快速检查。

【讨论】:

    【解决方案2】:

    ggplot2 有一个很好的界面来执行此操作。这是一个带有红色协议步骤线的 QQ 图。 QQ 图是使用 stat_qq 并更改 distribution 参数制作的。您需要在 dparams 参数中提供 lambda

    ggplot(data = df,
           mapping = aes(sample = Freq)) + 
      stat_qq(distribution = stats::qpois,
              dparams = list(lambda = mean(df$Freq))) + 
      geom_step(data = data.frame(x = 6:16,
                                  Freq = 6:16),
                mapping = aes(x = x,
                              y = Freq),
                colour = "red",
                alpha = 0.5) 
    

    【讨论】:

    • 感谢@Benjamin!我刚刚发布了我自己的答案..如果你可以看看并告诉我你是否发现任何错误。
    【解决方案3】:

    这是我可能的答案:

    #calculate Frequencies
    tbl = as.data.frame(table(df$Freq))
    
    #create theoretical poisson distr
    dist = dpois(1:7, lambda = mean(tbl$Freq))
    dist = dist * 20              #make values in the same scale as tbl$Freq (20 = sum(tbl$Freq))
    dist = as.data.frame(dist)
    dist$Var1 = tbl$Var1
    
    #qqplot
    qqplot(dist$dist, tbl$Freq, xlab = 'Theoretical Quantiles', ylab = 'Empirical Quantiles',
           main = 'Q-Q plot Poisson', xlim = c(0,5), ylim = c(0,5))
    abline(0,1) #create 45° line
    

    如果您发现任何错误,请告诉我。谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多