Chcę założyć, że temperatura powierzchni morza w Morzu Bałtyckim jest taka sama rok po roku, a następnie opisać to za pomocą modelu funkcyjnego / liniowego. Pomysł, jaki miałem, to po prostu wpisać rok jako liczbę dziesiętną (lub num_months / 12) i ustalić, jaka powinna być temperatura w tym czasie. Wrzucając go do funkcji lm () w R, nie rozpoznaje danych sinusoidalnych, więc po prostu tworzy linię prostą. Umieściłem więc funkcję sin () w nawiasie I () i wypróbowałem kilka wartości, aby ręcznie dopasować funkcję, i to zbliża się do tego, czego chcę. Ale morze rozgrzewa się szybciej latem, a potem stygnie wolniej jesienią ... Więc model jest błędny w pierwszym roku, potem poprawia się po kilku latach, a potem wydaje mi się, że w przyszłości będzie bardziej i jeszcze raz źle.
Jak sprawić, by R oszacował dla mnie model, więc nie muszę zgadywać liczb? Kluczem tutaj jest to, że chcę, aby produkowała te same wartości rok po roku, a nie tylko przez jeden rok. Gdybym wiedział więcej o matematyce, może mógłbym zgadnąć, że to coś w rodzaju Poissona lub Gaussa zamiast sin (), ale nie wiem też, jak to zrobić. Będziemy wdzięczni za każdą pomoc w zbliżeniu się do dobrej odpowiedzi.
Oto dane, których używam, i kod do pokazania dotychczasowych wyników:
# SST from Bradtke et al 2010
ToY <- c(1/12,2/12,3/12,4/12,5/12,6/12,7/12,8/12,9/12,10/12,11/12,12/12,13/12,14/12,15/12,16/12,17/12,18/12,19/12,20/12,21/12,22/12,23/12,24/12,25/12,26/12,27/12,28/12,29/12,30/12,31/12,32/12,33/12,34/12,35/12,36/12,37/12,38/12,39/12,40/12,41/12,42/12,43/12,44/12,45/12,46/12,47/12,48/12)
Degrees <- c(3,2,2.2,4,7.6,13,16,16.1,14,10.1,7,4.5,3,2,2.2,4,7.6,13,16,16.1,14,10.1,7,4.5,3,2,2.2,4,7.6,13,16,16.1,14,10.1,7,4.5,3,2,2.2,4,7.6,13,16,16.1,14,10.1,7,4.5)
SST <- data.frame(ToY, Degrees)
SSTlm <- lm(SST$Degrees ~ I(sin(pi*2.07*SST$ToY)))
summary(SSTlm)
plot(SST,xlim=c(0,4),ylim=c(0,17))
par(new=T)
plot(data.frame(ToY=SST$ToY,Degrees=8.4418-6.9431*sin(2.07*pi*SST$ToY)),type="l",xlim=c(0,4),ylim=c(0,17))