cor
位于 stats
包(package)。 说明
var
、 cov
和 cor
计算 x
的方差以及 x
和 y
的协方差或相关性(如果这些是向量)。如果x
和y
是矩阵,则计算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 |
|
na.rm |
合乎逻辑的。是否应该删除缺失值? |
use |
一个可选字符串,提供在存在缺失值的情况下计算协方差的方法。这必须是字符串 |
method |
指示要计算哪个相关系数(或协方差)的字符串。 |
V |
对称数值矩阵,通常是正定矩阵,例如协方差矩阵。 |
细节
对于 cov
和 cor
,必须为 x
提供矩阵或数据帧,或者同时提供 x
和 y
。
输入必须是数字(由 is.numeric
确定:也允许逻辑值以实现历史兼容性):"kendall"
和 "spearman"
方法对于有序输入有意义,但 xtfrm
可用于查找合适的先前转换到数字。
var
只是 cov
的另一个接口,其中 na.rm
用于在未指定时确定 use
的默认值。如果 na.rm
是 TRUE
则使用完整的观测值(行)( use = "na.or.complete"
) 来计算方差。否则,默认为 use = "everything"
。
如果use
是"everything"
,NA
s 将在概念上传播,即结果值将是NA
每当其贡献的观察之一是NA
.
如果use
是"all.obs"
,那么缺失观测值的存在将产生错误。如果use
是"complete.obs"
然后通过按大小写删除来处理缺失值(如果没有完整的案例,则会产生错误)。
"na.or.complete"
除非没有完整的案例,否则是相同的,这给出NA
。最后,如果use
有值"pairwise.complete.obs"
然后使用这些变量的所有完整观察对来计算每对变量之间的相关性或协方差。这可能会导致协方差或相关矩阵不是半正定的,以及NA
如果该变量对没有完整的对,则输入。为了cov
和var
,"pairwise.complete.obs"
仅适用于"pearson"
方法。请注意(相当于)var(double(0), use = *)
给NA
为了use = "everything"
和"na.or.complete"
,并在其他情况下给出错误。
使用分母 NA
(而 S-PLUS 一直返回 NaN
)。 给出 i.i.d 的(co)方差的无偏估计量。观察。当只有一个观察值时,这些函数返回
为了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 cor.test 配对样本之间的关联/相关性测试
- R constrOptim 线性约束优化
- R confint 模型参数的置信区间
- R contrast (可能稀疏)对比矩阵
- R complete.cases 查找完整案例
- R contrasts 获取和设置对比矩阵
- R convolve 通过 FFT 进行序列卷积
- R cov.wt 加权协方差矩阵
- R cophenetic 层次聚类的共表距离
- R coef 提取模型系数
- R cancor 典型相关性
- R cutree 将树切割成数据组
- R cpgram 绘制累积周期图
- R chisq.test 计数数据的皮尔逊卡方检验
- R checkMFClasses 检查传递给模型框架的变量类型的函数
- R cmdscale 经典(公制)多维标度
- R case+variable.names 拟合模型的案例和变量名称
- R stlmethods STL 对象的方法
- R medpolish 矩阵的中值波兰(稳健双向分解)
- R naprint 调整缺失值
- R summary.nls 总结非线性最小二乘模型拟合
- R summary.manova 多元方差分析的汇总方法
- R formula 模型公式
- R nls.control 控制 nls 中的迭代
- R aggregate 计算数据子集的汇总统计
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Correlation, Variance and Covariance (Matrices)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。