如何知道数据是否遵循R中的泊松分布?


25

我是一名本科生,并且为我的概率课程设计了一个项目。基本上,我有一个数据集,介绍了影响了我国多年的飓风。

在我的概率书((概率与统计数为R)中,有一个(不完整的)示例,说明如何检查数据是否遵循泊松分布,他们开始尝试证明遵循了这三个条件: 120(标准)第122-123页示例)

1-非重叠间隔中的结果数是独立的。换句话说,时间间隔(0,t]中的结果数与时间间隔(t,t + h],h> 0的结果数无关

2-在足够短的间隔内出现两个或更多结果的可能性实际上为零。换句话说,如果h足够小,则与在相同时间间隔中获得一个或零个结果的概率相比,在时间间隔(t,t + h]中获得两个或多个结果的概率可以忽略不计。

3-在足够短的间隔或较小区域中恰好一个结果的概率与间隔或区域的长度成正比。换句话说,在长度为h的区间中一个结果的概率为lambda * h。

但是标准3被“作为练习”。

A-有人可以告诉我是否有更“简便”的方法来查看我的数据集是否遵循泊松分布吗?

B-有人可以用某种示例向我解释准则1和3(如果使用R的话,太棒了)?

谢谢!

注意:很抱歉,冗长的帖子。另外,我必须转换数据,以便有一个像这样的表:

  number of hurricanes       | 0 | 1 | 2  etc.
  -----------------------------------------
  total years that have      |   |   |
  that number of hurricanes  |   |   |

本书中的标准适用于间隔数据;如果您有飓风发生的日期,这将很有用...此外,这些条件适用于恒定速率的 Poisson过程,显然(或我希望如此)不是飓风的情况。要检查您的计数数据是否遵循泊松分布,第一种基本方法是卡方检验。
猫王

Answers:


33

分布与泊松分布略有不同的方式有无数种。你不能确定的一组数据从泊松分布绘制。您可以做的就是寻找与Poisson应该看到的不一致的地方,但是缺少明显的不一致并不能使它成为Poisson。

但是,您在此处通过检查这三个条件所讨论的不是通过统计手段(即通过查看数据)来检查数据是否来自泊松分布,而是通过评估数据生成过程是否满足泊松过程的条件;如果条件全部成立或几乎成立(这是对数据生成过程的考虑),则可以从泊松过程中获得或非常接近泊松过程的内容,而这又是从接近泊松过程中获取数据的一种方式。泊松分布。

但是条件并不能以多种方式保持……最远的是第3位。在此基础上,没有特别的理由来主张泊松过程,尽管违规情况可能并不那么糟糕,以至于得出的数据已经很遥远了。来自泊松。

因此,我们回到了检查数据本身而来的统计论点。数据如何显示分布是泊松而不是类似的东西?

如开头所述,您可以做的是检查数据是否与基础分布(即泊松)明显不一致,但这并不能告诉您它们是从泊松中提取的(您已经可以确定它们是不)。

您可以通过拟合优度检验来执行此检查。

提到的卡方就是这样一种,但我本人不建议针对这种情况进行卡方检验**;它具有低功率,可以防止出现有趣的偏差。如果您的目标是拥有良好的力量,那您就不会那样做(如果您不关心力量,为什么还要测试?)。它的主要价值在于简单性,并且具有教学价值。除此之外,作为拟合优度测试,它没有竞争力。

**在以后的编辑中添加:既然很显然这是家庭作业,那么期望您进行卡方检验以检查数据与Poisson不一致的机会就增加了很多。参见我的拟合度卡方检验示例,该模型在第一个泊松图下完成


人们经常出于错误的原因进行这些测试(例如,因为他们想说“因此,可以对那些假设数据是泊松的数据进行其他统计处理是可以的”)。真正的问题是“这有多严重?” ……拟合度测试的优点对这个问题并没有太大帮助。通常,该问题的答案充其量是与样本量无关(/几乎与样本量无关)的-在某些情况下,其结果往往随样本量而消失……而拟合优度检验对小样本(违反假设的风险通常最大)。

如果必须测试泊松分布,则有一些合理的选择。一种方法是基于AD统计量,但在空值下使用模拟分布(类似于离散分布的双重问题,必须估计参数),以执行类似于Anderson-Darling检验的操作。

