代码之家  ›  专栏  ›  技术社区  ›  Boris Grunwald

r中样本相关性计算的困惑

  •  2
  • Boris Grunwald  · 技术社区  · 6 年前

    我计算了样本的相关性

    cov(D$Nload,D$Pload, use="complete.obs")/(sd(D$Nload)*sd(D$Pload, na.rm=TRUE))
    

    结果是0.5693599

    然后我尝试使用R的cov()函数

    cor(D[, c("Nload","Pload")], use="pairwise.complete.obs")
    

    结果是:

              Nload     Pload
    Nload 1.0000000 0.6244952
    Pload 0.6244952 1.0000000
    

    1 回复  |  直到 6 年前
        1
  •  4
  •   erocoar    6 年前

    sd() 在单个向量上,它无法检查数据是否成对完整。例子:

    x <- rnorm(100)
    y <- rexp(100)
    y[1] <- NA
    df <- data.frame(x = x, y = y)
    

    所以我们有

    df[seq(2), ]
               x         y
    1  1.0879645        NA
    2 -0.3919369 0.2191193
    

    sd() 在单个列上,它没有关于对的任何信息。对你来说, sd(df$x) 将使用所有可用的数据,尽管它应该避免第一行。

    cov(df$x, df$y, use = "complete.obs") / (sd(df$x)*sd(df$y, na.rm=TRUE))
    [1] 0.09301583
    
    cor(df$x, df$y, use = "pairwise.complete.obs")
    [1] 0.09313766
    

    df <- df[complete.cases(df), ]
    cov(df$x, df$y, use = "complete.obs") / (sd(df$x)*sd(df$y, na.rm=TRUE))
    [1] 0.09313766
    cor(df$x, df$y, use = "pairwise.complete.obs")
    [1] 0.09313766