【发布时间】:2020-06-15 15:44:44
【问题描述】:
我的数据集如下:
country year Var1 Var2 Var3 Var4
1 AT 2010 0.27246094 15 0 0
2 BE 2010 0.14729459 53 0 1
3 BG 2010 0.08744856 3 0 0
4 CY 2010 0.15369261 6 0 0
5 CZ 2010 0.20284360 6 0 1
6 DE 2010 0.12541694 37 0 0
7 AT 2011 0.35370741 16 0 0
8 BE 2011 0.14572864 54 0 0
9 BG 2011 0.11929461 4 0 0
10 CY 2011 0.24550898 7 0 1
11 CZ 2011 0.23333333 7 0 0
12 DE 2011 0.21943574 38 0 0
13 AT 2012 0.35073780 17 0 0
14 BE 2012 0.19700000 55 0 0
15 BG 2012 0.08472803 5 0 0
16 CY 2012 0.16949153 8 0 0
17 CZ 2012 0.26914661 8 0 0
18 DE 2012 0.22037422 39 0 0
19 AT 2013 0.34716599 18 0 1
20 BE 2013 0.28906250 56 0 0
21 BG 2013 0.14602216 6 0 1
22 CY 2013 0.44023904 9 0 0
23 CZ 2013 0.35146022 9 0 1
24 DE 2013 0.25500323 40 0 1
它涵盖 6 个国家/地区中的每一个国家/地区的 4 年。
我想做的是运行回归 Var2 ~ Var 1。
由于我有多年时间考虑使用时间序列。所以,首先我将年份列从字符更改为日期:
library(dplyr)
mutate(testdf, year = as.Date(year, format= "%Y"))
然后,我尝试运行回归并收到此错误:
library(plm)
reg1 <- plm(Var2 ~ Var1 + Var3 + Var4, data = df)
summary(reg1)
Error in pdim.default(index[[1]], index[[2]]) : duplicate couples (id-time)
我是在运行回归之前错过了一步还是我只是使用了错误的函数?
我还尝试使用lmer函数运行回归(使用time并控制国家差异):
library(lme4)
library(lmerTest)
reg2 <- lmer(Var2 ~ time(Var1) + Var3 + Var4 + (1 | country), data = df, REML = F)
summary(reg2)
在这里我得到了一个结果,但我完全不确定这是否应该这样做。这是一种可能性还是有什么不同?
【问题讨论】:
-
plm 要求每一对都是唯一的,请参阅stackoverflow.com/questions/43663594/error-in-plm-regression 我不确定是否应该诚实地使用 lmerTest。
-
您的
mutate不会改变任何内容,如图所示。如果您使用testdf$year <- mutate(testdf, ...),请改为使用testdf <- mutate(testdf, ...)。否则,您的代码对我有用。 -
感谢您的回复。你知道解决这个问题的方法吗?不幸的是,我对此有点无助
-
我试过
testdf <- mutate(testdf, year=as.Date(year, format = "%Y")),但它给了我这个错误:评估错误:不知道如何将“年份”转换为“日期”类。
标签: r date time-series regression