0

基本的にnlme::lme、欠損値で実行しています。モデルは にうまく適合しますna.action=na.omitが、適合/残差/係数の名前がす​​べて 1 行ずつずれているように見えるのはなぜですか?

## Generate data ---------------------
X1=gl(2,4)
X2=gl(2,2,8)
Y=rnorm(8)
dat=data.frame(Y=Y,X1=X1,X2=X2)
dat

## missing value -------------
mis.dat=dat
mis.dat[3,"Y"]=NA
mis.dat
> mis.dat
            Y X1 X2
1 -0.06845332  1  1
2  0.89169085  1  1
3          NA  1  2
4  1.88997449  1  2
5  0.95912879  2  1
6 -0.64049400  2  1
7 -0.23354948  2  2
8 -0.66869350  2  2


## Fit model -----------------------
model=nlme::lme(Y~1,random=~1|X1/X2,data=mis.dat,na.action=na.omit)
summary(model)

## Notie the names -------------------
fitted(model)
> fitted(model)
       1/1        1/1        2/1        2/1        2/2        2/2       <NA> 
0.67179438 0.67179438 0.67179439 0.02855517 0.02855517 0.02855517 0.02855517 
attr(,"label")
[1] "Fitted values"

#model$coef$random
#resid(model)

当てはめ値の名前に注目してください。3 番目の位置に 1/2 があり、その後の名前が 1 つ右に移動して NA がなくなるのではないでしょうか?

4

1 に答える 1

1

マイナーなバグが見つかりました。nlme:::fitted.lme何が起こるかを見てください:

当てはめ値は、以下を使用してモデルから抽出されます。

object[["fitted"]]
      fixed        X1        X2
1 0.6014526 0.1686912 0.1686912
2 0.6014526 0.1686912 0.1686912
4 0.6014526 0.1686912 0.1686912
5 0.6014526 1.0342140 1.0342140
6 0.6014526 1.0342140 1.0342140
7 0.6014526 1.0342140 1.0342140
8 0.6014526 1.0342140 1.0342140

y値が欠落しているため、観測 3 が当てはめから除外され、そこにあってはならないにもかかわらず、8 つの当てはめ値があることに注意してください。名前は次から作成されます。

object[["groups"]]
  X1  X2
1  1 1/1
2  1 1/1
3  1 1/2
4  2 2/1
5  2 2/1
6  2 2/2
7  2 2/2

名前が7つしかないことに注意してください。を使用すると、NA が導入matchされます。

最終的に問題は にありlme、7 つの適合値のみを返す必要があります。ただし、これを修正する方法を見つける時間はありません。お気軽に報告してください。

于 2014-02-20T08:44:43.230 に答える