我是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知识不足以支持我。
答案 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")
可能有更好,更清洁的方法,但我现在很好。