4

我正在尝试按照以下代码在 R 中使用 flexmix 包来拟合 3 个泊松分布的混合物:

require(flexmix)

freq<- c(222950,111682,72429,48126,34515,25801,19199,15033,11859, 9226, 
7363, 5910, 4659, 3723, 2985, 2291,1907, 1447, 
1265,891,722,620,546,439,359,286,255,236,208,148,176,145,
151,135,102, 92,136, 99,102, 92, 81, 85, 71, 84, 58, 78, 59, 66 , 47, 48, 
42, 58, 43, 38, 34, 45, 21, 28, 32, 36, 27, 22, 26, 31 ,
20, 16, 12, 19, 19, 15, 18, 17,8,8, 12, 18, 10,6,5,8,9,4,7,5,8, 
10,6,3,7,2,4,3,4,6,6,5,
3,3,6,4,4,4,2,2,3,1,2,1,3,4,2,3)

zz<- as.data.frame(rep(0:111,times=freq))

colnames(zz)<- "xx"

flexfit1<- flexmix(xx ~ 1, data = zz, k = 3, model = FLXglm(family = 
"poisson"))

summary( flexfit1)

我得到以下结果:

Call:
flexmix(formula = xx ~ 1, data = zz, k = 3, model = FLXglm(family = 
"poisson"))

        prior   size post>0 ratio
 Comp.1 0.796 489702 561594 0.872
 Comp.2 0.204 120115 386867 0.310

 'log Lik.' -1465654 (df=3)
 AIC: 2931315   BIC: 2931349 

k=3我在flexmix电话中提到。为什么摘要中只有两个组件?另外,为什么对数似然的df只有3?

我试图用一些随机数据复制上述内容,如下所示:

zz<- as.data.frame(sample(0:111,10^4,replace=T))
colnames(zz)<- "xx"

flexfit1<- flexmix(xx ~ 1, data = zz, k = 3, model = FLXglm(family = 
"poisson"))

summary( flexfit1)

我得到以下输出:

prior size post>0 ratio
Comp.1 0.458 4614   5737 0.804
Comp.2 0.332 3259   5117 0.637
Comp.3 0.211 2127   2759 0.771

'log Lik.' -53488.65 (df=5)
AIC: 106987.3   BIC: 107023.4 

在这里,我可以看到 3 个分量,自由度也是 5。那么,为什么在第一种情况下我没有得到类似的结果?

在第一种情况下,我将拟合模型的均值和方差与数据的均值和方差进行了比较。以下代码给出了模型参数 -

refit1 <- refit(flexfit1)

summary(refit1)

这给出了以下输出 -

$Comp.1
            Estimate Std. Error z value  Pr(>|z|)    
(Intercept) 0.0962269  0.0019745  48.735 < 2.2e-16 ***
 ---
 Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 $Comp.2
              Estimate Std. Error z value  Pr(>|z|)    
 (Intercept) 2.2364497  0.0013964  1601.5 < 2.2e-16 ***
 ---
 Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

现在我们可以从拟合模型 =p1*m1+p2*m2= 0.796*exp(0.0962269)+0.204*exp(2.2364497) = 2.785851 计算 - 平均值,这非常接近数据的平均值(即 mean(zz[,1 ])),即 2.778745。

拟合模型的方差 = p1*m1+p2*m2+p1*p2*(m1-m2)^2=0.796*exp(0.0962269)+0.204*exp(2.2364497)+0.796*0.204*(exp(0.0962269)-exp (2.2364497))^2 =13.86233,它远小于数据方差(即 var(zz[,1]),即 23.4328。

如此直观地,似乎要解释方差,我们应该使用两个以上泊松分布的混合。

请让我知道你的想法

4

0 回答 0