我有一个数据集,我希望按国家/地区更广泛地对国家/地区进行分组。不过,该国家/地区是我的数据集中的id变量。例如:
library(plm)
Data <- data.frame(iris)
Data$time <- c(rep(1951:2000,3))
Data$mygroup <- c(rep("a",100),rep("b",50))
test <- plm(Sepal.Length ~ Sepal.Width + Petal.Length,data=Data, model="within", index=c("time","Species"))
summary(test)
我能以某种方式告诉plm
我希望内部转换发生在mygroup
而不是species
吗?如果我使用mygroup作为索引,我遇到了每个id重复年数的问题,我在尝试计算个别特定常量等时猜测错误plm
。
test2 <- plm(Sepal.Length ~ Sepal.Width + Petal.Length,data=Data, model="within", index=c("time","mygroup"))
我可以简单地根据mygroup
构建虚拟对象并包含它们,但内部转换应该更有效并且看起来更优雅。我虽然没有在plm
帮助文件中看到此选项。任何帮助将不胜感激!
答案 0 :(得分:3)
没有选项可以通过内部转换(除了常规的id和时间维度)扫除plm中的其他效果。正如您所建议的那样,您可以使用假人mygroup
来做到这一点。如果组的数量不是很大,我看不出任何缺点 - 只是输出的轻微“污染”。
否则,如果您想通过内部转换扫除其他效果,可以使用包lfe
。如果您想要扫描大量额外的效果和/或如果组的数量非常大,以避免污染我们的输出并且对于大型数据集计算速度更快(lfe
在C
)中实现内部转换。
顺便说一下,您应该在示例中交换"time"
和"Species"
:
test <- plm(Sepal.Length ~ Sepal.Width + Petal.Length,data=Data, model="within", index=c("Species", "time"))