从 Stata 到 R:通过排序和 xtreg 重新编码

From Stata to R: recoding bysort and xtreg

我是 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 点到 6 点之间则为 0,ihd0105 是一个虚拟的家庭显示器,exptime 表示早上 4 点 - 但是我不明白什么 exptime 在这里做)

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

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

我希望有专家能帮助我,因为我的 R 和 Stata 知识不足以解决这个问题..

我的讲师向我提供了答案:起初我指定了一个子样本,我在这里称之为 tmp_datatmp_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")

可能有更好、更简洁的方法来执行此操作,但我现在可以接受。