使用线性回归拟合多个正弦波(R)

时间:2017-01-26 18:34:06

标签: r linear-regression sine

我正在尝试使用R中的lm函数将多个正弦波(准确三个)拟合到数据中。我能够得到一个结果,但它看起来很不正确:

Sine wave fit to data

绿线有点摇摆不定,但它似乎只是一个正弦(添加了抛物线),并且与数据不匹配。我做错了什么?

我使用的代码:(句号是硬编码的,因为它们是给我的。另外,timetopdh是以秒为单位的时间,heightdh某个时间点的水位。)

plot(timetopdh,heightopdh,xlim=topvector, ylim = c(0,270))

period1 <- 545
period2 <- 205
period3 <- 85

sin11 <- sin(2*pi/period1*timetopdh)
sin12 <- cos(2*pi/period1*timetopdh)

sin21 <- sin(2*pi/period2*timetopdh)
sin22 <- cos(2*pi/period2*timetopdh)

sin31 <- sin(2*pi/period3*timetopdh)
sin32 <- cos(2*pi/period3*timetopdh)

lmsinus <- lm(heightopdh ~ poly(timetopdh,2) + sin11 + sin12 + sin21 + sin22 + sin31 + sin32)

fitted_for_lines <- fitted(lmsinus)
pred <- predict(lmsinus, newdata=data.frame(timetopdh = timetopdh)) 
lines(timetopdh, pred, col=3, lwd=3)

1 个答案:

答案 0 :(得分:1)

这非常匹配,它不应该完全遵循数据。线性模型应该创造最佳拟合(直线),它可以尽可能地减少Y的变化。绿线完全适合你(虽然不是直的)

您只有一行,因为您只要求一行。时间和高度按照它们存储在列表中的列表的顺序相对于彼此绘制点。

使用提供的数据从预测中抽取线,但是从其他两组中抽取点; timetopdh,heightopdh。如果您想要打印正弦波,那么您需要使用适当的图形方法来询问每一个,但通常是线图。