我用Excel和Java做了很多次......这次我需要使用Stata来做,因为保存变量更方便labels.如何将dataset_1重组为下面的dataset_2?
我需要转换以下dataset_1:

到dataset_2:

我知道一种方法,这有点尴尬......我的意思是,我可以进行expand所有观察,然后创建变量obsNo,然后rename变量......有更好的方法吗?
是否可以使用具有二进制因变量的面板数据集在R中进行回归?我熟悉使用glm用于logit和probit以及plm用于面板数据,但我不确定如何将两者结合起来.是否有任何现有的代码示例?
谢谢.
编辑
如果我能弄清楚如何提取plm()在进行回归时使用的矩阵,也会有所帮助.例如,您可以使用plm来执行固定效果,或者您可以使用适当的虚拟变量创建矩阵,然后通过glm()运行它.然而,在这样的情况下,自己生成假人很烦人,让plm为你做更容易.
亚别
我使用带有plm的线性面板模型创建了两个回归模型,并使用带有pglm包的泊松创建了一个广义面板模型.
library(plm); library(pglm)
data(Unions) # from pglm-package
punions <- pdata.frame(Unions, c("id", "year"))
fit1 <- plm(wage ~ exper + rural + married, data=punions, model="random")
fit2 <- pglm(wage ~ exper + rural + married, data=punions, model="random", family="poisson")
Run Code Online (Sandbox Code Playgroud)
我现在想通过绘制一组散点图中的拟合值来图形化地比较两个拟合.最好沿着这些行使用ggplot2:
library(ggplot2)
ggplot(punions, aes(x=exper, y=wage)) +
geom_point() +
facet_wrap(rural ~ married)
Run Code Online (Sandbox Code Playgroud)
我考虑过简单地使用ggplot2 stat_smooth(),但(也许不足为奇)它似乎不能识别我数据的面板格式.手动提取预测值predict似乎也不适用于pglm模型.
如何在此图中叠加我的两个面板模型的预测值?
我正在尝试使用 plm 来估计一些不平衡面板数据的一阶差分模型。我的模型似乎有效,并且我得到了系数估计值,但我想知道是否有办法获得每个观察值的残差(或拟合值)。
我遇到了两个问题,我不知道如何将残差附加到与之相关的观察中,而且我似乎得到了错误的残差数量。
如果我使用 model.name$residuals 从估计模型中检索残差,我会得到一个比 model.name$model 短的向量。
require(plm)
X <- rnorm(14)
Y <- c(.4,1,1.5,1.3,1,4,5,6.5,7.3,3.7,5,.7,4,6)
Time <- rep(1:5,times=2)
Time <- c(Time, c(1,2,4,5))
ID <- rep(1:2,each=5)
ID <- c(ID,c(3,3,3,3))
TestData <- data.frame("Y"=Y,"X"=X,"ID"=ID,"Time"=Time)
model.name <- plm(Y~X,data=TestData,index = c("ID","Time"),model="fd")
> length(model.name$residuals)
[1] 11
> nrow(model.name$model)
[1] 14
Run Code Online (Sandbox Code Playgroud)
(注意:ID=3 缺少 t=3 的观察)
查看 model.name$model 我发现它包含所有观察结果,包括 ID 的每个成员的 t=1 。在第一次差分中,t=1 观测值将被删除,因此在这种情况下,所有时间段的两个 ID 都应具有来自剩余时间段的 4 个残差。ID=3 应该有 t=2 的残差,t=3 没有残差,因为它丢失了,t=4 没有残差,因为没有差异值(由于缺少 t=3 值),然后有 t 的残差=5。
由此看来应该有 10 个残差,但我有 11 个。如果有人帮助我解释为什么有这么多残差,以及如何将残差连接到正确的索引(ID 和时间),我将不胜感激。
同事!我有面板数据:
Company year Beta NI Sales Export Hedge FL QR AT Foreign
1 1 2010 -2.2052800 293000 1881000 78.6816 0 23.5158 1.289 0.6554 3000
2 1 2011 -2.2536069 316000 2647000 81.4885 0 21.7945 1.1787 0.8282 22000
3 1 2012 0.3258693 363000 2987000 82.4908 0 24.5782 1.2428 0.813 -11000
4 1 2013 0.4006030 549000 4546000 79.4325 0 31.4168 0.6038 0.7905 71000
5 1 2014 -0.4508811 348000 5376000 79.2411 0 37.1451 0.6563 0.661 -64000
6 1 2015 0.1494696 355000 5038000 77.1735 0 …Run Code Online (Sandbox Code Playgroud) 我一直在使用R的 " plm "包来进行面板数据的分析.在这个包中用于在"固定效应"或"随机效应"模型之间进行选择的重要测试之一称为Hausman类型.Stata也可以进行类似的测试.这里的要点是Stata要求首先估计固定效应,然后是随机效应.但是,我没有在"plm"包中看到任何这样的限制.所以,我想知道" plm "包是否首先具有默认的"固定效果",然后是"随机效应"第二.供您参考,我在下面提到了Stata和R中我为分析所遵循的步骤.
*
Stata Steps: (data=mydata, y=dependent variable,X1:X4: explanatory variables)
*step 1 : Estimate the FE model
xtreg y X1 X2 X3 X4 ,fe
*step 2: store the estimator
est store fixed
*step 3 : Estimate the RE model
xtreg y X1 X2 X3 X4,re
* step 4: store the estimator
est store random
*step 5: run Hausman test
hausman fixed random
#R steps (data=mydata, y=dependent variable,X1:X4: explanatory variables)
#step 1 …Run Code Online (Sandbox Code Playgroud) 我有一个数据框:
df = pd.DataFrame({'year':[2000,2000,2000,2001,2001,2002,2002,2002],'ID':['a','b','c','a','b','a','b','c'],'values':[1,2,3,4,5,7,8,9]})
Run Code Online (Sandbox Code Playgroud)
我想创建一个列,其中包含每个 ID 年的滞后值,例如,2000 年的 ID'a' 的值为 1,因此 2001 年的 ID'a' 的预值为 1。关键点是,如果一个 ID 在前一年没有值(因此某些 ID 的年份不连续),则预值应该为 NaN,而不是两年前的值。例如,ID'c' 在 2001 年没有出现,那么对于 2002 年,ID'c' 的预值应该 = NaN。理想情况下,最终输出应如下所示:

