0

我有一个 data.frame 的值,其中的样本间隔不准确。样本形成未知幅度和周期的振荡波。我想在每个确切的时间估计值。

      hours value
60 63.06667 22657
61 64.00000 21535
62 64.93333 20797
63 65.86667 20687
64 66.80000 20129
65 67.73333 19671
66 68.66667 19066
67 69.60000 19534
68 70.53333 19994
69 71.46667 19575
70 72.40000 21466

RI 中有没有一种方法可以将曲线拟合到该数据集,然后在我的给定点(63、64、65、66 ...)对其进行采样?我知道spline()但不知道如何让它给我精确的“小时”整数值。

编辑:为了澄清,这是我希望拥有的结果数据框(带有“值”的虚拟条目)

   hours value
63.00000 22800
64.00000 21535
65.00000 20780
66.00000 20500
67.00000 20011
68.00000 ...
69.00000 ...
70.00000 ...
71.00000 ...
72.00000 ...
73.00000 ...

重新创建数据的代码:

structure(list(hours = c(63.06666647, 63.9999998, 64.93333313, 
65.86666646, 66.79999979, 67.73333312, 68.66666645, 69.59999978, 
70.53333311, 71.46666644, 72.39999977), value = c(22657L, 21535L, 
20797L, 20687L, 20129L, 19671L, 19066L, 19534L, 19994L, 19575L, 
21466L)), .Names = c("hours", "value"), row.names = 60:70, class = "data.frame")
4

2 回答 2

1

使用 Sean 的答案,但使用该splinefun工具创建您自己的插值函数。运行在小时值向量上创建的函数,以计算这些精确值的插值。页面上给出的示例?splinefun非常清楚。

于 2012-05-01T20:05:10.460 回答
0

样条拟合的简单方法可能是:

D <- structure(list(hours = c(63.06666647, 63.9999998, 64.93333313, 
65.86666646, 66.79999979, 67.73333312, 68.66666645, 69.59999978, 
70.53333311, 71.46666644, 72.39999977), value = c(22657L, 21535L, 
20797L, 20687L, 20129L, 19671L, 19066L, 19534L, 19994L, 19575L, 
21466L)), .Names = c("hours", "value"), row.names = 60:70, class = "data.frame")

sm <- smooth.spline(D$hours, D$value, spar = 0.5)

spar或您喜欢的任何平滑因子

plot(D$hours, D$value)
lines(sm, col = "red")

您可以通过平滑样条访问每个小时的拟合 y 值

sm$y
[1] 22421.54 21682.93 21023.05 20469.70 19998.72 19634.10 19448.09 19506.52 19783.97
[10] 20251.24 20891.14
于 2012-05-01T17:49:09.247 回答