数据科学与R语言 生物信息学分析

R cor()函数中的缺失值处理

2020-09-16  本文已影响0人  JeremyL

我们拿到的观测数据常常是有缺失值的,有时候基于数据分布是可以预测缺失值。有时候却是不能,比如缺失值太多,数据量太小。因此,计算相关性时需要考虑到缺失值的使用。在R中的基础函数cor中有相当全面的缺失值处理方法。

#cor()参数

cor(x, y = NULL, use = "everything",
    method = c("pearson", "kendall", "spearman"))
x   a numeric vector, matrix or data frame.
y   NULL (default) or a vector, matrix or data frame with compatible dimensions to x. The default is equivalent to y = x (but more efficient).
na.rm   logical. Should missing values be removed?
use an optional character string giving a method for computing covariances in the presence of missing values. This must be (an abbreviation of) one of the strings "everything", "all.obs", "complete.obs", "na.or.complete", or "pairwise.complete.obs".
method  a character string indicating which correlation coefficient (or covariance) is to be computed. One of "pearson" (default), "kendall", or "spearman": can be abbreviated.
V   symmetric numeric matrix, usually positive definite such as a covariance matrix.

在使用cor(),可以指定x,y两个向量;也可以使用一个矩阵,计算所有样本两两之间的相关性。
use参数可以设定缺失值处理的方法,方法有:everything,all.obs,complete.obs,na.or.complete,pairwise.complete.obs

#解释一下各种方法:

在这几种方法中everything和na.or.complete在没有观测值时,返回NA;其他方法无法计算。

##示例

> a=c(1, 2, 3, NA, NA, NA)
> b=c(NA, NA, NA, 1, 2, 3)
> cor(a, b, use="everything")
[1] NA
> cor(a, b, use="all.obs")
Error in cor(a, b, use = "all.obs") : cov/cor中有遗漏值
> cor(a, b, use="complete.obs")
Error in cor(a, b, use = "complete.obs") : 不存在完的一对
> cor(a, b, use="na.or.complete")
[1] NA
> cor(a, b, use="pairwise.complete.obs")
[1] NA
> a=c(1, 2, 3, 4, 5, NA, NA, NA)
> b=c(NA, NA, NA, 4, 5, 1, 2, 3)
> cor(a, b)
[1] NA
> cor(a, b, use="everything")
[1] NA
> cor(a, b, use="all.obs") #不能存在缺失值
Error in cor(a, b, use = "all.obs") : cov/cor中有遗漏值
> cor(a, b, use="complete.obs") #overlap值
[1] 1
> cor(a, b, use="na.or.complete")
[1] 1
> cor(a, b, use="pairwise.complete.obs")
[1] 1

#complete.obs与"pairwise.complete.obs"比较:

相同点:

区别:
二者完整的观测值定义的范围不同;当处理数据是矩阵时,complete.obs是观测值在整个数据中不缺失才算完整;pairwise.complete.obs是在两两样本(正在计算的样本)之间都存在的观测值就是完整。

##示例:

> a=c(1, 2, 3, 4, 5, NA, NA, NA)
> b=c(NA, NA, NA, 4, 5, 1, 2, 3)
> c=c(1, 2, 3, NA, NA, 1, 2, 3)
> d=data.frame(a,b,c)
> d
   a  b  c
1  1 NA  1
2  2 NA  2
3  3 NA  3
4  4  4 NA
5  5  5 NA
6 NA  1  1
7 NA  2  2
8 NA  3  3

> cor(d, use = 'na.or.complete')
   a  b  c
a NA NA NA
b NA NA NA
c NA NA NA
> cor(d, use = 'pairwise.complete.obs')
  a b c
a 1 1 1
b 1 1 1
c 1 1 1
上一篇下一篇

猜你喜欢

热点阅读