我花了两个月的时间想知道这个问题是否值得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()
?
答案 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
quakeDistNB <- MASS::fitdistr(quakeSim, densfun = "negative binomial")
quakeDistPois <- MASS::fitdistr(quakeSim, densfun = "poisson")
quakeDistGaus<-MASS::fitdistr(quakeSim, densfun = "normal")
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 <- MASS::fitdistr(earthq4$count , densfun = "negative binomial")
quakeDistNB
sizeHat <- quakeDistNB$estimate[1]
sizeHat
muHat <- quakeDistNB$estimate[2]
则概率小于100:
p100 <- pnbinom(q = 100, size = sizeHat, mu = muHat)
p100
小于150的概率:
p150 <- pnbinom(q = 150, size = sizeHat, mu = muHat)
p150
100到150的概率:
p150 - p100