相关表与观测数N.

时间:2016-02-13 17:29:10

标签: r

我可以使用cor()获得相关矩阵,但我不知道如何获得潜在的观察数量。有办法吗?

#reproducible data
mydata <- mtcars
#add random missing
set.seed(17)
mydata[sample(x=nrow(mydata), size=5), "mpg"] <- NA
mydata[sample(x=nrow(mydata), size=5), "hp"] <- NA
mydata[sample(x=nrow(mydata), size=5), "wt"] <- NA
View(mydata)


#correlation matrix
cor(subset(mydata, select=c(mpg, hp, wt)), use="pairwise.complete.obs")

我想要一个与相关矩阵平行的矩阵,它们具有以下三个值:

#N observations
cor.test(mydata$mpg, mydata$hp, na.action="na.exclude")$parameter + 2
cor.test(mydata$mpg, mydata$wt, na.action="na.omit")$parameter + 2
cor.test(mydata$wt, mydata$hp, na.action="na.omit")$parameter + 2
#or
nrow(na.omit(subset(mydata, select=c(mpg, hp))))
nrow(na.omit(subset(mydata, select=c(mpg, wt))))
nrow(na.omit(subset(mydata, select=c(hp, wt))))

2 个答案:

答案 0 :(得分:2)

更新:更短的解决方案(@akrun)

crossprod(!is.na(mydata))

以下是否能满足您的需求

res <- sapply(mydata, function(i) {!is.na(i)})
crossprod(res)

这导致

     mpg cyl disp hp drat wt qsec vs am gear carb
mpg   27  27   27 23   27 22   27 27 27   27   27
cyl   27  32   32 27   32 27   32 32 32   32   32
disp  27  32   32 27   32 27   32 32 32   32   32
hp    23  27   27 27   27 22   27 27 27   27   27
drat  27  32   32 27   32 27   32 32 32   32   32
wt    22  27   27 22   27 27   27 27 27   27   27
qsec  27  32   32 27   32 27   32 32 32   32   32
vs    27  32   32 27   32 27   32 32 32   32   32
am    27  32   32 27   32 27   32 32 32   32   32
gear  27  32   32 27   32 27   32 32 32   32   32
carb  27  32   32 27   32 27   32 32 32   32   32

答案 1 :(得分:0)

ekstroem的解决方案很漂亮。我还发现psych包具有corr.test()函数

的一些很好的功能
library("psych")
corr.test(subset(mydata, select=c(mpg, hp, wt)), use="pairwise")