【发布时间】:2016-10-07 07:50:01
【问题描述】:
我试图搜索我的问题的答案,但我找到了 Stata 的正确答案(我正在使用 R)。
我正在使用一项全国调查来研究哪些变量会影响对补充养老金的投资(在我的国家是自愿的)。
该调查每两年进行一次,有些人接受了不止一次的采访。我过滤了 df,以便只有在场的个人多次使用 filter 命令。这是已过滤的原始调查的示例:
year id y.b sex income pens
2002 1 1950 F 100000 0
2002 2 1943 M 55000 1
2004 1 1950 F 88000 1
2004 2 1943 M 66000 1
2006 3 1966 M 12000 1
2008 3 1966 M 24000 1
2008 4 1972 F 33000 0
2010 4 1972 F 35000 0
其中 id 是个人,y.b 是出生年份,pens 是一个虚拟变量,如果个人投资于补充养老金形式,则取值为 1。
我想运行 FE 回归,所以我加载了 plm 包,然后我像这样设置 df:
df.p <- plm.data(df, c("id", "year")
在这个命令之后,我希望常量变量被删除,但是在运行这个回归之后:
pan1 <- plm (pens ~ woman + age + I(age^2) + high + medium + north + centre, model="within", effect = "individual", data=dd.p, na.action = na.omit)
(其中,女性是一个变量,如果个人是女性,则取值为 1,高、中指教育水平,北部指地理区域,中心指地理区域)并且在命令 summary(pan1) 之后,变量女性仍然存在。
此时我认为调查中存在一些错误(例如性别没有正确插入,因此对于相同的 id 不一样),所以我试图找到一种方法来检查每个id,性别是不变的。
我试过这段代码,但我确定它不正确:
df$x <- ifelse(df$id==df$id & df$sex==df$sex,1,0)
基本思路应该是这样的:
df$x <- ifelse(df$id=="1" & df$sex=="F",1,0)
但我无法手动执行此操作,因为 df 由多达 40k 观察组成。
如果你知道另一种方法来检查变量在 R 中是否为常数,我会很高兴。
提前谢谢你
【问题讨论】:
-
df$x <- (ave(df$sex, df$id, FUN = function(x)length(unique(x))) == 1)*1或aggregate(sex ~ id, df, FUN = function(i) length(unique(i))==1)*1取决于您想要的输出方式。
标签: r variables time constants