私はこれをいくつか検索しましたが、私が見つけたメーリングリストの投稿はnlme
、私がこれを行ったのに対し、ランダム効果を指定していない人に関連付けられています. 私は、Pinheiro と Bates による本 Mixed Effect Models in S and S-Plus も所有していますが、この本から私の問題を解決することはできません。
私はまだ栄養データの分析に取り組んでおり、現在は実際のデータに移行しています. データは人口調査から得られたもので、各回答者が栄養素の 24 時間摂取量を 2 回想起するため、反復測定設計を特徴としています。
lme4 モデルをデータにうまく当てはめましたが、代わりに非線形法を使用するとどうなるかを調べようとしています。私のデータのスナップショットは以下のとおりです。
head(Male.Data)
RespondentID Age SampleWeight IntakeDay IntakeAmt AgeFactor BoxCoxXY
2 100020 12 0.4952835 Day1Intake 12145.852 9to13 15.61196
7 100419 14 0.3632839 Day1Intake 9591.953 14to18 15.01444
8 100459 11 0.4952835 Day1Intake 7838.713 9to13 14.51458
12 101138 15 1.3258785 Day1Intake 11113.266 14to18 15.38541
14 101214 6 2.1198688 Day1Intake 7150.133 4to8 14.29022
18 101389 5 2.1198688 Day1Intake 5091.528 4to8 13.47928
データに関する要約情報は次のとおりです。
str(Male.Data)
'data.frame': 4498 obs. of 7 variables:
$ RespondentID: Factor w/ 4487 levels "100013","100020",..: 2 7 8 12 14 18 19 20 21 22 ...
$ Age : int 12 14 11 15 6 5 10 2 2 9 ...
$ SampleWeight: num 0.495 0.363 0.495 1.326 2.12 ...
$ IntakeDay : Factor w/ 2 levels "Day1Intake","Day2Intake": 1 1 1 1 1 1 1 1 1 1 ...
$ IntakeAmt : num 12146 9592 7839 11113 7150 ...
$ AgeFactor : Factor w/ 4 levels "1to3","4to8",..: 3 4 3 4 2 2 3 1 1 3 ...
$ BoxCoxXY : num 15.6 15 14.5 15.4 14.3 ...
パッケージを使用して、次を使用lme4
して線形混合効果モデルを正常に適合させました (ランダム効果は被験者からのものであり、 の変換である にIntakeDay
関連付けられた反復測定係数です):BoxCoxXY
IntakeAmt
Male.lme1 <- lmer(BoxCoxXY ~ AgeFactor + IntakeDay + (1|RespondentID),
data = Male.Data,
weights = SampleWeight)
このパッケージを使用してnlme
、非線形モデルをフィッティングして 2 つを比較しようとしましたが、構文を機能させることができません。私の最初の問題は、自分のデータに関連する SelfStart モデルがないように見えることでした。そのため、geeglm
開始値 ( というデータ フレームに保存された係数Male.nlme.start
) を生成していました。しかし、今はエラーが発生します:
Error in getGroups.data.frame(dataMix, eval(parse(text = paste("~1", deparse(groups[[2]]), :
Invalid formula for groups
私が間違っていることを理解できませんnlme
。私が使用している構文は次のとおりです。
Male.nlme1 <- nlme(BoxCoxXY ~ AgeFactor + IntakeDay + RespondentID , data = Male.Data,
fixed = AgeFactor + IntakeDay ~ 1,
random = RespondentID ~ 1,
start=c(Male.nlme.start[,"Estimate"]))
全体的なモデル仕様に含まれている場合と含まれていない場合の両方で分析を試みましたRespondentID
が、影響はないようです。
私が非線形の方法に固執しようとしている理由は、SAS の元の分析が非線形のアプローチを使用していたからです。私の残差などは、lme 分析からは許容できるほど良好に見えますが、非線形アプローチがどのような影響を与えるかを知りたいと思っています。
参考traceback()
までに、前回の分析試行の結果RespondentID
は次のとおりです。
5: stop("Invalid formula for groups")
4: getGroups.data.frame(dataMix, eval(parse(text = paste("~1", deparse(groups[[2]]),
sep = "|"))))
3: getGroups(dataMix, eval(parse(text = paste("~1", deparse(groups[[2]]),
sep = "|"))))
2: nlme.formula(BoxCoxXY ~ AgeFactor + IntakeDay, data = Male.Data,
fixed = AgeFactor + IntakeDay ~ 1, random = RespondentID ~
1, start = c(Male.nlme.start[, "Estimate"]))
1: nlme(BoxCoxXY ~ AgeFactor + IntakeDay, data = Male.Data, fixed = AgeFactor +
IntakeDay ~ 1, random = RespondentID ~ 1, start = c(Male.nlme.start[,
"Estimate"]))
誰かが私が間違っている場所を提案できますか? (1) の因子レベルが多すぎRespondentID
て機能しないのnlme
か、(2) の開始パラメーターを指定した場合にのみメソッドが機能するのか、これは私のデータであるためRespondentID
、これは私が持っているデータでは無意味に思えます。サブジェクト識別子。
更新:ベンに答えるために、SASnlmixed
モデルは固定効果の一般的な対数尤度関数です:
ll1 <- log(1/sqrt(2*pi*Scale))
ll2 <- as.data.frame(-(BoxCoxXY - Intercept + AgeFactor + IntakeDay + u2)^2)/(2*Scale)+(Lambda.Value-1)*log(IntakeAmt)
ll <- ll1 + ll2
model IntakeAmt ~ general(ll)
どこ:
Scale
geeglm
=とからの分散値
Lambda.Value
= 式を介してboxcox()
変換するために使用された、以前の からの最大対数尤度出力に関連付けられたラムダ値IntakeAmt
BoxCoxXY
Male.Data$BoxCoxXY <- (Male.Data$IntakeAmt^Lambda.Value-1)/Lambda.Value
SAS コードのrandom
ステートメントは次のとおりです。
random u1 u2 ~ normal([0,0][&vu1,COV_U1U2,&vu2]) subject=RespondentID
そのため、モデルには 2 つの誤差項があり、両方とも変量効果として適合しています。2 番目の角括弧は、行順にリストされた変量効果分散行列の下三角を表し、SAS 構文で SAS マクロ変数を使用して指定されます。
与えられたモデルの要約は、共変量行列 (BX) とエラー コンポーネントを示す通常の 1 行の概要であるため、ここではあまり役に立ちません。
2 番目の更新: 分析のために性別ごとに個別のデータ フレームに分割する前に、データ フレーム全体で RespondentID を因数分解したため、女性被験者に関連付けられた RespondentID レベルを削除していないことに気付きました。nlme
RespondentID の未使用の因子レベルを削除して分析を繰り返しましたが、同じエラーが発生しました。結果はlmer
同じです - これは良いことです。:)