R 用指数估计值填空

R 用指数估计值填空,r,exponential,imputets,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( Mi

我试图用指数增长的数字来填充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)
  ))

我使用了
%%>%arrange(月,X2009H1N1)%%>%
分组依据(X2009H1N1,类型)%>%

变异(近似值MidLevelRange=zoo::na.approx(MidLevelRange,na.rm=FALSE))
但结果在我看来不是指数型的。谢谢

确保您的结果不是指数型的,您正在使用函数
na.approx()
使用线性插值来插补值。您正在使用的
zoo
软件包提供了使用
na.spline()
函数使用三次样条插值进行插值,但该函数也不会生成指数曲线

x%
绑定列(数据帧(中间级别范围=c(0,不适用,不适用,不适用,不适用,不适用,不适用,80000016000018000001900001000000),
最低=c(0,不适用,不适用,不适用,不适用,不适用
x%>%安排(月,X2009H1N1)%>%
分组依据(X2009H1N1,类型)%>%
变异(近似于中间水平范围=动物园::na.样条曲线(中间水平范围))
三次样条插值的问题是,最小值将被插值为负值,这取决于这是否是您正在寻找的行为:

#一个tible:8 x 6
#分组:X2009H1N1,类型[1]
X2009H1N1型月中档最低约X_中档
10-17岁个案2009-04-12
2 0-17岁病例2009-05-12 NA-18568160。
3 0-17岁病例2009-06-12 NA-25223342。
4 0-17岁病例2009-07-12 NA-22929832。
5 0-17岁病例2009-08-12 NA-14651914。
6 0-17岁病例2009-09-12 NA-3353875。
7 0-17年案例2009-10-12 8000000 5000000。

查看输入数据包。 它为时间序列提供了大量的插补函数。请看一下这篇文章,以便对所有提供的选项有一个很好的概述

在您的案例中,使用斯汀曼插值(
inputets::na_插值(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"))
imputeTS中的线性/样条线选项与zoo::approx()/zoo::spline()相同。zoo中不存在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")