【问题标题】:R: Create panel dataset from time series variablesR:从时间序列变量创建面板数据集
【发布时间】:2019-07-20 00:07:59
【问题描述】:

我有一个具有以下形式的数据集:

Year ... X1   X2 ... XN ... Y1 Y2 ... Y5 ...
2006 ... 
2007
...
2016

我对每个 Y 作为因变量和 X 作为自变量运行单独的回归。

我想将此数据集转换为面板数据集,以便运行固定效果面板回归。

知道如何将我的数据集转换为所需的格式吗?

我发布我的数据集的一部分以防万一:

structure(list(Year = c(2006, 2007, 2008, 2009, 2010, 2011, 2012, 
2013, 2014, 2015, 2016), X1 = c(NA, 6231989.16, 
6286192.8, 7997940.88, 5964272.33, 2220471.25, 1161886.38, 1854724.67, 
7414435.45, 1030764.86, 1760876.07), X2 = c(NA, 
16033423.97, 14591392.59, 10807666.03, 10568403.25, 9895997.3, 
7783115.74, 9609331.42, 13195226.51, 9840290.11, 10612093.19), 
Y2 = c(NA, NA, NA, 26041118.06, 
    18038215.91, 19174941.38, 15250404.65, 19670622.34, 19969051.53, 
    13454512.28, 17033742.37), 
    Y1 = c(NA, 51860962.74, 38081542.65, 24057388.46, 24340687.5, 
    27960591.55, 25526505.72, 31599623.65, 38597641.61, 48611516.44, 
    45851933.17), Y3 = c(NA, 30898514.64, 34234806.16, 
    38595099.38, 41654402.22, 41895856.36, 45906588.53, 58857032.54, 
    68599527.69, 69905755.6, 63085613.98
)), row.names = c(NA, -11L), class = c("data.table", 
"data.frame"), .internal.selfref = <pointer: 0x0000000004601ef0>, sorted = "Year")

【问题讨论】:

  • 您的数据框包含一个时间列/变量 (Year)。但我没有看到任何专门针对个人的专栏。要创建两个都需要的面板数据集,请参阅here
  • 是的,我的数据没有唯一标识符。但是我对每个 Y 运行单独的回归。我在想如果我能以某种方式使用面板数据固定效果运行它......
  • 固定效应面板回归是指组(公司、州等)均值是固定(非随机)的回归模型。如果不能清楚地识别组,就不能使用固定效应模型
  • 我有 5 个 Y(因变量)。我可以将它们中的每一个用作一个组,这意味着总共有 5 个组..
  • 是的,这是一个选项。这是否意味着您每行也有 5 个X(每个 Y 一个)?

标签: r regression panel-data


【解决方案1】:

这是一个两步解决方案。请注意,对于所有组,您最终会得到相同的 Xs

library(tidyverse)
library(plm)
# 1- from 3 Ys to 3 groups
df.panel <- df %>% 
        gather(group, Y, -year, -starts_with("X")) %>%
        arrange(year)
glimpse(df.panel) # have a look at df.panel
# 2- clean group ID by removing the first character ("Y")
df.panel$group <- substr(df.panel$group, 2, nchar(df.panel$group))

数据

df <- structure(list(year = 2006:2016, X1 = c(NA, 6231989.16, 6286192.8, 
7997940.88, 5964272.33, 2220471.25, 1161886.38, 1854724.67, 7414435.45, 
1030764.86, 1760876.07), X2 = c(NA, 16033423.97, 14591392.59, 
10807666.03, 10568403.25, 9895997.3, 7783115.74, 9609331.42, 
13195226.51, 9840290.11, 10612093.19), Y2 = c(NA, NA, NA, 26041118.06, 
18038215.91, 19174941.38, 15250404.65, 19670622.34, 19969051.53, 
13454512.28, 17033742.37), Y1 = c(NA, 51860962.74, 38081542.65, 
24057388.46, 24340687.5, 27960591.55, 25526505.72, 31599623.65, 
38597641.61, 48611516.44, 45851933.17), Y3 = c(NA, 30898514.64, 
34234806.16, 38595099.38, 41654402.22, 41895856.36, 45906588.53, 
58857032.54, 68599527.69, 69905755.6, 63085613.98)), .Names = c("year", 
"X1", "X2", "Y2", "Y1", "Y3"), row.names = c(NA, -11L), class = "data.frame")

【讨论】:

  • 感谢您的回答。您似乎是根据变量名称的开头(“X”)来选择变量。有没有办法通过使用不同的名称来做到这一点(例如,我有名为 Group_2_1、Group_2_2 或什至不同名称的变量,例如香蕉),而不是 Xs,我有其他名称变量,例如Interest_Rate、Unemployment 等...我应该如何更改您的代码以便为我的变量使用其他名称?
  • 当然。您可以使用 gather(group, Y, -year, -Group_2_1, -Group_2_2 , -bananas) 之类的东西,但这不是很有效。另外,请注意,面板数据中的所有个体都使用相同的 X 并没有什么意义
  • 我的初始数据集有 11 行,运行以下代码:library(tidyverse) library(plm) # 1- from 3 Ys to 3 groups df.panel &lt;- df%&gt;% gather(group, Dependent_1, Dependent_2, Dependent_3, Dependent_4, Dependent_5, -Year) %&gt;% arrange(Year) glimpse(df.panel) # have a look at df.panel 创建一个包含 44 个变量的数据集,而最终数据集中应该有 55 个。一些因变量不会出现在最终数据集中。为什么会这样?对不起,我根本不知道这些,所以我可能在这里做一些愚蠢的事情!
  • 试试gather(group, -Dependent_1, -Dependent_2, ...)
  • 不同的因变量如何使用不同的自变量?例如。我想保留X1, X2, X3 for Y1X4, X5, X6 for Y2 等等。有些变量可能相同,而有些变量可能不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 2015-08-02
  • 2017-10-16
  • 2021-07-10
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
相关资源
最近更新 更多