Я использую несколько одномерных регрессий, как в этом воспроизводимом примере:
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 иличто-то из этого семейства ...
РЕДАКТИРОВАТЬ: as.formula
не работает вместе с L()
из dynlm
.Я получаю следующее сообщение об ошибке:
Ошибка в merge.zoo (log (GNP), L (log (M1), 0), retclass = "list", all = FALSE): не удалось найти функцию "L "
РЕДАКТИРОВАТЬ: нашел интересный пост bei Achim Zeileis , касающийся этой проблемы.