在data.table中使用felm()按组未正确分配IDX

时间:2016-01-11 02:45:15

标签: r data.table

看起来felm包中的lfe函数可能存在错误,但我在此处发布此错误,以查看它是否可能是我的想法中的错误或是如何在data.table中提供信息?

以下简单示例将lm()的解与felm()的解决方案进行比较。

# Testing LFE package output incorrect IDX values.
require(data.table)
require(lfe)

# Solutions of regression models by cylinder.
dt <- data.table(mtcars)
sol <- dt[, list(model=list(lm(mpg ~ 0 + wt + factor(gear)))), by=cyl]
sol2 <- dt[, list(model=list(felm(mpg ~ wt | gear, .SD))), by=cyl] # using felm()

# Get coefficients from both models.
coef <- sol[, list(coef=coef(model[[1]]),
                   idx=names(coef(model[[1]]))), keyby=cyl]
coef2 <- sol2[, getfe(model[[1]]), keyby=cyl]

# Visually compare values for different gears.
coef[idx%like%"gear"]
#    cyl     coef           idx
# 1:   4 36.14931 factor(gear)3
# 2:   4 41.05802 factor(gear)4
# 3:   4 39.05476 factor(gear)5
# 4:   6 32.89790 factor(gear)3
# 5:   6 31.93766 factor(gear)4
# 6:   6 30.61227 factor(gear)5
# 7:   8 25.03750 factor(gear)3
# 8:   8 23.60107 factor(gear)5

coef2
#    cyl   effect obs comp   fe idx
# 1:   4 36.14931   1    1 gear   3
# 2:   4 41.05802   8    1 gear   4
# 3:   4 39.05476   2    1 gear   5
# 4:   6 32.89790   2    1 gear   3
# 5:   6 31.93766   4    1 gear   4
# 6:   6 30.61227   1    1 gear   5
# 7:   8 25.03750  12    1 gear   3
# 8:   8 23.60107   2    1 gear   4 # should be 5!

系数都相似,但请注意第8行IDX的差异.23.60107的值属于齿轮5,而不是4(数据集中没有8个气缸和4个齿轮的车辆)。有什么想法吗?

由于原始数据的大小,我需要使用felm()。现在我已经使用data.table(coef2, unique(dt, by=c("cyl", "gear")))按列添加了正确的ID,但这几乎不是最佳的。

0 个答案:

没有答案