我正在尝试使用R中的lm
函数将多个正弦波(准确三个)拟合到数据中。我能够得到一个结果,但它看起来很不正确:
绿线有点摇摆不定,但它似乎只是一个正弦(添加了抛物线),并且与数据不匹配。我做错了什么?
我使用的代码:(句号是硬编码的,因为它们是给我的。另外,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)
答案 0 :(得分:1)
这非常匹配,它不应该完全遵循数据。线性模型应该创造最佳拟合(直线),它可以尽可能地减少Y的变化。绿线完全适合你(虽然不是直的)
您只有一行,因为您只要求一行。时间和高度按照它们存储在列表中的列表的顺序相对于彼此绘制点。
使用提供的数据从预测中抽取线,但是从其他两组中抽取点; timetopdh,heightopdh
。如果您想要打印正弦波,那么您需要使用适当的图形方法来询问每一个,但通常是线图。