我有一组数据,例如:
x<-c(1, 2, 3, 4, 5, 6)
y<-c(100, 110, 121, 133.1, NA, 161.051)
现在,y
显然以10%的恒定速率增长。
我希望能够在x=5
处插入数据,并且我想打印146.41
作为答案。但是,此功能似乎没有这样做:
approx(x,y,5)
这会打印147.0755
,这不是我正在寻找的答案。
approx(x,y,5,method="constant")
也没有做到这一点。
我哪里错了?
答案 0 :(得分:4)
由于您正在处理费率,因此您需要将y
翻译为log(y)
,进行插值,然后使用exp
将结果恢复为线性比例:
exp(approx(x, log(y), x)$y)
# [1] 100.000 110.000 121.000 133.100 146.410 161.051
答案 1 :(得分:2)
简短回答是你不能不给它一些更多的信息,因为它既可以是线性拟合,也不是非线性函数,也可以是常数拟合,也不是。
你可以通过告诉它右手点是左手点强调的1.1倍来强迫它:
approx(x,y,5, method="constant", f=1/2.1) # 1/ left weight (1) + right weight (1.1)
>$x
>[1] 5
>$y
>[1] 146.41
但这可能不是那么有用!
可能是你能得到的最接近的是:
spline(x,y,xout=5)
>$x
>[1] 5
>$y
>[1] 146.4125
答案 2 :(得分:1)
不是很优雅,但您可以使用几何系列公式替换缺失值:
y[is.na(y)] <- y[1]*(1+diff(y)[1]/y[1])^(which(is.na(y))-1)
y
[1] 100.000 110.000 121.000 133.100 146.410 161.051