當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。