跨分组数据的横截面相关性并在乳胶中总结 table
Cross sectional correlation across grouped data and summarized in latex table
我有一个时间序列面板数据集,其结构如下:
df <- data.frame(
year = c(2012L, 2013L, 2014L, 2012L, 2013L, 2014L, 2015L),
id = c(1L, 1L, 1L, 2L, 2L, 2L, 2L),
col1 = c(11L, 13L, 13L, 16L, 15L, 15L, 16L),
col2 = c(10L, 14L, 12L, 13L, 11L, 16L, 17L),
col3 = c(17L, 12L, 12L, 14L, 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
>
我想在每个列对和所有组中生成横截面下三角相关乳胶 table,但我希望最终的 table 是所有组的平均值,并且包括 p 统计。
这是我到目前为止使用 dplyr:
library(dplyr)
df %>%
group_by(id) %>%
summarize(COR=cor(col1,col2))
但我想对所有列对都使用这个,并且在我的实际数据集中,我有更多的 ID。我想使用 xtable、stargazer 或 Hmisc 来生成乳胶相关性 table,它具有跨组的平均 corr 作为输出,还包括 p 值。我希望我的最终输出看起来像这样:imgur.com/a/7Jwmm8f
一个选项是 split
by 'id' 列,然后在 'col' 列上应用 cor
,获取元素 +
并除通过 unique
'id' 的 length
并将 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
library(dplyr)
library(purrr)
library(magrittr)
df %>%
select(-year) %>%
group_split(id, .keep = FALSE) %>%
map(cor, use = "complete.obs") %>%
reduce(`+`) %>%
divide_by(n_distinct(df$id)) %>%
replace(., upper.tri(.), NA)
# col1 col2 col3
#col1 1.0000000 NA NA
#col2 0.5902554 1.000000 NA
#col3 -0.9807620 -0.569806 1
我有一个时间序列面板数据集,其结构如下:
df <- data.frame(
year = c(2012L, 2013L, 2014L, 2012L, 2013L, 2014L, 2015L),
id = c(1L, 1L, 1L, 2L, 2L, 2L, 2L),
col1 = c(11L, 13L, 13L, 16L, 15L, 15L, 16L),
col2 = c(10L, 14L, 12L, 13L, 11L, 16L, 17L),
col3 = c(17L, 12L, 12L, 14L, 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
>
我想在每个列对和所有组中生成横截面下三角相关乳胶 table,但我希望最终的 table 是所有组的平均值,并且包括 p 统计。 这是我到目前为止使用 dplyr:
library(dplyr)
df %>%
group_by(id) %>%
summarize(COR=cor(col1,col2))
但我想对所有列对都使用这个,并且在我的实际数据集中,我有更多的 ID。我想使用 xtable、stargazer 或 Hmisc 来生成乳胶相关性 table,它具有跨组的平均 corr 作为输出,还包括 p 值。我希望我的最终输出看起来像这样:imgur.com/a/7Jwmm8f
一个选项是 split
by 'id' 列,然后在 'col' 列上应用 cor
,获取元素 +
并除通过 unique
'id' 的 length
并将 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
library(dplyr)
library(purrr)
library(magrittr)
df %>%
select(-year) %>%
group_split(id, .keep = FALSE) %>%
map(cor, use = "complete.obs") %>%
reduce(`+`) %>%
divide_by(n_distinct(df$id)) %>%
replace(., upper.tri(.), NA)
# col1 col2 col3
#col1 1.0000000 NA NA
#col2 0.5902554 1.000000 NA
#col3 -0.9807620 -0.569806 1