我基于一个包含大量单位固定效应的“巨型”面板数据运行了回归。因此,我使用了“lfe”包中的“felm()”函数。此外,在回归中有两个连续变量的交互项。但是,当绘制x对y的边际效应如何随x2变化时,使用“felm()”生成的对象似乎与大多数绘图函数(例如“ggplot”、“interplot()”和“meplot”)不兼容。但是我必须使用“felm()”,因为我需要控制大量的单位固定效应(就像Stata中的“reghdfe”一样)。那么,我该如何在R中解决这些问题?请随意让我知道一些方法。谢谢!
以下是interplot()无法与felm()一起使用的示例:
以下是interplot()无法与felm()一起使用的示例:
# An example data:
library(lfe)
library(ggplot2)
library(interplot)
oldopts <- options(lfe.threads=1)
x <- rnorm(1000)
x2 <- rnorm(length(x))
id <- factor(sample(10,length(x),replace=TRUE))
firm <- factor(sample(3,length(x),replace=TRUE,prob=c(2,1.5,1)))
year <- factor(sample(10,length(x),replace=TRUE,prob=c(2,1.5,rep(1,8))))
id.eff <- rnorm(nlevels(id))
firm.eff <- rnorm(nlevels(firm))
year.eff <- rnorm(nlevels(year))
y <- x + 0.25*x2 + id.eff[id] + firm.eff[firm] +
year.eff[year] + rnorm(length(x))
mydata <- data.frame(cbind(y, x, x2, id, firm, year))
# Regression using felm():
reg1 <- felm(y ~ x + x2 + x:x2|id+firm+year|0|id, data=mydata)
summary(reg1)
# Using interplot() to plot marginal effects
interplot(m=reg1, var1="x", var2="x2", ci=0.9)
然后出现错误:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘sim’ for signature ‘"felm"’
我也尝试了meplot(),但仍无法正常工作:
# Using meplot() to plot marginal effects
library(evir)
meplot(model=reg1, var1="x", var2="x2", int="x:x2", vcov=vcov(reg1), data=mydata)
我遇到了一个错误:
Error in meplot(model = reg1, var1 = "x", var2 = "x2", int = "x:x2", vcov = vcov(reg1), :
(list) object cannot be coerced to type 'double'
help(lfe, pac=lfe)
,我看到了一个实例。你能否使用它来创建一个可以重现你的问题的data
对象?目前你的问题无法重现,因为只有你能看到data
。顺便说一句,在 R 中,名称data
是基本函数的名称,因此将其用作对象名称是不被赞同的。 - IRTFMdata.frame(cbind(y, x, x2, id, firm, year))
。这会把所有的因子转换成数字类型。我不惊讶你遇到了麻烦。data.frame(cbind(...))
这种策略经常是 R 初学者问题的根源。扔掉你从中复制的书吧。 - IRTFMggplot2
实现了自己想要的,但是手动绘制它。 - Ronald