计数样本似乎不是泊松分布,需要进行完整性检查

机器算法验证 泊松回归
2022-03-13 13:54:35

我有一个练习,我必须对一些数据使用泊松单向分类/回归。我拥有的数据是一组 120 个样本,这些样本按以下标签 A、B、C、D、E 和 F 分组。对于每组,有 20 个样本(或 20 个重复)具有计数值。现在这一切都很好,据我所知,它非常适合假设它可能适合泊松分布。

但是,据我了解,它是遵循的随机变量的属性之一, 然后它遵循 但是当我计算均值(预期)和方差时根据分组的数据:然后我得到Y

YPo(λ)
E(Y)=V(Y)

|          |         A |         B |         C |         D |          E |         F |
|----------+-----------+-----------+-----------+-----------+------------+-----------|
|----------+-----------+-----------+-----------+-----------+------------+-----------|
| Mean     |      4.90 |      9.45 |      8.65 |      1.45 |      18.35 |      0.80 |
| Variance | 9.8842105 | 6.4710526 | 7.3973684 | 1.3131579 | 15.6078947 | 0.5894737 |
|----------+-----------+-----------+-----------+-----------+------------+-----------|

因此,从我可以告诉的内容来看,只是为了展示我是如何使用 R 计算的:

E(Y)V(Y)

( Means <- tapply(D$NumberPGrains, D$Era, mean) )
( Variances <- tapply(D$NumberPGrains, D$Era, var) )

这意味着,据我了解,数据不是泊松分布的。所以我的问题是:我错了,这仍然是泊松分布吗,我错过了什么吗?

为了澄清起见,该练习从字面上说明遵循泊松单向分类(练习的标题:“问题 3 -泊松单向分类模型”),但现在我很难看到这样做的目的。

3个回答

真正的泊松分布的均值将完全等于其方差。对于采样然而,泊松分布会有一些偏差 - 只有 20 个样本,您不太可能看到样本的均值和方差完全相等。在大多数情况下,您似乎在均值和方差之间具有很强的相关性,这很好。您还可以找到参数估计周围的置信区间,以采用假设检验方法来确定您的均值和方差估计是否真的在统计上彼此不同。对于非常大的样本量,如果数据确实是泊松分布,您将有非常好的估计值,应该非常接近相等,但是对于较小的样本量,您的估计值不会那么好,因此平均值之间存在一些数值差异和方差是预期的。

+1核王的回答

稍微模拟一下以了解这种情况下所涉及的随机性总是好的。这是我一起破解的一些小东西,可能很有启发性。

我会将您观察到的方法作为您的基础数据生成过程的真实方法。然后我将假设数据实际上是泊松分布的,并使用这些假设生成模拟。然后我将计算此类模拟的方差。我会这样做,比如说,五十次,所以我最终得到了五十个不同的方差,我们可能在泊松分布的零假设下观察到你观察到的平均值。最后,我将绘制这些方差(如点可能,水平抖动),以及您实际观察到的方差(如水平红线):

模拟和观察到的方差

在面板 BF 中,观察到的方差几乎位于模拟方差点云的中间,因此它们似乎与泊松假设非常一致。在面板 A 中,您观察到的方差远高于我们观察到的所有方差,因此这似乎与泊松假设不一致(我们可以称其为非正式假设检验,并说我们得到了,尽管这并不能说明均值的不确定性。)p=150=0.02

代码:

n_sims <- 50
n_sample <- 20
means <- c(4.90, 9.45, 8.65, 1.45, 18.35, 0.80)
vars_obs <- c(9.8842105, 6.4710526, 7.3973684, 1.3131579, 15.6078947, 0.5894737)

vars <- matrix(NA,nrow=n_sims,ncol=length(means),
    dimnames=list(NULL,LETTERS[seq_along(means)]))
for ( ii in 1:n_sims ) {
    set.seed(ii)    # for reproducibility
    vars[ii,] <- sapply(means,function(mm)var(rpois(n_sample,mm)))
}

opar <- par(mfrow=c(2,3))
    for ( jj in seq_along(means) ) {
        plot(rnorm(n_sims),vars[,jj],pch=19,main=colnames(vars)[jj],
            ylim=range(c(vars[,jj],vars_obs[jj])),xaxt="n",las=1,ylab="",xlab="")
        abline(h=vars_obs[jj],col="red",lwd=2)
    }
par(opar)

通过 vcd 包中包含的 goodfit() 函数,可以使用卡方拟合优度测试正式测试数据对理论泊松分布的拟合。

  • 空假设显着性检验:如果p < .05 或
    我们可能提前选择的任何阈值,我们将拒绝
    x 来自泊松过程的假设。
  • 更灵活的方法:我们只是根据p
    值 的大小来评估针对 null的证据程度,其中较小的p = 更强的证据。

    require(vcd)
    
    x=0:5
    
    freqx=c(7,12,7,3,1,1) # Counts at each level of x
    gf = goodfit (x, type= "poisson", method= "ML")
    

总结(gf)

    Goodness-of-fit test for poisson distribution

                      X^2 Likelihood Ratio = 1.91, df = 4, P(> X^2) = 0.75


plot (gf, main= "x vs Poisson distribution")

在此处输入图像描述

在诸如来自 vcd 的这些图中,提升到 x 轴上方的条形反映了负残差(出现次数太少而无法拟合理论分布);下方延伸的条形,正残差(太多)。这可能看起来不太直观,并且无法以某些通常的方式修改绘图(文本大小相对于条形大小等),因此以下方法可能更有帮助。

require(fitdistrplus)
poisson = fitdist(x, 'pois', method = 'mle')
print(poisson)  # Identify the best value of lambda (which indicates both mean and variance) to insert below
dist = dpois(0:5, lambda = 2.5) * sum(freqx) # assign lambda from the fit above
df = as.data.frame(dist) 
windows()
# Then we plot first the observed distribution, as vertical lines, and then the theoretical distribution as the curve
plot(x, freqx,  type='h', lwd=2, main = 'Curve = Fitted Poisson Values',
  cex.axis=1.2, cex.lab=1.2)
lines(x, df$dist, col = 'red', lwd=3)

在此处输入图像描述