【问题标题】:correlation by groups in R with two groups using spearman testR中的组与使用spearman检验的两组的相关性
【发布时间】:2018-11-04 20:11:43
【问题描述】:

在我的数据集中,我必须按组执行关联

我写

require(plyr)
func <- function(terr)
{
  return(data.frame(COR = cor(terr$Killed, terr$Terr..Attacks,terr$GDP.capita)))
}

ddply(terr, .(Macro.Region,Religion), func)

然后我得到了错误

Error in cor(terr$Killed, terr$Terr..Attacks, terr$GDP.capita) : 
  invalid 'use' argument

出了什么问题,如何纠正执行分析

terr=structure(list(Macro.Region = structure(c(5L, 4L, 4L, 3L, 4L, 
6L, 1L, 2L, 4L, 3L, 6L, 5L, 4L, 4L, 3L, 4L, 6L, 1L, 2L, 4L, 3L, 
6L), .Label = c("Arab Countries", "Asia", "Eastern Europe and post-Soviet", 
"Latin America", "Sub-Saharan Africa", "Western States"), class = "factor"), 
    Killed = c(0L, 0L, 0L, 6L, 0L, 0L, 1L, 76L, 0L, 0L, 36L, 
    0L, 0L, 0L, 6L, 0L, 0L, 1L, 76L, 0L, 0L, 36L), Terr..Attacks = c(2L, 
    0L, 2L, 2L, 0L, 9L, 3L, 88L, 0L, 0L, 6L, 2L, 0L, 2L, 2L, 
    0L, 9L, 3L, 88L, 0L, 0L, 6L), Religion = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 2L, 2L, 1L, 1L, 1L), .Label = c("Christianity", "Islam"
    ), class = "factor"), GDP.capita = c(6813L, 26198L, 20677L, 
    9098L, NA, 49882L, 51846L, 4207L, 17508L, 18616L, 46301L, 
    6813L, 26198L, 20677L, 9098L, NA, 49882L, 51846L, 4207L, 
    17508L, 18616L, 46301L)), class = "data.frame", row.names = c(NA, 
-22L))

这里的解决方案spearman correlation by group in R 不适合,因为我有两个组和三个变量

【问题讨论】:

  • @Jimbou 谢谢。

标签: r dataframe dplyr plyr


【解决方案1】:

您可以尝试使用tidyverse 使用purrr 函数keep 来限制具有足够样本量的组,并使用map 来计算成对相关性。

library(tidyverse)
terr %>% 
 split(list(.$Macro.Region, .$Religion)) %>% 
 keep(~nrow(.) > 3) %>% 
 map(~.x %>% 
         select(Killed,GDP.capita,Terr..Attacks) %>% 
         cor(cbind.data.frame(.), use = "complete.obs"))
$`Eastern Europe and post-Soviet.Christianity`
              Killed GDP.capita Terr..Attacks
Killed             1         -1             1
GDP.capita        -1          1            -1
Terr..Attacks      1         -1             1

$`Latin America.Christianity`
              Killed GDP.capita Terr..Attacks
Killed            NA         NA            NA
GDP.capita        NA  1.0000000    -0.1543897
Terr..Attacks     NA -0.1543897     1.0000000

$`Western States.Christianity`
              Killed GDP.capita Terr..Attacks
Killed             1         -1            -1
GDP.capita        -1          1             1
Terr..Attacks     -1          1             1

尝试Hmisc的rcorr函数检索对应的pvalues

library(Hmisc)
terr %>% 
  split(list(.$Macro.Region, .$Religion)) %>% 
  keep(~nrow(.) > 4) %>% 
  map(~rcorr(cbind(.$Killed, .$GDP.capita, .$Terr..Attacks)))
$`Latin America.Christianity`
     [,1]  [,2]  [,3]
[1,]    1   NaN   NaN
[2,]  NaN  1.00 -0.15
[3,]  NaN -0.15  1.00

n
     [,1] [,2] [,3]
[1,]    8    6    8
[2,]    6    6    6
[3,]    8    6    8

P
     [,1] [,2]   [,3]  
[1,]                   
[2,]             0.7703
[3,]      0.7703  

【讨论】:

  • 谢谢你,它的工作,你知道是否可以显示这个cor coef的p值?
猜你喜欢
  • 1970-01-01
  • 2015-02-10
  • 2021-04-09
  • 2018-02-01
  • 1970-01-01
  • 2013-03-02
  • 2019-06-26
  • 2020-05-18
  • 2016-03-16
相关资源
最近更新 更多