从丢失的数据中抵消行校正影响的策略

问题描述 投票:0回答:1

这里是数据集

data <- t(data.frame(met1 = c(2,2,2,2,2),
                   met2 = c(5,4,NA,2,1),
                   met3 = c(2,2,2,NA,2),
                   met4 = c(2,4,6,8,6),
                   met5 = c(1,3,4,7,2)))

这给:

     [,1] [,2] [,3] [,4] [,5]
met1    2    2    2    2    2
met2    5    4   NA    2    1
met3    2    2    2   NA    2
met4    2    4    6    8    6
met5    1    3    4    7    2

我经常对数据集进行逐行校正。在求和后将所有值相除,这意味着所有值都在0到1之间。

data <- data / rowSums(data, na.rm = TRUE)

当没有丢失的数据时,这很好用。但是,正如您在比较met1met3时所看到的,由于缺少数据,met3的每个值都大大高于met1

           [,1]      [,2]      [,3]      [,4]       [,5]
met1 0.20000000 0.2000000 0.2000000 0.2000000 0.20000000
met2 0.41666667 0.3333333        NA 0.1666667 0.08333333
met3 0.25000000 0.2500000 0.2500000        NA 0.25000000
met4 0.07692308 0.1538462 0.2307692 0.3076923 0.23076923
met5 0.05882353 0.1764706 0.2352941 0.4117647 0.11764706

我该如何抵消这种影响?目前,我已删除任何缺少数据的列,但我不希望这样做,因为某些重要数据可能会被删除。

r row normalization
1个回答
0
投票

您可以通过在分母中计算NA来取平均值,但这会使met3中的值“显着”小于met1。另一种选择是按行均值估算缺失值,然后使用rowSums()将其归一化。

# Data
data <- t(data.frame(met1 = c(2,2,2,2,2),
                     met2 = c(5,4,NA,2,1),
                     met3 = c(2,2,2,NA,2),
                     met4 = c(2,4,6,8,6),
                     met5 = c(1,3,4,7,2)))
> data
     [,1] [,2] [,3] [,4] [,5]
met1    2    2    2    2    2
met2    5    4   NA    2    1
met3    2    2    2   NA    2
met4    2    4    6    8    6
met5    1    3    4    7    2

# Data imputation
data = apply(data, 1, function(x) {
  x[is.na(x)] = mean(x, na.rm = TRUE)
  return(x)
}) %>% t()
> data
     [,1] [,2] [,3] [,4] [,5]
met1    2    2    2    2    2
met2    5    4    3    2    1
met3    2    2    2    2    2
met4    2    4    6    8    6
met5    1    3    4    7    2

# Normalizing
data <- data / rowSums(data, na.rm = TRUE)
> data
           [,1]      [,2]      [,3]      [,4]       [,5]
met1 0.20000000 0.2000000 0.2000000 0.2000000 0.20000000
met2 0.33333333 0.2666667 0.2000000 0.1333333 0.06666667
met3 0.20000000 0.2000000 0.2000000 0.2000000 0.20000000
met4 0.07692308 0.1538462 0.2307692 0.3076923 0.23076923
met5 0.05882353 0.1764706 0.2352941 0.4117647 0.11764706
© www.soinside.com 2019 - 2024. All rights reserved.