问题标签 [plm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
924 浏览

r - 删除 PLM 数据框中的 NA 值过多的行

我正在处理从 1950 年到 2003 年 180 个国家/地区的相当大的数据组。我一直在 R 中使用 plm 包。我需要做的一件事是删除 GDP 观测值太少的国家,或者,在其他话说,NA的太多了。这是我正在尝试做的一个虚拟示例

然后我生成了一个向量,该向量计算每个国家/地区有多少 GDP 观测值,如下所示

产生向量

我现在想做的是使用这个向量来制作一个pdata.frame只包括gdp.observations高于某个阈值的国家 - 例如,15。有没有很好的方法来做到这一点?

0 投票
4 回答
4730 浏览

r - plm:使用 fixef() 手动计算固定效应双向模型的拟合值

请注意:我试图让代码同时处理时间和个人固定效果,以及不平衡的数据集。下面的示例代码适用于平衡数据集。

请参阅下面的编辑

我正在尝试使用plm包手动计算固定效应模型(具有个人和时间效应)的拟合值。plm这更像是一个练习,以确认我了解模型和包的机制,我知道我可以从两个相关问题(herehere)中从对象中获取拟合值。

从小plm插图 (p.2) 来看,基础模型是:

y _it = alpha + beta _transposed * x _it + ( mu _i + lambda _t + epsilon _it)

其中 mu_i 是误差项的单个分量(又名“个体效应”),而 lambda_t 是“时间效应”。

可以通过 using 提取固定效应fixef(),我认为我可以使用它们(连同自变量)来计算模型的拟合值,使用(带有两个自变量)以这种方式:

适合_it = alpha + beta _1 * x1 + beta _2 * x2 + mu _i + lambda _t

这就是我失败的地方——我得到的值与拟合值相去甚远(我得到的值是实际值与模型对象中的残差之间的差异)。一方面,我看不到alpha任何地方。我尝试将固定效果显示为与第一个、均值等的差异,但没有成功。

我错过了什么?这很可能是对模型的误解,或者代码中的错误,恐怕......提前致谢。

PS:其中一个相关问题提示pmodel.response()应该与我的问题有关(以及没有plm.fit功能的原因),但它的帮助页面并不能帮助我理解这个功能的实际作用,我找不到任何示例如何解释它产生的结果。

谢谢!

我所做的示例代码:

我的会话如下:

编辑:(2015-02-22) 由于这引起了一些兴趣,我将尝试进一步澄清。我试图拟合一个“固定效应”模型(又名“内部”或“最小二乘虚拟变量”,正如 p.3 顶部段落中plm 包小插图所说的那样)——相同的斜率,不同的截距。

这与为time和添加哑元后运行普通 OLS 回归相同idplm使用下面的代码,我可以使用 base从包中复制拟合值lm()。对于假人,很明显 id 和 time 的第一个元素都是要比较的组。我仍然不能做的是如何使用plm包的功能来做同样的事情,我可以很容易地使用lm().

希望这对可能感兴趣的其他人有用。问题可能是关于如何处理我故意创造的缺失值plmfixef我尝试使用type=参数fixef但没有效果。

0 投票
1 回答
12016 浏览

r - 面板数据 R 中的多重共线性检验

我正在使用plm包运行面板数据回归,R并希望控制解释变量之间的多重共线性。
我知道 -package 中有这个vif()功能car,但据我所知,它不能处理面板数据输出。
可以进行其他诊断,plm例如单位根检验,但我没有找到计算多重共线性的方法。

有没有办法计算类似的测试vif,或者我可以将每个变量视为时间序列,省略面板信息并使用car包运行测试?

我不能透露数据,但问题应该与所有面板数据模型有关。
该维度大约是 1,000 个观测值,超过 50 个时间段。
我使用的代码如下所示:

接着

返回错误。


先感谢您。

0 投票
1 回答
1064 浏览

r - 为什么 PLM 会创建大量对象并且无法打开它们

我正在研究一个包含 110 万个观测值 x 41 个变量的大型(但不是巨大的)数据库。数据排列为不平衡的面板。使用这些变量,我指定了三个不同的模型,并将它们分别运行为 1) 固定效应、2) 随机效应和 3) 合并 OLS 回归。

仅包含数据库的原始 .RData 文件约为 15Mb。包含数据库和回归结果(共 9 个回归)的 .RData 权重约为 650Mb。我确实意识到(来自基本文档)

即便如此,我还是无法理解为什么这些文件应该如此庞大。为了避免在处理plm对象时内存过载,我将它们保存在三个不同的文件中(现在每个文件的权重约为 200Mb)。一小时前我打电话summary来查看固定效应模型的结果,但它还没有显示任何结果。我现在的问题很简单。你觉得这是正常行为吗?我可以做些什么来减小plm对象大小并加快结果检索?

