我正在使用R来运行蒙特卡罗模拟,研究面板数据估计器的性能.因为我将进行大量的试验,所以我需要从我的代码中获得至少不错的性能.
Rprof在我的模拟的10次试验中使用表明,很大一部分时间花在了呼叫上summary.plm.前几行Rprofsummary提供如下:
$by.total
total.time total.pct self.time self.pct
"trial" 54.48 100.0 0.00 0.0
"coefs" 53.90 98.9 0.06 0.1
"model.matrix" 36.72 67.4 0.10 0.2
"model.matrix.pFormula" 35.98 66.0 0.06 0.1
"summary" 33.82 62.1 0.00 0.0
"summary.plm" 33.80 62.0 0.08 0.1
"r.squared" 29.00 53.2 0.02 0.0
"FUN" 24.84 45.6 7.52 13.8
Run Code Online (Sandbox Code Playgroud)
我正在调用summary我的代码,因为我需要得到系数估计的标准误差以及系数本身(我可以从plm对象得到).我的电话看起来像
regression <- plm(g ~ y0 + Xit, data=panel_data, model=model, index=c("country","period"))
coefficients_estimated <- summary(regression)$coefficients[,"Estimate"]
ses_estimated <- summary(regression)$coefficients[,"Std. Error"]
Run Code Online (Sandbox Code Playgroud)
我有一种唠叨的感觉,这是一个巨大的浪费cpu时间,但我不知道R如何做的事情,以避免调用摘要.我很欣赏有关幕后发生的事情的任何信息,或者某些方法可以减少这种情况.
我有一个df(一个pdata.frame对象):
head(df) :
Company Year Kapitalinkomster Bank.o.kassa Obligationer Lån Aktier Placeringar.andra.ftg Fodringar Reala.tillgångar
5-1948 5 1948 4.009780 0.8677505 40.12268 54.80897 1.4630271422 0.049855191 0.633959879 1.581139e+00
6-1948 6 1948 3.221688 0.9311173 71.16401 26.39038 0.4678139417 0.000000000 0.437931676 4.931845e-01
12-1948 12 1948 3.136025 0.7628832 46.10452 44.85120 4.1966304368 0.003740003 1.020092197 2.683785e+00
19-1948 19 1948 1.862666 0.1865510 16.82441 31.67412 0.7308074302 46.245334945 3.459693951 6.213455e-01
20-1948 20 1948 3.724516 1.7719721 70.98456 27.18631 0.0004305687 0.056565968 0.000165769 4.305687e-07
21-1948 21 1948 11.288744 1.1572048 64.21109 33.42962 0.2890377378 0.000000000 0.912175552 …Run Code Online (Sandbox Code Playgroud) 这里我有温度时间序列面板数据,我打算为它运行分段回归或三次样条回归.首先,我快速研究了分段回归概念及其在R in中的基本实现,SO初步了解了如何继续我的工作流程.在我的第一次尝试中,我试图通过使用splines::nsin splinespackage 来运行样条回归,但是我没有得到正确的条形图.对我来说,使用基线回归或分段回归或样条回归可以起作用.
以下是我的面板数据规范的一般情况:在下面显示的第一行是我的因变量,以自然对数项和自变量表示:平均温度,总降水量和11个温度箱以及每个箱宽(AKA,箱窗) )是3摄氏度.(< - 6,-6~-3,-3~0,...> 21).
可重复的例子:
以下是使用实际温度时间序列面板数据模拟的可重现数据:
set.seed(1) # make following random data same for everyone
dat <- data.frame(index=rep(c("dex111", "dex112", "dex113", "dex114", "dex115"),
each=30),
year=1980:2009,
region= rep(c("Berlin", "Stuttgart", "Böblingen",
"Wartburgkreis", "Eisenach"), each=30),
ln_gdp_percapita=rep(sample.int(40, 30), 5),
ln_gva_agr_perworker=rep(sample.int(45, 30), 5),
temperature=rep(sample.int(50, 30), 5),
precipitation=rep(sample.int(60, 30), 5),
bin1=rep(sample.int(32, 30), 5),
bin2=rep(sample.int(34, 30), 5),
bin3=rep(sample.int(36, 30), 5),
bin4=rep(sample.int(38, 30), 5),
bin5=rep(sample.int(40, 30), 5),
bin6=rep(sample.int(42, 30), 5),
bin7=rep(sample.int(44, 30), 5),
bin8=rep(sample.int(46, 30), 5),
bin9=rep(sample.int(48, 30), …Run Code Online (Sandbox Code Playgroud) 我正在尝试估计一个面板数据集,其中包含一个表示路线的地理区域(LoadArea,DischargeArea)的交互项.使用固定效果规范时,它不喜欢交互项(LoadArea*DischargeArea)并在汇总回归时产生以下错误:
mult_fe<-plm(log(DayRate)~LoadArea *DischargeArea + factor(Laycan.Day.Diff) + CapUtil + Age
+ I(Age^2) + WFRDWT + lag_BDTI, data=mult_reg1,model="within");
summary(mult_fe)
Error in crossprod(t(X), beta) : non-conformable arguments
Run Code Online (Sandbox Code Playgroud)
这在使用lm函数替换plm的正常OLS回归中工作正常.问题是为什么它不适用于我的模型?
我想使用 PLM 包估计 R 中的一些面板数据模型。由于理论知识有限,我严格遵循“计量经济学学院”(代码此处)的指示。我根据我的数据(自己的因变量/独立变量)定制了该代码,但没有更改所有其他语法/公式。
现在问题来了:
除随机效应模型外,所有模型都可以估计,并且它们的结果也可以总结和解释。这里我收到以下错误消息:
Error in solve.default(crossprod(X.m)) :
system is computationally singular: reciprocal condition number = 9.57127e-023
Run Code Online (Sandbox Code Playgroud)
有谁可以给我提示这个错误的实际含义吗?根本原因可能是什么?我必须如何更正代码才能获得结果?
编辑: 更准确地说,这是我使用的 R 代码部分:
# read in data
mydata<- read.csv2("Panel.csv")
attach(mydata)
# define dependant variable
sd1 <- cbind(sd)
# define independant variable
x <- cbind(ratio1, ratio2, ratio3, ratio4, mean)
# Set data as panel data
pdata <- plm.data(mydata, index=c("id","t"))
# Pooled OLS estimator
pooling <- plm(sd1 ~ x, data=pdata, model= "pooling")
summary(pooling)
# Between estimator
between <- …Run Code Online (Sandbox Code Playgroud) 所以我使用plmR中的包运行固定效果模型,我想知道如何比较两种模型中哪一种更合适.
例如,这是我构建的两个模型的代码:
library(plm)
eurofix <- plm(rlogmod ~ db+gdp+logvix+gb+i+logtdo+fx+ld+euro+core,
data=euro,
model="within")
eurofix2 <- plm(rlogmod ~ db+gdp+logvix+gb+i+logtdo+ld+euro+core,
data=euro,
model="within")
Run Code Online (Sandbox Code Playgroud)
我知道通过常规lm调用,我可以通过运行anova测试来比较两个模型,但在这种情况下似乎不起作用.我总是得到以下错误:
Error in UseMethod("anova") :
no applicable method for 'anova' applied to an object of class "c('plm', 'panelmodel')"
Run Code Online (Sandbox Code Playgroud)
有人知道如何处理plm包装吗?Wald测试是否合适?
当使用 plm 包使用此语法估计池模型时,我得到的 R2 接近 0.8。
library(plm)
data <- employmentsez
data$lfirms2 <- data$lfirms*data$lfirms
data$sezname <- as.factor(data$sezname)
data <- plm.data(data, index=c("code", "year"))
fit1 <- plm(lemployment ~ lfirms + lfirms2 + lfirmsfor + lwages + nuts51 + lgovgrants + leusubs + agrishare, data=data, model="pooling")
R-Squared: 0.7972
Adj. R-Squared: 0.79679
Run Code Online (Sandbox Code Playgroud)
使用完全相同的规范并再次使用 plm,但现在此语法我得到小于 0.1 的 R2,并且调整后的 R2 为负值。
library(plm)
data <- employmentsez
data$lfirms2 <- data$lfirms*data$lfirms
data$sezname <- as.factor(data$sezname)
data <- plm.data(data, index=c("code", "year"))
fit1 <- plm(lemployment ~ lfirms + lfirms2 + lfirmsfor + lwages …Run Code Online (Sandbox Code Playgroud) 我可以使用lme4在Panel Data上指定Random和Fixed Effects模型吗?
我从伍尔德里奇(2013,第494-5)在实施例重做14.4 - [R .感谢这个网站和这个博客文章,我已经在plm包中做了它,但我很好奇我是否可以在lme4包中做同样的事情?
这是我在plm包中所做的.非常感谢有关如何使用lme4进行相同操作的任何指示.首先,需要包和加载数据,
# install.packages(c("wooldridge", "plm", "stargazer"), dependencies = TRUE)
library(wooldridge)
data(wagepan)
Run Code Online (Sandbox Code Playgroud)
其次,我估计使用plm包在例14.4(Wooldridge 2013)中估算的三个模型,
library(plm)
Pooled.ols <- plm(lwage ~ educ + black + hisp + exper+I(exper^2)+ married + union +
factor(year), data = wagepan, index=c("nr","year") , model="pooling")
random.effects <- plm(lwage ~ educ + black + hisp + exper + I(exper^2) + married + union +
factor(year), data …Run Code Online (Sandbox Code Playgroud) 我有一些想要显示的plm模型,但我只得到"Num. obs.", "Adj. R^2",和, "R^2"(参见下面的工作示例)。我会像howver所有显示器小n,T,F-statistic,和p-value所有的东西,我在默认获得summary()的呼叫。
我得到的一个例子。首先是一些数据和需要的包,
# install.packages(c("wooldridge", "plm", "texreg"), dependencies = TRUE)
library(wooldridge)
data(wagepan)
library(plm)
Run Code Online (Sandbox Code Playgroud)
二、部分机型,
POLS <- plm(lwage ~ educ + black + hisp + exper+I(exper^2)+ married + union +
factor(year), data = wagepan, index=c("nr","year") , model="pooling")
RE <- plm(lwage ~ educ + black + hisp + exper + I(exper^2) + married + union +
factor(year), …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 估计的集群鲁棒标准误差,但它们都不允许随机效应/拦截。
plm ×10
r ×10
regression ×2
anova ×1
latex ×1
lme4 ×1
optimization ×1
panel ×1
panel-data ×1
profiling ×1
random ×1
summary ×1
texreg ×1