我试图通过使用具有相同时间间隔(5年)但在不同年份内的不同子集来执行汇总回归。我的代码语法有问题,我似乎对子集的定义做错了。
> head(Grunfeld)
firm year inv value capital
1 1 1935 317.6 3078.5 2.8
2 1 1936 391.8 4661.7 52.6
3 1 1937 410.6 5387.1 156.9
4 1 1938 257.7 2792.2 209.2
5 1 1939 330.8 4313.2 203.4
6 1 1940 461.2 4643.9 207.2
library(plm)
data("Grunfeld", package="plm")
#regression
myregression <- list()
Grunfeld_sub <- data.frame()
count <- 1
#loop
for(t in 1940:1950){
Grunfeld_sub[t] <- subset(Grunfeld, year<=t & year>=t-5)
myregression[[count]] <- lm(inv~value + capital, Grunfeld_sub(t))
count<- count+1
}
我在语法上做错了什么?如何正确定义子样本?
另一个问题是,如果我想使用plm包并使用plm.data函数转换我的data.frame(Grunfeld),我将无法再使用子集,因为我有点不能将它与factorvariables一起使用(时间变量将成为一个因素变量)是否有可能解决这个问题? 谢谢你的帮助。
答案 0 :(得分:1)
您的代码正在尝试将Grunfeld
的整个子集存储在Grunfeld_sub
的一列中,这会导致错误。您实际上并不需要存储先前循环中的子集,因为您只在循环的当前迭代中使用当前版本的Grunfeld_sub
。您也不需要单独的count
变量。这是您的代码的重新修改:
# Store each subset regression in myregression
myregression <- list()
# Regression on six-year subsets of Grunfeld
for(t in 1940:1950) {
myregression[[t-1939]] <- lm(inv ~ value + capital,
subset(Grunfeld, year<=t & year>=t-5))
# Rename list elements by year range of subset
names(myregression)[[t-1939]] = paste0("Years:",t-5,"-",t)
}
以下是myregression
> myregression
$`Years:1935-1940`
Call:
lm(formula = inv ~ value + capital, data = Grunfeld_sub)
Coefficients:
(Intercept) value capital
-3.65240 0.08283 0.11033
$`Years:1936-1941`
Call:
lm(formula = inv ~ value + capital, data = Grunfeld_sub)
Coefficients:
(Intercept) value capital
-13.77258 0.08614 0.18680
有关更详细的输出,请lapply(myregression, summary)
要运行plm
功能,您是否只能直接使用Grunfeld
数据并向index
提供相应的plm
参数?例如:
for(t in 1940:1950) {
myregression[[t-1939]] <- plm(inv ~ value + capital,
data=subset(Grunfeld, year<=t & year>=t-5),
index=c("firm","year"))
names(myregression)[[t-1939]] = paste0("Years:",t-5,"-",t)
}