web-dev-qa-db-ja.com

model.frame.defaultのエラー:可変長が異なります

Mgcvパッケージを使用してgamモデルを実行すると、理解できない奇妙なエラーメッセージが表示されました。

「model.frame.default(formula = death〜pm10 + Lag(resid1、1)+のエラー:可変長が異なります( 'Lag(resid1、1)'で見つかりました)」。

Model1で使用される観測の数は、逸脱残差の長さとまったく同じです。したがって、このエラーはデータサイズまたは長さの違いとは関係ないと思います。

ウェブ上でかなり関連したエラーメッセージを見つけました here ですが、その投稿は適切な回答を受け取っていなかったので、私の問題には役立ちません。

再現可能な例とデータは次のとおりです。

library(quantmod)
library(mgcv) 
require(dlnm)

df <- chicagoNMMAPS
df1 <- df[,c("date","dow","death","temp","pm10")] 
df1$trend<-seq(dim(df1)[1]) ### Create a time trend

モデルを実行する

model1<-gam(death ~ pm10 + s(trend,k=14*7)+ s(temp,k=5),
data=df1, na.action=na.omit, family=poisson)

逸脱残差を取得

resid1 <- residuals(model1,type="deviance")

モデル1に1日の遅延偏差を追加します

model1_1 <- update(model1,.~.+ Lag(resid1,1),  na.action=na.omit)

model1_2<-gam(death ~ pm10 + s(trend,k=14*7)+ s(temp,k=5) + Lag(resid1,1), data=df1, 
na.action=na.omit, family=poisson)

これらのモデルは両方とも同じエラーメッセージを生成しました。

17
Meso

Joranは、モデルを実行する前に最初にNAを削除することを提案しました。したがって、NAを削除し、モデルを実行して残差を取得しました。遅延残差を含めることでmodel2を更新したときに、エラーメッセージが再び表示されませんでした。

NAを削除

df2<-df1[complete.cases(df1),]

メインモデルを実行する

model2<-gam(death ~ pm10 + s(trend,k=14*7)+ s(temp,k=5), data=df2, family=poisson)

残差を取得

resid2 <- residuals(model2,type="deviance")

遅延1の残差を含めることによりmodel2を更新

model2_1 <- update(model2,.~.+ Lag(resid2,1),  na.action=na.omit)
12
Meso

このエラーを引き起こす可能性のあるもう1つのことは、armパッケージからセンタリング/スケーリング標準化関数を使用してモデルを作成することです-m <- standardize(lm(y ~ x, data = train))

predict(m)を試してみると、この質問と同じエラーが発生します。

5
arr

簡単です。列のデータ型が同じであることを確認してください。例えば私は同じエラーに直面しました、それと別のエラー:

contrasts<-*tmp*、値= contr.funs [1 + isOF [nn]])のエラー:コントラストは2レベル以上の因子にのみ適用できます

そこで、Excelファイルまたはcsvファイルに戻り、変数にフィルターを設定してエラーをスローし、異なるデータ型が同じかどうかを確認しました。そして...ああ!数字と文字列があったので、数字を文字列に変換しましたが、うまく機能しました。

4
Maitri Tolia