当虚拟变量的数量导致模型矩阵超过R最大向量长度时,是否有一种简单的方法可以在R中进行固定效应回归?例如,
> m <- lm(log(bid) ~ after + I(after*score) + id, data = data)
Error in model.matrix.default(mt, mf, contrasts) :
cannot allocate vector of length 905986769
Run Code Online (Sandbox Code Playgroud)
其中id是一个因子(并且是导致上述问题的变量).
我知道我可以通过并取消所有数据,但这会抛出标准错误(是的,你可以用手动计算SE的"df"调整,但我想最小化我的概率引入新的错误.我看过plm软件包,但它似乎只针对具有时间组件的经典面板数据而设计,这不是我的数据结构.
我正在使用plm包中运行面板数据回归,R并希望控制解释变量之间的多重共线性.
我知道-package中有vif()函数car,但据我所知,它不能处理面板数据输出.
的plm可以做其他的诊断,如单位根测试,但我发现没有方法来计算多重.
有没有办法计算类似的测试vif,或者我可以只将每个变量视为时间序列,省略面板信息并使用car包运行测试?
我无法透露数据,但问题应与所有面板数据模型相关.
该维度大约为1,000个观测值,超过50个时间段.
我使用的代码如下所示:
pdata <- plm.data(RegData, index=c("id","time"))
fixed <- plm(Y~X, data=pdata, model="within")
Run Code Online (Sandbox Code Playgroud)
然后
vif(fixed)
Run Code Online (Sandbox Code Playgroud)
返回错误.
先感谢您.
我试图估计一个具有滞后和多组效应的大型动态固定效果面板数据模型.
我知道包中的pseries对象plm可以处理具有滞后的面板回归.
library(plm)
data("EmplUK", package = "plm")
Em <- pdata.frame(EmplUK)
plm(emp~output+capital + lag(wage, 1),data=Em,model="within")
Run Code Online (Sandbox Code Playgroud)
lfe面板对象的包装中是否有类似的解决方案,以便我可以利用提供的快速性lfe?
我正在尝试pgmm使用 EmplUK 数据集按照在线示例运行回归(Arellano Bond estimator)。
我的数据集不平衡,有一些缺失值(我也删除了,没有任何区别)。这是来自 R' 数据框的粘贴。
row.names ID Year p I
1 23 1 1992 NA NA
2 22 1 1993 17.01 NA
3 21 1 1994 15.86 NA
4 20 1 1995 17.02 7.512347
5 19 1 1996 20.64 7.685104
6 18 1 1997 19.11 12.730282
7 17 1 1998 12.76 12.633871
8 16 1 1999 17.90 7.416381
9 15 1 2000 28.66 6.396114
10 14 1 2001 24.46 9.213729
11 13 1 2002 24.99 …Run Code Online (Sandbox Code Playgroud) 我试图在R的plm包中运行具有固定效果的回归model = 'within',同时具有聚类标准错误.使用Cigar来自的数据集plm,我正在运行:
require(plm)
require(lmtest)
data(Cigar)
model <- plm(price ~ sales + factor(state), model = 'within', data = Cigar)
coeftest(model, vcovHC(model, type = 'HC0', cluster = 'group'))
Estimate Std. Error t value Pr(>|t|)
sales -1.21956 0.21136 -5.7701 9.84e-09
Run Code Online (Sandbox Code Playgroud)
这与我使用Stata(将Cigar文件编写为.dta)得到的结果略有不同:
use cigar
xtset state year
xtreg price sales, fe vce(cluster state)
price Coef. Std. Err. t P>t [95% Conf. Interval]
sales -1.219563 .2137726 -5.70 0.000 -1.650124 -.7890033
Run Code Online (Sandbox Code Playgroud)
即,标准误差和T统计量是不同的.我尝试用不同的"类型"重新运行R代码,但没有一个给出与Stata相同的结果.我错过了什么吗?
将stargazer与plm结合使用时出现错误。对于普通的线性模型,一切正常。下面是一个例子:
library(plm)
library(stargazer)
# create test data
dat <- data.frame(y=runif(1000),
x1=runif(1000),
id=rep(1:50, each=20),
time=rep(1:20, times=50))
pdat <- pdata.frame(dat, index=c("id", "time"))
# estimate linear model
lm_1 <- lm(y~x1, data = pdat)
summary(lm_1)
stargazer(lm_1, type="text", keep.stat = c("n"))
# estimate fixed effects model
plm_1 <- plm(y ~ x1, data=pdat, model = "within", effect = "individual")
summary(plm_1)
stargazer(plm_1, type="text", keep.stat = c("n"))
Run Code Online (Sandbox Code Playgroud)
最后一次调用返回
stargazer(plm_1, type="text", keep.stat = c("n"))
Error in UseMethod("logLik") :
no applicable method for 'logLik' applied to …Run Code Online (Sandbox Code Playgroud) 我正在从 Stata 迁移到 R ( plm package) 以进行面板模型计量经济学。在 Stata 中,随机效应等面板模型通常报告内部、之间和整体 R 平方。
我发现plm随机效应模型中报告的 R 平方对应于内部 R 平方。那么,有没有办法使用plm packagein R获得整体和 R 平方之间的关系?
请参阅 R 和 Stata 的相同示例:
library(plm)
library(foreign) # read Stata files
download.file('http://fmwww.bc.edu/ec-p/data/wooldridge/wagepan.dta','wagepan.dta',mode="wb")
wagepan <- read.dta('wagepan.dta')
# Random effects
plm.re <- plm(lwage ~ educ + black + hisp + exper + expersq + married + union + d81 + d82 + d83 + d84 + d85 + d86 + d87,
data=wagepan,
model='random',
index=c('nr','year'))
summary(plm.re)
Run Code Online (Sandbox Code Playgroud)
在斯塔塔: …
我觉得我的基本问题是如何在一个系列中回归多个系列.虽然我的系列时间不相等,但即使我使用相同的时间长度系列进行库存和基准测试(我可以根据需要提供我手动相等的数据),我收到错误.我想估计一个市场模型(即,对于所有股票,每天对基准回报的股票回报进行回归),并以长格式从回归中得出β值的数据框.因此,对于提供的样本,β值数据框中将有4个beta值(ABC为2,XYZ为2).这是两个股票价格的样本
idf <- structure(list(Firm = c("ABC", "ABC", "ABC", "ABC", "ABC", "ABC", "ABC",
"ABC", "ABC", "ABC", "ABC", "ABC", "ABC", "ABC", "ABC", "XYZ", "XYZ", "XYZ",
"XYZ", "XYZ", "XYZ", "XYZ", "XYZ", "XYZ", "XYZ", "XYZ", "XYZ", "XYZ", "XYZ",
"XYZ"), Date = structure(c(NA, 1451642400, 1451646000, 1451649600, 1451653200,
1451656800, 1451660400, 1451664000, 1451898000, 1451901600, 1451905200,
1451908800, 1451912400, 1451916000, 1451919600, NA, 1451642400, 1451646000,
1451649600, 1451653200, 1451656800, 1451660400, 1451664000, 1451898000,
1451901600, 1451905200, 1451908800, 1451912400, 1451916000, 1451919600),
tzone = "UTC", class = c("POSIXct", "POSIXt")), Price = c(1270.9, 1277,
1273.25, 1273.85, …Run Code Online (Sandbox Code Playgroud) 我正在使用面板数据的 plm 包来进行工具变量估计。但是,似乎不支持使用 vcovHC() 函数计算集群鲁棒标准误差。更具体地说,当我使用 vcovHC() 函数时,显示以下错误消息:
vcovG.plm 中的错误(x,type = type,cluster = cluster,l = 0,inner = >inner,:方法不适用于 IV
例子:
data("Wages", package = "plm")
IV <- plm(lwage ~ south + exp | wks + south,
data = Wages, model = "pooling", index = 595)
vcvIV <- vcovHC(IV)
Run Code Online (Sandbox Code Playgroud)
根据这个帖子,有人在两年前进行了修复。问题有进展吗?我知道包“lfe”和“ivpack”允许计算用于 IV 估计的集群鲁棒标准误差,但它们都不允许随机效应/拦截。
我有一个这样的数据框('数学')(有三种不同的方法,虽然只显示了一种) - 数据框
我正在尝试为 MathScore 创建一个多级增长模型,其中 VerbalScore 是一个独立的、时间不变的随机效应。
我相信 R 代码应该与此类似 -
random <- plm(MathScore ~ VerbalScore + Method, data=math, index=c("id","Semester"),
model="random")
Run Code Online (Sandbox Code Playgroud)
但是,运行此代码会导致以下错误:
plm.fit(object, data, model = "within", effect = effect) 中的错误:
空模型
我相信这是索引的问题,因为如果我使用以下代码将运行:
random <- plm(MathScore ~ VerbalScore + Method + Semester, data=math, index="id",
model="random")
Run Code Online (Sandbox Code Playgroud)
对于如何创建所描述的多级随机效应模型的任何建议,我将不胜感激。