r - R中的组与使用spearman检验的两组的相关性
问题描述
在我的数据集中,我必须按组执行关联
我写的
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))
此处的解决方案在 R 中按组进行 spearman 相关性不合适,因为我有两组和三个变量
解决方案
您可以尝试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
TryHmisc
的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
推荐阅读
- javascript - 显示货币输入表单,无需先点击
- git - 如何重置一些提交和合并(通过从源拉取)以再次从远程拉取?
- git - Google 的基于主干的开发 - 您是否直接推送代码以发布分支而不是主干?
- java - java.lang.IllegalArgumentException:日志标记“okhttp3.mockwebserver.MockWebServer”超过 23 个字符的限制
- javascript - 为什么 window.btoa 不能处理 Javascript 中的“-”字符?
- node.js - 在 postgres 中插入或更新时,我得到 Parser.parseErrorMessage
- java - Spring MongoRepository Null 和 isNull 的区别
- java - Android viewGroup 问题 - 使用 Appium 进行测试
- payment-gateway - 如何修复 Cashfree 支付网关签名不匹配错误?
- python - 根据Python中的创建日期对文件列表进行排序