当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R cor 相关性、方差和协方差(矩阵)


R语言 cor 位于 stats 包(package)。

说明

varcovcor 计算 x 的方差以及 xy 的协方差或相关性(如果这些是向量)。如果xy 是矩阵,则计算x 的列和y 的列之间的协方差(或相关性)。

cov2cor 有效地将协方差矩阵缩放为相应的相关矩阵。

用法

var(x, y = NULL, na.rm = FALSE, use)

cov(x, y = NULL, use = "everything",
    method = c("pearson", "kendall", "spearman"))

cor(x, y = NULL, use = "everything",
    method = c("pearson", "kendall", "spearman"))

cov2cor(V)

参数

x

数值向量、矩阵或 DataFrame 。

y

NULL (默认)或与 x 具有兼容尺寸的向量、矩阵或 DataFrame 。默认值相当于y = x(但效率更高)。

na.rm

合乎逻辑的。是否应该删除缺失值?

use

一个可选字符串,提供在存在缺失值的情况下计算协方差的方法。这必须是字符串 "everything""all.obs""complete.obs""na.or.complete""pairwise.complete.obs" 之一(的缩写)。

method

指示要计算哪个相关系数(或协方差)的字符串。 "pearson" (默认)、"kendall""spearman" 之一:可以缩写。

V

对称数值矩阵,通常是正定矩阵,例如协方差矩阵。

细节

对于 covcor ,必须为 x 提供矩阵或数据帧,或者同时提供 xy

输入必须是数字(由 is.numeric 确定:也允许逻辑值以实现历史兼容性):"kendall""spearman" 方法对于有序输入有意义,但 xtfrm 可用于查找合适的先前转换到数字。

var 只是 cov 的另一个接口,其中 na.rm 用于在未指定时确定 use 的默认值。如果 na.rmTRUE 则使用完整的观测值(行)( use = "na.or.complete" ) 来计算方差。否则,默认为 use = "everything"

如果use"everything",NAs 将在概念上传播,即结果值将是NA每当其贡献的观察之一是NA.
如果use"all.obs",那么缺失观测值的存在将产生错误。如果use"complete.obs"然后通过按大小写删除来处理缺失值(如果没有完整的案例,则会产生错误)。
"na.or.complete"除非没有完整的案例,否则是相同的,这给出NA。最后,如果use有值"pairwise.complete.obs"然后使用这些变量的所有完整观察对来计算每对变量之间的相关性或协方差。这可能会导致协方差或相关矩阵不是半正定的,以及NA如果该变量对没有完整的对,则输入。为了covvar,"pairwise.complete.obs"仅适用于"pearson"方法。请注意(相当于)var(double(0), use = *)NA为了use = "everything""na.or.complete",并在其他情况下给出错误。

使用分母 给出 i.i.d 的(co)方差的无偏估计量。观察。当只有一个观察值时,这些函数返回 NA (而 S-PLUS 一直返回 NaN )。

为了cor(), 如果method"kendall"或者"spearman",肯德尔的 或斯皮尔曼的 统计量用于估计基于排名的关联度量。如果数据不一定来自二元正态分布,则这些方法更加稳健,并且已被推荐。
为了cov(),非 Pearson 方法并不常见,但为了完整性起见可用。注意"spearman"本质上计算cor(R(x), R(y))(或者cov(., .)) 在哪里R(u) := rank(u, na.last = "keep")。如果存在缺失值,则根据以下值计算排名use,或者基于完整的观察,或者基于对每对重新排序的成对完整性。

当存在平局时,按照 Kendall (1945) 的建议计算 Kendall 的

将协方差矩阵缩放为相关矩阵可以通过多种方式实现,从数学上讲,最有吸引力的方法是与左右对角矩阵相乘,或者更有效地使用 sweep(.., FUN = "/") 两次。 cov2cor 函数甚至更高效,并且主要出于教学原因而提供。

对于 r <- cor(*, use = "all.obs") ,现在保证 all(abs(r) <= 1)

注意

有些人注意到,对于非常大的数据集(许多超过 1000 个案例),Kendall tau 的代码速度很慢。进行这样的计算几乎没有意义,但请参阅包 pcaPP 中的函数 cor.fk

例子

var(1:10)  # 9.166667

var(1:5, 1:5) # 2.5

## Two simple vectors
cor(1:10, 2:11) # == 1

## Correlation Matrix of Multivariate sample:
(Cl <- cor(longley))
## Graphical Correlation Matrix:
symnum(Cl) # highly correlated

## Spearman's rho  and  Kendall's tau
symnum(clS <- cor(longley, method = "spearman"))
symnum(clK <- cor(longley, method = "kendall"))
## How much do they differ?
i <- lower.tri(Cl)
cor(cbind(P = Cl[i], S = clS[i], K = clK[i]))


## cov2cor() scales a covariance matrix by its diagonal
##           to become the correlation matrix.
cov2cor # see the function definition {and learn ..}
stopifnot(all.equal(Cl, cov2cor(cov(longley))),
          all.equal(cor(longley, method = "kendall"),
            cov2cor(cov(longley, method = "kendall"))))

##--- Missing value treatment:

C1 <- cov(swiss)
range(eigen(C1, only.values = TRUE)$values) # 6.19        1921

## swM := "swiss" with  3 "missing"s :
swM <- swiss
colnames(swM) <- abbreviate(colnames(swiss), minlength=6)
swM[1,2] <- swM[7,3] <- swM[25,5] <- NA # create 3 "missing"

## Consider all 5 "use" cases :
(C. <- cov(swM)) # use="everything"  quite a few NA's in cov.matrix
try(cov(swM, use = "all")) # Error: missing obs...
C2 <- cov(swM, use = "complete")
stopifnot(identical(C2, cov(swM, use = "na.or.complete")))
range(eigen(C2, only.values = TRUE)$values) # 6.46   1930
C3 <- cov(swM, use = "pairwise")
range(eigen(C3, only.values = TRUE)$values) # 6.19   1938

## Kendall's tau doesn't change much:
symnum(Rc <- cor(swM, method = "kendall", use = "complete"))
symnum(Rp <- cor(swM, method = "kendall", use = "pairwise"))
symnum(R. <- cor(swiss, method = "kendall"))

## "pairwise" is closer componentwise,
summary(abs(c(1 - Rp/R.)))
summary(abs(c(1 - Rc/R.)))

## but "complete" is closer in Eigen space:
EV <- function(m) eigen(m, only.values=TRUE)$values
summary(abs(1 - EV(Rp)/EV(R.)) / abs(1 - EV(Rc)/EV(R.)))

参考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988). The New S Language. Wadsworth & Brooks/Cole.

Kendall, M. G. (1938). A new measure of rank correlation, Biometrika, 30, 81-93. doi:10.1093/biomet/30.1-2.81.

Kendall, M. G. (1945). The treatment of ties in rank problems. Biometrika, 33 239-251. doi:10.1093/biomet/33.3.239

也可以看看

cor.test 用于置信区间(和测试)。

cov.wt 用于加权协方差计算。

sd 用于标准差(向量)。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Correlation, Variance and Covariance (Matrices)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。