Negative binomial and Poisson distributions

It is known that Poisson distribution is a special case of Negative binomial distribution. But how to parametrize NB to make it similar to Poisson in R ?

It is simple: rnbinom(n, mu=m, size=+Inf) is similar to rpois(n, lambda=m).

Try this to be sure !

layout(mat = 1:2)
x1 <- rnbinom(10000, mu=20, size =+Inf)
hist(x1, breaks=seq(from=0, to=50, by=2), main="Negative binomial with size=+Inf")
y <- rpois(10000, lambda=20)
hist(y, breaks=seq(from=0, to=50, by=2), main="Poisson")



Or this:

> dnbinom(x = 20, mu=20, size=+Inf)
[1] 0.08883532
> dpois(x=20, lambda=20)
[1] 0.08883532

Effect of size parameter, remember that size=+Inf is identical to Poisson distribution:

layout(mat = matrix(1:3, nrow= 1, byrow = TRUE))

x2 <- rnbinom(10000, mu=20, size =2)
hist(x2, breaks=seq(from=0, to=150, by=2), main="Negative binomial with size=2")

x2 <- rnbinom(10000, mu=20, size =10)
hist(x2, breaks=seq(from=0, to=150, by=2), main="Negative binomial with size=10")

x2 <- rnbinom(10000, mu=20, size =+Inf)
hist(x2, breaks=seq(from=0, to=150, by=2), main="Negative binomial with size=+Inf")


The better flexibility of the negative binomial distribution to fit counts can be seen also in my package phenology.

> library("phenology")

> gr <- add_phenology(add=Gratiot, previous = NULL, month_ref = 1, format="%d/%m/%Y", name="Cayenne2001")
Cayenne2001
Reference:  2001-01-01

> # fit the data using negative binomial distribution

> layout(mat = matrix(1:2, nrow= 1, byrow = TRUE))

> pfixed <- c(Flat=0)
> parg <- par_init(data=gr, parametersfixed = pfixed)
> parg3 <- MinBMinE_to_Min(parg)

> f <- fit_phenology(data=gr, parametersfit = parg3, parametersfixed = pfixed, 
+                    trace=0, silent=TRUE)
> outf <- plot(f, main="Negative binomial")

> # fit the data using Poisson distribution

> pfixed <- c(Flat=0, Theta=+Inf)
> parg <- par_init(data=gr, parametersfixed = pfixed)
> parg3 <- MinBMinE_to_Min(parg)

> f1 <- fit_phenology(data=gr, parametersfit = parg3, parametersfixed = pfixed, 
+                     trace=0, silent=TRUE)
> outf1 <- plot(f1, main="Poisson")

> # Compare both models
> compare_AIC(Negative.binomial=f, Poisson=f1)
[1] "The lowest AIC (1350.896) is for series Negative.binomial with Akaike weight=1.000"
                       AIC DeltaAIC Akaike_weight
Negative.binomial 1350.896   0.0000  1.000000e+00
Poisson           1741.075 390.1792  1.877852e-85

> # Compare the percentage of observations out of +/- 2 SD
> print("Proportion of observations out of +/- 2 SD for negative binomial distribution")
[1] "Proportion of observations out of +/- 2 SD for negative binomial distribution"
> sum((outf[[1]]$values[, "Obs"] > outf[[1]]$values[, "Theor+2SD"]) | (outf[[1]]$values[, "Obs"] < outf[[1]]$values[, "Theor-2SD"]), na.rm=TRUE) / 
+ sum(!is.na(outf[[1]]$values[, "Obs"]))
[1] 0.04383562

> print("Proportion of observations out of +/- 2 SD for Poisson distribution")
[1] "Proportion of observations out of +/- 2 SD for Poisson distribution"
> sum((outf1[[1]]$values[, "Obs"] > outf1[[1]]$values[, "Theor+2SD"]) | (outf1[[1]]$values[, "Obs"] < outf1[[1]]$values[, "Theor-2SD"]), na.rm=TRUE) / 
+   sum(!is.na(outf1[[1]]$values[, "Obs"]))
[1] 0.2082192


Commentaires

Posts les plus consultés de ce blog

Standard error from Hessian Matrix... what can be done when problem occurs

stepAIC from package MASS with AICc

Install treemix in ubuntu 20.04