Убывающая линейная модель с синусоидой в R

Я пытаюсь создать линейную модель, которая включает синусоиду с уменьшающейся амплитудой с течением времени.

Я могу успешно включить простую синусоиду в свою модель, используя следующий код:

#sine curve equation resolving 12 months 

xc<-cos(2*pi*stan$num/12)
xs<-sin(2*pi*stan$num/12)

#other variables 

Time_bb <- as.Date(stan$C_Month_Year, format = "%m/%d/%y")
Count1_bb <- stan$stan_calls

#fitted complete model 
cos.f_bb <- fitted(cos.m_bb)

cos.m_bb <- lm(Count1_bb ~ Time_bb + xc + xs)
cos.f_bb <- fitted(cos.m_bb)  

stan$fit_m <- cos.f_bb

p5 <- ggplot(stan, aes(x = Time_bb, y = stan_calls) ) +
  geom_line(data = stan, color = 'red', aes(y = fit_m)) +
  geom_smooth(method = lm, se = FALSE) + 
  geom_point(size=1)
  

Этот код приводит к следующему графику:

линейная модель, включающая обычную синусоиду

Тем не менее, я полагаю, что получу лучшую подгонку модели, если смогу учесть уменьшение амплитуды с течением времени. Однако я не знаю, как правильно это закодировать и, что более важно, контролировать величину уменьшения амплитуды.

Я попытался выполнить некоторые из предложений, подробно описанных в Рисование синусоидальной волны с помощью увеличение амплитуды и частоты с течением времени. И используя следующий код:

#sine curve equation resolving 12 months 

f <- 12
f_c <- 1
T <- 1/f
t <- seq(0, 12, T) 
A <- t

stan$num/12

carrier <- cos(2*pi*f_c*t)
out <- A*carrier

out <- rev(out)
out<- out[0:65]

#other variables 
Time_bb <- as.Date(stan$C_Month_Year, format = "%m/%d/%y")
Count1_bb <- stan$stan_calls

#complete model 
cos.m_bb <- lm(Count1_bb ~ Time_bb + out)
tidy(cos.m_bb, conf.int = TRUE)

#fitted complete model 
cos.f_bb <- fitted(cos.m_bb) 

fit.lm_bb <- lm(Count1_bb~out)
stan$fit_bb <- fitted(fit.lm_bb)  
stan$fit.res_bb <- resid(fit.lm_bb)

cos.m_bb <- lm(Count1_bb ~ Time_bb + out)
cos.f_bb <- fitted(cos.m_bb)  

stan$fit_m <- cos.f_bb

p5 <- ggplot(stan, aes(x = Time_bb, y = stan_calls) ) +
  geom_line(data = stan, color = 'red', aes(y = fit_m)) +
  geom_point()

Мне удалось построить следующий график:

Линейная модель с уменьшением амплитуды

Однако я не понимаю, как правильно манипулировать f, T, f_c, t и A, чтобы получить лучшее соответствие модели. Любая помощь будет принята с благодарностью!

Глава базы данных, которую я использую, выглядит так:

head(stan)

 C_Month_Year stan_calls
1       7/1/14  0.1154295
2       8/1/14  0.2049913
3       9/1/14  0.1786142
4      10/1/14  0.1453100
5      11/1/14  0.1238671
6      12/1/14  0.1289842


person kphacker    schedule 07.06.2021    source источник
comment
Не уверен, но не удивлюсь, если это не совсем возможно в линейном контексте; Вы можете попробовать Count1_bb ~ Time_bb*(xc + xs) и посмотреть, что получится... можно нам минимально воспроизводимый пример, пожалуйста...?   -  person Ben Bolker    schedule 07.06.2021
comment
Это решение сработало отлично! Спасибо   -  person kphacker    schedule 24.06.2021
comment
Вы можете (на самом деле, рекомендуется) опубликовать это как ответ, если хотите.   -  person Ben Bolker    schedule 24.06.2021