ar1 模型的面板回归
Panel regression with ar1 model
请原谅我的天真。我不确定这种类型的模型叫什么 -- 也许是面板回归。
假设我有以下数据:
n <- 100
x1 <- rnorm(n)
y1 <- x1 * 0.5 + rnorm(n)/2
x2 <- rnorm(n)
y2 <- x2 * 0.5 + rnorm(n)/2
x3 <- rnorm(n)
y3 <- x3 * 0.25 + rnorm(n)/2
x4 <- rnorm(n)
y4 <- x4 * 0 + rnorm(n)/2
x5 <- rnorm(n)
y5 <- x5 * -0.25 + rnorm(n)/2
x6 <- rnorm(n)
y6 <- x6 * -0.5 + rnorm(n) + rnorm(n)/2
x7 <- rnorm(n)
y7 <- x7 * -0.75 + rnorm(n)/2
foo <- data.frame(s=rep(1:100,times=7),
y=c(y1,y2,y3,y4,y5,y6,y7),
x=c(x1,x2,x3,x4,x5,x6,x7),
i=rep(1:7,each=n))
其中 y 和 x 是单独的 AR1 时间序列,测量时间超过 100 秒(我使用 's' 而不是 't' 作为时间变量)平均分为组 (i)。我希望将它们建模为:
y_t= b_0 + b_1(y_{t-1}) + b_2(x_{t}) + e_t
但考虑到组 (i) 时:
y_{it)= b_0 + b_1(y_{it-1}) + b_2(x_{it}) + e_{it}
我想知道 b_2(x 上的系数)是否可以很好地预测 y 以及该系数如何随组变化。我还想按组了解 R2 和 RMSE,并在给定 x_i 和 i 的情况下预测 y_i。分组变量可以是离散的或连续的。
我了解到这类问题被称为面板回归,但我并不熟悉这个术语。在 R 中使用 plm 是调查此问题的好方法吗?
根据下面的评论,我想这是一个简单的开始:
require(dplyr)
require(broom)
fitted_models <- foo %>% group_by(grp) %>% do(model = lm(y ~ x, data = .))
fitted_models %>% tidy(model)
fitted_models %>% glance(model)
由于模型中不包含固定或随机效应,我们正在处理可以使用 lm
或 plm
估算的合并 OLS (POLS)。
让我们构造 100 个组的示例数据和每个组的 100 个观察值:
df <- data.frame(x = rnorm(100 * 100), y = rnorm(100 * 100),
group = factor(rep(1:100, each = 100)))
df$ly <- unlist(tapply(df$y, df$group, function(x) c(NA, head(x, -1))))
head(df, 2)
# x y group ly
# 1 1.7893855 1.2694873 1 NA
# 2 0.8671304 -0.9538848 1 1.2694873
然后
m1 <- lm(y ~ ly + x:group, data = df)
是具有共同自回归系数的模型,group-dependent效果为x
:
head(coef(m1)[-1:-2], 5)
# x:group1 x:group2 x:group3 x:group4 x:group5
# -0.02057244 0.06779381 0.04628942 -0.11384630 0.06377069
这允许您绘制它们等。我想您要做的一件事是测试这些系数是否相等。可以按如下方式完成:
m2 <- lm(y ~ ly + x, data = df)
library(lmtest)
lrtest(m1, m2)
# Likelihood ratio test
#
# Model 1: y ~ ly + x:group
# Model 2: y ~ ly + x
# #Df LogLik Df Chisq Pr(>Chisq)
# 1 103 -14093
# 2 4 -14148 -99 110.48 0.2024
因此,我们不能否认 x
的效果与预期的一样。
请原谅我的天真。我不确定这种类型的模型叫什么 -- 也许是面板回归。
假设我有以下数据:
n <- 100
x1 <- rnorm(n)
y1 <- x1 * 0.5 + rnorm(n)/2
x2 <- rnorm(n)
y2 <- x2 * 0.5 + rnorm(n)/2
x3 <- rnorm(n)
y3 <- x3 * 0.25 + rnorm(n)/2
x4 <- rnorm(n)
y4 <- x4 * 0 + rnorm(n)/2
x5 <- rnorm(n)
y5 <- x5 * -0.25 + rnorm(n)/2
x6 <- rnorm(n)
y6 <- x6 * -0.5 + rnorm(n) + rnorm(n)/2
x7 <- rnorm(n)
y7 <- x7 * -0.75 + rnorm(n)/2
foo <- data.frame(s=rep(1:100,times=7),
y=c(y1,y2,y3,y4,y5,y6,y7),
x=c(x1,x2,x3,x4,x5,x6,x7),
i=rep(1:7,each=n))
其中 y 和 x 是单独的 AR1 时间序列,测量时间超过 100 秒(我使用 's' 而不是 't' 作为时间变量)平均分为组 (i)。我希望将它们建模为:
y_t= b_0 + b_1(y_{t-1}) + b_2(x_{t}) + e_t
但考虑到组 (i) 时:
y_{it)= b_0 + b_1(y_{it-1}) + b_2(x_{it}) + e_{it}
我想知道 b_2(x 上的系数)是否可以很好地预测 y 以及该系数如何随组变化。我还想按组了解 R2 和 RMSE,并在给定 x_i 和 i 的情况下预测 y_i。分组变量可以是离散的或连续的。
我了解到这类问题被称为面板回归,但我并不熟悉这个术语。在 R 中使用 plm 是调查此问题的好方法吗?
根据下面的评论,我想这是一个简单的开始:
require(dplyr)
require(broom)
fitted_models <- foo %>% group_by(grp) %>% do(model = lm(y ~ x, data = .))
fitted_models %>% tidy(model)
fitted_models %>% glance(model)
由于模型中不包含固定或随机效应,我们正在处理可以使用 lm
或 plm
估算的合并 OLS (POLS)。
让我们构造 100 个组的示例数据和每个组的 100 个观察值:
df <- data.frame(x = rnorm(100 * 100), y = rnorm(100 * 100),
group = factor(rep(1:100, each = 100)))
df$ly <- unlist(tapply(df$y, df$group, function(x) c(NA, head(x, -1))))
head(df, 2)
# x y group ly
# 1 1.7893855 1.2694873 1 NA
# 2 0.8671304 -0.9538848 1 1.2694873
然后
m1 <- lm(y ~ ly + x:group, data = df)
是具有共同自回归系数的模型,group-dependent效果为x
:
head(coef(m1)[-1:-2], 5)
# x:group1 x:group2 x:group3 x:group4 x:group5
# -0.02057244 0.06779381 0.04628942 -0.11384630 0.06377069
这允许您绘制它们等。我想您要做的一件事是测试这些系数是否相等。可以按如下方式完成:
m2 <- lm(y ~ ly + x, data = df)
library(lmtest)
lrtest(m1, m2)
# Likelihood ratio test
#
# Model 1: y ~ ly + x:group
# Model 2: y ~ ly + x
# #Df LogLik Df Chisq Pr(>Chisq)
# 1 103 -14093
# 2 4 -14148 -99 110.48 0.2024
因此,我们不能否认 x
的效果与预期的一样。