glmmとかとか。

というか,正規分布だと個体ごとにデータが1つしかないと,ランダム効果を推測できないのか!?

まずポワソン分布の場合。

> a<-0.25
> b<-rnorm(50,0,2) #ランダム誤差
> y<-rpois(50,exp(a+b))
> id<-c(1:50)
> dat<-data.frame(y,id)

> fglm<-glm(y~1,poisson,dat) #普通にglmでやると
> fglm

Call:  glm(formula = y ~ 1, family = poisson, data = dat) 

Coefficients:
(Intercept)  
      1.834  

Degrees of Freedom: 49 Total (i.e. Null);  49 Residual
Null Deviance:	    787.8 
Residual Deviance: 787.8 	AIC: 893.2

推定がずれている。
では,次にglmmMLでやってみる。

> library(glmmML)
> fglmmML<-glmmML(y~1,cluster=id,data=dat,poisson)
> fglmmML

Call:  glmmML(formula = y ~ 1, family = poisson, data = dat, cluster = id) 


              coef se(coef)      z Pr(>|z|)
(Intercept) 0.1722   0.3587 0.4799    0.631

Scale parameter in mixing distribution:  1.954 gaussian 
Std. Error:                              0.3087 

Residual deviance: 150.4 on 48 degrees of freedom 	AIC: 154.4 

結構いい感じに推定されている。 aが0.17(ホントは0.25),bが1.954(ホントは2)。
で,lmer()だと

> flmer<-lmer(y~1+(1|id),family=poisson,dat,REML=F)  #REMLは正規分布にしかきかないみたいです
> flmer
Generalized linear mixed model fit by the Laplace approximation 
Formula: y ~ 1 + (1 | id) 
   Data: dat 
   AIC   BIC logLik deviance
 154.4 158.2 -75.21    150.4
Random effects:
 Groups Name        Variance Std.Dev.
 id     (Intercept) 3.8191   1.9543  
Number of obs: 50, groups: id, 50

Fixed effects:
            Estimate Std. Error z value Pr(>|z|)
(Intercept)   0.1721     0.3145  0.5472    0.584

んー,若干ずれています。とくにbが。
ウソです。glmmMLと同じような推定値です。
lmerはσがstd.dev.みたいです。

と,familyをポワソンにした時はランダム効果をidにして,各idは1つしかないけど,σ^2を推定できてるわけです。

ところが,正規分布データの場合は,idが1つだとできない。

> y2<-rnorm(50,a+b,3)
> dat2<-data.frame(y2,id)
> flmer2<-lmer(y2~1+(1|id),dat2,family=gaussian,REML=F)
 エラー: length(levels(dm$flist1)) < length(Y) is not TRUE

と,推定できない。

そもそもσ^2は,そのランダム効果内のバラツキから推定してるから,正規分布の場合に推定できないのはわかるけど,ポワソンや二項分布の場合はなぜできるのだろう。やはり,分布のパラメータが1つ(ポワソンλや二項p)と2つ(正規μとσ)で決まっていることの違いなのでしょうか。わからん。

ちなみに,idごとにいくつかデータがあれば,(前もやったけど)

> b<-rnorm(10,0,1) #ランダム効果
> id2<-rep(1:10,each=5) #idごとに同じランダム効果を持つ。
> y3<-rnorm(50,a+b[id2],3)
> dat3<-data.frame(y3,id2)


> fglm3<-glm(y3~1,gaussian,dat3)
> fglm3

Call:  glm(formula = y3 ~ 1, family = gaussian, data = dat3) 

Coefficients:
(Intercept)  
    0.04821  

Degrees of Freedom: 49 Total (i.e. Null);  49 Residual
Null Deviance:	    432.2 
Residual Deviance: 432.2 	AIC: 253.7 

次にlmer()。

> flmer3<-lmer(y3~1+(1|id2),dat3,REML=F)
> flmer3
Linear mixed model fit by maximum likelihood 
Formula: y3 ~ 1 + (1 | id2) 
   Data: dat3 
   AIC   BIC logLik deviance REMLdev
 253.7 259.4 -123.9    247.7   247.1
Random effects:
 Groups   Name        Variance Std.Dev.
 id2      (Intercept) 1.3854   1.1770  
 Residual             7.2586   2.6942  
Number of obs: 50, groups: id2, 10

Fixed effects:
            Estimate Std. Error t value
(Intercept)  0.04821    0.53262 0.09051

そりゃできますよ。できますけど,切片がよくないなぁ。

> flmer4<-lmer(y3~1+(1|id2),dat3,family=gaussian)
> flmer4
Linear mixed model fit by REML 
Formula: y3 ~ 1 + (1 | id2) 
   Data: dat3 
   AIC   BIC logLik deviance REMLdev
 253.1 258.8 -123.5    247.7   247.1
Random effects:
 Groups   Name        Variance Std.Dev.
 id2      (Intercept) 1.7006   1.3041  
 Residual             7.2586   2.6942  
Number of obs: 50, groups: id2, 10

Fixed effects:
            Estimate Std. Error t value
(Intercept)  0.04821    0.56142 0.08586

はて,バラツキεの方を大きくしすぎたかな。