从Stata到R:重新编码bysort和xtreg

时间:2017-08-21 16:37:51

标签: r replication stata

我是R的新手,目前正在为我的大学的元研究课程开展复制项目。本文探讨了使用家用显示器来监控能耗是否会降低能耗。我已经记录了300行代码,但现在我遇到了一个我还无法解决的问题。

源代码说:bysort id expdays: egen ave15 = mean(power) if hours0105==1

我确实理解这是做什么的,但是我无法在R中复制它。id是被检查家庭的标识符,expdays表示实验的当前日期。所以ave15是从午夜到早上6点的平均耗电量,按每个家庭每天排序。我发现(EIPbasedata是包含每小时数据的完整数据集)

EIPbasedata$ave15[EIPbasedata$hours0105 == 1] <- ave(EIPbasedata$power, EIPbasedata$ID, EIPbasedata$ExpDays, FUN=mean)

可能会完成这项工作,但这给了我一个警告:

number of items to replace is not a multiple of replacement length

结果也不对。我不知道我能做些什么来解决这个问题。

我努力重新编码的下一件事是:

xtreg ln_power0105 ihd0105 i.days0105 if exptime==4, fe vce(bootstrap, rep(200) seed(12345))

我认为正确的方法是使用plm,但我不确定如何实施if条件(days0105是一天的运行变量在实验中0和0如果不是在0-6am之间,ihd0105是一个虚拟的家庭显示,exptime表示早上4点 - 但我不明白是什么exptime在这里)

table4_1 <- plm(EIPbasedata$ln_power0105 ~ EIPbasedata$ihd0105, data=EIPbasedata, index = c("days0105"), model="within")

如何计算plm中的自举标准错误?

我希望有些专家可以帮助我,因为我的R和Stata知识不足以支持我。

1 个答案:

答案 0 :(得分:0)

我的讲师给了我答案:首先我在这里指定一个我称之为tmp_data的子样本:tmp_data <- EIPbasedata[which(EIPbasedata$ExpTime == 4) , ]

然后我使用as.factor(days0105)值回退tmp_data,这是等价于i.days0105的R

tmp_results <- plm(tmp_data$ln_power0105 ~ tmp_data$ihd0105 + as.factor(tmp_data$days0105), data = tmp_data, index = ("ID"), model = "within")

可能有更好,更清洁的方法,但我现在很好。