首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何平衡不平衡的面板数据?

如何平衡不平衡的面板数据?
EN

Stack Overflow用户
提问于 2020-02-24 00:04:32
回答 2查看 4.7K关注 0票数 3

假设我有以下不平衡的pandel数据:

代码语言:javascript
复制
unbalanced.panel = structure(list(firm = c("A", "A", "A", "A", "B", "B", "A", "A", 
"B", "C", "C"), ind = c(1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1), year = c(2010, 
2011, 2012, 2013, 2011, 2013, 2011, 2012, 2010, 2012, 2013), 
    charac1 = c("x", "x", "x", "x", "y", "y", "z", "z", "g", 
    "h", "h"), var1 = c(11, 12, 13, 14, 15, 18, 15, 29, 31, 13, 
    2)), row.names = c(NA, -11L), class = c("tbl_df", "tbl", 
"data.frame"))
代码语言:javascript
复制
   firm    ind  year charac1  var1
   <chr> <dbl> <dbl> <chr>   <dbl>
 1 A         1  2010 x          11
 2 A         1  2011 x          12
 3 A         1  2012 x          13
 4 A         1  2013 x          14
 5 B         2  2011 y          15
 6 B         2  2013 y          18
 7 A         2  2011 z          15
 8 A         2  2012 z          29
 9 B         1  2010 g          31
10 C         1  2012 h          13
11 C         1  2013 h           2

其中每个独特的群体(个体)是通过firmind的组合来识别的,即个体"A1“与"A2”个体是不同的。用year变量给出了时间指标。

我想要的是平衡泛泛的数据(指数=(个人=公司-ind,时间=年份),用NA来填补隐含的缺失的空白。

预期的结果如下:

代码语言:javascript
复制
   firm    ind  year charac1  var1
   <chr> <dbl> <dbl> <chr>   <dbl>
 1 A         1  2010 x          11
 2 A         1  2011 x          12
 3 A         1  2012 x          13
 4 A         1  2013 x          14
 5 B         2  2010 y          NA
 6 B         2  2011 y          15
 7 B         2  2012 y          NA
 8 B         2  2013 y          18
 9 A         2  2010 z          NA
10 A         2  2011 z          15
11 A         2  2012 z          29
12 A         2  2013 z          NA
13 B         1  2010 g          31
14 B         1  2011 g          NA
15 B         1  2012 g          NA
16 B         1  2013 g          NA
17 C         1  2010 h          NA
18 C         1  2011 h          NA
19 C         1  2012 h          13
20 C         1  2013 h           2

我试图使用plm::make.pbalanced(unbalanced.panel, balance.type = "fill"),但是我得到了以下错误:

模式<-(tmp,value = id_orig_typeof)中的

错误:更改因子的存储模式无效

我甚至尝试使用tidyr::complete(),但它无助于实现我想要的平衡面板。

这是我的要求:当一个唯一的个体(公司-ind)缺少一个年份行时,必须用NA填充时变变量(var1),但是特征(charact1)等时不变变量应该用唯一值填充。

tidyr::complete()方法有什么问题?它不允许我区分要填充或扩展的时不变变量和时变变量。而且它并不能识别唯一的个别指数(在本例中是公司-ind)。

代码语言:javascript
复制
unbalanced.panel >%>
  tidyr::complete(firm, year, nesting(var1))

上面的代码使一个新的个体"C2“出现,并用NA填充时间不变变量。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-24 01:18:18

我们可以从complete包中使用tidyr。关键是正确设置nesting

代码语言:javascript
复制
library(dplyr)
library(tidyr)

balanced.panel <- unbalanced.panel %>%  
  complete(nesting(firm, ind, charac1), year = full_seq(year, period = 1))
balanced.panel
# # A tibble: 20 x 5
#  firm    ind charac1  year  var1
#  <chr> <dbl> <chr>   <dbl> <dbl>
#  1 A         1 x        2010    11
#  2 A         1 x        2011    12
#  3 A         1 x        2012    13
#  4 A         1 x        2013    14
#  5 A         2 z        2010    NA
#  6 A         2 z        2011    15
#  7 A         2 z        2012    29
#  8 A         2 z        2013    NA
#  9 B         1 g        2010    31
# 10 B         1 g        2011    NA
# 11 B         1 g        2012    NA
# 12 B         1 g        2013    NA
# 13 B         2 y        2010    NA
# 14 B         2 y        2011    15
# 15 B         2 y        2012    NA
# 16 B         2 y        2013    18
# 17 C         1 h        2010    NA
# 18 C         1 h        2011    NA
# 19 C         1 h        2012    13
# 20 C         1 h        2013     2
票数 4
EN

Stack Overflow用户

发布于 2020-02-29 17:10:17

plm对面板数据使用两个维度(个人、时间)。首先,通过组合必须引用一个个体的两个变量来创建一个反映个体维度的变量,让我们将这个变量称为idvar。为了简洁起见,让我们将数据集称为u。对于plm的数据操作函数,使用pdata.frame更容易。

代码语言:javascript
复制
u <- unbalanced.panel
u$idvar <- paste(u$firm, u$ind)
pu <- pdata.frame(u, index = c("idvar", "year"))
make.pbalanced(pu, balance.type = "fill")

#         firm ind year charac1 var1 idvar
# A 1-2010    A   1 2010       x   11   A 1
# A 1-2011    A   1 2011       x   12   A 1
# A 1-2012    A   1 2012       x   13   A 1
# A 1-2013    A   1 2013       x   14   A 1
# A 2-2010 <NA>  NA 2010    <NA>   NA   A 2
# A 2-2011    A   2 2011       z   15   A 2
# A 2-2012    A   2 2012       z   29   A 2
# A 2-2013 <NA>  NA 2013    <NA>   NA   A 2
# B 1-2010    B   1 2010       g   31   B 1
# B 1-2011 <NA>  NA 2011    <NA>   NA   B 1
# B 1-2012 <NA>  NA 2012    <NA>   NA   B 1
# B 1-2013 <NA>  NA 2013    <NA>   NA   B 1
# B 2-2010 <NA>  NA 2010    <NA>   NA   B 2
# B 2-2011    B   2 2011       y   15   B 2
# B 2-2012 <NA>  NA 2012    <NA>   NA   B 2
# B 2-2013    B   2 2013       y   18   B 2
# C 1-2010 <NA>  NA 2010    <NA>   NA   C 1
# C 1-2011 <NA>  NA 2011    <NA>   NA   C 1
# C 1-2012    C   1 2012       h   13   C 1
# C 1-2013    C   1 2013       h    2   C 1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60368093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档