【发布时间】:2019-07-22 11:02:46
【问题描述】:
我正在使用以下代码从 mtcars 相关性中计算 Spearman r 值:
library(plyr)
library(dplyr)
mtcars[mtcars==3.440] <- NA
mtcars[mtcars==4.22] <- NA
mtcars[mtcars==18.90] <- NA
selected <- select(mtcars, "cyl", "disp", "wt")
mtcars$cyl <- as.factor(mtcars$cyl)
for (i in "cyl") {
co <- ddply(na.omit(selected), i, function(adf) cor(adf[,2], adf[,3], method ="spearman"))
names(co) <- c('cyl',paste('CorCol',i, sep='_'))
if(exists('odf')) {
odf <- merge(odf, co, by='cyl', all=TRUE)} else {
odf <- co } }
colnames(odf)[colnames(odf)=="CorCol_cyl"] <- "wt"
selected <- select(mtcars, "cyl", "disp", "qsec")
for (i in "cyl") {
co <- ddply(na.omit(selected), i, function(adf) cor(adf[,2], adf[,3], method ="spearman"))
names(co) <- c('cyl',paste('CorCol',i, sep='_'))
if(exists('odf')) {
odf <- merge(odf, co, by='cyl', all=TRUE)} else {
odf <- co } }
colnames(odf)[colnames(odf)=="CorCol_cyl"] <- "qsec"
selected <- select(mtcars, "cyl", "disp", "drat")
for (i in "cyl") {
co <- ddply(na.omit(selected), i, function(adf) cor(adf[,2], adf[,3], method ="spearman"))
names(co) <- c('cyl',paste('CorCol',i, sep='_'))
if(exists('odf')) {
odf <- merge(odf, co, by='cyl', all=TRUE)} else {
odf <- co } }
colnames(odf)[colnames(odf)=="CorCol_cyl"] <- "drat"
这会产生带有 Spearman r 值的数据框:
> odf
cyl wt qsec drat
1 4 0.8181818 0.29696970 -0.41337577
2 6 0.7181848 0.92763366 -0.29629630
3 8 0.4453704 0.07734925 -0.05153203
这正是我想要的。但是,我也有兴趣生成两个额外的数据帧,一个是相同的,但不是 Spearman r 值,而是显示 Spearman p 值。另一个也是相同的,但它显示的是样本大小,即每个样本的比较次数。
如果有任何建议,我将不胜感激。谢谢。
【问题讨论】:
标签: r correlation p-value