4

我有一组数据,例如:

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")

也不行。

我哪里错了?

4

3 回答 3

5

由于您正在处理费率,因此您需要转换ylog(y)、插值,然后用于exp将结果恢复为线性比例:

exp(approx(x, log(y), x)$y)
# [1] 100.000 110.000 121.000 133.100 146.410 161.051
于 2014-01-14T11:57:34.883 回答
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
于 2014-01-14T09:37:55.607 回答
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
于 2014-01-14T09:46:07.593 回答