Complete.obs функции cor()

Я устанавливаю матрицу корреляции для своих данных, которая выглядит так

df <- structure(list(V1 = c(56, 123, 546, 26, 62, 6, NA, NA, NA, 15
), V2 = c(21, 231, 5, 5, 32, NA, 1, 231, 5, 200), V3 = c(NA, 
NA, 24, 51, 53, 231, NA, 153, 6, 700), V4 = c(2, 10, NA, 20, 
56, 1, 1, 53, 40, 5000)), .Names = c("V1", "V2", "V3", "V4"), row.names = c(NA, 
10L), class = "data.frame")

Это дает следующий кадр данных:

        V1  V2  V3   V4
    1   56  21  NA    2
    2  123 231  NA   10
    3  546   5  24   NA
    4   26   5  51   20
    5   62  32  53   56
    6    6  NA 231    1
    7   NA   1  NA    1
    8   NA 231 153   53
    9   NA   5   6   40
    10  15 200 700 5000

Обычно я использую команду complete.obs, чтобы установить мою корреляционную матрицу с помощью этой команды.

crm <- cor(df, use="complete.obs", method="pearson") 

Мой вопрос здесь в том, как complete.obs обрабатывает данные? пропускает ли он любую строку, имеющую значение «NA», создает свободную таблицу «NA» и сразу же создает корреляционную матрицу?

df2 <- structure(list(V1 = c(26, 62, 15), V2 = c(5, 32, 200), V3 = c(51, 
53, 700), V4 = c(20, 56, 5000)), .Names = c("V1", "V2", "V3", 
"V4"), row.names = c(NA, 3L), class = "data.frame")

или он пропускает значения «NA» попарно, например, при расчете корреляции между V1 и V2, строка, которая содержит значение NA в V3 (например, строки 1 и 2 в моем примере) они тоже пропускаются?

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

Большое спасибо,


person Error404    schedule 19.09.2013    source источник


Ответы (1)


Посмотрите файл справки для cor, то есть ?cor. Особенно,

Если «использование» — это «все», то «н.п.» будет распространяться концептуально, т. е. результирующее значение будет «н.п.» всякий раз, когда одно из сопутствующих наблюдений будет «н.п.».

Если «use» равно «all.obs», то наличие пропущенных наблюдений приведет к ошибке. Если «use» равно «complete.obs», то отсутствующие значения обрабатываются путем удаления по регистру (и если полных случаев нет, это дает ошибку).

Чтобы лучше понять, что происходит, нужно создать (даже) более простой пример:

df1 = df[1:5,1:3]
cor(df1, use="pairwise.complete.obs", method="pearson") 
cor(df1, use="complete.obs", method="pearson") 
cor(df1[3:5,], method="pearson") 

Итак, когда мы используем complete.obs, мы отбрасываем всю строку, если присутствует NA. В моем примере это означает, что мы отбрасываем строки 1 и 2. Однако pairwise.complete.obs использует значения, отличные от NA, при расчете корреляции между V1 и V2.

person csgillespie    schedule 19.09.2013
comment
Спасибо за ваш ответ, я прочитал страницу справки, я думаю, что ищу pairwise.complete.obs. Однако я не был уверен, что означает это предложение. Это может привести к ковариационным или корреляционным матрицам, которые не являются положительно полуопределенными, а также к записям NA, если для этой пары переменных нет полных пар. У меня нет полных пар в моих данных (например, строка номер 7 между V1 и V2), но использованиеpairwise.complete.obs не показало NA. Если бы вы могли сказать мне, что означает предыдущее предложение, это было бы очень полезно. Ваше здоровье - person Error404; 19.09.2013