R中的线性插值
我有一个真实数据集,例如如下所示:R中的线性插值,r,statistics,interpolation,R,Statistics,Interpolation,我有一个真实数据集,例如如下所示: # Dataset 1 with known data known <- data.frame( x = c(0:6), y = c(0, 10, 20, 23, 41, 39, 61) ) plot (known$x, known$y, type="o") 因此,在理想情况下,我会用已知数据创建一个“linearInterpolationModel”,例如 model <- linearInterpol(known) (在这
# Dataset 1 with known data
known <- data.frame(
x = c(0:6),
y = c(0, 10, 20, 23, 41, 39, 61)
)
plot (known$x, known$y, type="o")
因此,在理想情况下,我会用已知数据创建一个“linearInterpolationModel”,例如
model <- linearInterpol(known)
(在这种情况下,应给出“3”)
我怎样才能意识到这一点?对于每个值,我都会手动执行以下操作:
# Dataset 1 with known data
known <- data.frame(
x = c(0:6),
y = c(0, 10, 20, 23, 41, 39, 61)
)
plot (known$x, known$y, type="o")
Xsmall
,最接近的X值比当前X值大Xlarge
relPos=(X-Xsmall)/(Xlarge-Xsmall)
Yexp=Ysmall+(relPos*(Ylarge-Ysmall))
Sven您可以查看
approx()
和approxfun()
。。。或者我想你可以用lm
进行线性拟合,或者用lowess
进行非参数拟合。下面是使用线性模型得到预测值的方法
model.lm <- lm(y ~ x, data = known)
# Use predict to estimate the values for aim.
# Note that predict expects a data.frame and the col
# names need to match
newY <- predict(model.lm, newdata = data.frame(x = aim))
#Add the predicted points to the original plot
points(aim, newY, col = "red")
+1表示predict(),非常有用,但在查看为predict()提供示例的?lm+1时并不立即明显。这个解决方案与我想要的ehat略有不同。它首先对所有数据点进行线性回归,并计算回归曲线上给定x值的Y值。我只在最近的两个点之间寻找线性回归。这可以通过大约()完成。谢谢。'approx()'正是我想要的。否我使用了
绘图(大约(已知$x,已知$y,xout=aim))
。你知道近似的2D版本吗?我想在矩阵中插入数据点,…akima软件包有一个interp
函数,我用它在不规则网格上拟合3D数据。默认情况下,它生成“线性”插值,但也允许指定样条曲线拟合。如果点的“矩阵”是规则的,则可以使用线框
或persp
进行查看,但它们不接受不规则数据。但是线框
和persp
似乎只对打印有用。我有对数间隔的数据点。我想给我正在搜索的函数提供3D数据,另外还有数据点的x和y坐标。该函数应返回x和y坐标的插值z值。对于三个命名函数,这似乎是不可能的。那么,我必须手工操作吗?为什么不能interp
呢?如果需要对数尺度上的线性插值,则还可以变换、插值和反变换。如果您心中有一个特定的数据集,那么如果您发布数据并完整描述问题,您(一如既往)会得到更好的答案。这似乎不同于原来的问题,你可以考虑用数据和描述来发布一个新的问题。“黄土”也可以做2和三维拟合和插值。
model$getEstimation(0.3)
abline(h = 3, col = "#00ff00")
model.lm <- lm(y ~ x, data = known)
# Use predict to estimate the values for aim.
# Note that predict expects a data.frame and the col
# names need to match
newY <- predict(model.lm, newdata = data.frame(x = aim))
#Add the predicted points to the original plot
points(aim, newY, col = "red")
> cbind(aim, newY)
aim newY
1 0.3 2.4500000
2 0.7 6.1928571
3 2.3 21.1642857
....