分组数据的横截面相关性并在乳胶表中汇总

问题描述

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

df <- data.frame(
  year = c(2012L,2013L,2014L,2012L,2015L),id = c(1L,1L,2L,2L),col1 = c(11L,13L,16L,15L,16L),col2 = c(10L,14L,12L,11L,17L),col3 = c(17L,19L,21L,12L),)
> df
  year id col1 col2 col3
1 2012  1   11   10   17
2 2013  1   13   14   12
3 2014  1   13   12   12
4 2012  2   16   13   14
5 2013  2   15   11   19
6 2014  2   15   16   21
7 2015  2   16   17   12
> 

我想在每个列对和所有组中生成一个横截面下三角相关乳胶表,但我希望最终表是所有组的平均值,并且还包括 p 统计数据。 到目前为止,这是我使用 dplyr 所做的:

library(dplyr)
df %>%
  group_by(id) %>%
  summarize(COR=cor(col1,col2))

但我希望所有列对都有这个,在我的实际数据集中,我有更多的 id。我想使用 xtable、stargazer 或 Hmisc 生成一个乳胶相关表,该表将各组的平均 corr 作为输出,还包括 p 值。我希望我的最终输出看起来像这样:imgur.com/a/7Jwmm8f

解决方法

一个选项是 split by 'id' 列,然后将 cor 应用于 'col' 列,获取元素 + 并除以 {{1} } of length 'id' 并将 unique 值替换为 upper.tri

NA

-输出

out <- Reduce(`+`,lapply(split(df[3:5],df$id),function(x) cor(x,use = "complete.obs")))/length(unique(df$id))
out[upper.tri(out)] <- NA

或者使用 out # col1 col2 col3 #col1 1.0000000 NA NA #col2 0.5902554 1.000000 NA #col3 -0.9807620 -0.569806 1

tidyverse