Although I read this post, I still have no idea how to apply this to my own data and hope that someone can help me out.
I have the following data:
y <- c(11.622967, 12.006081, 11.760928, 12.246830, 12.052126, 12.346154, 12.039262, 12.362163, 12.009269, 11.260743, 10.950483, 10.522091, 9.346292, 7.014578, 6.981853, 7.197708, 7.035624, 6.785289, 7.134426, 8.338514, 8.723832, 10.276473, 10.602792, 11.031908, 11.364901, 11.687638, 11.947783, 12.228909, 11.918379, 12.343574, 12.046851, 12.316508, 12.147746, 12.136446, 11.744371, 8.317413, 8.790837, 10.139807, 7.019035, 7.541484, 7.199672, 9.090377, 7.532161, 8.156842, 9.329572, 9.991522, 10.036448, 10.797905)
t <- 18:65
And now I simply want to fit a sine wave
$$
y(t)=A\cdot sin(\omega t+\phi) +C.
$$
with the four unknowns $A$, $\omega$, $\phi$ and $C$ to it.
The rest of my code looks is the following
res <- nls(y ~ A*sin(omega*t+phi)+C, data=data.frame(t,y), start=list(A=1,omega=1,phi=1,C=1))
co <- coef(res)
fit <- function(x, a, b, c, d) {a*sin(b*x+c)+d}
# Plot result
plot(x=t, y=y)
curve(fit(x, a=co["A"], b=co["omega"], c=co["phi"], d=co["C"]), add=TRUE ,lwd=2, col="steelblue")
But the result is really poor.
I would very much appreciate any help.
Cheers.
Best Answer
If you just want a good estimate of $\omega$ and don't care much about its standard error:
(A better fit still would perhaps account for the outliers in that series in some way, reducing their influence.)
---
If you want some idea of the uncertainty in $\omega$, you could use profile likelihood (pdf1, pdf2 - references on getting approximate CIs or SEs from profile likelihood or its variants aren't hard to locate)
(Alternatively, you could feed these estimates into nls ... and start it already converged.)