6

私は、単一変数 (「AVERAGE」) の年間平均で構成される非常に単純な時系列データ セットを持っています。時系列の「トレンド」成分の変化率 (1 次導関数) と加速度 (2 次導関数) および関連する標準誤差を調査したいと考えています。次のように、MGCV の GAM および PREDICT 関数を使用して「トレンド」を取得しました。

A <- gam(AVERAGE ~ s(YEAR), data=DF, na.action=na.omit)
B <- predict(A, type="response", se.fit=TRUE)

高 DoF キュービック スムース スプラインを適用し、1 番目と 2 番目の差分 (軽く平滑化) を適用し、ブートストラップを使用して誤差を概算し、どちらも同等の結果を生成する 2 つの別々の方法で導関数を決定しました。

「gam.fit3」関数は 2 次導関数までの決定を容易にしますが、直接呼び出されないことに注意してください。また、タイプ「lpmatrix」で「predict.gam」を使用すると、スムーズの微分が容易になることにも注意してください。「GAM」関数を直接使用して 1 次導関数と 2 次導関数を計算したいのですが、これらの導関数を計算または抽出する十分なスキルがありません。「Predict.gam」ヘルプ ページの最後にある Wood の例を 1 つの変数に対して再構成しようとしましたが、成功しませんでした。私を正しい方向に導くための助けは素晴らしいでしょう。ありがとうフィル。

4

1 に答える 1

6

の例では、有限差分predict.gamを使用して、平滑化された項の導関数を近似しています。

単一の予測子モデルに対してこれを行う例を次に示します。これは、ヘルプの例よりも簡単です。

A <- gam(AVERAGE ~ s(YEAR), data=DF, na.action=na.omit)
# new data for prediction
newDF <- with(DF, data.frame(YEAR = unique(YEAR)))
# prediction of smoothed estimates at each unique year value
# with standard error    
B <- predict(A,  newDF, type="response", se.fit=TRUE)


# finite difference approach to derivatives following
# example from ?predict.gam

eps <- 1e-7
X0 <- predict(A, newDF, type = 'lpmatrix')


newDFeps_p <- newDF + eps

X1 <- predict(A, newDFeps_p, type = 'lpmatrix')

# finite difference approximation of first derivative
# the design matrix
Xp <- (X0 - X1) / eps

# first derivative
fd_d1 <- Xp %*% coef(A)

# second derivative
newDFeps_m <- newDF - eps

X_1 <- predict(A, newDFeps_m, type = 'lpmatrix')
# design matrix for second derivative
Xpp <- (X1 + X_1 - 2*X0)  / eps^2
# second derivative
fd_d2 <- Xpp %*% coef(A)

ブート ストラップを使用して信頼区間を取得している場合は、これらの近似値で信頼区間を取得できるはずです。

于 2013-01-08T03:03:25.607 に答える