如何在R中找到负二项概率

时间:2018-05-02 08:08:40

标签: r probability-density

我花了两个月的时间想知道这个问题是否值得StackOverflow,我已经得出结论。

我在一个团队做志愿做了一年的时间来预测一些有趣的事情,几个月前它正在预测3月份全球地震数量超过5级的可能性。真的很有趣的问题。以为我对R来说相当不错,然后我像砖墙一样碰到了这个问题。这是一个计数问题,想要使用泊松分布,但它不起作用,均值和方差不相等。它过度分散了。

目标是估计以下概率:

< 100次地震 100-140级地震140-170级地震170-210
   地震210次地震

但我在这里写了一些代码:

#(load data and libaries blah blah blah)
quakes_this_month<-10
days_left=31-1
days_left
month_left<- days_left/31
month_left
earthq5<- earthq4
earthq5$mag<-earthq5$mag*month_left
mu <- mean(earthq5$mag)
sigma <- sd(earthq5$mag)
paste("mean is ",mu, " and sigma is ", sigma)
pnorm((99-quakes_this_month) , mu, sigma, lower.tail = T)
lower.bound<- 100 -quakes_this_month
upper.bound<- 140.5-quakes_this_month
(pnorm(upper.bound, mu, sigma, lower.tail = T) - pnorm(lower.bound, mu, sigma))
lower.bound<- 140.5-quakes_this_month
upper.bound<- 170.5-quakes_this_month
(pnorm(upper.bound, mu, sigma) - pnorm(lower.bound, mu, sigma))
lower.bound<- 170.5-quakes_this_month
upper.bound<- 210.5-quakes_this_month
(pnorm(upper.bound, mu, sigma) - pnorm(lower.bound, mu, sigma))
(pnorm(210.5-quakes_this_month, mu, sigma, lower.tail = F))

所以这里的想法是随着月份的进展和一些地震的发生,我可以估计达到这些极限阈值的概率。但是,这不是高斯分布,我不能使用pnorm,我应该使用pnbinom(q, size, prob, mu, lower.tail = TRUE, log.p = FALSE)但我不知道如何从计数问题中获得'size'和'prob'。这不是从罐子里拿出15个球4次。所以我正在接触这个,因为它已经困扰了我好几个星期。 如果这是关于每月的地震计数,我如何使用pnbinom()代替pnorm()

1 个答案:

答案 0 :(得分:0)

所以我找到了答案,对于其他任何人,这就是我的做法。我使用的数据来自USGS关于地震的信息。我在R中使用了许多其他库。我认为此示例仅需要MASS。

加载库和数据

library(MASS)

quakeSim <-  earthq4$count  # this was my real data

quakeSim <-  rnbinom(n = 12000, mu = 145, size =18)  # you can use this for the example

测试分布拟合的方法是检查3种可能的分布,即高斯分布,泊松分布和负二项式分布

  quakeDistNB <- MASS::fitdistr(quakeSim, densfun = "negative binomial")
    quakeDistPois <- MASS::fitdistr(quakeSim, densfun = "poisson")
    quakeDistGaus<-MASS::fitdistr(quakeSim, densfun = "normal")

比较负二项式,泊松和Guassian-较低的AIC更好,因此选择具有最低AIC的分布。

 AIC(quakeDistNB)
    AIC(quakeDistPois)
    AIC(quakeDistGaus)

使用shapiro测试快速检查Normalicy。 (如果高斯最低)

shapiro.test(earthq4$count) 

使用5%规则。但这是NB,而不是高斯,因此请忽略下面的所有CI测试

summary(earthq4)
t.test(earthq4$count ) #default 0.95

所以我的数据显示负二项分布。现在,让我们将其看成一个直方图,其中有足够多的分格来显示NB的形状。

可视化经验分布

hist(quakeSim, breaks=80)

拟合一个负二项式模型,并从模型“ quakeDistNB”的输出中获得两个临界值sizeHat和muHat

这部分真的让我发疯,直到有朋友向我展示。

quakeDistNB <- MASS::fitdistr(earthq4$count , densfun = "negative binomial")
quakeDistNB
sizeHat <- quakeDistNB$estimate[1]
sizeHat
muHat <- quakeDistNB$estimate[2]

现在,我的问题是预测少于100次地震以及在150和100次地震之间大于或等于5级的概率。

则概率小于100:

p100 <- pnbinom(q = 100, size = sizeHat, mu = muHat)
p100

小于150的概率:

p150 <- pnbinom(q = 150, size = sizeHat, mu = muHat)
p150

100到150的概率:

p150 - p100