2017-02-20 2 views
0

У меня есть два столбца с отсутствующими данными.Найти подмножество наблюдений, исключающих отсутствующие значения для двух столбцов

Var1 Var2 
1445 40 
656  NA 
NA  NA 
607  NA 
2098 15 

Я хочу вычислить корреляции между этими столбцами, исключая наблюдения с отсутствующими данными. Я попытался

cor(na.omit(df$Var1),na.omit(df$Var2),method="pearson") 

Но я получаю

Ошибки в кор (na.omit (ДФ $ var1), na.omit (ДФ $ var2): несовместимых размерами

Я предполагаю, что это связано с тем, что вместо того, чтобы пересекать две переменные, я получаю

Var1(NA omit) Var2(NA omit) 
1445   40 
656    15 
607  
2098 

, и поэтому корреляция не может быть выполнена, поскольку она изменяет длину столбцов.

Как я могу опустить все наблюдения, содержащие NA, чтобы столбцы имели одинаковую длину?

+0

'кор (na.omit (DF $ var1), na.omit (DF $ var2), метод = "пирсон", использовать =«попарно .complete.obs ")' – kaksat

+2

Но вы можете прочитать следующее: [Паралельно-полная корреляция считается опасной] (http://bwlewis.github.io/covar/missing.html). –

+0

Спасибо, не знал об этом. – kaksat

ответ

1

Отсутствующие значения могут быть обработаны с использованием аргумента use. См ?cor

использовать необязательный символьной строки дает способ вычисления ковариации в присутствии недостающих значений. Это должно быть (аббревиатура ) одной из строк «все», «all.obs», «complete.obs», «na.or.complete» или «pairwise.complete.obs».

cor(df1, use = "complete.obs") 
#  Var1 Var2 
# Var1 1 -1 
# Var2 -1 1  

данных:

df1 <- structure(list(Var1 = c(1445L, 656L, NA, 607L, 2098L), 
         ar2 = c(40L, NA, NA, NA, 15L)), 
       .Names = c("Var1", "Var2"), 
       row.names = c(NA, -5L), class = "data.frame") 
+0

потрясающий. я видел, что 'use =" complete.obs "', но не мог понять, для чего он нужен. который решил это точно. –

1

Если все в порядке с заменой NA значения каждой переменной со средним значением, то это один подход:

var1[is.na(var1)] <- mean(var1, na.rm=TRUE) 
var2[is.na(var2)] <- mean(var2, na.rm=TRUE) 
cor(var1, var2, method="pearson") 

Если процент отсутствующих значений будет мало, то результаты, которые вы получите для корреляции коэффициент (Pearson, Spearman и т. д.) должны по-прежнему отражаться на правде.