如何测试给定的样本是否取自泊松分布?

机器算法验证 假设检验 分布 泊松分布 拟合优度
2022-02-09 11:59:46

我知道正态性检验,但如何检验“泊松”?

我有大约 1000 个非负整数的样本,我怀疑这些样本取自泊松分布,我想对此进行测试。

4个回答

首先,我的建议是您必须避免像对数据一样尝试泊松分布。我建议您必须首先提出一个理论,说明泊松分布为什么要适合特定的数据集或现象。

一旦确定了这一点,下一个问题就是分布是否均匀。这意味着数据的所有部分是否由相同的泊松分布处理,或者是否存在基于时间或空间等某些方面的变化。一旦您确信了这些方面,请尝试以下三个测试:

  1. 使用卡方变量的似然比检验
  2. 使用条件卡方统计;也称为泊松色散检验或方差检验
  3. 使用基于泊松变量的方差稳定变换的 neyman-scott 统计量

搜索这些,你会很容易在网上找到它们。

这是一系列可能有用的 R 命令。如果您发现任何错误,请随时发表评论或编辑。

set.seed(1)
x.poi<-rpois(n=200,lambda=2.5) # a vector of random variables from the Poisson distr.

hist(x.poi,main="Poisson distribution")

lambda.est <- mean(x.poi) ## estimate of parameter lambda
(tab.os<-table(x.poi)) ## table with empirical frequencies


freq.os<-vector()
for(i in 1: length(tab.os)) freq.os[i]<-tab.os[[i]]  ## vector of emprical frequencies

freq.ex<-(dpois(0:max(x.poi),lambda=lambda.est)*200) ## vector of fitted (expected) frequencies

acc <- mean(abs(freq.os-trunc(freq.ex))) ## absolute goodness of fit index acc
acc/mean(freq.os)*100 ## relative (percent) goodness of fit index

h <- hist(x.poi ,breaks=length(tab.os))
xhist <- c(min(h$breaks),h$breaks)
yhist <- c(0,h$density,0)
xfit <- min(x.poi):max(x.poi)
yfit <- dpois(xfit,lambda=lambda.est)
plot(xhist,yhist,type="s",ylim=c(0,max(yhist,yfit)), main="Poison density and histogram")
lines(xfit,yfit, col="red")

#Perform the chi-square goodness of fit test 
#In case of count data we can use goodfit() included in vcd package
library(vcd) ## loading vcd package
gf <- goodfit(x.poi,type= "poisson",method= "MinChisq")
summary(gf)
plot(gf,main="Count data vs Poisson distribution")

对于泊松分布,均值等于方差。如果您的样本均值与样本方差非常不同,则您可能没有泊松数据。这里还提到的分散测试是该概念的形式化。

如果您的方差远大于您的均值(通常是这种情况),您接下来可能需要尝试负二项分布。

我想最简单的方法就是进行卡方拟合优度测试。

事实上,这里有一个不错的java 小程序,可以做到这一点!