我正在使用lm构建一个简单的线性回归模型,由于我认为我的因变量是历史相关的,所以我想添加一个控制变量,即时间(t-1)的因变量。在R中怎么做呢?这是我目前为止的模型:
lm
lm(Y ~ Country + Year + GDP, data=df)
我想添加一个控制变量,如下所示:
lm(Y ~ Y(t-1) + Country + Year + GDP, data=df)
我希望它是清楚的!提前感谢!
ccrfmcuu1#
可以使用dplyr库添加控制功能。
dplyr
library(dplyr) # create a new variable for the value of Y at time (t-1) df$Y_lag <- lag(df$Y) # run the regression with Y_lag as a control variable fit <- lm(Y ~ Y_lag + Country + Year + GDP, data=df)
jtoj6r0c2#
**1)**假设数据是按照时间递增的顺序排列的,以便适当地对齐变量,请删除每列的第一个或最后一个元素。由于问题中未提供输入,因此我们使用了内置BOD数据框-请参阅r标签页顶部的信息,以获得提问指导。
nr <- nrow(BOD) lm(demand[-1] ~ Time[-1] + demand[-nr], BOD)
**2)**使用折叠包中的标志。
library(collapse) lm(demand ~ Time + flag(demand), BOD)
**3)**另一个选择是dyn包。特别是当使用lag时,使用anova比较模型是很棘手的,但是dyn有一个anova.dyn可以自动解决这些问题。注意dplyr用它自己的lag来击败R的lag,这会导致几十个或几百个包失败,所以确保dplyr没有被加载,或者如果你需要dplyr,使用library(dplyr, exclkude = c("lag","filter"))。这适用于zoo和ts对象。
anova
anova.dyn
library(dplyr, exclkude = c("lag","filter"))
library(dyn) z <- read.zoo(BOD, drop = FALSE) dyn$lm(demand ~ time(z) + lag(demand, -1), z)
**4)**还有dynlm包,它使用的语法与dyn稍有不同,但原理相似。dynlm的一个重要优势是它支持通过两阶段最小二乘法进行工具变量回归。
2条答案
按热度按时间ccrfmcuu1#
可以使用
dplyr
库添加控制功能。jtoj6r0c2#
**1)**假设数据是按照时间递增的顺序排列的,以便适当地对齐变量,请删除每列的第一个或最后一个元素。由于问题中未提供输入,因此我们使用了内置BOD数据框-请参阅r标签页顶部的信息,以获得提问指导。
**2)**使用折叠包中的标志。
**3)**另一个选择是dyn包。特别是当使用lag时,使用
anova
比较模型是很棘手的,但是dyn有一个anova.dyn
可以自动解决这些问题。注意dplyr用它自己的lag来击败R的lag,这会导致几十个或几百个包失败,所以确保dplyr没有被加载,或者如果你需要dplyr,使用library(dplyr, exclkude = c("lag","filter"))
。这适用于zoo和ts对象。**4)**还有dynlm包,它使用的语法与dyn稍有不同,但原理相似。dynlm的一个重要优势是它支持通过两阶段最小二乘法进行工具变量回归。