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

问题描述:

我试图在R中使用lm函数对多个正弦波(精确到三个)进行拟合。我能够得到一个结果,但它看起来很远纠正:使用线性回归拟合多个正弦波(R)

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) 

这是非常匹配的,它不应该严格按照数据。一个线性模型应该创造出最佳的(直线)拟合,它可以尽可能地减少Y的变化。绿线完全符合你的要求(虽然不是直的)

你只有一条线,因为你只需要一条线。时间和高度是按照他们存储在列表中并传递到绘图的顺序相对于彼此绘制的点。

该线是使用提供的数据从预测中得出的,但是这些点来自其他两组; timetopdh,heightopdh。如果你想要打印出正弦波,那么你需要询问每一个,但使用适当的图形方法为它们命名,通常是线图。

+0

你说得对,我不应该指望这个健美是完美的。然而,我的意思是,似乎回归只考虑三个正弦波中的一个,因为绿线看起来与标准正弦波非常相似。 你能详细说明你最后一句话的含义吗(“你需要询问每一个,但名称......”)? – Pandaqi

+0

我没有看到你在哪里输入实际的sin变量来绘制,只是一组高度和时间数据。 (我看不到数据以知道这些文件中的内容)。如果你想让R绘制其中三个计算的正弦波,然后明确地将其推入“plot(sin31),然后添加许多你希望的以及预测线。 – sconfluentus

+0

如果这些文件具有所有的点,那么这些波以某种方式重叠,并且散点图隐藏了各个运动。如果您从每个波形路径中拉出点,并将它们绘制为线。如果彼此不同并且AB线将比原始点更加明显 - 连接点会告诉更多故事。 – sconfluentus