25

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

「model.frame.default(式 = 死 ~ pm10 + Lag(resid1, 1) + : 変数の長さが異なります (「Lag(resid1, 1)」で見つかりました) でエラーが発生しました)」.

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

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

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

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)

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

4

4 に答える 4

17

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)
于 2013-11-05T11:54:17.827 に答える
4

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

contrasts<-( , value = contr.funs[1 + isOF[nn]]) のエラー*tmp*: 対比は、2 つ以上の水準を持つ因子にのみ適用できます

そこで、Excel ファイルまたは CSV ファイルに戻り、変数にフィルターを設定してエラーをスローし、個別のデータ型が同じかどうかを確認しました。そして…ああ!数字と文字列があったので、数字を文字列に変換したところ、うまくいきました。

于 2016-02-24T17:46:26.463 に答える