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