以下紀錄在做cor-test時對於參數use的用法差別。
當cor
函數的對象變數包含遺漏值時,use是用來告訴cor
該怎麼處理遺漏值。
假如資料已經做過一些預處理,像是去掉NA值或是將NA值轉換等等,這樣有沒有use這個參數都沒甚麼關係了。
use有以下參數:
everything
:為default,有NA结果就全NA;all.obs
:有NA直接報錯;complete.obs
:只考慮完整的部分,如果沒有完整的部分就報錯;na.or.complete
:只考慮完整的部分,如果沒有完整的部分给NA;pairwise.complete.obs
:考慮配對間完整的部分,如果沒有就報錯。set.seed(1234)
test <- cbind(v1 = sample(1:1000,5)/1000,
v2 = sample(1:1000,5)/1000,
v3 = c(NA,NA,sample(1:1000,3)/1000))
test
## v1 v2 v3
## [1,] 0.114 0.641 NA
## [2,] 0.622 0.010 NA
## [3,] 0.609 0.233 0.694
## [4,] 0.999 0.665 0.545
## [5,] 0.858 0.513 0.283
cor(test)
## v1 v2 v3
## v1 1.00000000 0.01356592 NA
## v2 0.01356592 1.00000000 NA
## v3 NA NA 1
cor(test,use="complete.obs")
## v1 v2 v3
## v1 1.0000000 0.9999407 -0.5009671
## v2 0.9999407 1.0000000 -0.5103595
## v3 -0.5009671 -0.5103595 1.0000000
cor(test,use="pairwise.complete.obs")
## v1 v2 v3
## v1 1.00000000 0.01356592 -0.5009671
## v2 0.01356592 1.00000000 -0.5103595
## v3 -0.50096709 -0.51035948 1.0000000
cor(test[3:5,],use="complete.obs")
## v1 v2 v3
## v1 1.0000000 0.9999407 -0.5009671
## v2 0.9999407 1.0000000 -0.5103595
## v3 -0.5009671 -0.5103595 1.0000000
透過cor(test[3:5,],use="complete.obs")
可以看到complete.obs
是把有NA的整列剔除後再計算相關性,所以如果要充分運用資料,盡量使用pairwise.complete.obs
,當然能在資料預處理的時候先將NA值做最符合實際情況的處理當然是最好囉!