Quiero suponer que la temperatura de la superficie del mar del mar Báltico es la misma año tras año, y luego describirlo con un modelo lineal / función. La idea que tenía era ingresar el año como un número decimal (o num_months / 12) y averiguar cuál debería ser la temperatura en ese momento. Al arrojarlo a la función lm () en R, no reconoce datos sinusoidales, por lo que solo produce una línea recta. Así que puse la función sin () dentro de un paréntesis I () e intenté algunos valores para ajustar manualmente la función, y eso se acerca a lo que quiero. Pero el mar se está calentando más rápido en el verano y luego se está enfriando más lentamente en el otoño ... Entonces, el modelo se equivoca el primer año, luego se vuelve más correcto después de un par de años, y luego en el futuro, supongo que se vuelve más y más mal otra vez.
¿Cómo puedo obtener R para estimar el modelo para mí, para que no tenga que adivinar los números yo mismo? La clave aquí es que quiero que produzca los mismos valores año tras año, no solo que sea correcto durante un año. Si supiera más sobre matemáticas, tal vez podría adivinarlo como algo así como un Poisson o Gaussiano en lugar de pecado (), pero tampoco sé cómo hacerlo. Cualquier ayuda para acercarse a una buena respuesta sería muy apreciada.
Aquí están los datos que uso y el código para mostrar resultados hasta ahora:
# 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))
fuente
La temperatura que proporciona en su pregunta se repite exactamente cada año. Sospecho que estas no son temperaturas realmente medidas en cuatro años. En su ejemplo, no necesitaría un modelo, porque las temperaturas solo se repiten exactamente. Pero de lo contrario, podría usar la
nls
función para ajustar una curva sinusoidal:Pero el ajuste no es muy bueno, especialmente al principio. Parece que sus datos no pueden ser modelados adecuadamente por una simple curva sinusoidal. ¿Quizás una función trigonométrica más compleja sea suficiente?
La curva roja se ajusta mejor a los datos. Con la
nls
función, puede poner el modelo que considere apropiado.O tal vez podrías hacer uso del
forecast
paquete. En el siguiente ejemplo, supuse que la serie temporal comenzó en enero de 2010:Debido a que los datos son deterministas, no se muestran bandas de confianza.
fuente
lm()
como cualquier otro predictor. En otras palabras,lm()
no es necesario ver ninguna trigonometría en absoluto. Sin embargo, es posible que necesite otro modelo para capturar bien la asimetría marcada. No soy un usuario habitual de R, pero a menudo he utilizado este enfoque en otros lugares (consulte stata-journal.com/sjpdf.html?articlenum=st0116 ).