让我们考虑删除了300行的面板数据
data("EmplUK", package="plm")
set.seed(42)
EmplUK<-EmplUK[-sample(1:nrow(EmplUK),300),]
firm year sector emp wage capital output
1 1 1977 7 5.041 13.1516 0.5894 95.7072
4 1 1980 7 4.715 13.8039 0.6171 100.5501
5 1 1981 7 4.093 14.2897 0.5076 99.5581
6 1 1982 7 3.166 14.8681 0.4229 98.6151
7 1 1983 7 2.936 13.7784 0.3920 100.0301
8 2 1977 7 71.319 14.7909 16.9363 95.7072
我想添加关于年份的三级伪变量。(所以我想增加三列(。
问题是,每家公司的观测年份并不相同,即一家公司有1977年、1980年、1981年、1982年。因此,伪变量应该是:
1 0 0
0 1 0
0 0 1
1 0 0
第三家公司有197719791980198119821983。傻瓜应该按照看
1 0 0
0 1 0
0 0 1
1 0 0
0 1 0
0 0 1
我知道要创建伪变量,我们只需要使用命令:
model.matrix(~ factor(cycle(ts(EmplUK, frequency = 3)))+0)
但我不知道如何将其划分为年份。你知道如何调整吗?
您可以通过为每个公司重复c(1,2,3)
来首先创建一个因子变量。然后,使用model.matrix
将其展开为虚拟对象。
EmplUK <- within(EmplUK, {
dummy <- as.factor(ave(year, firm, FUN = function(x) rep_len(c(1L, 2L, 3L), length(x))))
})
cbind(EmplUK, model.matrix(~ dummy - 1, data = EmplUK))
输出看起来像这个
firm year sector emp wage capital output dummy dummy1 dummy2 dummy3
1 1 1977 7 5.041000 13.1516 0.5894 95.7072 1 1 0 0
2 1 1978 7 5.600000 12.3018 0.6318 97.3569 2 0 1 0
3 1 1979 7 5.015000 12.8395 0.6771 99.6083 3 0 0 1
4 1 1980 7 4.715000 13.8039 0.6171 100.5501 1 1 0 0
5 1 1981 7 4.093000 14.2897 0.5076 99.5581 2 0 1 0
6 1 1982 7 3.166000 14.8681 0.4229 98.6151 3 0 0 1
7 1 1983 7 2.936000 13.7784 0.3920 100.0301 1 1 0 0
8 2 1977 7 71.319000 14.7909 16.9363 95.7072 1 1 0 0
9 2 1978 7 70.642998 14.1036 17.2422 97.3569 2 0 1 0
10 2 1979 7 70.917999 14.9534 17.5413 99.6083 3 0 0 1
11 2 1980 7 72.030998 15.4910 17.6574 100.5501 1 1 0 0
12 2 1981 7 73.689003 16.1969 16.7133 99.5581 2 0 1 0
13 2 1982 7 72.418999 16.1314 16.2469 98.6151 3 0 0 1
14 2 1983 7 68.517998 16.3051 17.3696 100.0301 1 1 0 0
...