一个更简单的选择可能是拟合优度的平滑测试-这些测试是一组针对单个分布而设计的测试集合,这些测试通过使用相对于零概率函数正交的多项式族对数据进行建模来实现。通过测试基数以上的多项式的系数是否不同于零来测试低阶(即有趣的)替代项,并且这些项通常可以通过省略测试中的最低阶项来处理参数估计。泊松有这样的考验。如果您需要,我可以参考一下。

您还可以在泊松图中使用相关性(或更像是Shapiro-Francia检验,也许是),例如 vs(参见Hoaglin,1980年)-作为检验统计量。log x k+ log k kñ1个-[R2日志Xķ+日志ķķ

这是在R中完成的计算(和绘图)的示例:

y=rpois(100,5)
n=length(y)
(x=table(y))
y
 0  1  2  3  4  5  6  7  8  9 10 
 1  2  7 15 19 25 14  7  5  1  4 

k=as.numeric(names(x))
plot(k,log(x)+lfactorial(k))

在此处输入图片说明

我建议将以下统计信息用于Poisson的拟合优度检验:

n*(1-cor(k,log(x)+lfactorial(k))^2)
[1] 1.0599

当然,要计算p值,您还需要模拟null下的测试统计量的分布(而且我还没有讨论如何处理值范围内的零计数)。这应该产生相当强大的测试。还有许多其他替代测试。

这是一个从几何分布(p = .3)对大小为50的样本进行泊松绘图的示例:

在此处输入图片说明

如您所见,它显示了清晰的“扭结”,表示非线性


泊松图的参考为:

戴维·霍格林(David C. Hoaglin)(1980年),
“ 泊松情节”,
《美国统计学家》
第一卷。34,No.3(Aug.,),pp.146-149

Hoaglin,D.和J. Tukey(1985),
“ 9。检查离散分布的形状”,
探索数据表,趋势和形状
(Hoaglin,Mosteller和Tukey编辑)
John Wiley&Sons

第二个参考包含对小数量图的调整;您可能希望将其合并(但是我手头没有参考)。


进行卡方拟合优度检验的示例:

除了执行卡方拟合优度外,通常还希望在很多课程中都采用这种方法(尽管不是我会这样做的方法):

1:从您的数据开始,(我将使用上面的“ y”中随机生成的数据生成计数表:

(x=table(y))
y
 0  1  2  3  4  5  6  7  8  9 10 
 1  2  7 15 19 25 14  7  5  1  4 

2:假设通过ML拟合的泊松,计算每个像元中的期望值:

 (expec=dpois(0:10,lambda=mean(y))*length(y))
 [1]  0.7907054  3.8270142  9.2613743 14.9416838 18.0794374 17.5008954 14.1173890  9.7611661
 [9]  5.9055055  3.1758496  1.5371112

3:请注意,最终类别很小;这会使卡方分布不如近似于检验统计量的分布那样好(一个通用规则是,您希望期望值至少为5,尽管许多论文都表明该规则不必要地受到限制;我将其接受封闭,但一般方法可以适应更严格的规则)。折叠相邻的类别,以使最小期望值至少不会太远低于5(一个类别的预期计数在10多个类别中接近1并不是太糟糕,两个类别的界限很近)。另请注意,我们尚未考虑超过“ 10”的可能性,因此我们还需要将其合并:

expec[1]=sum(expec[1:2])
expec[2:8]=expec[3:9]
expec[9]=length(y)-sum(expec[1:8])
expec=expec[1:9]
expec
sum(expec) # now adds to n

4:类似地,对观察到的崩溃类别:

(obs=table(y))
obs[1]=sum(obs[1:2])
obs[2:8]=obs[3:9]
obs[9]=sum(obs[10:11])
obs=obs[1:9]

Ø一世-Ë一世2/Ë一世

print(cbind(obs,expec,PearsonRes=(obs-expec)/sqrt(expec),ContribToChisq=(obs-expec)^2/expec),d=4)
  obs  expec PearsonRes ContribToChisq
0   3  4.618   -0.75282      0.5667335
1   7  9.261   -0.74308      0.5521657
2  15 14.942    0.01509      0.0002276
3  19 18.079    0.21650      0.0468729
4  25 17.501    1.79258      3.2133538
5  14 14.117   -0.03124      0.0009761
6   7  9.761   -0.88377      0.7810581
7   5  5.906   -0.37262      0.1388434
8   5  5.815   -0.33791      0.1141816

X2=一世Ë一世-Ø一世2/Ë一世

(chisq = sum((obs-expec)^2/expec))
[1] 5.414413
(df = length(obs)-1-1) # lose an additional df for parameter estimate
[1] 7
(pvalue=pchisq(chisq,df))
[1] 0.3904736

诊断和p值在这里都显示出不失适合度...这是我们期望的,因为我们实际生成的数据是泊松。


编辑:这是Rick Wicklin博客的链接,该博客讨论了Poissonness图,并讨论了SAS和Matlab中的实现。

http://blogs.sas.com/content/iml/2012/04/12/the-poissonness-plot-a-goodness-of-fit-diagnostic/


Edit2:如果我说对了,从1985年参考文献中修改后的泊松曲线将是*:

y=rpois(100,5)
n=length(y)
(x=table(y))
k=as.numeric(names(x))
x=as.vector(x)
x1 = ifelse(x==0,NA,ifelse(x>1,x-.8*x/n-.67,exp(-1)))
plot(k,log(x1)+lfactorial(k))

*他们实际上也调整了截距,但是我在这里还没有这样做;它不会影响图的外观,但是如果您从参考中实施其他任何操作(例如置信区间),则必须与其他方法完全不同,请务必谨慎。

(对于上面的示例,外观与第一个泊松图几乎没有变化。)


2
感谢您的回复!但是我必须说,我不知道您在说什么。我想知道QQplot是否会成为少数。你怎么看?从您提供的替代方案中,您认为我应该使用哪种方案?合适吗?在哪里可以找到您正在谈论的信息和/或测试?(适用于精通度的平滑测试)另外,您知道有人是否为博客代码提供R代码吗?(我不知道Matlab或SAS)。并且,非常感谢您的回答!
Shariff 2013年

另外,您认为我的数据可以“拟合”哪个分布?(这不是我的家庭作业的一部分,但是很高兴知道:))
Shariff 2013年

在不假设参数的情况下,如何为泊松生成QQplot?(我想如果参数不是太小,您可以使用泊松变换。或者您可以对未知参数使用MLE,但随后的图看起来比其他情况看起来“更好”-您需要调整您的进行判断时)。泊松情节的作用类似于QQ情节,并且应以类似的方式解释。如果您想进行诊断评估,建议您进行绘图(如果我们中的任何一个都能找到它们,最好进行上述调整)。
Glen_b-恢复莫妮卡

我无法说出我所未见的分布数据可能适合的范围,但是除非有很多分布数据,否则许多分布可能已经合理地生成了数据。
Glen_b-恢复莫妮卡2013年

好吧,也许我可以将观测值的估计的lambda用于QQplot的数据,但是我读了一点,看起来QQplots对于连续数据更好(对于离散数据不太好)。您可以翻译代码吗?它将不胜感激!让我知道您是否有代码!(我会给你代码的功劳,当然是:))
Shariff 2013年

5

执行拟合度卡方检验。如果是计数数据,我们可以使用goodfit()vcd包中包含的内容。请注意,如果p值大于0.05,我们将不能拒绝h0:该过程是一个Poisson过程。否则,这不是泊松过程。

# load the vcd package
library(vcd) ## loading vcd package

# generate two processes for test
set.seed(2014);y=rpois(200,5)
set.seed(2014);y=rnorm(100, 5, 0.3) # goodfit asks for non-negative values
# output the results
gf = goodfit(y,type= "poisson",method= "ML")
plot(gf,main="Count data vs Poisson distribution")
summary(gf)

# to automatically get the pvalue
gf.summary = capture.output(summary(gf))[[5]]
pvalue = unlist(strsplit(gf.summary, split = " "))
pvalue = as.numeric(pvalue[length(pvalue)]); pvalue

# to mannualy compute the pvalue
chisq = sum(  (gf$observed-gf$fitted)^2/gf$fitted )

df = length(gf$observed)-1-1
pvalue = pchisq(chisq,df)
pvalue

3
pchisqPXXPXXpvalue=1-pchisq(chisq,df)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.