Sono un principiante nell'adattamento di curve e diversi messaggi su Stackoverflow mi hanno davvero aiutato.La curva sinusoidale si adatta a lm e nls in R
Ho provato ad adattare una curva sinusoidale ai miei dati utilizzando lm
e nls
ma entrambi i metodi mostrano uno strano adattamento come mostrato di seguito. Qualcuno potrebbe indicare dove ho sbagliato. Sospetto che qualcosa abbia a che fare con il tempo ma non riesco a farlo bene. I miei dati sono accessibili da here.
data <- read.table(file="900days.txt", header=TRUE, sep="")
time<-data$time
temperature<-data$temperature
#lm fitting
xc<-cos(2*pi*time/366)
xs<-sin(2*pi*time/366)
fit.lm<-lm(temperature~xc+xs)
summary(fit.lm)
plot(temp~time, data=data, xlim=c(1, 900))
par(new=TRUE)
plot(fit.lm$fitted, type="l", col="red", xlim=c(1, 900), pch=19, ann=FALSE, xaxt="n",
yaxt="n")
#nls fitting
fit.nls<-nls(temp~C+alpha*sin(W*time+phi),
start=list(C=27.63415, alpha=27.886, W=0.0652, phi=14.9286))
summary(fit.nls)
plot(fit.nls$fitted, type="l", col="red", xlim=c(1, 900), pch=19, ann=FALSE, xaxt="n",
axt="n")
'fit.lm' è di classe" lm ", quindi esiste un metodo di stampa. 'plot (fit.lm, type .....)' potrebbe essere più quello che vuoi. –
Qual è il significato/dov'è il "366" proveniente dalla formula 2 * pi * tempo/366? – Vinterwoo