我可以使用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))))
答案 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")