【问题标题】:Correlation matrix in panel data in RR中面板数据中的相关矩阵
【发布时间】:2017-11-05 00:09:40
【问题描述】:

我有一个时间序列面板数据集,其结构如下:


df <- data.frame(
  year = c(2012L, 2013L, 2014L, 2012L, 2013L, 2014L),
  id = c(1L, 1L, 1L, 2L, 2L, 2L),
  c = c(11L, 13L, 13L, 16L, 15L, 15L)
)

#>   year id  c
#> 1 2012  1 11
#> 2 2013  1 13
#> 3 2014  1 13
#> 4 2012  2 16
#> 5 2013  2 15
#> 6 2014  2 15

在给定 ID 号的情况下,我想找出 C 列中的值之间的互相关。 类似的东西:

#>     1  2
#> 1   1  0.8
#> 2   0.8  1

我一直在使用 dplyr 包来查找我的面板数据中两个变量之间的互相关,但由于某种原因,我无法对按 id 分组的一个变量中的互相关做同样的事情。

【问题讨论】:

  • 如果您可以添加reproducible example,人们会更容易提供帮助。
  • 我不确定如何执行此操作,但您可能想查看widyr
  • cor(unstack(df[ , -1], c ~ id))
  • 当我尝试实施 Henrik 解决方案时:我收到一个错误,要求我同时提供“x”和“y”或类似矩阵的“x”。请注意,在我的实际问题中,我有大约 12 个不同的 id 编号,而不是本示例中的 2 个。

标签: r dplyr panel-data


【解决方案1】:

如果您已经在使用tidyverse 工具,您应该尝试widyr

它的函数重塑为wide,获取相关性,并再次给你一个整洁的数据框。

(请注意,我稍微更改了示例数据以匹配 akaDrHouse's 答案。

df <- data.frame(
  year = c(2012L, 2013L, 2014L, 2012L, 2013L, 2014L),
  id = c(1L, 1L, 1L, 2L, 2L, 2L),
  c = c(11L, 13L, 13L, 16L, 15L, 156L)
)

df
#>   year id   c
#> 1 2012  1  11
#> 2 2013  1  13
#> 3 2014  1  13
#> 4 2012  2  16
#> 5 2013  2  15
#> 6 2014  2 156

widyr::pairwise_cor(df, id, year, c)

#> # A tibble: 2 x 3
#>   item1 item2 correlation
#>   <int> <int>       <dbl>
#> 1     2     1   0.4946525
#> 2     1     2   0.4946525

widyr::pairwise_cor(df, id, year, c, upper = FALSE)

#> # A tibble: 1 x 3
#>   item1 item2 correlation
#>   <int> <int>       <dbl>
#> 1     1     2   0.4946525

【讨论】:

  • 不错的功能@austensen。我没听说过widyr。
【解决方案2】:

你的意思是像下面这样吗?我使用 reshape 包根据你的 id 的值进行转换,然后是 baseR 中的cor() 函数。

> mydf <- data.frame(year=c("12","13","14","12","13","14"),id=c(1,1,1,2,2,2),c=c(11,13,13,16,15,156))
> library(reshape2)
> mydf
  year id   c
1   12  1  11
2   13  1  13
3   14  1  13
4   12  2  16
5   13  2  15
6   14  2 156
> my_wide_data <- dcast(mydf, year~id,value.var="c")
> cor(my_wide_data[,2:3])
          1         2
1 1.0000000 0.4946525
2 0.4946525 1.0000000

所以@Henrik 的评论更加简单和优雅,所以包括在这里。

> cor(unstack(mydf[ , -1], c ~ id))
          X1        X2
X1 1.0000000 0.4946525
X2 0.4946525 1.0000000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2013-06-15
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    相关资源
    最近更新 更多