r - 用指数估计填空

标签 r exponential imputets

我正在尝试用显示指数增长的数字填充 NA 值。以下是我正在尝试执行的操作的数据示例。


library(tidyverse)

expand.grid(X2009H1N1 = "0-17 years",
            type = "Cases",
            month = seq(as.Date("2009-04-12") , to = as.Date("2010-03-12"), by = "month")) %>% 
  bind_cols( data.frame(
    MidLevelRange = c(0,NA,NA,NA,NA,NA,8000000,16000000,18000000,19000000,19000000,19000000),
    lowEst = c(0,NA,NA,NA,NA,NA,5000000,12000000,12000000,13000000,14000000,14000000)
  ))

我使用了%>%排列(月,X2009H1N1)%>% group_by(X2009H1N1, 类型) %>% mutate(aprox_MidLevelRange = Zoo::na.approx(MidLevelRange, na.rm = FALSE)) 但结果对我来说看起来并不是指数级的。谢谢

最佳答案

看看 imputeTS 包。 它为时间序列提供了大量的插补函数。看看这个paper全面了解所有提供的选项

在您的情况下,使用 Stineman 插值( imputeTS::na_interpolation(x, option ="stine") 可能是一个合适的选择。

这里是您提供的示例:

x <- expand.grid(
  X2009H1N1 = "0-17 years",
  type = "Cases",
  month = seq(as.Date("2009-04-12"),
    to = as.Date("2010-03-12"),
    by = "month"
  )
) %>%
  bind_cols(data.frame(
    MidLevelRange = c(0, NA, NA, NA, NA, NA, 8000000, 16000000, 18000000, 19000000, 19000000, 19000000),
    lowEst = c(0, NA, NA, NA, NA, NA, 5000000, 12000000, 12000000, 13000000, 14000000, 14000000)
  ))

x %>%
  arrange(month, X2009H1N1) %>%
  group_by(X2009H1N1, type) %>%
  mutate(aprox_MidLevelRange = imputeTS::na_interpolation(MidLevelRange, option = "stine"))

这给你:

# A tibble: 12 x 6
# Groups:   X2009H1N1, type [1]
   X2009H1N1  type  month      MidLevelRange   lowEst aprox_MidLevelRange
   <fct>      <fct> <date>             <dbl>    <dbl>               <dbl>
 1 0-17 years Cases 2009-04-12             0        0                  0 
 2 0-17 years Cases 2009-05-12            NA       NA             593718.
 3 0-17 years Cases 2009-06-12            NA       NA            1335612.
 4 0-17 years Cases 2009-07-12            NA       NA            2289061.
 5 0-17 years Cases 2009-08-12            NA       NA            3559604.
 6 0-17 years Cases 2009-09-12            NA       NA            5336975.
 7 0-17 years Cases 2009-10-12       8000000  5000000            8000000 
 8 0-17 years Cases 2009-11-12      16000000 12000000           16000000 
 9 0-17 years Cases 2009-12-12      18000000 12000000           18000000 
10 0-17 years Cases 2010-01-12      19000000 13000000           19000000 
11 0-17 years Cases 2010-02-12      19000000 14000000           19000000 
12 0-17 years Cases 2010-03-12      19000000 14000000           19000000 

因此,仅比较插值函数,我想这可能是最好的选择。

只需绘制不同的插值选项,即可看到差异。 一般来说,这是插值选项:

imputeTS::na_interpolation(x, option ="linear")
imputeTS::na_interpolation(x, option ="spline")
imputeTS::na_interpolation(x, option ="stine")
imputeTS 中的线性/样条选项与zoo::approx()/zoo::spline() 相同。动物园里不存在斯汀。

关于r - 用指数估计填空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60816527/

相关文章:

Matlab 幂函数随机出现故障

r - R xml到dataFrame问题

Java double 将小数点以上6位转换为指数格式

python - 如何在Python中以最快的方式计算矩阵指数?

r - 基于ID的时间序列插补

r - 如何用缺失值前后的平均值填充向量中的缺失值

r - 根据两个变量匹配数据帧行(索引)

r - As.character 返回数字而不是字符串 R

R 表达式在 for 循环中计算的次数