Je veux supposer que la température de surface de la mer Baltique est la même année après année, puis la décrire avec un modèle fonction / linéaire. L'idée que j'avais était de simplement entrer l'année sous forme de nombre décimal (ou num_months / 12) et de déterminer la température à ce moment-là. En le lançant dans la fonction lm () dans R, il ne reconnaît pas les données sinusoïdales, il produit donc une ligne droite. J'ai donc placé la fonction sin () dans un crochet I () et essayé quelques valeurs pour l'ajuster manuellement, ce qui se rapproche de ce que je veux. Mais la mer se réchauffe plus rapidement en été et se refroidit plus lentement à l’automne ... Le modèle a donc tort la première année, puis est devenu plus correct au bout de quelques années, puis à l’avenir, il deviendra de plus en plus et plus faux encore.
Comment puis-je demander à R d'estimer le modèle pour moi, de sorte que je n'ai pas à deviner les chiffres moi-même? La clé ici est que je veux qu’il produise les mêmes valeurs année après année, et ne soit pas juste correct pour un an. Si j'en savais plus sur les mathématiques, je pourrais peut-être l'assimiler à quelque chose comme un poisson ou un gaussien au lieu de sin (), mais je ne sais pas comment le faire non plus. Toute aide pour se rapprocher d'une bonne réponse serait grandement appréciée.
Voici les données que j'utilise et le code pour afficher les résultats jusqu'à présent:
# 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))
la source
La température que vous indiquez dans votre question se répète exactement chaque année. Je soupçonne que ce ne sont pas vraiment des températures mesurées sur quatre ans. Dans votre exemple, vous n’auriez pas besoin d’un modèle, car les températures se répètent exactement. Mais sinon, vous pourriez utiliser la
nls
fonction pour ajuster une courbe sinusoïdale:Mais l'ajustement n'est pas très bon, surtout au début. Il semble que vos données ne puissent pas être modélisées de manière adéquate par une simple courbe sinusoïdale. Peut-être qu'une fonction trigonométrique plus complexe fera l'affaire?
La courbe rouge correspond mieux aux données. Avec la
nls
fonction, vous pouvez insérer le modèle que vous jugez approprié.Ou peut-être pourriez-vous utiliser le
forecast
paquet. Dans l'exemple ci-dessous, j'ai supposé que la série chronologique avait commencé en janvier 2010:Comme les données sont déterministes, aucune bande de confiance n’est montrée.
la source
lm()
-le comme tout autre prédicteur. En d'autres termes, illm()
n'est pas nécessaire de voir la trigonométrie du tout. Cependant, vous aurez peut-être besoin d'un autre modèle pour bien capturer une asymétrie marquée. Je ne suis pas un utilisateur régulier de R, mais j'ai souvent utilisé cette approche ailleurs (voir stata-journal.com/sjpdf.html?articlenum=st0116 ).