看起来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,但这几乎不是最佳的。