R x相关性计算时缺失值的处理

我们拿到的观测数据常常是有缺失值的,有时候基于数据分布是可以预测缺失值。有时候却是不能,比如缺失值太多,数据量太小。因此,计算相关性时需要考虑到缺失值的使用。在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,结果就会是NA;
  • all.obs:如果存在NA,计算会报错;
  • complete.obs:有缺失值的观测会被删除;如果计算相关性的对象之间没有完整的观测(overlap不是NA),计算会报错;这儿的完整的观测值是在所有样本中都不缺失,例如矩阵中所有样本。此方法相当于,所有样本的观测值求overlap,然后保留,用于计算相关性。
  • na.or.complete:其实与complete.obs一样,只是如果计算相关性的两个对象之间没有完整的观测(overlap不是NA),计算不会报错,返回值是NA;
  • pairwise.complete.obs:相关性和协方差计算时,每次使用总数据中正在计算的一对数据完整的观测值(两组数据的overlap);因此,相关性和协方差矩阵会是半正定矩阵,两个对象之间不存在完整的观测值(观测值没有overlap)返回NA。对于cov 和 var, "pairwise.complete.obs"只适用于pearson方法。此方法相当于,所有样本求相关性时,正在计算的两个样本的观测值求overlap,然后保留,用于计算相关性。

在这几种方法中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"比较:

相同点:

  • 都是使用样本完整的观测值(但二者完整定义的范围不同)
  • 不存在完整的观测值(观测值没有overlap),都返回NA

区别:
二者完整的观测值定义的范围不同;当处理数据是矩阵时,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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266