From 8d16621ff06b31de5481a17b6548eae5d0c42b13 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Wed, 9 Feb 2022 14:13:25 +1000 Subject: [PATCH] update portal example --- .DS_Store | Bin 20484 -> 0 bytes NEON_manuscript/.DS_Store | Bin 12292 -> 0 bytes NEON_manuscript/Case studies/.DS_Store | Bin 8196 -> 0 bytes .../Case studies/rsconnect/.DS_Store | Bin 8196 -> 0 bytes .../rsconnect/documents/.DS_Store | Bin 10244 -> 0 bytes .../documents/mvgam_case_study1.Rmd/.DS_Store | Bin 8196 -> 0 bytes .../mvgam_case_study1.Rmd/rpubs.com/.DS_Store | Bin 8196 -> 0 bytes .../documents/mvgam_case_study2.Rmd/.DS_Store | Bin 8196 -> 0 bytes .../mvgam_case_study2.Rmd/rpubs.com/.DS_Store | Bin 8196 -> 0 bytes NEON_manuscript/Figures/.DS_Store | Bin 10244 -> 0 bytes NEON_manuscript/portal_example.R | 54 +++++++++++++++++- R/mvjagam.R | 16 ++++-- R/plot_mvgam_uncertainty.R | 2 +- R/predict_mvgam.R | 10 ++-- man/mvjagam.Rd | 2 +- mvgam.Rproj | 2 +- 16 files changed, 71 insertions(+), 15 deletions(-) delete mode 100644 .DS_Store delete mode 100644 NEON_manuscript/.DS_Store delete mode 100644 NEON_manuscript/Case studies/.DS_Store delete mode 100644 NEON_manuscript/Case studies/rsconnect/.DS_Store delete mode 100644 NEON_manuscript/Case studies/rsconnect/documents/.DS_Store delete mode 100644 NEON_manuscript/Case studies/rsconnect/documents/mvgam_case_study1.Rmd/.DS_Store delete mode 100644 NEON_manuscript/Case studies/rsconnect/documents/mvgam_case_study1.Rmd/rpubs.com/.DS_Store delete mode 100644 NEON_manuscript/Case studies/rsconnect/documents/mvgam_case_study2.Rmd/.DS_Store delete mode 100644 NEON_manuscript/Case studies/rsconnect/documents/mvgam_case_study2.Rmd/rpubs.com/.DS_Store delete mode 100644 NEON_manuscript/Figures/.DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 6ca83b0a22ea646298b917028d01184fde28fb95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20484 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 T)M@^Ar8BFJF|+C$$N&Eax$slx diff --git a/NEON_manuscript/.DS_Store b/NEON_manuscript/.DS_Store deleted file mode 100644 index be792cadf407731db11ef5ff9969280d4f435e80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12292 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 diff --git a/NEON_manuscript/Case studies/.DS_Store b/NEON_manuscript/Case studies/.DS_Store deleted file mode 100644 index 8a189d720eb39ac6a370d793c708a7c36128ab0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 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 D42j)( diff --git a/NEON_manuscript/Case studies/rsconnect/documents/mvgam_case_study2.Rmd/.DS_Store b/NEON_manuscript/Case studies/rsconnect/documents/mvgam_case_study2.Rmd/.DS_Store deleted file mode 100644 index b4aee0ce0ed1e09f28641b139c9a7116759ca70b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8196 zcmeHMU2GIp6h7ZlU}gY2<$no_TM9&=)RwmL6Dr$nl~h5HEwoUe%E3(;aCQuq;4pT*TAMd-zILrFvqoj12F0g)@B6a&(o^=Vx)Y)|Bg#+^zMcKjp*bNV zWn9My#0cDofY?4Nm1vmCl)pBA_lNV2muKxK`C-TQgXZS%keF68ea1{h(G+ctb}%>O zRdRt5l>Mwx8W6o*Mlh6*+P$9VTxlEmy|z^u)aQ43ZeZB1RSKPL(_)hYeYR_Qm8@5G zO+TC`Cl!jKD(aw~935?KZEsAsY-$^8OpmrSZ(84&Zr^y<*qEv;TG`UkbGUf?#OTSf zQ)gv(h>i%Voe=K1$zyf=kuDi);`wT8_FZOe_+c$6RzBuQ$T3yrT&F>qreLL@1`wYKe zxu)$N-BYp6U}!&s=LYr>+bXGQU1D9YYZR@E3l}ZclS`6It6tLfs;{CqDE;NU{Ycpk zj>~r>)Ag#Nzk9&s74Gm%F{2r3lF9T+MHvv|T_uZaIjkjDuVDwH*XMYnWj5WZs=D9% zFn?j`sus;x)X1_wWHe#07kc&+sjNz>jjBi7Ih-$bPlP zWo}KfNtw9OCQTfgjJT4D) zWp{OIt)@?77OSCglh&Nlr!!%twpDA_^crTg)Na%^r}P=jU8(KRwrVwE0jVG9mPvZsV<2k&Dm+(5yPvBoqm3dO) zt;zW}k}J86=N@HkmAThD#=V;wfoXDei$(r_&(y#F-_$Y0i;EG65%_lqpr$+5o#i>E zI>kk~;n^I-RLIvt6JR zoA_cBH9q(g&=-GW@JXX@Mu{)R|0qV(@Zf_F`r@O}XyUnZXA3RVN0l%)x%a#Go^xjI zIrGiEduE9U*^=2vw3vuAt`fy8Zmv_LT-Iw!BATgU1ltq&g|a_XaJ<4by75FDfj9zj z1mXz95r`x3|A+ve*|KO;ocl@|w{ZmG2;7trko!ZLtHex%V+zBqgPSk~V3a99Sh&x5 zKxmVWFcaaJ!qAkjsj>$|rifAuD07ylr8;9K!ZC%)oS@7J(VY=xC6T4*jE?HsqLq!Uoks>woE$kdditz#3(?j< z)sx&jH_=DOA8uFQC=$wsl;bb4#@_jCu3Bhi%_3IM)8W-*365?H=1( zw#{JR00+$t?4!0-)b*Ogx-K_AXkA>mXt78xNiMBeDcvi!nyAxyN(K9&k{z5-_eiE| zbxpi;(Bu{F^h|k0Gn6Eg>6Mz+E9cvb7Po5JNUmPP2Kg?Z{f(Bn{&rm#e%FKiWR~F+RRh;b`LAJqsi7gHN6J)J^kL`Ap7I1>14KD)5J%I<-K?0{b1LS z_~>1Xzbg`*gN zi!zSm1V-=(&fp0=iKlTEFXI)wir4Wj-p2>HfKTu#zQOnSL9H`UA?!{yuC%z!y{leI zCT#RkEphmIgiYPO-N^o@g#B)|WNFRZdGi-6tGjL8hK*a>#vkOQXLmJ?LgpxHgp{dJ zB7A@odB}WDE-{v-_A;}q<5zgBcwJ$+m?=4=N%kjiP1UA^B##=dNUchV1oK-BSEtq* zVj8no50%#&4Jk35iK?VcMvEb;n8`}I$=H$-GnlhV+G=bw1j%r&MbTi&od9t;RU>i*KmFk?>Z}tQ;0Vw@@_a+ zbREw<#rA!F%UnCn z^$1s4q~4gq(1e>X9cK*FamMjK47s0XRcVuna7-c3aQW9i1jOh6`0vj6{0}L3Q#OAC D42j)( diff --git a/NEON_manuscript/Figures/.DS_Store b/NEON_manuscript/Figures/.DS_Store deleted file mode 100644 index 210c3da0360b31e216e1688d27a2734c67b43b87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeHMYiu0V6+Yj_NoL05cpQ>AyCn7|uJgi4?AX|tJXk-H#);FU*ul<&IQy6+Bi1`+ zXV(rfMh5y+fvWESt<*xRstqmu0knlmNTrWJs}_V?3TpX5pZ|(lKtf2+bMKwqI_ty% z1PVwq(%dumoO|xfJ^P*e-Fuga(3wv)5k-ke<6B6}L?DR32O$E?+2Yd5l?=)t0zm|V2oxhA=7%WXLdJYKsid4b zxR6@_mSwD#7eDhpK>9>|8S~|&lG2s?RJ#ZGuJE@QQ0{Dxisme1zMNE2xf7H-!GAOS z9SY>z*)J-a6JkmRWe|ZN0y85Z(x!qsXqXZ-bk6?Wqa1mOF>fT1b`#v{$;3$7@p6rg z&mlCYZ0@}Inr3K5g>ik~33se77tiIr&Up5asO^jAP9*&2e%DPGpW}(^9D8iYTGZuc za&aePXQi`~vbo9O0Vk7k$2#47CgsU~`jkP_bWI@#XJ?`lU1i_s;`Q-Fq_jp*Uiw1LpZh3nD4g8BM*Cw-Bvr_v0bUb0F zm8#XeO0#zB1EVUkO1atGs#T#uA56N#!~ETzQpX~lnsrt?BHrB__i}qj?9BhaYKNvB z5SETq%1&u@v4b%QiMm*Wf<~PZL~`tPF=Zy5IcYgK5LLB&RjtXH zqD$MlRcs6SmJJ)(GKZ5w*_vC-T5B%jU-@0tZkkpZCy26c-Nx2=oC?a?*~L~8sj9zM zSbmD0rI#4TZ-6k5F?<>0cLi2sJ=$;$I?#>n*nz$HIQr0!{fyqDh$Dd;B!XR>#3|g2 z3EYBDw)0m_BQcFr-)Aow2EE8yOj=>uz}u#sbeNN1gl?xh=q~y^-Amu52kBvY zoPN#J^?Q1no?-fWiT*|ZVfuQNUZc05VKJ&Dd9B0-Y(yj4v5m>A1D)87eN0|r0=OPY z*f@scOkN`O$2s{wiM#Lxd=X#bgg?W?^+TqvpWx?s0>6-{{w$^xjEj_2n&^Ldn=mdA z*OBwVII?|*vGdZv_<2+OPLh&p>ekFkNYmjpD+ir}P=RtL8Dsf{P_Bqdu8*wws&zE7 zQt*+bscL;>wZ=fVLb7VCi!_LpnKegQHyTZ15oXO*))u2xtkSG9WolUeceT4bwoul$TIzx}rujn_7#y`@F^jBU?y$)bLsw5J{BC3X|Xbslk3MQmh zrlfXUjV+RrcJi`nx1^*24B{Z;G9_{8APWz9j50oN#chnvPvJ8@KEI4_;6B`6g2o7hx0aflUumAu6 diff --git a/NEON_manuscript/portal_example.R b/NEON_manuscript/portal_example.R index fa2dd8b6..624f51c6 100644 --- a/NEON_manuscript/portal_example.R +++ b/NEON_manuscript/portal_example.R @@ -57,7 +57,7 @@ test <- mvjagam(formula = y ~ s(season, bs = "cc", k = 12) + data_test = data_test, family = 'poisson', chains = 4, - burnin = 5000, + burnin = 2000, trend_model = 'AR1') plot_mvgam_fc(test, series = 1, data_test = data_test, ylim = c(0, 100)) @@ -69,6 +69,58 @@ plot_mvgam_smooth(test, series = 1, smooth = 3) plot_mvgam_trace(test, 'trend') summary_mvgam(test) +# For visualising how covariate functions change with different lags, use +# the predict_mvgam function +# Set up prediction data by zeroing out all covariates apart from the covariate of +# interest +newdata <- data_test +newdata$year <- rep(0, length(newdata$year)) +newdata$season <- rep(0, length(newdata$season)) +newdata$precip <- matrix(0, ncol = ncol(newdata$precip), + nrow = nrow(newdata$precip)) + +# Set up plot colours and initiate plot window +cols <- viridis::inferno(5) +plot(1, type = "n", + xlab = 'Mintemp', + ylab = 'Predicted response function', + xlim = c(min(data_train$mintemp), max(data_train$mintemp)), + ylim = c(-0.6, 0.6)) + +for(i in 1:5){ + # Set up prediction matrix for mintemp with lag i as the prediction sequence + newdata$mintemp <- matrix(0, ncol = ncol(newdata$precip), + nrow = nrow(newdata$precip)) + newdata$mintemp[,i] <- seq(min(data_train$mintemp), + max(data_train$mintemp), + length.out = length(newdata$year)) + + # Predict on the link scale (intercept still included in prediction by default) + preds <- predict_mvgam(test, series = 1, newdata = newdata, type = 'link') + + # Calculate prediction quantiles + probs = c(0.05, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.95) + cred <- sapply(1:NCOL(preds), + function(n) quantile(preds[,n], + probs = probs)) + + # Plot expected function posterior median in varying colours per lag; subtract out the + # intercept so that the function is roughly centred on zero + pred_upper <- cred[4,] - test$mgcv_model$coefficients[1] + pred_lower <- cred[6,] - test$mgcv_model$coefficients[1] + pred_vals <- seq(min(data_train$mintemp), + max(data_train$mintemp), + length.out = length(newdata$year)) + polygon(c(pred_vals, rev(pred_vals)), c(pred_upper, rev(pred_lower)), + col = scales::alpha(cols[i], 0.6), border = scales::alpha(cols[i], 0.7)) + lines(pred_vals, cred[5,] - test$mgcv_model$coefficients[1], + col = scales::alpha(cols[i], 0.8), lwd = 2.5) +} +abline(h = 0, lty = 'dashed') +legend('topleft',legend=paste0('lag', seq(0, 4)), + bg = 'white', bty = 'n', + col=cols,lty=1,lwd=6) + # Initiate particle filter pfilter_mvgam_init(test, data_assim = data_test) diff --git a/R/mvjagam.R b/R/mvjagam.R index 6897d7ee..df2e09cb 100644 --- a/R/mvjagam.R +++ b/R/mvjagam.R @@ -62,7 +62,7 @@ #'@param ar_prior \code{character} specifying (in JAGS syntax) the prior distribution for the AR terms #'in the latent trends #'@param r_prior \code{character} specifying (in JAGS syntax) the prior distribution for the Negative Binomial -#'overdispersion parameters. Note that this prior acts on the INVERSE of \code{r}, which is convenient +#'overdispersion parameters. Note that this prior acts on the SQUARE ROOT of \code{r}, which is convenient #'for inducing a complexity-penalising prior model whereby the observation process reduces to a Poisson #'as the sampled parameter approaches \code{0}. Ignored if \code{family = 'poisson'} #'@param tau_prior \code{character} specifying (in JAGS syntax) the prior distributions for the independent gaussian @@ -337,8 +337,8 @@ for (i in 1:n) { ## where the likelihood reduces to a 'base' model (Poisson) unless ## the data support overdispersion for(s in 1:n_series){ - r[s] <- 1 / r_raw[s] - r_raw[s] ~ dexp(0.5) + r[s] <- pow(r_raw[s], 2) + r_raw[s] ~ dexp(0.05) } @@ -508,7 +508,7 @@ for (i in 1:n) { l.weight[t] <- exp(eta2[] * l.dist[t]) l.var[t] <- exp(eta1[] * l.dist[t] / 2) * 1 theta.prime[t] <- l.weight[t] * X1[t] + (1 - l.weight[t]) * X2[] - penalty[t] <- theta.prime[t] * l.var[t] + penalty[t] <- max(min_eps, theta.prime[t] * l.var[t]) } ## Latent factor loadings: standard normal with identifiability constraints @@ -558,8 +558,8 @@ for (i in 1:n) { ## where the likelihood reduces to a 'base' model (Poisson) unless ## the data support overdispersion for(s in 1:n_series){ - r[s] <- 1 / r_raw[s] - r_raw[s] ~ dexp(0.5) + r[s] <- pow(r_raw[s], 2) + r_raw[s] ~ dexp(0.05) } ## Posterior predictions @@ -770,6 +770,10 @@ for (i in 1:n) { ss_jagam$jags.data$n_lv <- min(2, floor(ss_jagam$jags.data$n_series / 2)) } else { ss_jagam$jags.data$n_lv <- n_lv + ss_jagam$jags.ini$LV <- matrix(rep(0.1, n_lv), nrow = NROW(ytimes), + ncol = n_lv) + ss_jagam$jags.ini$X1 <- rep(1, n_lv) + ss_jagam$jags.ini$X2 <- 1 } if(ss_jagam$jags.data$n_lv > ss_jagam$jags.data$n_series){ stop('Number of latent variables cannot be greater than number of series') diff --git a/R/plot_mvgam_uncertainty.R b/R/plot_mvgam_uncertainty.R index 9e5345e6..78bfde71 100644 --- a/R/plot_mvgam_uncertainty.R +++ b/R/plot_mvgam_uncertainty.R @@ -59,7 +59,7 @@ plot_mvgam_uncertainty = function(object, series, data_test, legend_position = ' } n_samples <- NROW(trend) - size <- MCMCvis::MCMCsummary(object$jags_output, 'r')[,series]$mean + size <- MCMCvis::MCMCsummary(object$jags_output, 'r')[series,]$mean # Full uncertainty interval for the mean if(class(data_test) == 'list'){ diff --git a/R/predict_mvgam.R b/R/predict_mvgam.R index 17675e45..a0d68f01 100644 --- a/R/predict_mvgam.R +++ b/R/predict_mvgam.R @@ -49,14 +49,14 @@ predict_mvgam = function(object, series = 1, newdata, type = 'link'){ if(object$use_lv){ lv_preds <- do.call(cbind, lapply(seq_len(object$n_lv), function(lv){ - rnorm(NROW(newdata), 0, sqrt(1 / taus[x,lv])) + rnorm(length(newdata$series), 0, sqrt(1 / taus[x,lv])) })) if(type == 'link'){ as.vector(((Xp[which(as.numeric(newdata$series) == series),] %*% betas[x,])) + ( lv_preds %*% lv_coefs[[series]][x,])) } else { - rnbinom(n = NROW(newdata), size = sizes[x, series], + rnbinom(n = length(newdata$series), size = sizes[x, series], mu = exp(((Xp[which(as.numeric(newdata$series) == series),] %*% betas[x,])) + ( lv_preds %*% lv_coefs[[series]][x,]))) } @@ -64,11 +64,11 @@ predict_mvgam = function(object, series = 1, newdata, type = 'link'){ } else { if(type == 'link'){ as.vector(((Xp[which(as.numeric(newdata$series) == series),] %*% betas[x,])) + - (rnorm(NROW(newdata), 0, sqrt(1 / taus[x,series])))) + (rnorm(length(newdata$series), 0, sqrt(1 / taus[x,series])))) } else { - rnbinom(n = NROW(newdata), size = sizes[x, series], + rnbinom(n = length(newdata$series), size = sizes[x, series], mu = exp(((Xp[which(as.numeric(newdata$series) == series),] %*% betas[x,])) + - (rnorm(NROW(newdata), 0, sqrt(1 / taus[x,series]))))) + (rnorm(length(newdata$series), 0, sqrt(1 / taus[x,series]))))) } } diff --git a/man/mvjagam.Rd b/man/mvjagam.Rd index 4abf8e2f..b6484b55 100644 --- a/man/mvjagam.Rd +++ b/man/mvjagam.Rd @@ -103,7 +103,7 @@ in the latent trends} in the latent trends} \item{r_prior}{\code{character} specifying (in JAGS syntax) the prior distribution for the Negative Binomial -overdispersion parameters. Note that this prior acts on the INVERSE of \code{r}, which is convenient +overdispersion parameters. Note that this prior acts on the SQUARE ROOT of \code{r}, which is convenient for inducing a complexity-penalising prior model whereby the observation process reduces to a Poisson as the sampled parameter approaches \code{0}. Ignored if \code{family = 'poisson'}} diff --git a/mvgam.Rproj b/mvgam.Rproj index 69fafd4b..7a1f5b95 100644 --- a/mvgam.Rproj +++ b/mvgam.Rproj @@ -2,7 +2,7 @@ Version: 1.0 RestoreWorkspace: No SaveWorkspace: No -AlwaysSaveHistory: Default +AlwaysSaveHistory: No EnableCodeIndexing: Yes UseSpacesForTab: Yes