Sinus-Kurve passen, lm-und nls in R
Ich bin ein Anfänger in der curve-fitting und mehrere posts auf Stackoverflow hat mir wirklich geholfen.
Ich versucht, fit einer Sinus-Kurve, um meine Daten mit lm
und nls
aber beide Methoden zeigen eine seltsame Passform, wie unten gezeigt. Könnte jemand zeigen, wo ich falsch gelaufen ist. Ich würde vermuten, dass etwas zu tun mit der Zeit aber konnte es nicht Recht. Meine Daten zugegriffen werden kann von hier.
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
der Klasse "lm" , so gibt es eine plot-Methode für Sie.plot(fit.lm, type.....)
kann mehr, was Sie wollen.- Was ist die Bedeutung/ wo ist die "366" aus der Formel 2*pi*Zeit/366 ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, weil die
NA
Werte sind entfernt, die Daten passen (und Ihre Daten werden nicht wenige von Ihnen); daher, wenn Sie plotfit.lm$fitted
die plot-Methode ist die Interpretation der index der Serie, wie die 'x' - Werten zu zeichnen es gegen.Versuchen, diese [beachten Sie, wie ich geändert habe, Namen von Variablen, um zu verhindern, dass Konflikte mit den Funktionen
time
unddata
(Lesen diese post)]:Gibt mir:
Ist wahrscheinlich das, was Sie erhofft hatten.
'weights'
Feld; aber, möchten Sie vielleicht zu Fragen, über die in stats.stackexchange.comt<-c(1,16,32,46,60,75,91,105, 121, 136, 152, 166, 182, 197, 213, 228, 244, 258, 274,289, 305, 319, 335, 350) y<-c(0.07675029,0.06820963,0.05715293,0.05327944,0.05299214,0.05741750,0.07288807,0.11433698,0.26188523,0.35214251,0.46357182,0.55140384,0.59743720,0.60758298,0.59527024,0.55041092,0.46916025,0.39096330,0.27733599,0.20236358,0.12148088,0.08689101,0.08020721,0.07943709)
Wie über die Wahl ein X-und ein Y, während Sie Ihre Linie Handlung, anstatt nur die Wahl der Y.
Beide auch
lm
undnls
Ihnen nur die Einbauküche Punkte. Sie müssen also abschätzen, der rest der Punkte um eine Kurve, eine Linie plot. Da sind Sie beinls
undlm
vielleicht die Funktionpredict
vielleicht nützlich.Nicht sicher, ob dies helfen könnte - ich bekomme eine ähnliche Passform mit Sinus nur:
James Phillips
[email protected]
Alternativ könnten Sie beseitigt haben die NAs von deinen Daten nach zu Lesen in:
Dann, beim Plotten, können Sie die x-Achse die Zeit, die Punkte aus dem reduzierten Datensatz:
Diese Kurve nicht so glatt wie die von @andy-barbour aber es funktioniert in eine Prise.