Quero assumir que a temperatura da superfície do mar no Mar Báltico é a mesma ano após ano e depois descrevê-la com um modelo de função / linear. A idéia que tive foi apenas inserir o ano como um número decimal (ou num_months / 12) e descobrir qual deveria ser a temperatura naquele momento. Jogando-o na função lm () em R, ele não reconhece dados sinusoidais, portanto apenas produz uma linha reta. Então, coloquei a função sin () dentro de um colchete I () e tentei alguns valores para ajustá-la manualmente, e isso se aproxima do que eu quero. Mas o mar está esquentando mais rápido no verão e depois esfriando mais devagar no outono ... Então, o modelo está errado no primeiro ano, fica mais correto depois de alguns anos e, no futuro, acho que fica mais e mais errado de novo.
Como posso obter R para estimar o modelo para mim, para que eu não precise adivinhar números sozinho? A chave aqui é que eu quero que produza os mesmos valores ano após ano, e não apenas esteja correto por um ano. Se eu soubesse mais sobre matemática, talvez pudesse calculá-la como algo como um Poisson ou Gaussiano em vez de sin (), mas também não sei como fazer isso. Qualquer ajuda para se aproximar de uma boa resposta seria muito apreciada.
Aqui estão os dados que eu uso e o código para mostrar os resultados até agora:
# 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))
fonte
A temperatura que você fornece na sua pergunta se repete exatamente a cada ano. Suspeito que não sejam realmente temperaturas medidas ao longo de quatro anos. No seu exemplo, você não precisaria de um modelo, porque as temperaturas se repetem exatamente. Mas, caso contrário, você poderia usar a
nls
função para ajustar uma curva senoidal:Mas o ajuste não é muito bom, especialmente no começo. Parece que seus dados não podem ser modelados adequadamente por uma simples curva senoidal. Talvez uma função trigonométrica mais complexa funcione?
A curva vermelha ajusta melhor os dados. Com a
nls
função, você pode inserir o modelo que achar apropriado.Ou talvez você possa fazer uso do
forecast
pacote. No exemplo abaixo, presumi que a série cronológica começou em janeiro de 2010:Como os dados são determinísticos, nenhuma faixa de confiança é mostrada.
fonte
lm()
como qualquer outro preditor. Em outras palavras,lm()
não precisa ver nenhuma trigonometria. No entanto, você pode precisar de outro modelo para capturar bem a assimetria marcada. Não sou usuário regular de R, mas frequentemente usei essa abordagem em outros lugares (consulte stata-journal.com/sjpdf.html?articlenum=st0116 ).