预测正弦噪声的值

时间:2010-12-28 05:10:32

标签: r plot prediction gam

背景

使用R预测系列中的下一个值。

问题

以下代码生成并绘制具有一些均匀噪声的曲线的模型:

slope = 0.55
offset = -0.5
amplitude = 0.22
frequency = 3
noise = 0.75
x <- seq( 0, 200 )
y <- offset + (slope * x / 100) + (amplitude * sin( frequency * x / 100 ))
yn <- y + (noise * runif( length( x ) ))

gam.object <- gam( yn ~ s( x ) + 0 )
plot( gam.object, col = rgb( 1.0, 0.392, 0.0 ) )
points( x, yn, col = rgb( 0.121, 0.247, 0.506 ) )

正如预期的那样,该模型揭示了这一趋势。麻烦在于预测后续价值:

p <- predict( gam.object, data.frame( x=201:210 ) )

绘制时预测看起来不正确:

df <- data.frame( fit=c( fitted( gam.object ), p ) )
plot( seq( 1:211 ), df[,], col="blue" )
points( yn, col="orange" )

预测值(从201开始)似乎太低了。

问题

  1. 如图所示,预测值实际上是最准确的预测吗?
  2. 如果没有,如何提高准确度?
  3. 连接两个数据集(fitted.values( gam.object )p)的更好方法是什么?

1 个答案:

答案 0 :(得分:3)

  1. 模拟数据很奇怪,因为您添加到“true”y的所有错误都大于0.(runif会在[0,1]上创建数字,而非{{1} }。)
  2. 当允许模型中的拦截术语时,问题就会消失。
  3. 例如:

    [-1,1]

    在没有截距的情况下模型中系统低估的原因可能是gam.object2 <- gam( yn ~ s( x )) p2 <- predict( gam.object2, data.frame( x=201:210 )) points( 1:211, c( fitted( gam.object2 ), p2), col="green") 对估计的平滑函数使用了求和与零的约束。我认为第2点回答了你的第一和第二个问题。

    您的第三个问题需要澄清,因为gam - 对象不是gam。这两种数据类型不会混合。

    更完整的例子:

    data.frame