R线性外推缺失值

R linear extrapolate missing values

是否有一种简单的方法可以线性推断 R 数据框中的缺失值?

也许这是数据预处理中经常遇到的一个小问题,但是我找了半天也没找到直接的解决方法。

这个问题不是关于插值,而是关于推断发生前后的缺失数据。

使用用户定义的函数,我知道这个问题是可以解决的,但恐怕在这种情况下就没有必要了。

以下是起始输入数据帧,包括所需的输出格式。

任何 help/hint 非常感谢。非常感谢您。

输入数据帧:

input <- read.table(header=TRUE, text="
  ID1 ID2 ID3 ID4 ID5 ID6
  NA  20  NA  NA  NA  NA
  21  21  NA  NA  22  NA
  22  22  23  24  23  22
  NA  23  24  25  NA  23
  NA  24  25  26  NA  24
  NA  25  26  27  NA  25
  NA  26  27  28  NA  26
  NA  NA  28  NA  NA  27
  NA  NA  NA  NA  NA  NA
  NA  NA  NA  NA  NA  NA
")

输出数据框:

output <- read.table(header=TRUE, text="
  ID1 ID2 ID3 ID4 ID5 ID6
  20  20  21  22  21  20
  21  21  22  23  22  21
  22  22  23  24  23  22
  23  23  24  25  24  23
  24  24  25  26  25  24
  25  25  26  27  26  25
  26  26  27  28  27  26
  27  27  28  29  28  27
  28  28  29  30  29  28
  29  29  30  31  30  29
")

一种可能的方法是使用Hmisc::approxExtrap,base R的approx函数不支持线性外推只支持线性插值:

input[] <- sapply(input, function(y) {
      xs <- seq_along(y)
      Hmisc::approxExtrap(x = xs[!is.na(y)], y = y[!is.na(y)], xout = xs)$y
    })

input
#>    ID1 ID2 ID3 ID4 ID5 ID6
#> 1   20  20  21  22  21  20
#> 2   21  21  22  23  22  21
#> 3   22  22  23  24  23  22
#> 4   23  23  24  25  24  23
#> 5   24  24  25  26  25  24
#> 6   25  25  26  27  26  25
#> 7   26  26  27  28  27  26
#> 8   27  27  28  29  28  27
#> 9   28  28  29  30  29  28
#> 10  29  29  30  31  30  29

请注意,我们始终可以手动计算线性模型的(最小二乘)估计系数:

input[] <- sapply(input, function(y) {

      xs <- seq_along(y)[!is.na(y)]
      ys <- y[!is.na(y)]

      b.hat <- cov(xs, ys) / var(xs)
      a.hat <- mean(ys) - b.hat * mean(xs)

      a.hat + b.hat * seq_along(y)

    })

input
#>    ID1 ID2 ID3 ID4 ID5 ID6
#> 1   20  20  21  22  21  20
#> 2   21  21  22  23  22  21
#> 3   22  22  23  24  23  22
#> 4   23  23  24  25  24  23
#> 5   24  24  25  26  25  24
#> 6   25  25  26  27  26  25
#> 7   26  26  27  28  27  26
#> 8   27  27  28  29  28  27
#> 9   28  28  29  30  29  28
#> 10  29  29  30  31  30  29