この再現可能な例のように、複数の単変量回帰を実行しています。
require(dynlm)
data(USeconomic)
US<-USeconomic
vars<-colnames(US)[-2]
a<-lapply(colnames(US),function(x) dynlm(log(GNP)~get(x),data=US))
a
3つの単変量回帰のリストが含まれています。ここで、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()は役に立ちません。なぜそれが機能するのか理解できませんvars
がlagged_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を見つけました。