1

この再現可能な例のように、複数の単変量回帰を実行しています。

require(dynlm)
data(USeconomic)
US<-USeconomic
vars<-colnames(US)[-2]
a<-lapply(colnames(US),function(x) dynlm(log(GNP)~get(x),data=US))

a3つの単変量回帰のリストが含まれています。ここで、3つのラグを使用して同じ回帰を実行したいとします。l<-c(0,1,4)ここで、0はもちろんすでに取得したケースです。次のように、ベクトルlを直接使用する方法はありますか?

# this did not work for me, I obtain multivariate regressions including all lags at once
lapply(colnames(US),function(x) dynlm(log(GNP)~L(get(x),l),data=US),l=l)

これが機能しなかった後、私は別のアプローチを試し、次のベクトルに追加しました:

lagged_vars <- paste("L(",rep(vars,each=3),",",l,")",sep="")

取得するため:

[1] "L(log(M1),0)" "L(log(M1),1)" "L(log(M1),4)" "L(rs,0)"      "L(rs,1)"     
[6] "L(rs,4)"      "L(rl,0)"      "L(rl,1)"      "L(rl,4)"

残念ながら、新しい文字ベクトルで実行することはできません。get()は役に立ちません。なぜそれが機能するのか理解できませんvarslagged_vars、どちらが両方の文字ベクトルであるのかはわかりません。

L()構文はdynlmパッケージからのものであることに注意してください。副次的な質問:回帰結果の係数をget(x)というラベルのまま印刷した場合、どうすれば変更できますか?

i、jループが解決策になる可能性がありますが、私はむしろlapplyまたはこのファミリ以外のものを使用したいと思います...

編集: fromas.formulaと一緒には機能しません。このエラーメッセージが表示されます:L()dynlm

merge.zoo(log(GNP)、L(log(M1)、0)、retclass = "list"、all = FALSE)のエラー:関数"L"が見つかりませんでした

編集:この問題に言及している興味深い投稿beiAchimZeileisを見つけました。

4

2 に答える 2

2

R 式を作成するには、予測子側だけでなく、すべて一緒に貼り付ける必要があります。したがって、次のようなものが必要です。

formula <- as.formula(
    paste("log(GNP)~",
        paste("L(",rep(vars,each=3),",",l,")",sep=""),
        sep = ""
    )
)

そして実行します

dynlm(formula, data = ...)
于 2011-09-22T18:05:32.370 に答える
1

これがを使用したアプローチですplyr

library(plyr); library(dynlm); library(tseries)

# FUNCTION TO RUN A SINGLE REGRESSION
foo = function(x, l) dynlm(log(GNP) ~ L(get(as.character(x)), l), data = US)

# CREATE PARAMETER GRID
params = expand.grid(x = colnames(US)[-2], l = c(0, 1, 4))

# RUN REGRESSIONS
regressions = mlply(params, foo)

このリストの各要素には、目的の出力を抽出できる単一回帰の詳細が含まれています

于 2011-09-23T04:05:51.597 に答える