以下是您可能想知道的一些事情:

  • 我使用的数据库是data.table格式
  • formula回归中的 s 是预先组装的,并包含在plm前面的调用中as.formula(),如此处所建议。例子:

form<-y~x1+x2+x3+...+xn

mod.fe<-plm(as.formula(form), regr, effect="individual", model="within", index=c("id", "year"))

请让我知道我是否可以提供任何其他信息,并且您可能需要回答这个问题。

编辑

我设法建立了一个与我正在研究的具有相似特征的小型数据库。这里是:

我使用的公式和plm调用是:

使用object.size()@BenBolker 的建议,我发现调用生成了一个plm权重为 64.5Kb 的对象,而原始数据帧的大小为 6.9Kb,这意味着结果大约是输入矩阵的 10 倍。然后我在这里设置了下面@zx8754 建议的选项,但不幸的是它们没有效果。当我终于打电话时summary(plm.f),我收到了错误消息:

我最终也用我的大型数据库得到了它,但只是经过数小时的计算。 这里建议问题可能是由于系数矩阵是奇异的。is.matrix.singular()然而,在包中发现的奇点测试matrixcalc结果证明并非如此。

您可能想知道的另外几件事:

  • year,是ethnic因子health
  • 除最后一个变量外,公式中的变量或多或少是不言自明的。event是在特定时间发生的假定的创伤事件。如果某年发生事件,则编码为 1,否则编码为 0。如果这些事件之一发生在前一年(减 1),则该变量evm1等于 1,否则为 0。同样,evp1如果事件发生在下一年(加 1),则为 1,否则为 0。变量ndm.ndp.工作方式相同,但当距离不可观察(因为某个人的时间段太短)时它们被编码为 1,否则为 0。如此紧密相连的变量的存在引发了对完美共线性的怀疑。然而,如上所述,测试表明该矩阵是非奇异的。

让我再告诉一次,如果有人能回答这个问题,我将非常感激。

0 投票
2 回答
604 浏览

r - plm 模型“内部” - R 中的警告消息

我在运行这个 plm 模型时遇到问题:

我的数据是(示例):

我运行以下回归:

并收到以下警告消息:[1]

怎么了?

0 投票
0 回答
967 浏览

r - PLM 陷入虚拟变量陷阱——如何解决?

一个例子:

fem是固定效应模型(拟合 plm),lsdv是等效最小二乘虚拟变量模型(拟合 lm)

很明显 plm 正在估计系数,而且实际上两个模型中的系数是相同的,因为它们应该是相同的。但是当我去总结结果时,plm 很难,而且我很确定原因是 timeXgroup 固定效应,由于虚拟变量陷阱,其中一些需要自动省略。(例如,lm 似乎知道如何自动删除彼此精确线性组合的变量)。

我该如何解决这个问题?我更喜欢使用 plm,因为它提供的输出比 lm 更简洁,每个横截面单元都有虚拟变量。

0 投票
1 回答
1445 浏览

r - 在 plm 中循环子集

我正在尝试在 R 中编写一些非常简单的东西(我认为),但我似乎无法做到正确。我有一个包含 50 个国家(1 到 50 个)的数据集,每个国家有 15 年,每个国家有大约 20 个变量。现在我只OS在我的因变量 ( ) 上测试一个变量 ( SMD)。我想按国家/地区循环执行此操作,因此我将获得每个国家/地区的输出而不是整体输出。

我认为首先创建一个子集是明智的(以便能够先查看国家 1,之后我的循环应该增加国家的数量并测试国家 2)。我相信我在页面底部的回归应该给我国家 1 的输出,而不是整个数据集的总分。但是我不断收到这些错误:

我可能认为这一切都是错误的,但我相信如果不让它工作,那么进一步对循环本身进行编程是没有意义的。非常感谢任何有关解决我的错误或其他编程循环方式的建议。

我的代码:

编辑:导致相同错误的前 2 个国家/地区的数据样本

