【问题标题】:Handling missing values when calculating matching distances with the 'proxy' package使用“代理”包计算匹配距离时处理缺失值
【发布时间】:2013-04-29 13:01:24
【问题描述】:

我有一个函数可以用序数数据计算矩阵中的简单匹配距离:

require(proxy)
m <- test
f <- function(x,y) sum(x == y) / NROW(x)
matches <- as.matrix(dist(m, f, upper=TRUE))

问题是这个函数在有缺失值的时候不起作用,比如下面的矩阵。

test <- structure(list(X1 = c(1, 2, 3, 4, 2, NA), X2 = c(2, 3, 4, 5, 
3, 6), X3 = c(3, 4, NA, 5, 3, 2), X4 = c(2, 4, 6, 5, 3, 8), X5 = c(1, 
3, 2, 4, 6, 4)), .Names = c("X1", "X2", "X3", "X4", "X5"), row.names = c(NA, 
6L), class = "data.frame")

由此产生的距离矩阵将是:

> matches
    1   2  3  4   5  6
1 0.0 0.0 NA  0 0.2 NA
2 0.0 0.0 NA  0 0.4 NA
3  NA  NA  0 NA  NA NA
4 0.0 0.0 NA  0 0.0 NA
5 0.2 0.4 NA  0 0.0 NA
6  NA  NA NA NA  NA  0

即使存在缺失值,如何调整此函数来计算匹配距离?

【问题讨论】:

    标签: r matrix proxy na missing-data


    【解决方案1】:

    像这样:

    f <- function(x,y) mean(x == y, na.rm = TRUE)
    
    as.matrix(dist(m, f, upper=TRUE))
    #     1   2 3    4   5    6
    # 1 0.0 0.0 0 0.00 0.2 0.00
    # 2 0.0 0.0 0 0.00 0.4 0.00
    # 3 0.0 0.0 0 0.00 0.0 0.00
    # 4 0.0 0.0 0 0.00 0.0 0.25
    # 5 0.2 0.4 0 0.00 0.0 0.00
    # 6 0.0 0.0 0 0.25 0.0 0.00
    

    还要注意numeric 向量会出现浮点错误,因此== 不会总是返回您的想法。如果您将数据存储为integers 的矩阵,这将不是问题。

    【讨论】:

      【解决方案2】:

      我不确定我是否完全理解您的问题,但似乎您不想将 NA 视为缺失值,而是另一个“类别”。在这种情况下,您可以将 data.frame 中的列视为字符,并在所有内容前面粘贴任意字符(让 NA 表现得像它们存在一样)。例如,

      for (i in 1:length(test)) test[[i]] <- paste0("*", as.character(test[[i]]))
      

      然后

      require(proxy)
      m <- test
      f <- function(x,y) sum(x == y) / length(x)
      matches <- as.matrix(dist(m, f, upper=TRUE))
      
       1    2   3  4  5   6
      1 0.0 0.0 0 0.0 0.2 0.0
      2 0.0 0.0 0 0.0 0.4 0.0
      3 0.0 0.0 0 0.0 0.0 0.0
      4 0.0 0.0 0 0.0 0.0 0.2
      5 0.2 0.4 0 0.0 0.0 0.0
      6 0.0 0.0 0 0.2 0.0 0.0
      

      请注意,我将NROW(x) 更改为length(x)

      【讨论】:

        猜你喜欢
        • 2021-12-23
        • 2011-11-18
        • 2017-08-03
        • 2014-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-15
        • 2012-12-25
        相关资源
        最近更新 更多