ds <- structure(list(GPA = c(1.78, 2.38, 2.43, 1.98, 1.56, 2.32, 1.96,
2.73, 2, 3.59), STUDY_STAGE = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L), OLAGG = c(18, 14, 14, 17, 17, 16, 16, 15, 14, 15)), .Names = c("GPA",
"STUDY_STAGE", "OLAGG"), row.names = c(NA, 10L), class = "data.frame")
我已经参考了这篇文章 spearman correlation by group in R
然而,当我试图根据子组STUDY_STAGE(有3个)找到相关性时,我获得了所有相同的值。
ddply(ds,.(STUDY_STAGE), summarise, cor(ds$GPA, ds$OLAGG, method = "spearman"))
STUDY_STAGE ..1
1 1 -0.2805924
2 2 -0.2805924
3 3 -0.2805924
有关数据框的其他信息
str(ds)
'data.frame': 3167 obs. of 3 variables:
$ GPA : num 1.78 2.38 2.43 1.98 1.56 2.32 1.96 2.73 2 3.59 ...
$ STUDY_STAGE: int 3 3 3 3 3 3 3 3 3 3 ...
$ OLAGG : num 18 14 14 17 17 16 16 15 14 15 ...
只是为了表明他们应该有不同的相关值:
ds.yr1<-ds[ds$STUDY_STAGE=="Yr 1",]
cor(ds.yr1$GPA, ds.yr1$OLAGG)
[1] -0.3313926
ds.yr2<-ds[ds$STUDY_STAGE=="Yr 2",]
cor(ds.yr2$GPA, ds.yr2$OLAGG)
[1] -0.2905399
此处提供完整数据:https://dl.dropboxusercontent.com/u/64487083/R/mydata.csv
问题: 如何找到3个不同study_stage的相关性?
谢谢大家的时间和精力!
答案 0 :(得分:1)
通过使用ds$GPA
和ds$OLAGG
,我们计算的是整个列的cor
而不是群组。
ds <- read.csv("mydata.csv") #full data from the link
cor(ds$GPA, ds$OLAGG, method='spearman')
#[1] -0.2805924
ddply(ds,.(STUDY_STAGE), summarise, Cor=cor(GPA, OLAGG, method = "spearman"))
# STUDY_STAGE Cor
#1 Yr 1 -0.3337192
#2 Yr 2 -0.2803793
#3 Yr 3 -0.2090219
cor(ds.yr1$GPA, ds.yr1$OLAGG, method='spearman')
#[1] -0.3337192