我尝试了 df.groupby(['ID'])['values'].shift(1),但它给出了以下内容:

问题是,当 ID'c' 没有一年前的值时,将使用两年前的值。我还尝试了多索引移位,这给了我相同的结果。
df.set_index(['year','ID'], inplace = True)
df.groupby(level=1)['values'].shift(1)
Run Code Online (Sandbox Code Playgroud)
有效的就是这里提到的答案。但由于我的数据帧相当大,合并会杀死内核。到目前为止,我还没有找到更好的方法。我希望我清楚地解释了我的问题。
我想控制包含一百多个级别的因子变量,而不将该控制的结果输出到汇总表。请注意,我还对复制 Stata 命令的速度感兴趣,而不仅仅是对输出进行表面更改。
在 Stata 中我可以像这样使用“absorb”:
use http://www.stata-press.com/data/r14/abdata.dta, clear
. xtreg n w k i.year, fe
Fixed-effects (within) regression Number of obs = 1,031
Group variable: id Number of groups = 140
R-sq: Obs per group:
within = 0.6277 min = 7
between = 0.8473 avg = 7.4
overall = 0.8346 max = 9
F(10,881) = 148.56
corr(u_i, Xb) = 0.5666 Prob > F = 0.0000
------------------------------------------------------------------------------
n | Coef. Std. Err. t P>|t| [95% Conf. Interval]
-------------+----------------------------------------------------------------
w | …Run Code Online (Sandbox Code Playgroud) 正如标题所说。我加载后pglm,lag停止正常工作。
library(pglm)
c(1,2,3,4) %>% lag()
Run Code Online (Sandbox Code Playgroud)
该对象被转换为时间序列,并且不再与 tibbles 兼容。
即使卸载pglm, 的依赖lag仍然有效。
一个解决方案可能是实际上从不加载pglm,但是如果我lag(x)在公式中有一个
pglm:pglm(
family= poisson,
y ~ lag(x),
model = "within", index="id",
data = db
)
Run Code Online (Sandbox Code Playgroud)
该算法无法收敛到估计值。由于某些原因,甚至强迫发生这种情况stats::lag(x)。有趣的是,相反,如果pglm已加载,则y ~ lag(x)可以正常工作y ~ stats:lag(x)。
这是唯一有效的情况,呵呵!我唯一想到的另一件事是外部公式dplyr::lag是冲突的罪魁祸首。
我不知道如何优化工作流程,您有建议吗?
我可以知道一个 R 包和代码来运行固定效应工具变量 (IV) 回归与可用的诊断测试(例如,弱仪器测试、外生性测试(使用 Wu-Hausman)、Sargan 测试)?
我知道plm代码提供了固定效应 IV 回归,但不幸的是它的诊断测试不可用。
即使我iv_robust从estimatr包中运行代码并指定为diagnostics = TRUE,它也会生成一条警告消息:
diagnostics“在 iv_robust(.. :如果使用的话不会返回fixed_effects。”
因此,也无法使用代码以固定效果运行任何诊断iv_robust。
我还有 x 和 x^2 内生变量。我想知道运行固定效应 IV 回归的最佳方法是什么,以及如何对这些进行诊断测试。
panel-data ×10
r ×8
plm ×5
regression ×2
stata ×2
dataframe ×1
diagnostics ×1
instruments ×1
output ×1
pandas ×1
python ×1