12

我正在为我的数据建立一个相关矩阵,如下所示

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 之间的相关性时,V3 中包含 NA 值的行(例如我的示例中的第 1 行和第 2 行)是否也被省略了?

如果是这种情况,我期待通过以成对方式省略 NA 值来建立一个尽可能多地保留数据的命令。

非常感谢,

4

1 回答 1

24

查看 的帮助文件cor,即?cor. 尤其是,

如果'use'是'"everything"','NA'将在概念上传播,即,只要它的贡献观察之一是'NA',结果值将是'NA'。

如果 '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") 

因此,当我们使用 时,如果存在 an complete.obs,我们将丢弃NA。在我的示例中,这意味着我们丢弃第 1 行和第 2 行。但是,在计算 和 之间的相关性时使用pairwise.complete.obs非值。NAV1V2

于 2013-09-19T10:22:48.563 回答