如何从 lm() 摘要中获取正弦波的幅度和相位?

机器算法验证 r 回归 计算统计 流明
2022-03-27 11:24:07

一个简单的正弦曲线可以写成它也可以以线性形式写成amplitudesin(x+phase)asin(x)+bcos(x)

我用 R 运行我的分析:

 fit.lm2 <- lm(temperature~sin(2*pi*Time/366) + cos(2*pi*Time/366))
 summary(fit.lm2)

Coefficients:
                       Estimate Std. Error t value Pr(>|t|)
(Intercept)             26.9188     0.1005  267.87  < 2e-16
sin(2 * pi * Time/366)   1.7468     0.1390   12.56  < 2e-16
cos(2 * pi * Time/366)   1.2077     0.1485    8.13 6.94e-11

方程的一般形式是,因此,在我的例子中,它可以写成y=b0+b1x1+b2x2y=26.9188x0+1.7468x1+1.2077x2

如果我将其写回简单的正弦形式,这样说是否正确:amplitudesin(x+phase)

amplitude=b0=26.9188

phase=arctan(b1b2)

这是正确的方法吗?

提前致谢。

1个回答

适合的是

y=26.9188+1.7468sin(x)+1.2077cos(x).

考虑一个一般(非零)线性组合视为向量并将其写入极坐标会产生αsin(x)+βcos(x).(α,β)(r,ϕ)

α=rcos(ϕ),β=rsin(ϕ),r=α2+β2

何处

αsin(x)+βcos(x)=rcos(ϕ)sin(x)+rsin(ϕ)cos(x)=rsin(x+ϕ).

r幅度相位在本例中, 蕴含ϕα=1.7468β=1.2077

r=1.74682+1.20772=2.123641

ϕ=arctan(β,α)=0.6049163.

最后

y=26.9188+2.123641sin(x+0.6049163).

这可以通过绘图来检查。这是R执行此操作的代码:

b0 <- coef(fit.lm2)[1]
alpha <- coef(fit.lm2)[2]
beta <- coef(fit.lm2)[3]

r <- sqrt(alpha^2 + beta^2)
phi <- atan2(beta, alpha)

par(mfrow=c(1,2))
curve(b0 + r * sin(x + phi), 0, 2*pi, lwd=3, col="Gray",
      main="Overplotted Graphs", xlab="x", ylab="y")
curve(b0 + alpha * sin(x) + beta * cos(x), lwd=3, lty=3, col="Red", add=TRUE)

curve(b0 + r * sin(x + phi) - (b0 + alpha * sin(x) + beta * cos(x)), 
      0, 2*pi, n=257, lwd=3, col="Gray", main="Difference", xlab="x", y="")

情节

这两个公式同意双精度算术中的十六位有效数字。差异反映了伪随机浮点错误。(因为我的数据与原始数据不完全相同,“差异”图的细节会有所不同,但仍然只会表现出微小的变化。)