dput(mydata)结构(列表(区域=结构(c(1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L,1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c( "NAF", "SAME"), class = "factor"), Country = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L) ,日期= C(1995L,1996L,1997L,1998L,1998L,1999L,2000L,2001L,2002L,2002L,2003L,2004L,2004L,2005L,2006L,2007L,2007L,2008L,2008L,2010L,2010L,2011L,2012L,2012L,2013L,2013L,2014L,1996L,19977L,19977年, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L 25, L = 结构22L、20L、23L、9L、7L、5L、2L、1L、4L, 3L, 6L, 10L, 11L, 13L, 11L, 8L, 26L, 25L, 31L, 29L, 28L, 21L, 30L, 24L, 24L, 16L, 11L, 14L, 12L, 17L, 18L, 29L, 32L, 32L, 33L, 34L), .Label = c("51.5", "52.2", "55.6", "56.4", "56.7", "57.7", "57.8", "58.3", "59", "59.2 ”、“59.6”、“59.9”、“60.2”、“60.4”、“61.1”、“61.2”、“62.2”、“62.3”、“62.8”、“63.2”、“63.3”、“63.8”、 “63.9”、“64.2”、“64.3”、“64.5”、“64.7”、“65.3”、“65.5”、“65.6”、“66.4”、“68”、“69.6”、“70.7”)、类=“因子”),SMD =结构(c(7L,12L,20L,21L,17L,15L,13L, 10L, 14L, 22L, 23L, 33L, 1L, 32L, 29L, 34L, 28L, 25L, NA, NA, 9L, 6L, 8L, 4L, 2L, 35L, 3L, 36L, 5L, 11L, 16L, 18L, 24L, 19L, 26L, 31L, 27L, 30L, NA, NA), .Label = c(“100.3565662”, “13.44788845”, “13.45858747”, “13.56815534”, “15.05892471”, “171.8.0478”, “171.8.0478”, “171.8.0478” ", "18.3101351", "19.34226196", "21.25530884", "21.54423145", "23.75898948", "24.08770926", "26.39817342", "29.44079001", "31.40605191", "34.46667996", "34.52913657", "35.66070947", “36.4419931”、“39.16875621”、“44.0126137”、“45.72949566”、“49.13062679”、“54.83730247”、“ 56.87886311”,“ 59.80971583”,“ 60.5658962”,“ 69.20148901”,“ 70.91362874”,“ 72.64845214 )), .Names = c("Region", "Country", "Date", "OS", "SMD"), class = "data.frame", row.names = c(NA, -40L))国家”,“日期”,“操作系统”,“SMD”),类 =“data.frame”,row.names = c(NA,-40L))国家”,“日期”,“操作系统”,“SMD”),类 =“data.frame”,row.names = c(NA,-40L))

0 投票
1 回答
601 浏览

r - 使用 NA 填充 PLM 模型的拟合值

我有以下数据集

NA在某些变量中包含s。我使用plm包来估计以下模型:

现在,我想提取拟合值。据我了解,最好的方法是从我的响应变量中减去残差var1(因为没有函数可以获取拟合值pml参见此处):

但它排除了带有NAs 的行。我想NA在原始数据集有NAs 的地方用 s 填充拟合值。必须有一种聪明而简单的方法来将NAs 从填充dt到我的拟合值,但我看不到它。非常感谢任何帮助!

0 投票
1 回答
208 浏览

r - 如果第一个模型是单变量 plm,Stargazer 会丢弃第一个回归量,但如果第一个模型是多变量 plm 则不会

我使用stargazer包来制作面板模型的 LaTeX 表(plm包)。如果第一个plm模型是单变量的,则stargazer删除该模型的回归量,但仍显示该模型。

如果我交换模型顺序以便第一个模型是多变量的,那么所有模型都会显示。我对模型没有这个问题lm。有解决办法吗?是否lm包含拦截是否重要plm

谢谢!这是一个例子。

这产生以下结果。

0 投票
1 回答
3345 浏览

r - R/plm:由于错误(系统在计算上是奇异的)而无法估计随机效应模型?

我想使用 PLM 包估计 R 中的一些面板数据模型。由于理论知识有限,我严格按照“计量经济学学院”的指示(代码here)。我根据我的数据(自己的依赖/独立变量)定制了该代码,但没有更改所有其他语法/公式。

现在问题来了:

除随机效应模型外,所有模型都可以进行估计,也可以对其结果进行总结和解释。在这里,我收到以下错误消息:

有没有人可以给我一个提示这个错误的真正含义?可能的根本原因是什么,我必须如何更正代码才能获得结果?

编辑: 更准确地说,这是我使用的 R 代码的一部分:

由于政策限制,我不允许上传数据。但我可以提供它是资产负债表数据的信息。因变量是资产负债表头寸随时间的标准偏差,应通过不同的资产负债表头寸来解释。这些主要是“位置 a / 平均值”类型的比率(比率 1 到 4)。作为额外的自变量,考虑了资产负债表上资产的平均总和。

再说一遍:实际上一切正常,只有最后一个模型(随机)产生所述错误。

最终问题可能是由比率的定义引起的?它们是使用变量“mean”定义的(它本身也是一个独立变量)?

编辑:回溯代码