繁体   English   中英

如何从R glm()系数中获得泊松分布“λ”

[英]How to obtain Poisson's distribution “lambda” from R glm() coefficients

我的R脚本在下面产生glm()coeffs。 那么,泊松的lambda是多少? 应该是〜3.0,因为这就是我用来创建发行版的内容。

Call:
glm(formula = h_counts ~ ., family = poisson(link = log), data = pois_ideal_data)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-22.726  -12.726   -8.624    6.405   18.515  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept)  8.222532   0.015100  544.53   <2e-16 ***
h_mids      -0.363560   0.004393  -82.75   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for poisson family taken to be 1)

Null deviance: 11451.0  on 10  degrees of freedom
Residual deviance:  1975.5  on  9  degrees of freedom
AIC: 2059

Number of Fisher Scoring iterations: 5


random_pois = rpois(10000,3)
h=hist(random_pois, breaks = 10)
mean(random_pois) #verifying that the mean is close to 3.
h_mids = h$mids 
h_counts = h$counts  
pois_ideal_data <- data.frame(h_mids, h_counts) 
pois_ideal_model <- glm(h_counts ~ ., pois_ideal_data, family=poisson(link=log))
summary_ideal=summary(pois_ideal_model)
summary_ideal

似乎您要对汇总或合并的数据进行泊松拟合; 这不是glm所做的。 我快速寻找了使分布适合固定数据的固定方法,但找不到一个。 似乎早期版本的bda软件包可能提供了此功能,但现在不提供。

从根本上讲,您需要做的是设置一个负对数似然函数,该函数计算(# counts)*prob(count|lambda)并使用optim()将其最小化; 下面使用bbmle软件包给出的解决方案在bbmle要稍微复杂一些,但可以为您带来更多好处,例如轻松计算置信区间等。

设置数据:

set.seed(101)
random_pois <- rpois(10000,3)
tt <- table(random_pois)
dd <- data.frame(counts=unname(c(tt)),
                 val=as.numeric(names(tt)))

在这里我使用table ,而不是hist因为离散数据柱状图是挑剔的(具有整数分割点往往使事情变得扑朔迷离,因为你必须要小心右VS左封)

bbmle的泊松数据设置密度函数(要与bbmle的公式接口一起使用,第一个参数必须称为x ,并且必须具有对log参数)。

 dpoisbin <- function(x,val,lambda,log=FALSE) {
     probs <- dpois(val,lambda,log=TRUE)
     r <- sum(x*probs)
    if (log) r else exp(r)
 }

适合lambda(日志链接可帮助防止负lambda值引起的数值问题/警告):

library(bbmle)
m1 <- mle2(counts~dpoisbin(val,exp(loglambda)),
        data=dd,
        start=list(loglambda=0))
all.equal(unname(exp(coef(m1))),mean(random_pois),tol=1e-6)  ## TRUE
exp(confint(m1))
##    2.5 %   97.5 % 
## 2.972047 3.040009 

你在这里做什么???!!! 您使用了glm来拟合发行版???

好吧,这样做并非没有可能,但是可以通过以下方式完成:

set.seed(0)
x <- rpois(10000,3)
fit <- glm(x ~ 1, family = poisson())

即,我们使用仅截距回归模型拟合数据。

fit$fitted[1]
# 3.005

这与:

mean(x)
# 3.005

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM