From 19e8a5a93a27bfc4ab849e81a667e893994dcddc Mon Sep 17 00:00:00 2001 From: Tian Li Date: Fri, 3 Nov 2023 16:20:59 +0000 Subject: [PATCH 01/74] add calving tutorial notebook --- vignettes/calving_tutorial.Rmd | 107 ++++++++++++++++++++++++++++++++ vignettes/coefs.png | Bin 0 -> 97886 bytes vignettes/obs_vs_preds.png | Bin 0 -> 36522 bytes vignettes/obs_vs_preds_time.png | Bin 0 -> 37630 bytes vignettes/summary_res.png | Bin 0 -> 62416 bytes 5 files changed, 107 insertions(+) create mode 100644 vignettes/calving_tutorial.Rmd create mode 100644 vignettes/coefs.png create mode 100644 vignettes/obs_vs_preds.png create mode 100644 vignettes/obs_vs_preds_time.png create mode 100644 vignettes/summary_res.png diff --git a/vignettes/calving_tutorial.Rmd b/vignettes/calving_tutorial.Rmd new file mode 100644 index 00000000..4d664141 --- /dev/null +++ b/vignettes/calving_tutorial.Rmd @@ -0,0 +1,107 @@ +--- +title: "Simple Linear Regression with fdmr" +author: "Tian Li, Amin Shn, Ruitang Yang, Wenxue Cao" +date: "`r Sys.Date()`" +output: + html_document: + toc: true + toc_float: true +--- + +# Introduction + +This tutorial will guide you through the process of performing a simple linear regression using the inlabru and fdmr packages in R. + +# Loading the INLA Package +Load the necessary packages as follows: + +```{r, message=FALSE} +library(INLA) +library(tidyverse) +``` + +# The Data + +- For this tutorial, we will use a dataset including envrionmental variables measured in Svalbard. Specifically we want to check the controlling climatic parameters for calving front variability (length change) of tidewater glaciers in Svalbard. +- We use six tidewater glaciers to demonstrate this +- Variables include surface runoff, surface mass balance, surface meltwater production, air temperature, sea surface temperature, subsurface ocean temperature + +The location of the tidewater glaciers are shown below. + +```{r} +# Firstly retrieve the data +calving_data <- read.csv("4DM_Calving_NEW.csv") + +# visualize the glacier location +glacierNames <- unique(calving_data[c("glacierName")]) +lats <- unique(calving_data[c("latitude")]) +lons <- unique(calving_data[c("longitude")]) + +glac1 <- list(longitude = lons[0,], latitude = lats[0,], label = glacierNames[0,]) +glac2 <- list(longitude = lons[1,], latitude = lats[1,], label = glacierNames[1,]) +glac3 <- list(longitude = lons[2,], latitude = lats[2,], label = glacierNames[2,]) +glac4 <- list(longitude = lons[3,], latitude = lats[3,], label = glacierNames[3,]) +glac5 <- list(longitude = lons[4,], latitude = lats[4,], label = glacierNames[4,]) + +glac6 <- list(longitude = lons[5,], latitude = lats[5,], label = glacierNames[5,]) + +points <- list(glac1, glac2, glac3,glac4, glac5, glac6) +markers <- dplyr::bind_rows(points) + +fdmr::retrieve_tutorial_data(dataset = "hydro") +norway_polygon_path <- fdmr::get_tutorial_datapath(dataset = "hydro", filename = "Kvilldal_Catch_Boundary.geojson") +norway_polygon <- sf::read_sf(norway_polygon_path) %>% sf::st_zm() +sfc <- sf::st_transform(norway_polygon, crs = "+proj=longlat +datum=WGS84") +fdmr::plot_map(polygon_data = sfc, markers = markers, polygon_fill_opacity = 0.5) +``` + +# Simple Linear Regression Model + +We will model Calving's front change using three important factors namely: surface runoff (mmWE/day), 3m air temperature (°C), sea surface temperature (°C). + +# Model Specification + +We specify the model using a formula and the inla function. + +```{r, eval = F} +formula <- fc ~ 0 + + f(id.loc0, model = "iid") + + f(id.loc0, RU, model = "iid") + + f(id.loc0, AT, model = "iid") + + f(id.loc0, SST, model = "iid") + +# Fitting INLA +inla_fit <- inla(formula, family = "gaussian", data = calving_data , control.predictor = list(compute = TRUE)) +``` + +# Results + +We can now examine the results of our INLA model. + +```{r, eval=FALSE} +fdmr::summary(result) +``` +![](summary_res.png) + +```{r, eval = F} +fdmr::plot(result) +``` +![](coefs.png) + +# Diagnostics + +Checking the diagnostics of the model fit is an important step. We can plot the residuals to check for any patterns that might suggest a poor fit. + +```{r, eval = F} +fdmr::pred_vs_obs(result) +``` +![](obs_vs_preds.png) + +```{r, eval = F} +fdmr::pred_vs_obs_over_time(result) +``` + +![](obs_vs_preds_time.png) + + + diff --git a/vignettes/coefs.png b/vignettes/coefs.png new file mode 100644 index 0000000000000000000000000000000000000000..c266cf57ad7b85340fedcbc246ef0d0033257621 GIT binary patch literal 97886 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 bj)>Aahq)K+%mq)tf45|B%e<1l8~DEfs5#|t literal 0 HcmV?d00001 diff --git a/vignettes/obs_vs_preds.png b/vignettes/obs_vs_preds.png new file mode 100644 index 0000000000000000000000000000000000000000..ee9d8f17fcaf7bfbe50c6bd10282b7aef614c48f GIT binary patch literal 36522 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%0A@IgLxSq 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 literal 0 HcmV?d00001 diff --git a/vignettes/summary_res.png b/vignettes/summary_res.png new file mode 100644 index 0000000000000000000000000000000000000000..296e67a88b73627760b0343d5ce2171cccf79286 GIT binary patch literal 62416 zcmeFY1y`KGmZ*&d2_D=71b2dlrh#C=-Q5BNcZcBaZjHOUySoK<3-0c>Ip@rrxik0P z_5Faa*J`R@yw# znhFZaiU|sSmbJC|X=-i+0r4X^UIk87VF(+f5fjC40tu7rw+0i9&o2(oaJ?o(@dfgG zFbkUE@qV_C84lvYq!RiEx-lOzN9?{e97NjTX4OhMD|!BTk6pJ|tDmpWc7OSd$I~@n zA?mgXqp4Aq;6Cf9Qb!=)7El%BPK(JvLcad!gl6VifkOZK?Hgey>z}u_))o{rQ?EYl z;+u(!H+44WXDCL9A8fsNtx%T0UO33kl14HcQV1a$D~>$bFMX9z3@k`!TmJHC6az}~ zX`};gMjRJa^g+vzvhthOy=oAJ+CG4`pwtiSich4Dn3pi$A^z;6J?-qtYzd^HRI%5h z3((IR8$M^o-f)hE=}DnbncjN4#lWUVRY+((5S=VF&h#&m&zq zesz*h!Ytump&AVe^HIgvLWKg266?psFd&FUE$6_lKw*#KO?odx4FfmBXX* zlV0g##&p*#vs=gaUxH}RQgIMIk&`O>FJyh@WR%qVTF;e=#cfEQ&?~;p8OW8ugmjyD zWFVZpm8t6Qq2}2&=~^|m2<4ayb;dLrff~IBXSQc+c+pd*n|S~IXLl4z$7gPL69#}M zf2RA%!q;|YQt7NK0mXe1x{Oc-A(yF-ZYyyaIP|+xq>ePyAqt~?7>JtzaYx(9+1>lj zE@{p-C{%3f#Hj5^e$d$P5cZ$F*`Xz&xcMg+=NI7KhD3cJ;DQ9OH=x}<56?4TR+Ro_f}RkBdh3RKE%dS&6eRQ(!o zHHJ_8u*i25czmTxa$7@DkH+&my-QkmuaaDqJky{|6=TkuD1K{m^+vV6C7`u$cx%Z2 zn~&E$L38!ABsSOFx7%-?(UDk}1>zY~zuCpur055S8FRmG5_roPBQ~Mr>`O;Tk3;-e zXSy7iPsLqygPuCLA0K;yhB%w+>gwuQZ<1Z#Xvh{R5IYq(Po@j2ABuhYg?pU+?XLMG98dvUAykI|_7yzf7I z|KR!*n)~_S2R50|mq8>$V)=+t{yB1uD11Yb>992ZaZ;^8h8@W1&{h#(7H+Z6udIMV zif{NvnUZWs;i3aMYWs$@xapCM0`u9k`N1`eu-t>Y?{mZhjqK^Qjp(gP=(C@5VR){H>B41cEn`E8yH*jAzr zAHL3~3o97fuHU+%=U*xjhWzNeF~8Gf`BbJ`2U&kyli>Ap5+aieG!eEBywm^463CU_ znAGU4Dg%%{CIgb8ME&@}8$&ddiYdGm^-(M@*CBT`S9#h<9`(RCraGo7CRRR5zBop< zNT}$$Y2q|X-iWwNJTP{42-{G`7Bg8CB%&?8CSpmd^W`pzPl1hE8PiG}KoQ8ASe+m* z$}QX^;gVBYYF>PtMVLb`3(9F#cB!~j+l3n@QDRdvS5l=lrTr97LCd2UQL-ZMBA6%7 zP~`bX@fWEBLS2AsjBCcDKz#mT=CJZ^(YSJ%qJ?Z*>7#sj>Cdcw#nepYQspd1{*!F= zjBjeI^67cwav6ErMQf#=f*$<7`79#j;^aC8RsD?NcK8!)VkrqJ-YI~whZGHVnP0$c zJ+`m-q5XMdITktT**7NWb)~fn>fGwP>Tb2)>K^OZ>$GYy>I#0T{34k>o$IovcUbu5 z@=e0w_DFO7fvwvb#tz1-Hyho7oH5e5f=7N{Cb2>zU!%fJ>MoX8i%FJA#i~g=XN}iG zb6uHF#4F@gFa*dCu3REpEkW*{4>nf zRoh#;b`8So3)4$5tsgEOD_vh%0Cc+txRgCuAXb0qAzRiD@52kdOHfV_OF*P2V8~EA zP_HTrDf?A+s;*GxQAVYqqM=hqy2Na5Yr(OgSuJd#Wl>{6XTh|T$)q?D(l>?sx z5J3=Cifq=a(4VMfs;;Q>+Q{5SJC)s<+&{Oiec1mqH6ogU_cAs$%Q9h;x}DCFV(@(+ zF3c3~YH4UL_(<`8$GOf`tKzORB3~ zYlE}X)1=3=2gj5BQ_8)qdx;0hWAekrbNv&q(Gs&=QcE(^3(-s8YvA*G4M6Ry+5mLr z?~UKpzsLEe=WW^$-Uv2ZZ)$kWB_n2F0U0ku#9_M~BOO4k4;zJ=CsMy58CEVd+iUPa005sxr_w z?ga(s^ht#+W8E>X@p+m)r^6hi6Oj!e^CNeED>nGXuE#Z_ALvJT%#4(+>a84w9W#DYs4_XnW5m?Z z?0Hx!o<^*6wdS@yy5~J#KmW|iXI5DN4w+2<5z`{$kt-^6tKQq0jeY9V+dBF1qwC%$ z|2xAy={jju!ZVqR?2dw>+O?keRvfefd;Z4)N6DJ>dXuG@t<0_U{Oy^hndP5Jqe(p5 zU6OxC8ET@`@M@NRrjCL5T8yR7)6(r|?CkblwYOBOvv*Efb6ps&koP8%-}VzXbbd)F zN%ZA$VmmV|)S~H7t1dJRx=b|-uMayL?TrwP&<%Ic|78Te9VO|^zkX}{VkfpI-;hU; zh@Oa$sHJn-;=cDW9IKCxxGYR{u`;B+*nD<*7DFYY#JXsqHlSLhI^WIWektGK?@>b8 zQ#H`-rB3{9_>tDPSXk+d^PEF-ZNH()GIlfnQYwQ3kz;-3Q)^zxj4Fx4`wp_Or*=$`=bbT)0CNb;8nbLOhCdzu6?s_N_)Ok1fSb4}YOpSejk@;zW^4Xh)it*@=e?c1?Lk#74fvJ1;J9aaIaG4Oa*|%qEuGFwWdFE> z_cwX2X3aP}YxQESxE;+01_G%aA$ab0KxTXsWoD z3Fj-(R__4ZC$8%dy$rqZR`gcD>M(ic-2EKTNNlixo`Swx-|cvMZa?;23rr`$Bbjg) zf4siFiet)UGV54!w|Kz5Jvr5V-N+0g|2qi$z^pnoDhZ)|2Jt%u3IZ84LA|}R$EPN+ zW2}q^^@cDq5mdbe%TM&|8F}EV!^sJ;(1J|dk=d?}4>6?(vBe8Yc3wj(JPe>c7iv5(5f}jQW;UQok z@gY8ddywEa5R%|O`y!Ck5YYelI}`*26vn^$?@#^n6$NhIfBQ#EQ87mY?h~2{$tZ$b z@F)K9(gpvd2EX51@Y}I|Zf%VR0)ihxOh`b{8S=Odam8b{_KmMa2Srqv`a7+#9L*=u z7+*o|(>sYKKf=~QnNL_^{*#Ep_Hy3?$>tTCi~TeuXfE^Qzwab`KY4Sn=$QCsFkxI? zH*ayacS*E;;|i*~Rlj;nHi+QOBwLY#YVdQkU z3;6~W@tb@Dp6kCi{BAJH*1q~~lYjv7N=3B$n+nlQmdGY{O~=KP%?Kw=(&zKQl0alm z&1cx7ylJ2|s%R&=H4Gu-e`|C}$u?m7{1<4oDMfX~;a7->^v}HBI{c+LwODi|pU0hE zCj@ULbkrG+t4G8Yh8JTU{^uC~7}z_{=QjanqPT=BFQGRq{EDLnJY9wRmFl3|nw|f7 z7iu{^=n|8YG6Hg&?|)3*OaU?xJc*q(!$?q3*XGIa)^>HfT2N? zrL_HVy0l_``2Vz&_fY~wJCQ?r3=V1jZ({qWEG4iZIjI>J^KU}9|GQlOH(~dXgN3un za)U|q-{tmSh3QT4KJi5J8P~r5+tU6iqD^#b->vf`*O347mj3IjJ7a{wi;$={ZPWjM zKX(q_C}86($t(Qd_VmBb4N_Eh=zWJNmTR?H{@>3z!>nX-0rElF|2%G;w!b@18rF#! zJDx9@@x!~@P8}-F&)#0oMg+>*{#vUYD|R>IWRfkOpok#im zVU_kz<&9e**1Pd40X%CL5u2o_E*mzWq*rnxzR^CPSb3#h0X!;K9hdzB zf!A3F25)VCXpOf^W<3`JBqZZJXRX$o{x|{191EWTe_0|CT8^tFoL9DqIZdQGZtE)i zGhVL?FlJf@cu&zmx3vXQNPCb0g1U38kz$K(>rZReT_12TS#PDCniZU%w@FBdU-m@< z_rRBcoh~pc1V187{fh0# zc@D`7^>O>t=_a^i5}HK(2OXCfvY+Q#W4~qn#nSoQmt=)Hwg9k8vx%s4-f=7|Y+w8bQitm)fb;33LB|M$>f8w}!ntDIlNQH!orS8@FXwXR)bSMVc^R8A8Z5z!nSbiq2?;kE z+ydYY3aFpbSbvafMNaD0#{n* z!5-TL>(uwBL}$(ek|98|>6Tlw4avdBeEO%)0#DilkFpqF<$Nm_{vA= zr1sM6#^q{vFPq<9pKx05#;iQ;no2uVT))8s_61OBA9dNNrKzB0X3%4{Wr zVEg)6ayG5)=Udk5o@eg6uG;??OZO-z$f=_uNH_Hu!$f;ZS8)jkkPzT z{8FOxQY;(NM|Do>j-#?Z5XO5xBWs8pLQ}E0&J7|eMhYcO2TOj{=q=sR#hBqLYFYVJ zh^bHR8XGU&^{|K>Tc$U1s>M}$_NIJ@-8DY(qD&yVm7yZ`@2kDE_inpUN1+gik#FDU2+cwMfjL3X!_KCcf_}q zfn!B{%S3&NnjO!(OcMw*yWRwtsaYI!zFVb6YwwedsnC8oR59-2I>?P3W(HryPc?eQ z#OhXO&KsV1qsSo?m>5=n&Q>$I&}mU8p}@CTJ;aEwG?91SPuc6p>fY#)ch#jNw_dhr zz#<9$yb}w$&h0$gj^JVJElVT?abngl=!cS_11HZHCp_!#gL=zbPVtp>JZ`vyuUG=! zUe@0jP_o09*Sf)`=55PbeR_<@&k|z;QH3zO-F&ecjVf<*+^OB}LN6>{MVou&<vOe1L+>ki%8m-=cmo{~q6pEya(E8@c24rlKc@_@?l@mkP*Y-nbcHMA)I$46kWB zM9~K)bPo@6(y``xmzF%vB{?d*xB>ymT02B86_aXkBv~FJRN_b?cR!=(&LS!?0 z@O2N-U=duo)Er*dY{FjtdMLD-X;OIU~c@27i_D_K@LiO>@CQ4#e)n72&mm z(dnp*hWc8IDt1WbfnrNARMmh!X3k z`6OJ;{lW-XU(`fu&awmbFRDr|jY3m7SkK}Vq-pGPO@1JxS~ee~X-ts~ zjW5cJMnn6T&L1YcK-8p+pD;;O-k07}!1r?CL$av{bnVe8C&5JD<~#U3m5G}@r4sql z438E>+}1Zx7bP=@+rQF-%GWv>uYHv=@7EZFxe;s-$;;7er{068eeQFv^LC?Slv)zv zC!q57de=cRxs2O@hY_`W*EHdQS$dfgJ7MK{m5P|2bDBfHgB9scvqN8P1J(qF>qJTy zW$b<(E+{-0N{_e?L@5t!tRyj#Qn6b({_c%cBcf`s=`)h6Fh_V`N4qnI|92TcE(*)b z-B4f|?}lDFO(e}Je_eC^I-hf_h{t9(S-;2jZHJ1_#cy6E;@re#wnUpf!4sd4w%9;U zNd%CWElX^JqJ|&1ZoX=--V9&K8}8d^XHjA7?4yJZD6tdA1h%1E$YHxcPxDdN1U+$W z(hW0B056SsY)QzpX31%94aC5j)j_~xEV;S0V@ zsNY5v@ZiN<{8YlGSbzNs^<{4Xs;%O25XShPMzTC&ii>LtNx^?e%VNpdj&_vE>tO`_ zId}aQzhe!UK(w9de3ZxJVTva@aqLj|RTF%#ynABR+DdSnqB#b5u&voP21o@fsMq9m za%`?)=YF+peu4TL$p!WO%WR@)1VzkgS}F1x$pbcc;*pU*gbk(_Zf)AO)5NcZ(eDx( zFfAi_Z*kqqnGdQ6#Rn>`B0EhB(v{C4E+2>KDhOvtaeFps#tW1P>~?)66ZX9v9_Ofl z7YGFI$L(eA_0ii&%lnD_$HMBqy`dwl`w{|;P)8F=OFS3+zUB4 z-jYut?`D03IX6-d!aufTOBoMSEcWXjCZp?j@NK<~18-fB7u+c)N~BcJYY|S$Se}9d zdzS9FR3z(Kf+U68$S`4x`t}uXo*zXASx@#)0^vAjO>d%SUyCChwfjmSGd``>cumb0 zqX1yJ7?j?@UhJUsQnHZlsEin^4_mUXeByqWtosVZDsg&$cuAE}Q*h)|xUjD=?~$5; zg;BVL2XaVF44y}W`<|#VrEEw4VyAy z#ydt26p5bKm9);1yS{;HFoK}LjfoagnHW5cg4pq$BEyDw?gRS7fKi6qJHWX)VIZO~kC&cgW*WV@+Tuu4 zyL3dSEW9Ef=2YT|I~LLY-&CveQRSmenA&PfQ(ve>R$x_td!ZBVN&L9Xkmcl$b%$Lr5U53jG-1 zDo`!S3azq(I+trZUVe+j-!*S>HmUn&_bK1e%PXZzy}RFWfbRQ5SENB*);Iz535FYo z;Q`TP`c1t8TNOOa8_-uZqsBbcqBj;BbesH4X98xaWbN;|-KqBUufOGqolE z$cGG6#RV|y4fIw-9Q!B%I7kWp;A6&@w{`QluL4B1j6l<8`m)DlSET}SE;X{bsLPWX zdC*Iq6G?h55;mIxPnvh!R>OprujaS#gPDaKhVJ5fDCZEN0goF5)rz%8-oTB8`su2)$9@caTCFz>&{_^tUt%HcJ&F zZ_V5eb{6XH<(ZV3MuDng|K}!fOdCcTMf(AN^kj}2kK#RC``)RRcaa^+NQ>p4mWWX@ zF8}@5Eey&vf=a$QKIl6K3$=WLy;(YYVQxTh)$miKaQN>qv2!^9d4Y}Aak0ZML$YYF zu1Fg8?U|q8nC8U{Vd)qK?9>@OC3ZJ7Edi+vK7_ObSa%_V(Upv9V1wA0T8j*W25&eC zfFLaHCF2Z_j}zZ7r{=VGduCl3sTuXKU@Ow&j(2q7eYf04NL+M#dL)9+t#gPr+0kQV z>KK+;NLz@UgM>+1CvKOmI?(&S0(uouc1PlkuSF#s-3lN5JtkfzVTIj#;g+=&e*Kc| z{gD!b)T{&wsJW*eaUTR&^OqO4U4-;+^a+LbiAarKgUp&KX7o*Yf0dCg25bUBdfZE1 zZ!d@y&PW)NhhK~>w7GNiRgw$rm+>)MhFkw+21&}ajqzPZN5(CvxU3egyvilSg<`*2 znaSq9)IrdZ11;!`p*%X_xsevzd%I;Kj!)s-a^+PXB#H42rnHjwat#OIXQ`04JBYmN z;d5by4fE{X9ub=B*)3J_Dp*Q_1#D8@wN$w-iq8p#(3=IOR3N&HnGDm`j|3KmCWw_- z-8Ya|2i+fv3GHb>8IC4~!-FSFD0xs0!&l$ZO(FI~rs?^4aqIiYDwRIP2N{A$;q zzohwGSWkS2&nKd2ZsTheuky>U#(gL;*p4k%0A1!oJQXjLfD0!JH7g!vS)5^M?kIPP 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 a@Hy9RJ!rt@7*>1 Date: Tue, 12 Mar 2024 12:53:04 +0000 Subject: [PATCH 02/74] add data --- vignettes/4DM_Calving_NEW.csv | 445 ++++++++++++++++++++++++++++++++++ 1 file changed, 445 insertions(+) create mode 100644 vignettes/4DM_Calving_NEW.csv diff --git a/vignettes/4DM_Calving_NEW.csv b/vignettes/4DM_Calving_NEW.csv new file mode 100644 index 00000000..76511001 --- /dev/null +++ b/vignettes/4DM_Calving_NEW.csv @@ -0,0 +1,445 @@ +,Date,FrontChange,SMB,RU,ME,AT,SST,PT,glacierID,glacierName,latitude,longitude +0,31/01/2015,0,1.7196994033333333,1.7244506e-21,0,-11.19219333,0.8826464,0.8739418,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +1,28/02/2015,2.682843355,3.9520693280000003,7.540112674e-05,0.32481143,-12.58319368,0.53435683,0.54634184,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +2,31/03/2015,-7.622823582,3.852935002,0.000128438,0.215690897,-10.1434427,0.75324005,0.73357826,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +3,30/04/2015,-9.095707752,1.8994951698307692,1.724503076923077e-21,0.1304579076923077,-9.786521946,0.69806236,0.8373451,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +4,31/05/2015,-43.78495533,0.918450686,1.7245994e-21,0.693541875,-7.886095323,0.82054895,1.5830159,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +6,31/07/2015,-60.90775935,-18.38943743,19.019388928571427,20.114603499999998,1.8466621214285712,4.588219,3.9401653,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +7,31/08/2015,-25.91984879,-16.53406733,20.727776833333333,18.554932791666666,2.2014606141666664,4.254299,4.5601153,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +8,30/09/2015,-17.15646913,0.8157117212727272,1.293362886909091,1.6934550973272728,-1.58940902,3.299783,3.8985636,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +9,31/10/2015,28.249893568643074,0.7383891250909091,0.6736230530699999,0.3935291205172727,-5.602407764,2.7080688,2.7804003,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +10,30/11/2015,110.08041381564362,0.6041860066666667,0.000808172,0,-11.41936745,1.3349208,1.4571059,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +11,31/12/2015,160.4932373,0.785897656,0.000779383,0,-15.50913506,0.9596897,1.0703937,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +12,31/01/2016,207.28956640708873,2.1052675766666664,0.22333964163833334,0.572161751,-10.07964572,1.566591,1.5609007,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +13,29/02/2016,280.6301510735573,1.5243527870000002,0.459254922,0.760192918,-10.51251467,1.0491222,1.0381314,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +14,31/03/2016,356.20086000917945,0.4955737352000001,0.28410779,0.379293096,-16.67939202,1.0706071,1.054467,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +15,30/04/2016,334.1206864101538,0.038597874,7.4298805e-07,0.000779122,-16.01955,0.96923715,0.9631224,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +17,30/06/2016,373.95452705855587,-10.3160559,10.4116856,11.42992975,-0.1845792,3.5954194,3.0432944,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +18,31/07/2016,373.6279675960627,-28.34076059,29.865292470588233,28.895877470588236,2.666404994117647,5.372539,4.136592,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +19,31/08/2016,499.03248757195354,-15.4992319,17.351671470588233,15.618415029411764,1.75254828,5.659746,4.773648,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +20,30/09/2016,644.0477640758492,-4.56507712,8.369583539904001,7.140530061,-0.031324587,4.690956,4.659758,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +21,31/10/2016,632.6164267,-2.150806618,8.460347676,8.139910264,-0.256193822,4.336028,4.3496213,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +22,30/11/2016,776.4832976784313,-1.440928974,4.796768252,1.5261109899999998,-3.17420645,4.0412025,4.0388293,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +23,31/12/2016,765.0724923523802,3.718157103333333,0.021903933333333334,2.2334194333333333,-7.203938367,3.0472271,3.0475554,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +24,31/01/2017,876.1815368370613,1.879798429,4.07655175e-05,0.075882354,-13.62381368,2.4695423,2.4673746,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +25,28/02/2017,873.2120633916448,3.897036563571429,0.3252722215257143,0.8723482046778069,-11.13512016,2.32655,2.2870426,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +26,31/03/2017,866.4433844961962,1.3899987527857145,1.7246838857142858e-21,0.007002874,-16.00117281,1.6685433,1.6786016,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +27,30/04/2017,800.1958763749163,1.36774616,0.008050146,0.253776064,-12.95012393,0.8604464,1.1176187,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +28,31/05/2017,702.9273801,0.358074206,0.408557987,0.798124003,-8.145108825,1.4971169,1.560275,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +29,30/06/2017,788.0516134213154,-11.3942719,12.752388400000001,13.6270877,0.365455338,2.763709,2.4996004,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +30,31/07/2017,806.3080706159504,-23.49674361,24.82003735652174,23.658783286956524,2.1803426017391305,5.721908,4.014162,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +31,31/08/2017,853.5414920509983,-16.28783408,18.575418523809525,16.16916781904762,1.7376547614285713,5.9418716,4.90699,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +32,30/09/2017,899.7782078479266,-14.53787687,18.072487827777778,14.016602755555557,2.0514574,5.3455057,5.1347694,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +33,31/10/2017,957.5605024550019,1.382214773846154,1.4066618123653845,1.3212811523076922,-3.239635503,4.671085,4.6714654,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +34,30/11/2017,1037.733341681524,1.918962217142857,0.079539504,0.3534460228571428,-5.995655243,2.7119517,2.7183468,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +35,31/12/2017,1057.338127291635,5.5032121499999995,0.24786824000000002,0.32133730000000005,-5.94225525,1.5595442,1.5628713,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +36,31/01/2018,1092.9175822044754,1.121117921,0.434722176,0.923932878,-10.69362725,0.77668136,0.77863485,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +37,28/02/2018,1103.1305052624416,0.828685203,0.460934466,1.496762011,-11.59296544,1.2724775,1.2575322,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +38,31/03/2018,1074.306807410228,0.330147328,0.017178659,0.768199099,-18.39835488,1.1316781,1.1298714,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +39,30/04/2018,1010.6953632045767,0.4051754216923077,0.26210497607692307,1.0763094692307693,-14.23787887,0.4417896,0.64247686,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +40,31/05/2018,1042.5495054698813,0.79403592,1.7245272e-21,0,-5.175199,1.448782,1.3422061,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +41,30/06/2018,1044.3750140280545,-10.28926592,11.425977916407144,12.650863375714284,0.14211895285714285,3.037402,2.624422,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +42,31/07/2018,1077.3784767480333,-31.259424,37.81950841176471,31.974332294117644,2.701268194117647,4.5898275,3.7760236,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +43,31/08/2018,1087.0574716141941,-14.05432928,16.05392482,14.840449312499999,1.407007744,5.284397,4.3547053,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +44,30/09/2018,1121.4336947147476,-3.72664971,6.020059688571429,4.081362635714286,-2.844753784,4.6010637,4.372039,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +45,31/10/2018,1137.6624236155876,1.336035996,0.6339373281818181,0.6303409972727273,-6.168052311,3.0458558,3.0638156,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +46,30/11/2018,1168.685073734482,1.030803876,1.724291966666667e-21,0,-9.737392833,2.835345,2.8218315,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +48,31/01/2019,1217.5999147075413,2.8456261722222225,1.7246396444444442e-21,0,-12.48007952,1.2537092,1.2542435,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +49,28/02/2019,1190.9979873596362,0.9095583842727273,1.7246453818181816e-21,0,-17.67990505,1.0496519,1.0344633,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +50,31/03/2019,1172.8405862748054,2.187534019,1.7246408875e-21,0,-18.10374524,0.6347042,0.6543733,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +51,30/04/2019,1151.0873636723363,1.432824605,1.7246304285714286e-21,0.1237974553656357,-6.808180307,1.0826496,1.0691382,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +52,31/05/2019,1151.4351860219067,0.38294967666222224,1.724565977777778e-21,0.2676352444444444,-8.291963556,1.5079631,1.500965,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +53,30/06/2019,1122.395318,-7.737328229,9.751493285714286,13.278199071428572,0.6376957866285714,2.6612074,2.2873886,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +54,31/07/2019,1121.1687614841248,-21.06867,21.94280622222222,20.951221722222222,2.3080972544444447,4.582521,3.4874191,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +55,31/08/2019,1170.9310711633098,-11.96796959,14.643500600000001,11.990791722222221,1.4157513922222222,5.2053733,4.1778274,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +56,30/09/2019,1196.149218946573,-2.923985788,4.200235122409091,2.6906626945454546,-2.379847427,4.19808,4.0999436,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +57,31/10/2019,1231.9899693154844,0.7452524912499999,0.004908694,0.115665113,-11.31838957,2.3639846,2.366656,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +58,30/11/2019,1243.3211670214919,2.0865562615999997,1.7245476600000004e-21,0,-11.30619524,0.33399802,0.5285154,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +59,31/12/2019,1283.2117337965506,0.615965404,1.7242738e-21,0,-16.5420931,-0.79817855,-0.3755996,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +62,31/03/2020,1250.0630154877667,0.020503025,0.000101471,0.107390815,-23.7484555,-0.30597168,0.06880023,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +63,30/04/2020,1201.0874553539893,-0.003378499,0.000861929,0.897587885,-13.07141668,0.26649082,0.2779338,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +64,31/05/2020,1209.8951019543579,-0.11249671,0.000857166,0.8924809,-11.380547,0.8758197,0.9514022,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +65,30/06/2020,1135.3933038143296,-11.66993325,12.331046749999999,15.795016,0.503606968,2.5161605,2.3565648,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +66,31/07/2020,1154.4001671882606,-22.908381,23.069561,24.8177575,2.2619904,4.4114804,3.433873,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +67,31/08/2020,1193.886323,-20.34234877,21.24950456666667,21.894207833333336,2.7685585883333332,5.2699337,4.3936667,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +68,30/09/2020,1263.2281075600822,-0.17368792,0.36717233,0,-5.9726934,4.185171,4.1823535,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +74,31/03/2021,1338.3653239430619,0.25056366,0.000461661,0.498256835,-15.9849055,0.7393878,0.74159163,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +75,30/04/2021,1360.251154891021,-0.36010793,0.2959408,0.46383676,-11.381445,-0.003975861,0.17723066,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +76,31/05/2021,1360.425008482427,0.084336135,0.004500926,0.000160804,-7.737534971,0.051397298,0.48830417,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +77,30/06/2021,1283.8880393746708,-12.049277,12.054573,13.410813,0.5349944,1.9839926,1.7389913,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +78,31/07/2021,1288.2649468268514,-23.7577694,24.3231392,23.8071704,2.22527732,3.4682114,2.967292,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +79,31/08/2021,1313.9620867681083,-17.66460671,19.068305214285715,16.582057142857142,1.9783529714285712,4.721178,3.9078994,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +80,30/09/2021,1319.4394997619406,-0.02971113,1.633397975,0.52755828,-2.16706385,4.6559105,4.3466206,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +86,31/03/2022,1328.0001271683077,0.03718772,1.7243899e-21,0,-24.450047,0.5181409,0.68131864,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +87,30/04/2022,1334.4111093893107,0.18174335,1.7246926799999998e-21,0,-15.8133856,-0.12916014,0.39105168,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +88,31/05/2022,1317.808671979683,-4.660092744,4.692763671428572,7.811333142857143,-4.858074643,0.8785974,0.74940187,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +89,30/06/2022,1320.296308716051,-17.714495,18.66999,24.3730545,1.846269815,3.3994265,2.4245286,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +90,31/07/2022,1334.7839524862784,-25.75247867,25.953713333333337,28.89984266666667,2.7792331000000003,5.243305,3.9687383,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +91,31/08/2022,1394.877685633508,-1.7645106,1.8959894,1.5388988,-0.7884611,5.6505036,4.5970345,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +92,30/09/2022,1376.379440385998,-9.635643,11.760835,16.941772,2.7354147,4.608274,4.49155,RGI60-07.00238,Storbreen,77.06905198971934,16.36252046306958 +0,31/01/2015,0,0.9602168704285715,1.7246838e-21,0,-11.18671699,1.8179052,1.7866907,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +1,28/02/2015,2.682843355,1.6043591493333333,1.7246810888888888e-21,0.36483614666666664,-13.05443079,1.2213519,1.215814,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +2,31/03/2015,-7.622823582,1.5301177027272728,1.724558890909091e-21,0,-8.580295913,1.6871549,1.6782281,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +3,30/04/2015,-9.095707752,1.0116177481538462,1.724554076923077e-21,0.1244547813076923,-7.204770715,1.5608677,1.7838848,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +4,31/05/2015,-43.78495533,1.7966598971428571,0.020326324285714285,0.806409,-5.926978064,1.5675341,2.3568027,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +6,31/07/2015,-60.90775935,-32.42772644,33.80094966666667,32.830329,4.287674155555555,4.8572564,4.308266,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +7,31/08/2015,-25.91984879,-26.8954994,29.5041778,25.0754364,4.19233328,4.4830165,4.694117,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +8,30/09/2015,-17.15646913,-8.4026924,15.015023999999999,9.93082615,2.049260643,3.6009707,4.2364373,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +9,31/10/2015,28.249893568643074,0.7310726811818182,0.32442777111818183,0.47494567434727275,-3.998916425,3.1955101,3.3922687,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +10,30/11/2015,110.08041381564362,1.3416880999999998,0.928421686,1.5305660066054545,-3.261511052,2.0087466,2.218805,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +11,31/12/2015,160.4932373,-0.163853454,1.216983923076923,1.4079566153846155,-8.8100261,1.7448233,1.8551018,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +12,31/01/2016,207.28956640708873,1.0500919611538462,0.1455646333846154,0.17427649481053847,-6.906554173,2.436488,2.4281812,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +13,29/02/2016,280.6301510735573,0.4392667673571428,1.7246571285714286e-21,0,-8.138316321,1.68858,1.6771383,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +14,31/03/2016,356.20086000917945,1.5266306678333335,1.60078553e-21,0.007466858,-12.88443038,1.7486444,1.7179669,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +15,30/04/2016,334.1206864101538,0.12137392800000002,1.7246838571428574e-21,0,-8.767397293,1.7818564,1.7712971,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +18,31/07/2016,373.6279675960627,-32.83725175,33.52284675,36.0731185,5.300141625,5.690445,4.345568,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +19,31/08/2016,499.03248757195354,-20.17018191,22.033754285714284,20.052016428571427,3.1978985142857144,5.839043,4.9140105,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +20,30/09/2016,644.0477640758492,-14.48782508,19.42942622,16.13588282,2.47822986,4.881578,4.838673,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +21,31/10/2016,632.6164267,-3.551712475,5.287410853,2.03023255,-1.26443774,4.589134,4.6045117,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +22,30/11/2016,776.4832976784313,1.6819472705384617,0.075505634,0.14084883846153845,-4.36741276,4.430913,4.4239964,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +23,31/12/2016,765.0724923523802,2.671529578571428,1.7245089571428572e-21,0.007455079,-8.682471843,3.5809853,3.5734448,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +24,31/01/2017,876.1815368370613,0.65383119,1.7244742000000002e-21,3.791968923076923e-08,-13.67698765,3.0759623,3.0724123,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +25,28/02/2017,873.2120633916448,0.63255554,0.7120481,0.5991031682047514,-12.75744301,2.9411597,2.9244802,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +26,31/03/2017,866.4433844961962,0.7825869217272726,1.724781418181818e-21,0,-13.79691431,2.3501697,2.3472612,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +27,30/04/2017,800.1958763749163,1.9484714061428572,1.7247252285714286e-21,0,-10.95159973,1.7480614,2.1642423,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +28,31/05/2017,702.9273801,-0.206585203,1.7245941375e-21,0,-7.459619969,2.084887,2.257705,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +29,30/06/2017,788.0516134213154,-9.78549594,9.9146552,14.08532686,1.55648498,3.0128765,3.0864906,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +30,31/07/2017,806.3080706159504,-33.3121015,34.68103925,35.036642,4.716315463,5.856797,4.268431,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +31,31/08/2017,853.5414920509983,-20.30138762,21.302334076923078,20.507022000000003,3.760942530769231,6.067991,4.999442,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +32,30/09/2017,899.7782078479266,-17.64744922,21.495818999999997,21.060181766666666,3.6700200666666665,5.5821805,5.355537,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +33,31/10/2017,957.5605024550019,-1.227166987,2.56701218,2.3924815642857142,-1.622970273,4.8780293,4.862096,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +34,30/11/2017,1037.733341681524,1.5893432469285713,1.7246098285714287e-21,0.1995847802142857,-4.256313476,3.1626697,3.1891806,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +35,31/12/2017,1057.338127291635,1.256029361,1.7246175e-21,0,-6.440109631,2.1316066,2.1423516,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +36,31/01/2018,1092.9175822044754,1.0590205443529412,0.043716441,2.121315023529412,-9.886188182,1.4255996,1.4390323,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +37,28/02/2018,1103.1305052624416,0.514638126,1.7247227555555556e-21,0.043194784,-8.699740411,2.282001,2.2650824,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +38,31/03/2018,1074.306807410228,0.023236352700000004,1.7245696933333332e-21,0,-16.3602815,1.9886953,1.9750628,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +39,30/04/2018,1010.6953632045767,1.080336458,1.7247057125e-21,0.005613788,-11.69969262,0.78448665,1.3763083,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +40,31/05/2018,1042.5495054698813,-5.415241618,7.7530555,7.540902503,0.043828225,2.3679187,2.2570662,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +41,30/06/2018,1044.3750140280545,-29.44995722,30.275727888888884,28.884300000000003,2.3762160277777777,3.3828914,3.0861087,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +42,31/07/2018,1077.3784767480333,-41.480982,45.031571285714286,44.115900571428575,5.308274957142857,4.6805434,3.8637884,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +43,31/08/2018,1087.0574716141941,-20.85688429,22.27591413,21.5118005,3.683970713,5.585473,4.597234,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +44,30/09/2018,1121.4336947147476,-1.272587825,1.27266063,1.2658623333333334,-3.5109137,4.921258,4.570106,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +45,31/10/2018,1137.6624236155876,-0.041437198,1.8921416473333332,2.1459518316165336,-4.062369269,3.3962038,3.4496784,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +46,30/11/2018,1168.685073734482,1.6230528534615385,0.005126772,0.012535546,-5.693085724,3.418221,3.3899405,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +48,31/01/2019,1217.5999147075413,3.080771634,1.72454754e-21,0,-13.40235665,1.7235539,1.7188663,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +49,28/02/2019,1190.9979873596362,0.532078879,1.72476525e-21,0,-15.01115475,1.8154066,1.7966135,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +50,31/03/2019,1172.8405862748054,0.5422030228571428,1.7246304571428573e-21,0,-15.078485,1.398613,1.4618589,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +51,30/04/2019,1151.0873636723363,0.9343970425454546,1.7246192e-21,0.2962841118181818,-5.462135535,1.8340627,1.8250611,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +52,31/05/2019,1151.4351860219067,0.2427347497142857,1.7246571571428574e-21,0.47879679428571426,-4.898202076,2.064551,2.0400205,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +53,30/06/2019,1122.395318,-20.20038941,20.431549636363638,23.184081,2.6230780354545455,2.9495358,2.645718,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +54,31/07/2019,1121.1687614841248,-34.66602209,35.80535772727273,33.26053027272727,5.3041889636363635,4.8449225,3.6687903,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +55,31/08/2019,1170.9310711633098,-13.56431525,14.39218306,14.23212141,3.179988575,5.3742676,4.3577805,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +56,30/09/2019,1196.149218946573,-3.060071344,4.306793621,2.2332913646666666,-0.613802025,4.5138116,4.333692,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +57,31/10/2019,1231.9899693154844,0.177586742,0.22938322385234544,0.5838115909090908,-9.384626236,2.697177,2.703278,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +58,30/11/2019,1243.3211670214919,0.6782305635714286,1.7245830714285715e-21,0,-11.39077909,1.1682045,1.3565385,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +59,31/12/2019,1283.2117337965506,0.045147544416666664,1.7246547500000003e-21,0,-15.11557053,-0.70806783,0.05673162,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +62,31/03/2020,1250.0630154877667,1.320452639807143,0.000340629,0.32940792091428567,-17.62464217,0.14776441,0.8388434,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +63,30/04/2020,1201.0874553539893,0.17304989133333334,0.210234462,0.890195765,-10.2402552,0.84941214,0.9035574,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +64,31/05/2020,1209.8951019543579,0.40512749549999993,0.991536218,4.141485855,-4.257894095,1.4792535,1.6339298,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +65,30/06/2020,1135.3933038143296,-21.57881309,23.22095667142857,24.162139142857143,3.3417872857142856,2.7453487,2.6440098,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +66,31/07/2020,1154.4001671882606,-40.8911062,45.1106354,44.87852719999999,4.83673892,4.6947665,3.743102,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +67,31/08/2020,1193.886323,-24.10421063,25.79330033,25.343542943750002,4.271952031,5.537788,4.607631,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +68,30/09/2020,1263.2281075600822,-9.19394558,11.29081502,7.611500940000001,0.21535869444444453,4.533386,4.3152747,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +74,31/03/2021,1338.3653239430619,2.5680420584166668,7.6299945e-05,0.11085556833333333,-12.01248911,1.4787452,1.4674746,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +75,30/04/2021,1360.251154891021,1.5180906253846156,0.049911832,0.3676635792307692,-8.055569892,0.67607856,0.8852946,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +76,31/05/2021,1360.425008482427,0.058274457,2.1441928687500075e-07,0.43713459843999997,-5.614585971,0.6313611,1.151382,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +78,31/07/2021,1288.2649468268514,-36.8141015,37.939158750000004,42.00977425,3.6469829000000002,3.7443082,3.2811,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +79,31/08/2021,1313.9620867681083,-23.28631457,24.39593485714286,21.969435714285712,4.2845540571428575,5.002314,4.0661025,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +80,30/09/2021,1319.4394997619406,-9.820064336,12.358237509642858,10.04867264,1.3712485092857143,4.9843817,4.529377,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +86,31/03/2022,1328.0001271683077,0.027512728,0.5109419020909091,1.363994260909091,-11.80060598,1.3866959,1.6092598,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +87,30/04/2022,1334.4111093893107,-0.829209644,0.7916187963636364,0.8958921072727274,-12.30744018,0.09853783,1.1437006,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +88,31/05/2022,1317.808671979683,-8.363398181,8.658338742857143,13.53572051,-1.818294243,1.4478936,1.3075572,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +89,30/06/2022,1320.296308716051,-34.5033485,38.737199000000004,41.6370215,3.8047143,4.0992618,3.0772705,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +90,31/07/2022,1334.7839524862784,-46.3238574,49.6569315,46.8413014,5.17654077,5.6832304,4.3311563,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +91,31/08/2022,1394.877685633508,-17.95835222,18.628967166666666,13.378590466666667,3.061050723333333,5.9800262,4.8788323,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +92,30/09/2022,1376.379440385998,-6.425228498,7.836646456259333,6.434275405728667,0.6169848333333335,4.782329,4.6415057,RGI60-07.00240,Hansbreen,77.01694304524588,15.63895900868985 +0,31/01/2015,0,0.587329025,0.000662706,0.677896775,-10.00800359,0.8144398,0.82541394,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +1,28/02/2015,2.682843355,0.725437255,0.000503143,0.518029968,-17.07743409,0.66440797,0.70364606,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +2,31/03/2015,-7.622823582,1.4091695809333333,0.002541924,0.8427487853333333,-10.15451925,0.99733853,0.985174,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +3,30/04/2015,-9.095707752,0.98786616,0.024899068023333335,1.0070096673333333,-7.486932238,1.1035534,1.0999813,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +4,31/05/2015,-43.78495533,0.17164508214285715,0.050608618,0.9897931248857142,-5.4630072,1.410295,1.6403725,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +6,31/07/2015,-60.90775935,-27.35453876,28.336425647058824,28.400898235294118,3.3161646705882353,4.8931966,4.151826,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +7,31/08/2015,-25.91984879,-30.288925,33.66632772727273,34.905013181818184,3.824953527272727,4.6783037,4.777257,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +8,30/09/2015,-17.15646913,-5.089931043,10.507638133333334,6.075512483333334,0.17787666666666668,3.4276795,3.759788,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +9,31/10/2015,28.249893568643074,0.07883662,1.256740896,1.605711263,-5.689140854,2.5742764,2.5813403,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +10,30/11/2015,110.08041381564362,-0.113314751,1.7412062,1.9331393666666665,-6.36346675,1.4996856,1.4991968,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +11,31/12/2015,160.4932373,1.0917778476888889,9.444505000000146e-08,9.164502555555556e-05,-9.903709756,0.98166406,0.9881514,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +12,31/01/2016,207.28956640708873,0.9884748074999999,0.000391829,6.908258816666667e-05,-8.150166075,1.5832977,1.581082,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +13,29/02/2016,280.6301510735573,0.910704766,1.7245941125000002e-21,0,-8.339937588,1.1971347,1.1941581,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +14,31/03/2016,356.20086000917945,1.182296709,1.724682325e-21,0.020823373,-11.56806891,1.1319577,1.1207715,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +15,30/04/2016,334.1206864101538,0.15381549133529412,1.7246426941176473e-21,0,-9.243968124,1.2070658,1.1990737,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +17,30/06/2016,373.95452705855587,-14.5301412,14.301570100000001,16.4030747,0.758370452,3.732904,3.2763214,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +18,31/07/2016,373.6279675960627,-40.0572275,42.2520485,40.867720999999996,3.793633591666667,5.779699,4.2968388,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +19,31/08/2016,499.03248757195354,-12.12765342,13.976847315384616,12.678026892307692,2.393672778307692,5.8164835,4.8496714,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +20,30/09/2016,644.0477640758492,-10.04492012,16.66889463,15.356319916666665,1.7259236491666667,4.7173405,4.6661863,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +21,31/10/2016,632.6164267,-2.5058241,3.7732980533333333,0.48309536666666664,-1.519310133,4.231104,4.2846074,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +22,30/11/2016,776.4832976784313,-0.192600862,0.9137736571091111,0.3751953555555556,-4.661203051,4.1019783,4.102287,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +23,31/12/2016,765.0724923523802,2.2527998879999998,1.5335127900000001e-21,0.187119686,-8.55566144,3.1305172,3.1289003,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +24,31/01/2017,876.1815368370613,0.9079512746923076,1.7244676923076924e-21,0.083051623,-12.82510402,2.4991386,2.4941533,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +25,28/02/2017,873.2120633916448,2.570708075,1.53314549875e-21,0.000111437,-14.39548363,2.4688442,2.4496095,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +26,31/03/2017,866.4433844961962,1.0392577511333334,1.7245946666666667e-21,0,-14.38656829,1.7723528,1.7704966,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +27,30/04/2017,800.1958763749163,1.4821597758785714,1.7246838857142858e-21,0,-10.79700409,1.153981,1.2029827,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +28,31/05/2017,702.9273801,0.7331376908791668,1.7246271083333332e-21,0.10925797916666667,-7.140325617,1.6633246,1.6755993,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +29,30/06/2017,788.0516134213154,-6.751118613,6.879671625,10.98528488,0.6812092750000001,3.1672604,2.7808867,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +30,31/07/2017,806.3080706159504,-24.49753871,25.801356571428574,23.707831785714284,2.39935658,5.996205,4.285701,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +31,31/08/2017,853.5414920509983,-12.48456444,13.579495555555557,12.9143882,2.322162101111111,6.0898514,5.0473776,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +32,30/09/2017,899.7782078479266,-14.10732961,18.243553220000003,13.218836970000002,2.3665670039999998,5.487775,5.3088703,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +33,31/10/2017,957.5605024550019,-2.495683616,4.6717140765066665,3.5160051451866665,-2.862777343,4.7657275,4.7682257,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +34,30/11/2017,1037.733341681524,0.6225154704705882,1.7246647294117645e-21,0,-6.14046431,2.833472,2.8345592,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +35,31/12/2017,1057.338127291635,0.6075562885999999,1.7245696933333332e-21,0,-8.547076147,1.6283652,1.6250265,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +36,31/01/2018,1092.9175822044754,0.9233925371541176,1.5319090407058825e-21,4.056190529411765e-05,-9.309525029,0.9412088,0.9368939,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +37,28/02/2018,1103.1305052624416,0.7801446313571428,1.7246097428571428e-21,0.06103838,-8.384816657,1.5577132,1.5511725,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +38,31/03/2018,1074.306807410228,0.060167996100000024,1.7246138999999998e-21,0,-16.128991,1.2437196,1.244288,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +39,30/04/2018,1010.6953632045767,0.47536307277777784,1.7245867222222223e-21,0.023855374999999998,-11.22145407,0.53952736,0.56675094,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +40,31/05/2018,1042.5495054698813,-1.95575865,3.683242275,3.644913929,-1.249411516,1.4296566,1.3972592,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +41,30/06/2018,1044.3750140280545,-14.76971582,15.227402000000001,16.05247813,1.111453675,3.0858088,2.7118216,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +42,31/07/2018,1077.3784767480333,-26.7507825,27.050818999999997,32.048342,3.3639302,4.7186756,3.8068652,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +43,31/08/2018,1087.0574716141941,-22.84453065,29.0189765,30.679812300000002,2.8601408499999996,5.5628767,4.629481,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +44,30/09/2018,1121.4336947147476,-0.33124694,0.47192086126759825,0.508608491,-3.575126336,4.696131,4.469144,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +45,31/10/2018,1137.6624236155876,0.8527805486136363,2.5878946006576182,2.148339607,-3.773624406,3.1386442,3.138139,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +46,30/11/2018,1168.685073734482,1.1131359552352942,0.3594281247058823,0.5443614294117647,-5.861631422,2.9275753,2.917185,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +48,31/01/2019,1217.5999147075413,1.252408733,1.72468026e-21,0,-13.56944658,1.3704505,1.4034127,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +49,28/02/2019,1190.9979873596362,0.255708906,1.7246356e-21,0,-16.07546541,1.3089973,1.3221334,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +50,31/03/2019,1172.8405862748054,0.5000053694722222,1.7245291e-21,0,-16.19733696,0.8691404,0.88367397,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +51,30/04/2019,1151.0873636723363,1.1860199375555556,1.724649e-21,0.062047898,-8.734103411,1.0059388,0.94534814,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +52,31/05/2019,1151.4351860219067,0.23650865639000002,1.724599475e-21,0.333243092,-6.183587522,1.5778774,1.5671651,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +53,30/06/2019,1122.395318,-11.2443647,11.095247142857144,13.999233142857145,0.7162793542857143,2.9107375,2.5292897,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +54,31/07/2019,1121.1687614841248,-25.593464,25.745761,26.286682499999998,4.99330635,4.846015,3.6904564,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +55,31/08/2019,1170.9310711633098,-18.81672358,20.805327646153845,17.40105756153846,2.470504818461538,5.4935517,4.4692183,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +56,30/09/2019,1196.149218946573,-4.022816598,6.273884814943077,7.594054981538462,-0.956180911,4.2564425,4.1821394,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +57,31/10/2019,1231.9899693154844,0.6610007118888889,0.095452437,0.22297516666666667,-8.696250993,2.4223697,2.4257128,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +58,30/11/2019,1243.3211670214919,0.7236548856666667,1.7246388666666666e-21,0,-9.454443473,0.6423155,0.6619298,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +59,31/12/2019,1283.2117337965506,0.863905811,1.7246589625e-21,0,-13.57669463,-0.6300573,-0.19645584,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +62,31/03/2020,1250.0630154877667,1.2940739067647058,0.00092584,0.9067767805882354,-17.91234876,-0.19268984,0.019133056,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +63,30/04/2020,1201.0874553539893,0.474954963,0.001343295,1.349497298,-13.04661905,0.4158257,0.4419828,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +64,31/05/2020,1209.8951019543579,-1.171544488,2.065598059,3.23359036,-4.461193627,1.2024825,1.16295,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +65,30/06/2020,1135.3933038143296,-21.959578,21.974083,21.762516,2.869879,2.746972,2.4348688,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +66,31/07/2020,1154.4001671882606,-39.27951933,40.48963116666666,36.985838,4.3991018,4.6503143,3.5990763,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +67,31/08/2020,1193.886323,-20.62893274,24.17004223,21.1583379,3.33586939,5.551751,4.70923,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +68,30/09/2020,1263.2281075600822,-6.365519629,12.229745603928572,9.739964568571429,0.48643410214285715,4.340086,4.274744,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +74,31/03/2021,1338.3653239430619,2.144962511,0.066251158,0.201620699,-11.51504458,0.9012175,0.8955345,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +75,30/04/2021,1360.251154891021,1.1609603000000002,0.1043475353888889,0.38647655000000003,-8.460694486,0.26729938,0.2828763,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +76,31/05/2021,1360.425008482427,-0.07933998,0.114261263,0.218843593,-6.12828975,0.4436882,0.47427756,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +77,30/06/2021,1283.8880393746708,-5.863281258,7.49510078,9.902740028,0.32607426,2.0347512,1.8934482,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +78,31/07/2021,1288.2649468268514,-20.50880829,23.012460285714287,22.354258428571427,2.6060040714285715,3.736508,3.082898,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +79,31/08/2021,1313.9620867681083,-16.7544323,19.0529914,15.328213299999998,2.48568719,4.824547,4.1337132,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +80,30/09/2021,1319.4394997619406,-8.759619594,10.769322963076924,8.292261365038462,0.6040054161538462,4.819624,4.574026,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +86,31/03/2022,1328.0001271683077,-0.145622729,1.72467608e-21,0,-17.1998038,0.68935245,0.706666,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +87,30/04/2022,1334.4111093893107,0.37020900106666665,1.7246816266666668e-21,0.008788972,-11.87271916,0.38066432,0.5607683,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +88,31/05/2022,1317.808671979683,-5.244234509,5.57249275,7.033071465000001,-5.22821468,0.901307,0.79234093,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +89,30/06/2022,1320.296308716051,-28.60390567,32.88829833333333,29.51469188888889,2.6046806444444446,3.52612,2.8738978,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +90,31/07/2022,1334.7839524862784,-41.85160238,46.98198613,41.819950874999996,4.01907835,5.4515505,4.399014,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +91,31/08/2022,1394.877685633508,-24.054206,24.80191575,19.49482025,2.639535615,5.9159045,5.060934,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +92,30/09/2022,1376.379440385998,-6.99985475,17.1990198,15.003383466666667,1.139809565,4.700521,4.6172814,RGI60-07.00242,Austre Torellbreen,77.16286031994127,15.072524766929497 +0,31/01/2015,0,2.48839741,1.7247924800000003e-21,0,-14.00495781,-1.7255657,0.40593877,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +1,28/02/2015,2.682843355,0.8726959833636364,1.7247134545454544e-21,0,-17.18584895,-1.509121,0.4648378,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +2,31/03/2015,-7.622823582,1.822397080318182,1.7247134545454544e-21,0,-13.82468856,-1.4628309,-0.09650232,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +3,30/04/2015,-9.095707752,1.415548268190476,1.724531657142857e-21,0.004158861,-11.90981676,-1.7709222,-0.5586107,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +4,31/05/2015,-43.78495533,-0.036230951,1.7245890857142857e-21,0,-11.18490171,-1.8264375,-0.60550416,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +10,30/11/2015,110.08041381564362,1.7932845507416666,1.7245683166666667e-21,0,-8.448450995,-1.2893792,0.05013111,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +11,31/12/2015,160.4932373,2.805380788318182,1.7246361727272726e-21,0,-10.79601847,-1.6259265,-0.6844518,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +12,31/01/2016,207.28956640708873,2.527475228,1.72453465e-21,0.030075291,-8.165212544,-1.6404996,-0.9141374,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +13,29/02/2016,280.6301510735573,1.925930402,1.7246288720000002e-21,0,-10.34560786,-1.7114295,-1.2973335,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +14,31/03/2016,356.20086000917945,1.6856750803181817,1.7245929090909093e-21,0,-11.00968847,-1.6699837,-1.2527096,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +15,30/04/2016,334.1206864101538,0.6074173939999999,1.72482136e-21,0,-12.5675072,-1.7258633,-1.2546216,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +21,31/10/2016,632.6164267,1.6214852716666668,1.1498435666666668e-21,0.06805172,-2.454663733,0.8374739,1.318953,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +22,30/11/2016,776.4832976784313,1.902303074,0.033008192,0.330478938,-5.180905823,0.37714,1.4857409,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +23,31/12/2016,765.0724923523802,2.6268905273333334,1.7245682833333333e-21,0.005965845,-9.054958463,-0.6187544,0.82331574,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +24,31/01/2017,876.1815368370613,0.601178949,1.72458075e-21,0,-12.6428854,-1.1379942,-0.04961427,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +25,28/02/2017,873.2120633916448,1.081113351,8.781454901500001e-06,0.008746176,-10.46778794,-0.8380038,-0.540078,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +26,31/03/2017,866.4433844961962,0.9251600649565218,2.1479113478260883e-06,0.002114192,-17.84507772,-1.2970226,-0.9197262,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +27,30/04/2017,800.1958763749163,0.015323226,1.7245272e-21,0,-20.6460355,-1.7388698,-1.3182554,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +29,30/06/2017,788.0516134213154,-1.934495419,2.6031453,5.957862305,-0.906386305,-1.810464,-1.5850269,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +30,31/07/2017,806.3080706159504,-15.14848165,14.572014870588236,15.977569223529413,0.8758345529411765,-0.8563081,-1.2096996,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +31,31/08/2017,853.5414920509983,-6.623704,5.0575126,4.4244888,0.901798035,0.8949267,-0.50141203,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +32,30/09/2017,899.7782078479266,-2.206865,1.9591798,4.90189,1.9309537,0.25668132,0.409631,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +33,31/10/2017,957.5605024550019,1.4748362,0.020244867,0.02433424,-3.1394937,0.19785367,1.3422283,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +34,30/11/2017,1037.733341681524,1.6951466516666667,1.7246490444444443e-21,0,-9.3881729,-1.1471629,0.6272822,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +35,31/12/2017,1057.338127291635,2.987552732173913,3.765142695653373e-09,3.826340130434783e-06,-8.202103896,-1.6521896,-0.2988776,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +36,31/01/2018,1092.9175822044754,1.4771573486363636,1.7245929090909093e-21,0,-12.22310496,-1.6951697,-0.6432687,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +37,28/02/2018,1103.1305052624416,1.3896513911111112,1.7246811333333334e-21,0,-12.38448814,-1.6463989,0.49163148,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +38,31/03/2018,1074.306807410228,0.496101733,1.7246138999999998e-21,0,-18.76497053,-1.6723477,-0.17183937,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +39,30/04/2018,1010.6953632045767,0.5631901241578947,1.7245759684210525e-21,0,-15.43693137,-1.8043505,-0.43235728,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +40,31/05/2018,1042.5495054698813,2.35862924,1.7248587e-21,1.07137,-2.0985223,-1.880185,-0.13970949,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +45,31/10/2018,1137.6624236155876,1.2627738,1.5726016416666668e-21,0,-5.280914217,0.90290326,1.4113222,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +46,30/11/2018,1168.685073734482,1.1873207495454545,1.7245720181818184e-21,0.017649366,-7.891471162,0.34000647,0.83858573,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +48,31/01/2019,1217.5999147075413,0.8128062333333334,1.724623533333333e-21,0,-11.83992283,-1.1382289,-0.99391574,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +49,28/02/2019,1190.9979873596362,0.603998255,1.7245890090909094e-21,0,-16.72308591,-1.4201703,-1.0359449,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +50,31/03/2019,1172.8405862748054,0.9853415392222222,1.7246182074074074e-21,0,-19.17357003,-1.6667138,-1.4393077,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +51,30/04/2019,1151.0873636723363,0.574585274,1.7246547500000003e-21,0,-13.82985008,-1.838686,-1.6023886,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +54,31/07/2019,1121.1687614841248,-15.8363458,16.5489022,18.2942246,1.192625836,-1.8632405,-1.5567561,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +55,31/08/2019,1170.9310711633098,-5.038973113,6.742346775,4.868178263,-0.725579798,-1.7782617,-0.9825619,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +56,30/09/2019,1196.149218946573,2.71908338,0.4034147,0.23423924,-3.834705466,-1.6313637,-0.6345071,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +57,31/10/2019,1231.9899693154844,0.3547476938095238,1.7246636476190476e-21,0,-10.06867525,-1.6329626,-0.50144345,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +58,30/11/2019,1243.3211670214919,1.111115493,4.7631553333333355e-06,0.005085402,-13.21221197,-1.7791017,-0.55020547,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +59,31/12/2019,1283.2117337965506,1.031538952142857,2.5850252285714287e-05,0.027605728,-15.08732029,-1.7934386,-0.7313884,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +62,31/03/2020,1250.0630154877667,0.5520828724772727,1.7246532000000002e-21,0,-22.79912541,-1.6152896,-1.2972689,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +63,30/04/2020,1201.0874553539893,1.151697468,1.7246303999999998e-21,0.040627764,-14.00265473,-1.7435255,-1.53241,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +67,31/08/2020,1193.886323,-13.781352,14.383947,13.943245,2.0946536,2.2109685,-0.95244694,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +74,31/03/2021,1338.3653239430619,1.7649458738583335,0.001102599,1.7337438708333333,-16.75036938,-1.7226392,-0.682518,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +75,30/04/2021,1360.251154891021,2.170203008,0.46527610199999997,2.02355595,-10.59446731,-1.7641809,-1.135205,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +76,31/05/2021,1360.425008482427,-0.378186032,0.36960735566666664,0.9268011753224167,-10.53262088,-1.9096084,-1.2430207,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +77,30/06/2021,1283.8880393746708,-4.907086569,4.7436207401230766,9.995074453846154,0.072737419,-0.6870144,-0.9010313,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +78,31/07/2021,1288.2649468268514,-26.0474508,26.117651799999997,26.151681200000002,2.2292060339999997,1.1179467,-0.66693664,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +79,31/08/2021,1313.9620867681083,-10.51024632,12.172558833333333,10.70798265,1.0938310216666667,1.2807889,-0.16256942,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +80,30/09/2021,1319.4394997619406,2.7992240766666665,0.295975952,0.5153181666666666,-2.730466233,0.10107039,-0.09552744,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +86,31/03/2022,1328.0001271683077,1.730953446470588,0.26060484390529415,1.1051665029411764,-11.98190436,-1.5481373,-0.68084025,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +87,30/04/2022,1334.4111093893107,0.411590338,0.036300821,1.15946997,-15.3263591,-1.7313783,-0.8682522,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +88,31/05/2022,1317.808671979683,-2.611443606,2.7345934880000002,4.669112220000001,-8.5385152,-1.8036805,-1.0187813,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +89,30/06/2022,1320.296308716051,-19.084206,19.413605,19.519196,0.69156235,-1.1699566,-0.770976,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +91,31/08/2022,1394.877685633508,-8.9008735,8.7534425,7.6370152000000004,1.46818685,3.3177772,0.45960543,RGI60-07.00027,Austfonna basin 3,79.42246053624564,25.451034948167003 +0,31/01/2015,0,2.545584784613715,0.000493533,0.5181303156746758,-6.156179825,1.9043884,1.907158,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +1,28/02/2015,2.682843355,1.3233848048581018,0.000522449,0.5485264899002181,-17.96710391,0.79410654,0.9503279,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +2,31/03/2015,-7.622823582,3.4795226885212793,0.001051948,1.1184517078929477,-7.454110291,0.92486066,1.3551646,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +3,30/04/2015,-9.095707752,2.278294000774622,0.39308409712975845,1.3010552326838176,-8.808966508,0.76454735,1.6225226,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +4,31/05/2015,-43.78495533,1.1878916490823028,0.14162494297488587,1.992651911245452,-5.134913592,-0.30546463,2.135632,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +6,31/07/2015,-60.90775935,-21.25174967,22.365150027804905,21.28120888604058,1.5760248456564214,4.480516,4.393695,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +7,31/08/2015,-25.91984879,-27.11009388,30.61408233642578,28.391688537597656,3.2623704433441163,4.2619834,4.674355,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +8,30/09/2015,-17.15646913,-0.272119918,5.197708035,2.814529451,-0.670133253,3.1255507,3.7518623,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +9,31/10/2015,28.249893568643074,2.313373001969673,2.152191074490309,1.8196248442434617,-2.960473342,2.3252673,2.6661103,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +10,30/11/2015,110.08041381564362,0.42835630973180133,1.7952850262324016,2.7496074040730796,-3.540177892,2.1058831,2.2093778,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +11,31/12/2015,160.4932373,0.5808900386095046,1.7246139007123828e-21,0,-7.999731207,1.857726,1.9239249,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +12,31/01/2016,207.28956640708873,1.9233338236808777,1.724713509002765e-21,0.21994805654799165,-4.768388301,2.5682874,2.5551877,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +13,29/02/2016,280.6301510735573,2.8253674004226923,1.7246355293851377e-21,0.001588072,-7.707105458,1.9524496,1.9459617,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +14,31/03/2016,356.20086000917945,5.284923938768251,1.7246837806258777e-21,0.5277127879144623,-8.301938197,2.0409107,2.0322933,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +15,30/04/2016,334.1206864101538,0.37492008608145017,6.2643206177897254e-09,0.020282111667256682,-10.01389329,1.9625473,2.061373,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +17,30/06/2016,373.95452705855587,-15.90263089,15.948654572168985,15.831754048665365,1.7697844505310059,3.9402978,3.6550086,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +18,31/07/2016,373.6279675960627,-37.21319283,40.69562064276801,39.94823922051324,3.8118214342329235,5.4649734,4.946591,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +19,31/08/2016,499.03248757195354,-16.90776243,17.048812866210938,16.103295707702635,2.8734975099563598,5.787006,5.3332925,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +20,30/09/2016,644.0477640758492,-6.613761678,12.457915335893631,8.820644002,1.111885154619813,4.601037,4.633495,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +21,31/10/2016,632.6164267,-13.92116356,17.844572067260742,18.813126802444458,1.5980169028043747,4.1007023,4.110622,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +22,30/11/2016,776.4832976784313,0.9512674883008003,2.8123720071532508,1.655780023,-4.247898843,4.1861324,4.1859508,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +23,31/12/2016,765.0724923523802,2.2826143465936184,1.452352760033822e-21,0.560610535,-4.486466845,3.2712705,3.2632751,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +24,31/01/2017,876.1815368370613,4.385843824,0.057353828826307976,0.18565464392304418,-9.220467448,2.908745,2.9065523,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +25,28/02/2017,873.2120633916448,0.20482497662305835,0.12101978808641428,0.1966866552829742,-15.70582819,2.5148592,2.5025325,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +26,31/03/2017,866.4433844961962,1.4181553454030877,0.054226475,0.1865235345724683,-13.72741506,1.4977505,1.9384719,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +27,30/04/2017,800.1958763749163,0.6072181675117463,0.062047536,0.10516182395804205,-12.65581626,-0.04641755,1.9007059,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +28,31/05/2017,702.9273801,0.3181176020007115,8.078758639840208e-08,0.20663970674164037,-6.256110527,1.4190307,2.519892,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +29,30/06/2017,788.0516134213154,-7.345081428,7.880983823153656,10.595560455322266,-0.258915614,2.6353524,3.2275064,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +30,31/07/2017,806.3080706159504,-26.05990193,28.059209130027078,26.73357322,2.8268049108711155,5.675448,4.5820694,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +31,31/08/2017,853.5414920509983,-25.89659437,29.538704474767048,25.95981041590373,3.1962690552075705,5.933488,5.1541967,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +32,30/09/2017,899.7782078479266,-18.65224184,22.620356014796666,21.39009584699358,2.3183206575257436,5.3716607,5.2736797,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +33,31/10/2017,957.5605024550019,-3.686463388,7.576223718,6.035836752836725,-0.188037624,4.598234,4.564526,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +34,30/11/2017,1037.733341681524,3.4684399503927965,1.724656027146899e-21,0.12119142195353141,-4.472967955,3.19974,3.2350597,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +35,31/12/2017,1057.338127291635,3.976304751303461,1.7246812033797354e-21,0,-4.666682932,2.1082096,2.1894894,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +36,31/01/2018,1092.9175822044754,2.3630084494749704,1.6104316670270068e-21,0.000586927,-10.13186111,1.6683717,1.7166435,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +37,28/02/2018,1103.1305052624416,3.127725164592266,1.7246139814917396e-21,0.40778746604919436,-6.511177236,2.4107265,2.4091017,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +38,31/03/2018,1074.306807410228,0.851712401,1.724609752115421e-21,0,-16.1768221,1.5364858,1.7452883,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +39,30/04/2018,1010.6953632045767,0.3257446098607033,1.7246802003693897e-21,0,-12.90447145,-0.6068762,0.65706354,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +40,31/05/2018,1042.5495054698813,-1.065548852,1.4708032608032227,1.2447186298668385,-1.784185812,1.9920546,2.0842292,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +41,30/06/2018,1044.3750140280545,-18.74276622,19.63954370551639,18.377336343129475,0.839066681,3.2114778,3.1569245,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +42,31/07/2018,1077.3784767480333,-37.29273582,41.72633457183838,41.39057517051697,3.6964884996414185,4.367083,3.772468,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +43,31/08/2018,1087.0574716141941,-29.36326655,32.77723614374796,29.425578991572063,2.8393845284978547,5.411889,4.808237,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +44,30/09/2018,1121.4336947147476,-7.6603159,10.976398839530619,6.382319023832679,-0.414032028,4.599926,4.506278,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +45,31/10/2018,1137.6624236155876,-1.531003641,5.774820293698992,4.571302606664058,-2.85751543,3.0248835,3.150994,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +46,30/11/2018,1168.685073734482,4.621842861175537,0.31402169398647445,0.20110340382565148,-4.210735698,3.1332304,3.1344588,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +48,31/01/2019,1217.5999147075413,2.728434654697776,0.000638404,0.6299590229988098,-10.36257644,1.7676388,1.8229238,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +49,28/02/2019,1190.9979873596362,1.025754089043899,0.2260670191608369,0.9335409457033331,-16.86428454,2.0773268,2.0818262,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +50,31/03/2019,1172.8405862748054,1.3025769021362066,0.13745331333484495,0.6869776666164398,-16.35835238,0.8931385,1.260371,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +51,30/04/2019,1151.0873636723363,1.1319830694368906,0.2785845850926957,1.4127271871880762,-3.823139065,1.5395001,1.551158,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +52,31/05/2019,1151.4351860219067,2.016607590019703,1.7246049963417564e-21,0.28812617908372956,-4.738130524,1.8131504,1.8369637,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +53,30/06/2019,1122.395318,-4.845987759,7.723832893371582,9.543564034,-0.508404737,2.70069,2.5252829,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +54,31/07/2019,1121.1687614841248,-28.54547755,29.668729570176865,27.41374354892307,3.103710691134135,4.513726,4.1209393,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +55,31/08/2019,1170.9310711633098,-16.76548147,19.620253562927246,17.83151302,2.437829691916704,5.2360196,4.7393413,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +56,30/09/2019,1196.149218946573,-3.895805943,7.5453415362080705,4.126294559980266,-0.888164195,4.1686687,4.1507387,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +57,31/10/2019,1231.9899693154844,1.017822546117446,0.12435227388673678,0.5113689624156583,-6.183435719,2.3112025,2.4247603,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +58,30/11/2019,1243.3211670214919,2.577297185148512,1.7246304951002293e-21,0,-4.13745875,1.0182006,1.2196661,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +59,31/12/2019,1283.2117337965506,1.1837573647499084,1.724229579459682e-21,0,-15.45918179,-0.745132,0.037157044,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +62,31/03/2020,1250.0630154877667,0.5825799339051757,1.724576978776419e-21,0,-20.26429299,-0.7250909,0.09835048,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +63,30/04/2020,1201.0874553539893,0.2710283569904277,1.7245580190680343e-21,0,-13.2609162,-0.46545896,0.64613485,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +64,31/05/2020,1209.8951019543579,-1.957500115,2.800760405404227,4.717400823320661,-4.910426791,-0.110287055,1.3289955,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +65,30/06/2020,1135.3933038143296,-17.9134481,18.90286350250244,20.601527214050293,1.980266910046339,2.591492,2.6549544,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +66,31/07/2020,1154.4001671882606,-40.71969396,45.55172833529386,44.84458212,3.4761874350634487,4.4557133,4.110229,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +67,31/08/2020,1193.886323,-22.60667951,25.37014271083631,24.331238319999294,3.4979815232126334,5.1992736,4.925012,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +68,30/09/2020,1263.2281075600822,-10.9844559,14.468026605833854,9.150814443826675,0.4538069367408752,4.249645,4.2633514,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +74,31/03/2021,1338.3653239430619,1.505853640058866,0.14439951139306334,0.23643855818618947,-13.67331545,1.3237234,1.3585436,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +75,30/04/2021,1360.251154891021,1.681720848594393,0.21313324996403282,0.2890464110033853,-8.522007261,0.20245533,1.2245448,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +76,31/05/2021,1360.425008482427,0.387276538,0.1978146794306881,0.7305488691610449,-5.791243259,-0.22162166,1.2797683,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +77,30/06/2021,1283.8880393746708,-7.469492972,13.291515804827213,20.39576121,1.1342621743679047,2.0411024,2.3330035,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +78,31/07/2021,1288.2649468268514,-24.83467241,27.47385493191806,25.41257077997381,2.7985033121975986,3.6705275,3.4427345,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +79,31/08/2021,1313.9620867681083,-20.38297126,22.596541033850777,20.038379033406574,2.589742600917816,5.031749,4.6341133,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +80,30/09/2021,1319.4394997619406,-11.26735553,15.572059623152018,12.373584166541695,1.0343883085995913,4.7481327,4.58646,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +86,31/03/2022,1328.0001271683077,1.9872868141780298,0.1320181842311285,1.0588434636592865,-9.628401652,0.035448514,0.7139058,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +87,30/04/2022,1334.4111093893107,-0.177270169,0.41455554962158203,1.3407338460286458,-14.58364073,-1.1224195,0.41181406,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +88,31/05/2022,1317.808671979683,-0.871502796,0.9425210085782137,1.5922832489013672,-7.43918446,0.19490935,1.2763854,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +89,30/06/2022,1320.296308716051,-24.41063881,43.31572341918945,29.200225830078125,2.055875062942505,3.525554,3.3207538,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +90,31/07/2022,1334.7839524862784,-36.0564518,38.46792531013489,37.096715211868286,3.170511558651924,5.036958,4.6468453,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +91,31/08/2022,1394.877685633508,-19.85878906,21.833291983604433,22.350838232040406,2.469629325717688,5.771605,5.3059397,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +92,30/09/2022,1376.379440385998,-9.529720849,13.983168397630964,13.557910919189453,0.23656764200755523,4.626773,4.5947413,RGI60-07.00265,Olsokbreen,76.69863999389507,16.442717252292226 +0,31/01/2015,0,2.136242611333728,1.7247291324647076e-21,0.002073418,-10.67574638,1.5675479,1.5653203,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +1,28/02/2015,2.682843355,0.15295017386476195,1.7246717118053237e-21,1.41181617057858e-05,-22.36335437,0.90424335,0.964468,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +2,31/03/2015,-7.622823582,3.4598267392388413,1.724461579695427e-21,6.002687457242116e-05,-12.79624363,0.869058,0.8980967,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +3,30/04/2015,-9.095707752,1.612615058819453,1.7246387942174707e-21,0.00038102,-11.67769747,1.4054993,1.3750123,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +4,31/05/2015,-43.78495533,1.0775517358755071,1.7245994479391476e-21,0.008229265,-9.043693225,2.334121,2.1748743,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +6,31/07/2015,-60.90775935,-9.534656797,9.68352999,13.016049248831612,1.5293351752417428,5.262835,3.7378783,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +7,31/08/2015,-25.91984879,-15.77082183,18.165610926491873,17.73747051826545,1.2327362639563424,6.4599223,4.6610184,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +8,30/09/2015,-17.15646913,3.1359269618988037,0.6215658076107502,0.202061235,-2.515808761,4.297817,4.227843,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +9,31/10/2015,28.249893568643074,1.3156388302644093,1.4551518837640363,2.714734555338509,-2.137950869,3.2464266,3.2595518,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +10,30/11/2015,110.08041381564362,2.319180003454676,1.7245527557880747e-21,0.006167751,-11.1308862,2.0382771,2.039961,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +11,31/12/2015,160.4932373,4.423705968591902,0.000320955,0.003021675,-10.28031455,1.3876299,1.3814614,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +12,31/01/2016,207.28956640708873,5.073273207578394,0.071393563,0.085442372,-8.97834607,1.8338488,1.8214995,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +13,29/02/2016,280.6301510735573,2.7118484502037368,7.112854973456706e-06,0.001253055,-11.286581,1.477144,1.4772704,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +14,31/03/2016,356.20086000917945,1.9543533987469144,5.1179503467816785e-06,0.000268984,-11.8260684,1.2937812,1.3136361,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +15,30/04/2016,334.1206864101538,0.5100065069273114,0.000180273,0.005882112,-10.9243619,1.158963,1.2035679,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +17,30/06/2016,373.95452705855587,1.2001359065373742,0.3844685449148528,4.821634201332927,-1.600937655,4.130844,3.38669,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +18,31/07/2016,373.6279675960627,-22.20610537,22.760550226484025,23.790421894618444,2.9780973366328647,6.054835,3.7987833,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +19,31/08/2016,499.03248757195354,-11.88411554,14.242211560408274,12.315717096130053,0.072283442,6.0580783,4.554071,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +20,30/09/2016,644.0477640758492,-1.501830745,5.285255853,7.956544909626245,0.094729912,4.883953,4.5869117,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +21,31/10/2016,632.6164267,1.1536606947580974,9.05663614,4.427507070203622,-0.94960316,4.0877924,4.1064806,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +22,30/11/2016,776.4832976784313,4.2155514597892765,0.11866840273141858,0.1314577771583572,-4.666118145,4.3417544,4.338489,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +23,31/12/2016,765.0724923523802,3.3649662509560585,0.094007563,0.007185789,-10.32279706,3.512679,3.5132797,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +24,31/01/2017,876.1815368370613,3.9350965321063995,0.005891853,0.00802781,-15.82244134,2.5148106,2.5151289,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +25,28/02/2017,873.2120633916448,4.127666324,0.005483004,0.065091053,-12.1006775,2.2507436,2.2600532,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +26,31/03/2017,866.4433844961962,2.924342175324758,0.005015708,0.00053875,-17.07129296,0.8474185,1.3232391,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +27,30/04/2017,800.1958763749163,0.10016246698796748,0.011335157672874588,0.006606116,-16.50400043,0.38923746,1.329704,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +28,31/05/2017,702.9273801,1.1550023598739734,0.008863632,0.001474886,-10.17422544,0.66680765,2.2400212,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +29,30/06/2017,788.0516134213154,0.9681862592697144,0.10398630440856015,6.705928792556127,-0.338200197,3.8241878,3.1184266,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +30,31/07/2017,806.3080706159504,-16.28353585,17.961616410149468,18.726962566375732,1.2605142924520705,5.7205076,4.256879,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +31,31/08/2017,853.5414920509983,-4.762786734,6.505535972118378,9.736322331428529,1.2795166969299316,5.4320054,4.851831,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +32,30/09/2017,899.7782078479266,-4.158763587,12.25370230153203,11.333852478303015,1.0820264676585793,5.475571,5.1718097,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +33,31/10/2017,957.5605024550019,1.5737701803445816,0.061703037,0.035597776,-2.59008947,5.1509905,5.11821,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +34,30/11/2017,1037.733341681524,3.218710134923458,1.7246139007123828e-21,0.008283982,-8.440554428,3.8206058,3.8216221,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +35,31/12/2017,1057.338127291635,1.6185984841237466,1.7245682637416567e-21,0.003896868,-11.32485787,2.8813453,2.8835375,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +36,31/01/2018,1092.9175822044754,2.141771622,0.001148417,0.002004286,-11.41860764,2.1382363,2.1359534,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +37,28/02/2018,1103.1305052624416,2.7957486253804884,8.527873135860378e-08,0.00155777,-10.20363725,1.9071821,1.9064403,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +38,31/03/2018,1074.306807410228,2.486027240753174,3.8503091559505275e-07,0.00038066,-13.55636501,1.6911904,1.6806436,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +39,30/04/2018,1010.6953632045767,1.3018250465393064,1.7246718464375848e-21,5.402364185632298e-09,-13.64675999,1.8111885,1.7970486,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +40,31/05/2018,1042.5495054698813,3.712342880666256,0.001263201,2.0483799666011087,-1.896488845,2.668399,2.4173286,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +41,30/06/2018,1044.3750140280545,-4.151927382,5.900809049606323,10.690886497497559,0.085506625,3.7379622,3.0763154,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +42,31/07/2018,1077.3784767480333,-24.37199084,30.59360663,25.023091952006023,2.024010648330053,5.210133,3.7780716,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +43,31/08/2018,1087.0574716141941,-34.96134202,38.608819007873535,29.41494878133138,3.1808441082636514,5.9369984,4.318225,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +44,30/09/2018,1121.4336947147476,-1.870704508,5.762351872026921,3.1520546834450216,-3.822411156,5.007925,4.3357425,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +45,31/10/2018,1137.6624236155876,3.7477694153785706,1.295224682427943,0.24808543115796053,-3.676226497,3.3325655,3.3787217,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +46,30/11/2018,1168.685073734482,2.519643641,0.040465101,0.000407474,-10.37740721,2.9509385,2.9505944,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +48,31/01/2019,1217.5999147075413,3.8037953674793243,0.007794747,0.00201057,-13.17069586,1.6396056,1.6468903,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +49,28/02/2019,1190.9979873596362,2.1193265936204364,0.023319287225604012,1.357592186934653e-05,-18.19543484,1.5512359,1.568738,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +50,31/03/2019,1172.8405862748054,1.0875410613688556,0.023152465,0,-18.45850849,0.7445425,0.80758226,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +51,30/04/2019,1151.0873636723363,1.7683916132558475,0.022820747203447556,0.002823917,-10.79296864,0.55421877,1.0668724,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +52,31/05/2019,1151.4351860219067,1.186448160558939,0.020474307,0.043862033432490594,-7.816340208,0.39149708,1.7169825,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +53,30/06/2019,1122.395318,0.6555000816782316,1.1965038105845451,5.268754844243328,-2.038815409,-0.044427432,2.5526798,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +54,31/07/2019,1121.1687614841248,-17.93073487,19.794951677322388,22.13527739048004,2.1830894835293293,5.038632,3.3196142,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +55,31/08/2019,1170.9310711633098,-12.68848884,18.24944273,13.539971931837501,0.5560139715671542,5.8654156,4.1091247,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +56,30/09/2019,1196.149218946573,4.279157519340515,0.024344875942915598,0.014703808,-4.06551981,4.8050275,4.2969084,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +57,31/10/2019,1231.9899693154844,1.9824004173278809,0.015705684,2.636879980855156e-05,-11.41836929,3.4188578,3.4258976,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +58,30/11/2019,1243.3211670214919,2.352303398506982,0.015454316511750157,0.00290103,-11.44944184,2.1023352,2.1010592,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +59,31/12/2019,1283.2117337965506,0.8899716432206333,0.014700360712595237,3.095706836120371e-05,-13.05581754,0.8351008,0.8411645,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +62,31/03/2020,1250.0630154877667,2.4425016045570374,3.788563844864257e-05,0.036564262838510254,-22.49777699,-0.70050365,0.80108523,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +63,30/04/2020,1201.0874553539893,0.4257640570402145,1.2360901077812527e-06,0.0011902,-14.01008849,-0.30297095,0.6936852,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +64,31/05/2020,1209.8951019543579,1.7160130298386018,0.017532547138786228,1.7986897980999856,-7.249929125,0.8869003,1.0029953,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +65,30/06/2020,1135.3933038143296,-4.534636428,5.794832547505696,7.711260636647542,-0.539347015,2.8814003,2.3518004,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +66,31/07/2020,1154.4001671882606,-21.23551896,21.905780368381077,23.531085544162327,2.6243065885371633,5.345146,2.9388452,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +67,31/08/2020,1193.886323,-24.01891541,26.530938625335693,22.590744177500408,3.0998840431372323,7.057888,4.0718565,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +74,31/03/2021,1338.3653239430619,2.997472655773163,0.02358384,0.027208441123366324,-17.06462345,1.1801368,1.1687665,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +75,30/04/2021,1360.251154891021,3.7144645133188794,0.023448054,0,-12.93071188,0.7568043,0.7439399,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +76,31/05/2021,1360.425008482427,2.053735344599073,0.023446314323406905,3.947249542062099e-06,-7.957233924,0.34475827,1.2106198,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +77,30/06/2021,1283.8880393746708,1.200557788213094,1.6699910210445523,7.405615347,-1.120709002,1.7321357,1.9938258,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +78,31/07/2021,1288.2649468268514,-15.14659081,15.851138973236084,19.64075994491577,1.6853711128234863,4.350434,2.8671675,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +79,31/08/2021,1313.9620867681083,-15.8241175,18.550642649332683,21.036847432454426,2.2336930433909097,5.2166595,3.5911818,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +80,30/09/2021,1319.4394997619406,-0.10906332,2.2898378372192383,3.8542425632476807,0.6621827483177185,4.977053,4.3511443,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +86,31/03/2022,1328.0001271683077,3.484243869781494,0.3755762577056885,0.000662841,-9.711064339,0.38119754,0.9088839,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +87,30/04/2022,1334.4111093893107,1.0683917716145515,0.37484267354011536,0.25438916658531524,-15.7270998,1.1878206,1.2887431,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +88,31/05/2022,1317.808671979683,-2.932448681,3.2505760391553244,4.262111475691199,-7.748020232,0.119743645,1.6916009,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +89,30/06/2022,1320.296308716051,-6.886079788,15.765222549438477,11.556621551513672,1.6195497512817385,4.189405,2.529657,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +90,31/07/2022,1334.7839524862784,-34.20095289,35.30678629875183,33.473795890808105,3.6622554808855057,6.5547566,3.7242234,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +91,31/08/2022,1394.877685633508,-10.10255107,10.402320345242817,11.86167914668719,0.41556557019551604,7.0509152,4.4856234,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 +92,30/09/2022,1376.379440385998,-6.900691986,8.246485710144043,8.692858695983887,1.230930209159851,5.368633,4.757764,RGI60-07.00715,Waggonwaybreen,79.54772047,11.25994501739356 \ No newline at end of file From e7e9b1b827d5fdb58a4a7c7a373356129db405ea Mon Sep 17 00:00:00 2001 From: John Aiken Date: Wed, 20 Mar 2024 15:27:07 +0100 Subject: [PATCH 03/74] Update pkgdown.yaml --- .github/workflows/pkgdown.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index a609fc27..f16ee7d3 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -13,7 +13,7 @@ name: pkgdown jobs: pkgdown: - runs-on: ubuntu-latest + runs-on: ubuntu-18.04 # Only restrict concurrency for non-PR jobs concurrency: group: pkgdown-${{ github.event_name != 'pull_request' || github.run_id }} From facecba176f5923e4b4e4e6dbebddbd75d104a0a Mon Sep 17 00:00:00 2001 From: Tian Li Date: Wed, 20 Mar 2024 14:57:08 +0000 Subject: [PATCH 04/74] remove figures --- vignettes/coefs.png | Bin 97886 -> 0 bytes vignettes/obs_vs_preds.png | Bin 36522 -> 0 bytes vignettes/obs_vs_preds_time.png | Bin 37630 -> 0 bytes vignettes/summary_res.png | Bin 62416 -> 0 bytes 4 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 vignettes/coefs.png delete mode 100644 vignettes/obs_vs_preds.png delete mode 100644 vignettes/obs_vs_preds_time.png delete mode 100644 vignettes/summary_res.png diff --git a/vignettes/coefs.png b/vignettes/coefs.png deleted file mode 100644 index c266cf57ad7b85340fedcbc246ef0d0033257621..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97886 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 bj)>Aahq)K+%mq)tf45|B%e<1l8~DEfs5#|t diff --git a/vignettes/obs_vs_preds.png b/vignettes/obs_vs_preds.png deleted file mode 100644 index ee9d8f17fcaf7bfbe50c6bd10282b7aef614c48f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36522 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%0A@IgLxSq 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 diff --git a/vignettes/summary_res.png b/vignettes/summary_res.png deleted file mode 100644 index 296e67a88b73627760b0343d5ce2171cccf79286..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62416 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%0A1!oJQXjLfD0!JH7g!vS)5^M?kIPP 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 a@Hy9RJ!rt@7*>1 Date: Wed, 20 Mar 2024 15:23:04 +0000 Subject: [PATCH 05/74] Revert runner to latest --- .github/workflows/pkgdown.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index f16ee7d3..a609fc27 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -13,7 +13,7 @@ name: pkgdown jobs: pkgdown: - runs-on: ubuntu-18.04 + runs-on: ubuntu-latest # Only restrict concurrency for non-PR jobs concurrency: group: pkgdown-${{ github.event_name != 'pull_request' || github.run_id }} From 30050638c4956009fa75519a043038fac90c8494 Mon Sep 17 00:00:00 2001 From: Tian Li Date: Wed, 20 Mar 2024 16:09:57 +0000 Subject: [PATCH 06/74] change notebook header --- vignettes/calving_tutorial.Rmd | 41 +++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/vignettes/calving_tutorial.Rmd b/vignettes/calving_tutorial.Rmd index 4d664141..37634767 100644 --- a/vignettes/calving_tutorial.Rmd +++ b/vignettes/calving_tutorial.Rmd @@ -1,11 +1,16 @@ --- -title: "Simple Linear Regression with fdmr" +title: "Glacier Calving in Svalbard with fdmr" author: "Tian Li, Amin Shn, Ruitang Yang, Wenxue Cao" -date: "`r Sys.Date()`" output: - html_document: - toc: true - toc_float: true + bookdown::html_document2: + base_format: rmarkdown::html_vignette + fig_caption: yes +bibliography: "references.bib" +link-citations: yes +vignette: > + %\VignetteIndexEntry{Simple Linear Regression with fdmr} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} --- # Introduction @@ -37,15 +42,15 @@ glacierNames <- unique(calving_data[c("glacierName")]) lats <- unique(calving_data[c("latitude")]) lons <- unique(calving_data[c("longitude")]) -glac1 <- list(longitude = lons[0,], latitude = lats[0,], label = glacierNames[0,]) -glac2 <- list(longitude = lons[1,], latitude = lats[1,], label = glacierNames[1,]) -glac3 <- list(longitude = lons[2,], latitude = lats[2,], label = glacierNames[2,]) -glac4 <- list(longitude = lons[3,], latitude = lats[3,], label = glacierNames[3,]) -glac5 <- list(longitude = lons[4,], latitude = lats[4,], label = glacierNames[4,]) +glac1 <- list(longitude = lons[0, ], latitude = lats[0, ], label = glacierNames[0, ]) +glac2 <- list(longitude = lons[1, ], latitude = lats[1, ], label = glacierNames[1, ]) +glac3 <- list(longitude = lons[2, ], latitude = lats[2, ], label = glacierNames[2, ]) +glac4 <- list(longitude = lons[3, ], latitude = lats[3, ], label = glacierNames[3, ]) +glac5 <- list(longitude = lons[4, ], latitude = lats[4, ], label = glacierNames[4, ]) -glac6 <- list(longitude = lons[5,], latitude = lats[5,], label = glacierNames[5,]) +glac6 <- list(longitude = lons[5, ], latitude = lats[5, ], label = glacierNames[5, ]) -points <- list(glac1, glac2, glac3,glac4, glac5, glac6) +points <- list(glac1, glac2, glac3, glac4, glac5, glac6) markers <- dplyr::bind_rows(points) fdmr::retrieve_tutorial_data(dataset = "hydro") @@ -64,14 +69,14 @@ We will model Calving's front change using three important factors namely: surfa We specify the model using a formula and the inla function. ```{r, eval = F} -formula <- fc ~ 0 + - f(id.loc0, model = "iid") + - f(id.loc0, RU, model = "iid") + - f(id.loc0, AT, model = "iid") + - f(id.loc0, SST, model = "iid") +formula <- fc ~ 0 + + f(id.loc0, model = "iid") + + f(id.loc0, RU, model = "iid") + + f(id.loc0, AT, model = "iid") + + f(id.loc0, SST, model = "iid") # Fitting INLA -inla_fit <- inla(formula, family = "gaussian", data = calving_data , control.predictor = list(compute = TRUE)) +inla_fit <- inla(formula, family = "gaussian", data = calving_data, control.predictor = list(compute = TRUE)) ``` # Results From d9f578e4542842ddbab6c2b12742ec9c317a6fbb Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Thu, 21 Mar 2024 08:14:52 +0000 Subject: [PATCH 07/74] Update DESCRIPTION Added `tidyverse` to `DESCRIPTION` --- DESCRIPTION | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index c654b6b7..08d10885 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -60,7 +60,8 @@ Imports: future, leafem, sfheaders, - mapview + mapview, + tidyverse Suggests: bookdown, knitr, From 8a3c96ca4f6aa7a9596d0b5c3ac2e1d493fc97a9 Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Thu, 21 Mar 2024 15:14:15 +0000 Subject: [PATCH 08/74] Update plot_mapping.R Fixed the issue of map not appearing and added options in line with those offered by `mapview`. --- R/plot_mapping.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/R/plot_mapping.R b/R/plot_mapping.R index 4ea0a1ba..bc79a9dd 100644 --- a/R/plot_mapping.R +++ b/R/plot_mapping.R @@ -102,7 +102,8 @@ plot_map_leaflet <- function(polygon_data = NULL, wrapping = FALSE) { m <- leaflet::leaflet() m <- leaflet::addTiles(m) - m <- leaflet::addProviderTiles(m, leaflet::providers$Openstreetmap, group = "Satellite") + m <- leaflet::addProviderTiles(m, leaflet::providers$Esri.WorldImagery, group = "Satellite") + m <- leaflet::addProviderTiles(m, leaflet::providers$OpenTopoMap, group = "Topography") m <- leafem::addMouseCoordinates(m, native.crs = TRUE) # Store a vector of layers we add to the map, @@ -161,7 +162,7 @@ plot_map_leaflet <- function(polygon_data = NULL, m <- leaflet::addLayersControl(m, position = "topright", - baseGroups = c("OSM", "Satellite"), + baseGroups = c("OSM", "Satellite", "Topography"), overlayGroups = layers, options = leaflet::layersControlOptions(collapsed = FALSE) ) From 85808bace476794cb1a5a3ea06217352825bb423 Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Thu, 21 Mar 2024 15:20:49 +0000 Subject: [PATCH 09/74] Update CHANGELOG.md --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ebd9558..9a8c205b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased](https://github.com/openghg/openghg/compare/0.2.0...HEAD) +### Fixed + +- Updated `plot_map_leaflet` to feature the same selection of basemap tiles as `mapview` and fix features not appearing - [PR #310](https://github.com/4DModeller/fdmr/pull/310) + ## [0.2.0] - 2023-12-19 ### Fixed From 6f0076f97f0411144ed1892befca341dfe5cd871 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sat, 30 Mar 2024 08:12:37 +0000 Subject: [PATCH 10/74] Added a check if output only contains random fields --- R/shiny_modelviewer.R | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/R/shiny_modelviewer.R b/R/shiny_modelviewer.R index 25be16e7..1bb6a9e9 100644 --- a/R/shiny_modelviewer.R +++ b/R/shiny_modelviewer.R @@ -35,6 +35,11 @@ model_viewer_shiny <- function(model_output, mesh, measurement_data, data_distri default_colours <- rownames(brewer_palettes[brewer_palettes$cat == "seq", ]) plot_choices <- c("Range", "Stdev", "AR(1)", "Boxplot", "Density", "DIC") + if (base::is.null(parsed_model_output[["fixed_mean"]])) { + map_choices <- c("Random effect fields") + } else { + map_choices <- c("Predicted mean fields", "Random effect fields") + } ui <- bslib::page_fluid( theme = bslib::bs_theme(bootswatch = "cosmo"), @@ -56,7 +61,7 @@ model_viewer_shiny <- function(model_output, mesh, measurement_data, data_distri shiny::fluidRow( shiny::column( 4, - shiny::selectInput(inputId = "map_plot_type", label = "Plot type", choices = c("Predicted mean fields", "Random effect fields"), selected = "Predicted mean fields"), + shiny::selectInput(inputId = "map_plot_type", label = "Plot type", choices = map_choices, selected = map_choices[1]), shiny::selectInput(inputId = "map_data_type", label = "Data type", choices = c("Poisson", "Gaussian"), selected = data_distribution), ), shiny::column( From 378c8d51e980fb935a92b1b247fc3242e7fc156b Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sat, 30 Mar 2024 08:38:27 +0000 Subject: [PATCH 11/74] Finn added this to inlabru test workflow (https://github.com/inlabru-org/inlabru/commit/462f2b13ecaad9be90cdd7e82e45b84b0b1e9a3b#diff-3522a8c5abb070598236011d60dce0eafc7f1d70261ae9a84917dafcf04d79c8). --- .github/workflows/pkgdown.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index f16ee7d3..b05a381a 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -35,6 +35,10 @@ jobs: any::bookdown local::. needs: website + - name: Fix temporary out-of-sync binary packages + run: | + install.packages("MatrixModels", repos = "https://cloud.r-project.org", type = "source") + shell: Rscript {0} - name: Build site run: pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE) shell: Rscript {0} From 4711201e0f912c62ae486a92928b845d1b041234 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sat, 30 Mar 2024 10:24:08 +0000 Subject: [PATCH 12/74] Revert addition of package installation --- vignettes/tutorial_geophysics.Rmd | 3 --- 1 file changed, 3 deletions(-) diff --git a/vignettes/tutorial_geophysics.Rmd b/vignettes/tutorial_geophysics.Rmd index f98cf81a..ccc31fea 100644 --- a/vignettes/tutorial_geophysics.Rmd +++ b/vignettes/tutorial_geophysics.Rmd @@ -17,9 +17,6 @@ The spatiotemporal evolution of the field is governed by wave equation. The smal Geophysical data can come in lots of different formats but here will will start with a csv. ```{r} -library(devtools) -devtools::load_all(path='~/repos/fdmr-dmz/fdmr/') -install.packages("MatrixModels", type = "source") # Set the path to the CSV file data_path <- "data/MT_Svalbard_Z.csv" From 1280863209f14ce10238eec0ac8002d6beb27343 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sat, 30 Mar 2024 10:33:32 +0000 Subject: [PATCH 13/74] Modify standard check --- .github/workflows/check-standard.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/check-standard.yaml b/.github/workflows/check-standard.yaml index 3a8ab060..f290f0c1 100644 --- a/.github/workflows/check-standard.yaml +++ b/.github/workflows/check-standard.yaml @@ -39,6 +39,10 @@ jobs: with: extra-packages: any::rcmdcheck needs: check + - name: Fix temporary out-of-sync binary packages + run: | + install.packages("MatrixModels", repos = "https://cloud.r-project.org", type = "source") + shell: Rscript {0} - uses: r-lib/actions/check-r-package@v2 with: upload-snapshots: true From 09d06957091761b3de29622c565bbb1f78d1d567 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sat, 30 Mar 2024 16:42:58 +0000 Subject: [PATCH 14/74] Updated CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a8c205b..432d2318 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Fixed `model_viewer` app to work with random effect models - [PR #311](https://github.com/4DModeller/fdmr/pull/311) - Updated `plot_map_leaflet` to feature the same selection of basemap tiles as `mapview` and fix features not appearing - [PR #310](https://github.com/4DModeller/fdmr/pull/310) ## [0.2.0] - 2023-12-19 From d1e00e63498c168d8ddaa7bab7d30035619c96e0 Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Sat, 30 Mar 2024 16:47:53 +0000 Subject: [PATCH 15/74] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 432d2318..8d3bcbc5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed -- Fixed `model_viewer` app to work with random effect models - [PR #311](https://github.com/4DModeller/fdmr/pull/311) +- Fixed `model_viewer` app to work with random effect models - [PR #317](https://github.com/4DModeller/fdmr/pull/317) - Updated `plot_map_leaflet` to feature the same selection of basemap tiles as `mapview` and fix features not appearing - [PR #310](https://github.com/4DModeller/fdmr/pull/310) ## [0.2.0] - 2023-12-19 From d1b026f0f5fcefe1022fb8e656e6cb9b8e138b4f Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Sat, 29 Jun 2024 00:23:53 +0100 Subject: [PATCH 16/74] Update references.bib Added references for the OHC (Indian Ocean) tutorial --- vignettes/references.bib | 257 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 257 insertions(+) diff --git a/vignettes/references.bib b/vignettes/references.bib index 7f2bb2ee..fc4f18b1 100755 --- a/vignettes/references.bib +++ b/vignettes/references.bib @@ -782,3 +782,260 @@ @article{lee2018spatio pages={1--39}, year={2018} } + +@article{trenberth2014inbalance, + title={Earth’s Energy Imbalance}, + author={Trenberth, Kevin E and Fasullo, John T and Balmaseda, Magdalena A}, + journal={Journal of Climate}, + volume={27}, + number={9}, + pages={3129--3144}, + year={2014}, + publisher={American Meteorological Society} +} + +@article{duan2023storage, + title={Heat Storage in the Upper Indian Ocean: The Role of Wind-Driven Redistribution}, + author={Duan, Jing and Li, Yuanlong and Lin, Pengfei and Wang, Fan}, + journal={Journal of Climate}, + volume={36}, + number={7}, + pages={2221--2242}, + year={2023}, + publisher={American Meteorological Society} +} + +@article{desbruyeres2017trends, + title={Global and Full-Depth Ocean Temperature Trends during the Early Twenty-First Century from Argo and Repeat Hydrography}, + author={Desbruy{\`e}res, Damien and McDonagh, Elaine L and Thierry, Virginie}, + journal={Journal of Climate}, + volume={30}, + number={6}, + pages={1985--1997}, + year={2017}, + publisher={American Meteorological Society} +} + +@article{orsi1995acc, + title={On the meridional extent and fronts of the Antarctic Circumpolar Current }, + author={Orsi, Alejandro H and Whitworth, Thomas and Nowlin, Worth D}, + journal={Deep-Sea Research Part I}, + volume={42}, + number={5}, + pages={641--673}, + year={1995}, + publisher={Elsevier} +} + +@article{giglio2016subantarctic, + title={Subantarctic and Polar Fronts of the Antarctic Circumpolar Current and Southern Ocean Heat and Freshwater Content Variability: A View from Argo}, + author={Giglio, Donata and Johnson, Gregory C}, + journal={Journal of Physical Oceanography}, + volume={46}, + number={3}, + pages={749--768}, + year={2016}, + publisher={American Meteorological Society} +} + +@incollection{hood2024io, + author={Hood, Raleigh R and Ummenhofer, Caroline C and Philips, Helen E and Sprintall, Janet}, + title={Introduction to the Indian Ocean}, + editor={Ummenhofer, Caroline C and Hood, Raleigh R} + booktitle={The Indian Ocean and its Role in the Global Climate System}, + publisher={Elsevier}, + pages={1--31}, + year={2024}, + chapter={1} +} + +@incollection{phillips2024circulation, + author={Philips, Helen E and Menezes, Viviane V and Nagura, Motoki and McPhaden, Michael J and Vinayachandran, P N and Beal, Lisa M}, + title={Indian Ocean circulation}, + editor={Ummenhofer, Caroline C. and Hood, Raleigh R} + booktitle={The Indian Ocean and its Role in the Global Climate System}, + publisher={Elsevier}, + pages={169--203}, + year={2024}, + chapter={8} +} + +@article{huang2002eof, + title={Interannual variability in the tropical Indian Ocean}, + author={Huang, Bohua and Kinter, James L}, + journal={Journal of Geophysical Research: Oceans}, + volume={107}, + number={C11}, + year={2002}, + publisher={American Geophysical Union} +} + +@article{dandapat2021mld, + title={A numerical study on the role of atmospheric forcing on mixed layer depth variability in the Bay of Bengal using a regional ocean model}, + author={Dandapat, Sumit and Chakraborty, Arun and Kuttippurath, Jayanarayanan and Bhagawati, Chirantan and Sen, Radharani}, + journal={Ocean Dynamics}, + volume={71}, + pages={963--979}, + year={2021}, + publisher={Springer} +} + +@article{ali2018nio, + title={Dominant Modes of Upper Ocean Heat Content in the North Indian Ocean}, + author={Ali, Meer Mohammed and Singh, Neetu and Kumar, Manchikanti Suresh and Zheng, Yangxing and Bourassa, Mark and Kishtawal, Chandra Mohan and Rao, Chandu Venkateswara}, + journal={Climate}, + volume={6}, + number={3}, + year={2018}, + publisher={MDPI} +} + +@article{sandeep2018freshwater, + title={Impact of riverine freshwater forcing on the sea surface salinity simulations in the Indian Ocean}, + author={Sandeep, K K and Pant, Vimlesh and Girishkumar, M S and Rao, A D}, + journal={Journal of Marine Systems}, + volume={185}, + pages={40--58}, + year={2018}, + publisher={Elsevier} +} + +@article{dandapat2020runoff, + title={Impact of excess and deficit river runoff on Bay of Bengal upper ocean characteristics using an ocean general circulation model}, + author={Dandapat, Sumit and Gnanaseelan, C and Parekh, Anat}, + journal={Deep-Sea Research Part II: Topical Studies in Oceanography}, + volume={172}, + year={2020}, + publisher={Elsevier} +} + +@article{zhang2023bengal, + title={Surface cross-equatorial pathways of seawater from the Bay of Bengal}, + author={Zhang, Zhengbei and Wang, Jing and Hao, Jiajia and Yuan, Dongliang and Wang, Kungxiang}, + journal={Frontiers in Marine Science}, + volume={10}, + year={2023} +} + +@article{jaishree2023seasdyn, + title={Exploring the dynamics of seasonal surface features using coastal and regional ocean +community model}, + author={Jaishree, D and Ravichandran, P T and Thattal, D V}, + journal={Global Journal of Environmental Science and Management}, + volume={9}, + number={4}, + pages={741--752}, + year={2023} +} + +@article{trott2017eddies, + title={Variability of the Somali Current and eddies during the southwest monsoon regimes}, + author={Trott, Corinne B and Subrahmanyam, Bulusu and Murty, V S N}, + journal={Dynamics of Atmospheres and Oceans}, + volume={79}, + pages={43-55}, + year={2017}, + publisher={Elsevier} +} + +@incollection{roxy2020warming, + author={Roxy, M K and Gnanaseelan, Chellappan and Parekh, Anant and Chowdary, Jasti S and Singh, Shikha and Modi, Aditi and Kakatkar, Rashmi and Mohapatra, Sandeep and Dhara, Chirag and Shenoi, S C and Rajeevan, M}, + title={Indian Ocean Warming}, + editor={Krishnan, R. and Sanjay, J. and Gnanaseelan, Chellappan and Mujumdar, Milind and Kulkarni, Ashwini and Chakraborty, Supriyo} + booktitle={Assessment of Climate Change over the Indian Region}, + publisher={Springer}, + pages={191--206}, + year={2020}, + chapter={10} +} + +@article{chen2015equatorial, + title={Intraseasonal variability of upwelling in the equatorial Eastern Indian Ocean}, + author={Chen, Gengxin and Han, Weiqing and Li, Yuanlong and Wang, Dongxiao and Shinoda, Toshiaki}, + journal={Journal of Geophysical Research: Oceans}, + volume={120}, + number={11}, + pages={7598--7615}, + year={2015}, + publisher={American Geophysical Union} +} + +@article{mabarrok2023thermocline, + title={Assessment of thermocline depth bias in the Seychelles-Chagos Thermocline Ridge of the Southwestern Indian Ocean simulated by the CMIP6 models}, + author={Mubarrok, Saat and Azmiuddin, Fuad and Jang, Chan Joo}, + journal={Frontiers in Marine Science}, + volume={10}, + year={2023} +} + +@article{yokoi2008sctr, + title={Seasonal Variation of the Seychelles Dome}, + author={Yokoi, Takaaki and Tozuka, Tomoki and Yamagata, Toshio}, + journal={Journal of Climate}, + volume={21}, + number={15}, + pages={3740--3754}, + year={2008}, + publisher={American Meteorological Society} +} + +@article{mckenna2024sst, + title={Understanding Biases in Indian Ocean Seasonal SST in CMIP6 Models}, + author={McKenna, Sebastian and Santoso, Agus and Gupta, Alex Sen and Taschetto, Andr{\'e} S}, + journal={Journal of Geophysical Research: Oceans}, + volume={129}, + number={2}, + year={2024}, + publisher={American Geophysical Union} +} + +@article{vic2014mesoscale, + title={Mesoscale dynamics in the Arabian Sea and a focus on the Great Whirl life cycle: A numerical investigation using ROMS}, + author={Vic, C and Roullet, G and Carton, X and Capet, X}, + journal={Journal of Geophysical Research: Oceans}, + volume={119}, + number={9}, + pages={6422--6443}, + year={2014}, + publisher={American Geophysical Union} +} + +@article{chatterjee2019somali, + title={Annihilation of the Somali upwelling system during summer monsoon}, + author={Chatterjee, Abishek and Kumar, B Praveen and Prakash, Satya and Singh, Prerna}, + journal={Scientific Reports}, + volume={9}, + year={2019}, + publisher={Nature} +} + +@article{lhegaret2018gyres, + title={Shallow Cross-Equatorial Gyres of the Indian Ocean Driven by Seasonally Reversing Monsoon Winds}, + author={L'H{\'e}garet, Pierre and Beal, Lisa M and Elipot, shane and Laurindo, Lucas}, + journal={Journal of Geophysical Research: Oceans}, + volume={123}, + number={12}, + pages={8902--8920}, + year={2018}, + publisher={American Geophysical Union} +} + +@article{schott2009circulation, + title={Indian Ocean circulation and climate variability}, + author={Schott, Friedrich A and Xie, Shang-Ping and McCreary, Julian P}, + journal={Reviews of Geophysics}, + volume={47}, + number={1}, + year={2009}, + publisher={Wiley Online Library} +} + +@article{wu2020gyrestructure, + title={Structure and Seasonal Variation of the Indian Ocean Tropical Gyre Based on Surface Drifters}, + author={Wu, Wei and Yu, Yan and Qian, Yu-Kun and Cheng, Xuhua and Wang, Tianyu and Zhang, Lianyi and Peng, Shiqiu}, + journal={Journal of Geophysical Research: Oceans}, + volume={125}, + number={5}, + year={2020}, + publisher={American Geophysical Union} +} From 87aa348704976a3cfed3f8c4d3b609a066c2970b Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Sat, 29 Jun 2024 15:41:12 +0100 Subject: [PATCH 17/74] Adding the reference formatting file --- vignettes/american-geophysical-union.csl | 703 +++++++++++++++++++++++ 1 file changed, 703 insertions(+) create mode 100644 vignettes/american-geophysical-union.csl diff --git a/vignettes/american-geophysical-union.csl b/vignettes/american-geophysical-union.csl new file mode 100644 index 00000000..3a6bf508 --- /dev/null +++ b/vignettes/american-geophysical-union.csl @@ -0,0 +1,703 @@ + + From f0fdf19a69718d7dbc8a8b1c8b195a149f930011 Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Sat, 29 Jun 2024 15:41:50 +0100 Subject: [PATCH 18/74] Add the OHC tutorial --- vignettes/ohc_tutorial.Rmd | 845 +++++++++++++++++++++++++++++++++++++ 1 file changed, 845 insertions(+) create mode 100644 vignettes/ohc_tutorial.Rmd diff --git a/vignettes/ohc_tutorial.Rmd b/vignettes/ohc_tutorial.Rmd new file mode 100644 index 00000000..36fb0b05 --- /dev/null +++ b/vignettes/ohc_tutorial.Rmd @@ -0,0 +1,845 @@ +--- +title: "Mapping Ocean Heat Content from Synthetic Observations in Indian Ocean" +output: + bookdown::html_document2: + base_format: rmarkdown::html_vignette + fig_caption: yes +bibliography: "references.bib" +csl: "american-geophysical-union.csl" +link-citations: yes +author: "Anrijs Abele, Colin Morice, Man Ho Suen, Geoffrey Dawson" +vignette: > + %\VignetteIndexEntry{Mapping Ocean Heat Content from Synthetic Observations in Indian Ocean} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- +# Introduction + +Knowledge of the spatio-temporal evolution of ocean heat content (OHC) is essential +to our understanding of both past and future climate change. At global scales, ocean +heat uptake is a key element of the global energy and sea level budgets and provides +a powerful constraint on climate sensitivity and past climate forcings. At regional +scales, OHC changes are important to our understanding of climate variability and +for the development, initialization, and evaluation of seasonal-to-decadal prediction +systems. + +The world's oceans have a huge volume so even small changes in temperature can correspond +to large changes in energy. 90% of the excess energy trapped in the earth system by +anthropogenic greenhouse gas emissions goes into the oceans [@trenberth2014inbalance]. +The Indian Ocean serves as a significant reservoir of this extra energy, despite its small relatively small area [@duan2023storage]. @desbruyeres2017trends found that a half of the global top-layer (<700 m) heat uptake is in the Indian Ocean. + +## Measuring Ocean Heat Content + +To measure heat content, we measure temperatures through the whole volume of the +upper oceans, with measurements at different depths as well as at different locations. + +Historically, measurement of ocean temperature at depth have been obtained obtained using +a range of instrument deployed from ships. More recently, since the early 2000s, +autonomous robotic floats, known as Argo floats, have greatly increased the number +of available observations of the upper 2000m of the world’s oceans. These data sources +provide profiles of ocean temperatures from the surface downwards. + +## Tutorial Data Source + +This tutorial uses data from the MapEval4OceanHeat (ME4OH) project. The data +are derived from a 1/10th of a degree latitude-longitude ocean simulation that has been +sub-sampled to real world observed locations. While the synthetic profile data are +intended to be used to benchmark ocean heat mapping methods, the data are used in this +tutorial as a case study for application of 4DModeller to map ocean heat content. + +In this tutorial we will use point data of ocean heat for upper layers of the ocean +provided in the ME4OH data files (integrated temperature profiles from the surface down +to a depth of 306.25 m, multiplied by water density and heat capacity). + +The tutorial will use data from the Indian Ocean region. + +```{r, message=FALSE, warning=FALSE} +library(INLA) +library(inlabru) +library(sf) +library(sp) +library(ggplot2) +library(gridExtra) +library(scales) +``` + +## Loading Data +Here we load the Indian ocean shapefile and dataset. We smooth the boundary to make the mesh creation easier. +```{r loadData, error=TRUE, message=FALSE, warning=FALSE} +fdmr::retrieve_tutorial_data(dataset = "ohc", force_update = TRUE) + +# Load the dataset +df <- + fdmr::load_tutorial_data(dataset = "ohc", filename = "df_indian_ocean_2005.rds") + +# Load the polygon +ocean_sf <- + fdmr::load_tutorial_data(dataset = "ohc", filename = "indian_ocean.rds") + +# Deal with CRS and smooth the boundary with a buffer +ocean_crs <- fmesher::fm_crs(ocean_sf) +fmesher::fm_crs(ocean_sf) <- NULL +ocean_sf2 <- sf::st_union(sf::st_buffer(ocean_sf, 1.05)) +``` + +We plot the smoothed Indian ocean polygon to check if there are any issues. +```{r polygonPlot, error=TRUE, fig.id=TRUE, fig.cap="Smoothed polygon", fig.align='center'} +ggplot2::ggplot() + + ggplot2::geom_sf(data=ocean_sf2) +``` + +Then we convert it into a `sp` object. +```{r} +fmesher::fm_crs(ocean_sf) <- ocean_crs +ocean_sp <- sf::as_Spatial(ocean_sf) +``` + +We regularly sample some points ($20\times 20$) to put in the mesh builder function under the `fdmr` package to get a feeling of the parameter setting for the mesh. +```{r oceanPoints, error=FALSE} +ocean_pts <- sf::st_sample(ocean_sf, size = 20*20, + type = "random") + +ocean_pts_sp <- sf::as_Spatial(ocean_pts) + +colnames(ocean_pts_sp@coords) <- c("LONG", "LAT") +``` + +Here comes the mesh_builder function. We set the max edge and offset a bit larger to cater the computation. +```{r meshBuilder, eval=FALSE, error = FALSE} +fdmr::mesh_builder(spatial_data = as.data.frame(ocean_pts_sp), + max_edge = c(50,100), + offset = c(50,100), + cutoff = 1) +``` +We create the outer boundary by extending the outer boundary. +```{r boundary, error=TRUE} +ocean_bnd <- sf::st_cast( + sf::st_sf(geometry = fmesher::fm_nonconvex_hull(ocean_sf2, 5)), + "POLYGON" +) +``` + +We create the mesh for the Indian ocean with the outer boundary. +We remove Sri Lanka and keep Madagascar in the cutoff. +```{r mesh, error=TRUE, fig.id=TRUE, fig.cap="Mesh with original polygon and all datapoints", fig.align='center'} +boundary <- fmesher::fm_as_segm_list(base::list(ocean_sf2, ocean_bnd)) + +mesh <- fmesher::fm_mesh_2d_inla(boundary = boundary, + max.edge = c(5, 7), + offset = c(3, 3), + cutoff = 1) + +me4pts <- sf::st_as_sf(df, coords = c("lon", "lat")) + +ggplot2::ggplot() + ggplot2::geom_sf(data = ocean_sf2) + inlabru::gg(mesh) + inlabru::gg(data = me4pts, size=0.1) + ggplot2::theme(axis.title.x=element_blank(), axis.title.y=element_blank()) +``` + +# Model + +We considered one year of top layer density of the OHC (between 0 and 306.25 m depth) in 2005. Observations are indexed by the month of occurrence, resulting in 12 indices (equal to the number of time points). To pass the data to the function, we converted the data frame to an `sp` object. +```{r dataFormatting, error=TRUE} +# Transform latitudes and longtiudes to numeric +df$lat <- base::sapply(df$lat, as.numeric) +df$lon <- base::sapply(df$lon, as.numeric) + +# Add sp coordinates +df_f <- df +sp::coordinates(df_f) <- c('lon', 'lat') + +# Determine the group size +n_time <- base::as.integer(base::length(base::unique(df_f@data$time))) +``` +## Prior selection + +To implement the SPDE approach, we define the range un uncertainty priors. We assume that the probability of process spatial range (physically, a distance where correlation between two observations falls to 0.1) being under 25 degrees in latitude is 0.2. We also set the probability to 0.01 that the marginal standard deviation of the process exceeds 1. + +The process is assumed to be evolving temporally as an autoregressive process of the first order (AR1) with the probability of the temporal autocorrelation parameter to be over 0 at 0.9. + +```{r spde_setup, error=FALSE} +prior_range <- 25 +prior_Pgt <- 0.2 + +# Define the SPDE +ohc_spde <- INLA::inla.spde2.pcmatern(mesh, prior.range = c(prior_range, prior_Pgt), prior.sigma = c(1, 0.01)) + +# Define temporal parameter +rhoprior <- base::list(theta = base::list(prior = 'pccor1', param = c(0, 0.9))) +``` + +## Define the model formula + +We use a spatio-temporal model with only random effects and without an intercept. +```{r formula, eval=FALSE} +model_formula <- dohc_L1 ~ -1 + f( + main = coordinates, + model = ohc_spde, + group = time, + ngroup = n_time, + control.group = list( + model = 'ar1', + hyper = rhoprior + ) +) +``` + +## Fit the model + +```{r model, eval=FALSE} +bru_model <- + inlabru::bru(model_formula, + data = df_f, + family = "gaussian", + options = list( + verbose = TRUE, + bru_verbose = 4 + ) +) +``` + +# Output +The `model_viewer` of 4Dmodeller interactively shows the hyperparameters and predicted random field from the `INLA` model fit. In further sections we also plot the mean and standard deviation of the predicted field for March and October as well as the measures of temporal evolution. + +```{r modelviewer, eval=FALSE} +model_viewer(model_output = bru_model, mesh = mesh, measurement_data = df_f, data_distribution = "Gaussian") +``` + +To estimate posterior statistics from resampled model. We only use a small number of samples -- 100 (the default) -- to reduce the computational expanse. It is possible to use this function to also re-estimate the model fit with a new set of values. + +> ***NOTE:*** It takes approximately 20 min (depending on hardware) to run the prediction. You can instead run the consecutive cell to load the prediction already calculated by us. + +```{r eval=FALSE} +pred <- predict(bru_model, n.samples = 100) +``` + +If you decided to run the cell above, you do not need to run the cell below. +```{r error=TRUE} +pred <- fdmr::load_tutorial_data(dataset = "ohc", filename = "prediction_2005_L1.rds") +``` + +## Spatial fields + +First, we prepare the results for plotting. +```{r spatial_processing, error=TRUE} +# Add month to predictor +## Number of mesh nodes +mn <- mesh$n + +## Append the month index to the predictor +Predictor <- pred$Predictor +months <- data.frame(month = base::rep(base::seq(1,12,1), each = mn)) +Predictor$month <- months + +## Create a list for each month with mean values +mthpred <- list() +sdpred <- list() + +for (i in 1:12) { + mthpred[i] <- list(Predictor$mean[(1+mn*(i-1)):(mn*i)]) + sdpred[i] <- list(Predictor$sd[(1+mn*(i-1)):(mn*i)]) +} + +# Set the world map as a background +wmap <- ggplot2::map_data("world") + +# Assign the map coordinate extrema +mesh_lon_min <- base::min(mesh$loc[,1]) +mesh_lon_max <- base::max(mesh$loc[,1]) +mesh_lat_min <- base::min(mesh$loc[,2]) +mesh_lat_max <- base::max(mesh$loc[,2]) + +# Create a mask that only accepts the points over the ocean + +## Mesh node coords to sf object +mesh_sf <- sf::st_as_sf(base::data.frame(base::cbind(LAT = mesh$loc[,2], LONG = mesh$loc[,1])), coords = c("LONG", "LAT")) + +## The mask +mask_ocean <- base::unlist(sf::st_intersects(ocean_sf, mesh_sf, sparse = TRUE)) + +# Create the legend name +title <- bquote("DOHC" ~ (TJ ~ m^-2)) +title_diff <- bquote("dDOHC" ~ (TJ ~ m^-2)) +``` + +Then we plot the mean field for March and October. + +```{r meanPlots, error = FALSE, fig.id=TRUE, fig.cap="Mean field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} +mean_median <- stats::median(c(Predictor$mean[Predictor$month == 3], Predictor$mean[Predictor$month == 10]), na.rm = TRUE) +mean_min <- base::min(c(Predictor$mean[Predictor$month == 3], Predictor$mean[Predictor$month == 10]), na.rm = TRUE) +mean_max <- base::max(c(Predictor$mean[Predictor$month == 3], Predictor$mean[Predictor$month == 10]), na.rm = TRUE) + +plot_march <- + ggplot2::ggplot() + + inlabru::gg(data = mesh, + color = as.numeric(Predictor$mean[Predictor$month == 3]) + ) + + ggplot2::geom_polygon(data = wmap, + aes(x = long, y = lat, group = group), + fill = 'grey', + alpha = 1.0) + + ggplot2::coord_equal(xlim = c(mesh_lon_min, mesh_lon_max), + ylim = c(mesh_lat_min, mesh_lat_max), + expand = FALSE) + + ggplot2::ggtitle("Mean March") + + ggplot2::scale_fill_gradient2(name = title, + low = "blue", + high = "red", + midpoint = mean_median, + limits = c(mean_min, mean_max), + oob = squish + ) + + ggplot2::theme(legend.position="bottom", + legend.key.width = ggplot2::unit(1.8, "lines"), + plot.title = element_text(hjust = 0.5), + axis.title.x=element_blank(), + axis.title.y=element_blank(), + legend.title.align = 0.5 + ) + + ggplot2::guides( + fill = guide_colorbar(title.position = "left", + title.vjust = 1, + title.hjust = 1 + ) + ) + +plot_october <- + ggplot2::ggplot() + + inlabru::gg(data = mesh, + color = as.numeric(Predictor$mean[Predictor$month == 10]) + ) + + ggplot2::geom_polygon(data = wmap, + aes(x = long, y = lat, group = group), + fill = 'grey', + alpha = 1.0) + + ggplot2::coord_equal(xlim = c(mesh_lon_min, mesh_lon_max), + ylim = c(mesh_lat_min, mesh_lat_max), + expand = FALSE) + + ggplot2::ggtitle("Mean October") + + ggplot2::scale_fill_gradient2(name = title, + low = "blue", + high = "red", + midpoint = mean_median, + limits = c(mean_min, mean_max), + oob = squish + ) + + ggplot2::theme(legend.position = "bottom", + legend.key.width = ggplot2::unit(1.8, "lines"), + plot.title = element_text(hjust = 0.5), + axis.title.x=element_blank(), + axis.title.y=element_blank(), + legend.title.align = 0.5 + ) + + ggplot2::guides( + fill = guide_colorbar(title.position = "left", + title.vjust = 1, + title.hjust = 1 + ) + ) + +gridExtra::grid.arrange(plot_march, plot_october, ncol=2) +``` + +The map reproduces main features of ocean circulation, including the Subantarctic front (around 45--50$^\circ$S where transition between blue and violet occurs) [@orsi1995acc; @giglio2016subantarctic], Agulhas Current near southern African coast and Agulhas Return Current emanating from it eastwards at 40$^\circ$S [@hood2024io]. It also shows a region of increased OHC between 12$^\circ$ and 26$^\circ$S, coinciding with the subtropical gyre [@phillips2024circulation]. The maps show decreased upper-level OHC between 5$^\circ$ and 10$^\circ$S, in particular, at the Seychelles-Chagos thermocline ridge (SCTR) [@hood2024io]. Another centre of higher top-level OHC is in Arabian Sea while OHC is relatively lower in Bay of Bengal [@huang2002eof]. + +The differences between March and October are especially different in Arabian Sea. The western part of the basin and also at the Indian coast has a lower OHC in March compared to October. Similarly, in Bay of Bengal higher OHC appears in the central for October and western part in March. As expected, the heat content is relatively low due to weaker mixing during inter-monsoon [@dandapat2021mld]. The difference between March and October could also be explained by increased riverine freshwater influx as well as precipitation and cloudiness [@ali2018nio] in October compared to March [@sandeep2018freshwater], which causes a reduction in the OHC storage immediately at the plume area due to higher heat capcity of freshwater [@dandapat2020runoff] and also where freshwater is advected [@zhang2023bengal; @jaishree2023seasdyn] along the coastline. + +Similarly we show the standard deviation for March and October. +```{r stdevPlots, error = FALSE, fig.id=TRUE, fig.cap="Standard deviation field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} +stdev_median <- stats::median(c(Predictor$sd[Predictor$month == 3], Predictor$sd[Predictor$month == 10]), na.rm = TRUE) +stdev_max <- base::max(c(Predictor$sd[Predictor$month == 3], Predictor$sd[Predictor$month == 10]), na.rm = TRUE) +n_march <- base::nrow(df[df$time == 3, ]) +n_october <- base::nrow(df[df$time == 10, ]) + +plot_march <- + ggplot2::ggplot()+ + inlabru::gg(mesh, + color = as.numeric(Predictor$sd[Predictor$month == 3])) + + ggplot2::geom_polygon(data = wmap, + aes(x = long, y = lat, group = group), + fill = 'grey', + alpha = 1.0) + + ggplot2::coord_equal(xlim = c(mesh_lon_min, mesh_lon_max), + ylim = c(mesh_lat_min, mesh_lat_max), + expand = FALSE) + + ggplot2::geom_point(data = df[df$time == 3, ], + aes(x = lon, + y = lat), + size = 0.01) + + ggplot2::ggtitle(paste0("Stdev March (n = ", toString(n_march), ")")) + + ggplot2::scale_fill_gradient2(name = title, + low = 'navyblue', + mid = 'darkmagenta', + high = 'darkorange1', + midpoint = stdev_median, + limits = c(0, stdev_max), + oob = squish + ) + + ggplot2::theme_bw() + + ggplot2::theme(legend.position = "bottom", + legend.key.width = ggplot2::unit(1.8, "lines"), + plot.title = ggplot2::element_text(hjust = 0.5), + axis.title.x = ggplot2::element_blank(), + axis.title.y = ggplot2::element_blank() + ) + + ggplot2::guides( + fill = guide_colorbar(title.position = "left", + title.vjust = 1, + title.hjust = 1 + ) + ) + + +plot_october <- + ggplot2::ggplot() + + inlabru::gg(mesh, + color = as.numeric(Predictor$sd[Predictor$month == 10]) + ) + + ggplot2::geom_polygon(data = wmap, + aes(x = long, y = lat, group = group), + fill = 'grey', + alpha = 1.0) + + ggplot2::coord_equal(xlim = c(mesh_lon_min, mesh_lon_max), + ylim = c(mesh_lat_min, mesh_lat_max), + expand = FALSE) + + ggplot2::geom_point(data = df[df$time == 10, ], + aes(x = lon, + y = lat), + size = 0.01) + + ggplot2::ggtitle(paste0("Stdev October (n = ", toString(n_october), ")")) + + ggplot2::scale_fill_gradient2(name = title, + low = 'navyblue', + mid = 'darkmagenta', + high = 'darkorange1', + midpoint = stdev_median, + limits = c(0, stdev_max), + oob = squish + ) + + ggplot2::theme_bw() + + ggplot2::theme(legend.position = "bottom", + legend.key.width = ggplot2::unit(1.8, "lines"), + plot.title = ggplot2::element_text(hjust = 0.5), + axis.title.x = ggplot2::element_blank(), + axis.title.y = ggplot2::element_blank() + ) + + ggplot2::guides(fill = guide_colorbar(title.position = "left", + title.vjust = 1, + title.hjust = 1 + ) + ) + + +gridExtra::grid.arrange(plot_march, plot_october, ncol=2) +``` + +The standard deviation is higher in areas with low number of profiles; especially, if there are no profiles in the vicinity like during March in Great Australian Bight. Despite the number of profiles being larger in October than March, the standard deviations over the whole field remained similar. This can be explained by the distribution of those extra profiles--mostly in a close proximity to other profiles. + +We also further explore the resampled posterior standard deviation. +```{r sterrPlots, error = FALSE, fig.id=TRUE, fig.cap="Resampled standard deviation of mean field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} + +mc_serr_median <- stats::median(c(Predictor$mean.mc_std_err[Predictor$month == 3], Predictor$mean.mc_std_err[Predictor$month == 10]), na.rm = TRUE) +mc_serr_max <- base::max(c(Predictor$mean.mc_std_err[Predictor$month == 3], Predictor$mean.mc_std_err[Predictor$month == 10]), na.rm = TRUE) + +plot_march <- + ggplot2::ggplot()+ + inlabru::gg(mesh, + color = as.numeric(Predictor$mean.mc_std_err[Predictor$month == 3])) + + ggplot2::geom_polygon(data = wmap, + aes(x = long, y = lat, group = group), + fill = 'grey', + alpha = 1.0) + + ggplot2::coord_equal(xlim = c(mesh_lon_min, mesh_lon_max), + ylim = c(mesh_lat_min, mesh_lat_max), + expand = FALSE) + + ggplot2::ggtitle("Sterr of mean March") + + ggplot2::scale_fill_gradient2(name = title, + low = 'navyblue', + mid = 'darkmagenta', + high = 'darkorange1', + midpoint = mc_serr_median, + limits = c(0, mc_serr_max), + oob = squish + ) + + ggplot2::theme_bw() + + ggplot2::theme(legend.position = "bottom", + legend.key.width = ggplot2::unit(1.8, "lines"), + plot.title = ggplot2::element_text(hjust = 0.5), + axis.title.x = ggplot2::element_blank(), + axis.title.y = ggplot2::element_blank() + ) + + ggplot2::guides( + fill = guide_colorbar(title.position = "left", + title.vjust = 1, + title.hjust = 1 + ) + ) + + +plot_october <- + ggplot2::ggplot() + + inlabru::gg(mesh, + color = as.numeric(Predictor$mean.mc_std_err[Predictor$month == 10]) + ) + + ggplot2::geom_polygon(data = wmap, + aes(x = long, y = lat, group = group), + fill = 'grey', + alpha = 1.0) + + ggplot2::coord_equal(xlim = c(mesh_lon_min, mesh_lon_max), + ylim = c(mesh_lat_min, mesh_lat_max), + expand = FALSE) + + ggplot2::ggtitle("Sterr of mean October ") + + ggplot2::scale_fill_gradient2(name = title, + low = 'navyblue', + mid = 'darkmagenta', + high = 'darkorange1', + midpoint = mc_serr_median, + limits = c(0, mc_serr_max), + oob = squish + ) + + ggplot2::theme_bw() + + ggplot2::theme(legend.position = "bottom", + legend.key.width = ggplot2::unit(1.8, "lines"), + plot.title = ggplot2::element_text(hjust = 0.5), + axis.title.x = ggplot2::element_blank(), + axis.title.y = ggplot2::element_blank() + ) + + ggplot2::guides(fill = guide_colorbar(title.position = "left", + title.vjust = 1, + title.hjust = 1 + ) + ) + + +gridExtra::grid.arrange(plot_march, plot_october, ncol=2) +``` + +As one can see, both standard deviation and resampled standard error of mean are highest in the same areas. However, the magnitude is much lower. + +Finally, we evaluate the differences between synthetic observations and predictions at the locations of those observations. First, we calculate the predicted values at each location. +```{r error=TRUE} +# Define the predictions and observations for March +df_march <- df[df$time == 3, ] +df_sf_march <- sf::st_as_sf(df_march, coords = c("lon", "lat")) +pred_march <- Predictor$mean[Predictor$month == 3] + +# Evaluate at observation locations +pred_eval_march <- fmesher::fm_evaluate(mesh, pred_march, loc = df_sf_march$geometry) +pred_diff_march <- base::data.frame(diff = (df_march$dohc_L1 - pred_eval_march)) +pred_diff_march$Lat <- df_march$lat +pred_diff_march$Long <- df_march$lon +geom_diff_march <- sf::st_as_sf(pred_diff_march, coords = c("Long", "Lat")) + +# Do the same for October +df_october <- df[df$time == 10, ] +df_sf_october <- sf::st_as_sf(df_october, coords = c("lon", "lat")) +pred_october <- Predictor$mean[Predictor$month == 10] +pred_eval_october <- fmesher::fm_evaluate(mesh, pred_october, loc = df_sf_october$geometry) +pred_diff_october <- base::data.frame(diff = (df_october$dohc_L1 - pred_eval_october)) +pred_diff_october$Lat <- df_october$lat +pred_diff_october$Long <- df_october$lon +geom_diff_october <- sf::st_as_sf(pred_diff_october, coords = c("Long", "Lat")) +``` + +Then we plot these differences. +```{r differencePlots, error = FALSE, fig.id=TRUE, fig.cap="Differences between synthetic observations and predictions for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} +diff_suptitle_3 <- bquote("Diff (synthetic - prediction)"~ .(toString(df_march$year[1]))/.(toString(df_march$month[1]))) +diff_suptitle_10 <- bquote("Diff (synthetic - prediction)"~ .(toString(df_october$year[1]))/.(toString(df_october$month[1]))) +min_diff <- base::min(c(pred_diff_march$diff, pred_diff_october$diff), na.rm = TRUE) +max_diff <- base::max(c(pred_diff_march$diff, pred_diff_october$diff), na.rm = TRUE) + +plot_march <- + ggplot2::ggplot() + + ggplot2::geom_polygon( + data = wmap, + aes(x = long, + y = lat, + group = group + ), + fill = 'grey', + alpha = 1.0 + ) + + ggplot2::geom_sf(data = geom_diff_march, aes(color = diff), + size = 1.0) + + ggplot2::coord_sf(xlim = c(mesh_lon_min, mesh_lon_max), + ylim = c(mesh_lat_min, mesh_lat_max), + expand = FALSE) + + ggplot2::ggtitle(diff_suptitle_3) + + ggplot2::scale_color_gradient2( + name = title_diff, + low = "blue", + high = "red", + midpoint = 0, + limits = c(min_diff, max_diff), + oob = squish + ) + + ggplot2::theme(legend.position="bottom", + legend.key.width = ggplot2::unit(2.5, "lines"), + plot.title = element_text(hjust = 0.5), + axis.title.x=element_blank(), + axis.title.y=element_blank(), + legend.title = element_text(hjust = 0.5) + ) + + ggplot2::guides( + fill = guide_colorbar(title.position = "left", + title.vjust = 1, + title.hjust = 1 + ) + ) + +plot_october <- + ggplot2::ggplot() + + ggplot2::geom_polygon( + data = wmap, + aes(x = long, + y = lat, + group = group + ), + fill = 'grey', + alpha = 1.0 + ) + + ggplot2::geom_sf(data = geom_diff_october, aes(color = diff), + size = 1.0) + + ggplot2::coord_sf(xlim = c(mesh_lon_min, mesh_lon_max), + ylim = c(mesh_lat_min, mesh_lat_max), + expand = FALSE) + + ggplot2::ggtitle(diff_suptitle_10) + + ggplot2::scale_color_gradient2( + name = title_diff, + low = "blue", + high = "red", + midpoint = 0, + limits = c(min_diff, max_diff), + oob = squish + ) + + ggplot2::theme(legend.position="bottom", + legend.key.width = ggplot2::unit(2.5, "lines"), + plot.title = element_text(hjust = 0.5), + axis.title.x=element_blank(), + axis.title.y=element_blank(), + legend.title = element_text(hjust = 0.5) + ) + + ggplot2::guides( + fill = guide_colorbar(title.position = "left", + title.vjust = 1, + title.hjust = 1 + ) + ) + +gridExtra::grid.arrange(plot_march, plot_october, ncol=2) +``` + +The differences show that there is no significant bias. The regions with larger differences are typically around zones of higher mesoscale activity, for instance, Agulhas and Agulhas Return current, Leeuwin Current near Western Australian coastline, as well as western Arabian Sea (Somali Current). There is a marked increase in differences in the Arabian Sea in October compared to March, owing to a higher number of eddies after southwest monsoon in this region [@trott2017eddies]. + +## Temporal evolution + +Next we would like to show how the field evolves temporally. The field-mean evolution of mean and standard deviation of the posterior solution is shown in the plots below. + +```{r temporalEval, error=TRUE, fig.id=TRUE, fig.cap="Area-averaged mean and standard deviation for the Indian Ocean in 2005", fig.align='center', fig.width=4, fig.height=3} +meanFunc <- function(x) { + base::mean(base::data.frame(x)[mask_ocean,]) +} + +mean_mth <- lapply(mthpred, meanFunc) +mean_std <- lapply(sdpred, meanFunc) + +list_summary <- list( + "Mean" = base::cbind(x = 1:12, y = unlist(mean_mth)), + "Stdev" = base::cbind(x = 1:12, y = unlist(mean_std)) +) + +summ <- base::data.frame(base::do.call(rbind, list_summary)) +summ$parameter <- + base::factor(base::rep(names(list_summary), + times = base::sapply(list_summary, nrow) + ), + levels = c("Mean", "Stdev") + ) + +ggplot2::ggplot(summ, ggplot2::aes(x = x, y = y)) + + ggplot2::geom_line() + + ggplot2::facet_wrap(~parameter, scales = "free") + + ggplot2::xlab('Month') + + ggplot2::ylab(title) + + ggplot2::scale_x_continuous(breaks = scales::pretty_breaks()) + + ggplot2::theme_bw() + +``` + +The plots show that the mean over ocean peaks between March and June and reaches minimum in September to October, in line with the southern hemisphere (austral) seasonal cycle. The uncertainties are the highest between November and May due to a lower number of measurements. + +To show the temporal evolution across the Indian Ocean basin, we also plotted March and October values of top-level DOHC along a transect. We selected the TOGA/WOCE (Tropical Ocean Global Atmosphere/World Ocean Circulation Experiment) transect IX12, which runs from Gulf of Aden to Freemantle in Western Australia. This transect is frequently (12--15 times a year) conducted by the commercial fleet that deploy expendable bathythermographs (XBTs) along the route. The data has been collected since 1983 until now. + +We first define the locations of this transect and select some points for further exploration. +```{r} +# The bounding box +min_lat_transect <- -34.5833 +max_lat_transect <- 11.9 +min_lon_transect <- 51.8167 +max_lon_transect <- 114.6167 + +# Set the matrix with selected points +transect_points <- + base::matrix( + data = c(56.42322, 73.55196, 86.11196, 104.95196, 8.4903437, -4.1880047, -13.4846647, -27.4296547), + nrow = 4, + ncol = 2, + dimnames = list(c(), c("lon", "lat"))) + +# Create a line +transect_matrix <- + base::matrix( + data = c(max_lon_transect, min_lon_transect, min_lat_transect, max_lat_transect), + nrow = 2, + ncol = 2, + dimnames = list(c(), c("lon", "lat"))) + +transect_line <- + sf::st_geometry( + sf::st_linestring(transect_matrix), + crs = 4326) + +# Sample the line at 75 points +tr_sample_a <- sf::st_sample(transect_line, size = 75, type = "regular") +tr_points_a <- sf::st_coordinates(tr_sample_a)[, 1:2] +colnames(tr_points_a) <- c("lon", "lat") +``` + +The location on top of the mesh is shown in the figure below. A small sample of points along the transect that we choose to further show the change in time is also displayed. + +```{r transectMap, error = FALSE, fig.id=TRUE, fig.cap="Transect IX12 on a map", fig.align="center", fig.width=6, fig.height=4} +ggplot2::ggplot() + + inlabru::gg(mesh) + + ggplot2::geom_polygon( + data = wmap, + aes(x = long, + y = lat, + group = group + ), + fill = 'grey', + alpha = 1.0 + ) + + ggplot2::coord_equal( + xlim = c(mesh_lon_min, mesh_lon_max), + ylim = c(mesh_lat_min, mesh_lat_max), + expand = FALSE + ) + + ggplot2::ggtitle("Mesh and transect IX12 with a selection of points") + + ggplot2::geom_line( + data = data.frame(transect_matrix), + aes(x = lon, y = lat), + color = "black" + ) + + ggplot2::geom_point( + data = data.frame(transect_points), + aes(x = lon, y = lat), + color = "black", + size = 2 + ) + + ggplot2::annotate( + "text", + x = transect_points[1:4, c("lon")], + y = transect_points[1:4, c("lat")] + 3, + label = sprintf("%d", 1:4) + ) + + ggplot2::theme( + plot.title = element_text(hjust = 0.5), + axis.title.x=element_blank(), + axis.title.y=element_blank() + ) +``` + +Similarly as with the difference calculations above, we can determine the predicted values at the sampled points along the transect and also at the set of four points we choose to inspect more thoroughly. +```{r error=TRUE} +# Create an empty list and matrices for evalutation +monthlist <- c("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December") +eval_list <- base::vector("list", 12) +eval_point <- matrix(, nrow = 12, ncol = base::nrow(transect_points)) +std_min_point <- matrix(, nrow = 12, ncol = base::nrow(transect_points)) +std_max_point <- matrix(, nrow = 12, ncol = base::nrow(transect_points)) + +# Evaluate field mean and standard deviation for each month at locations along the transect and select points +for (i in 1:12) { + eval.part <- base::vector("list", 0) + eval.part$eval <- fmesher::fm_evaluate(mesh, as.numeric(Predictor$mean[Predictor$month == i]), loc = tr_points_a) + eval.part$std <- fmesher::fm_evaluate(mesh, as.numeric(Predictor$sd[Predictor$month == i]), loc = tr_points_a) + eval.part$ymin <- eval.part$eval - eval.part$std + eval.part$ymax <- eval.part$eval + eval.part$std + eval.part$Lat <- tr_points_a[, c("lat")] + eval.part$Long <- tr_points_a[, c("lon")] + eval.part$Month <- base::rep(monthlist[i], base::nrow(tr_points_a)) + eval_list[[i]] <- eval.part + + eval_mean <- fmesher::fm_evaluate(mesh, as.numeric(Predictor$mean[Predictor$month == i]), loc = transect_points) + std_mean <- fmesher::fm_evaluate(mesh, as.numeric(Predictor$sd[Predictor$month == i]), loc = transect_points) + eval_point[i,] <- eval_mean + std_min_point[i,] <- eval_mean - std_mean + std_max_point[i,] <- eval_mean + std_mean +} + +# Create and empty list to create timeseries at four points +point_eval <- base::vector("list", 4) + +# Add the string to determine whether the point is in northern or southern hemisphere +ns_list <- base::lapply(transect_points[, c("lat")], function(x) {if (sign(x) > 0) {"N"} else {"S"}}) + +# Create a dataframe for each of the points in list +for (i in 1:4) { + point_eval[[i]] <- + data.frame( + param = paste0(i, " (", base::round(base::abs(transect_points[i, c("lat")]), digits = 1), intToUtf8(176), ns_list[[i]], ", ", base::round(base::abs(transect_points[i, c("lon")]), digits = 1), intToUtf8(176), "E)"), + x = 1:12, + y = eval_point[, i], + ymin = std_min_point[, i], + ymax = std_max_point[, i] + ) +} +``` + +The plot below shows the predicted DOHC for the top layer in March and October (austral autumn and spring, respectively) along the transect shown in the previous plot. The line shows the mean field predictions while envelope -- the standard deviation. +```{r transectPlot, error = FALSE, fig.id=TRUE, fig.cap="Timeseries for 2005 at selected points", fig.align='center', fig.width=6, fig.height=4} +x_title <- paste0("Latitude (", intToUtf8(176), "N)") + +ggplot2::ggplot() + + ggplot2::geom_ribbon(data = base::as.data.frame(eval_list[3]), aes(x = Lat, ymin = ymin, ymax = ymax, color = Month, fill = Month, linetype = Month), alpha = 0.5) + + ggplot2::geom_line(data = base::as.data.frame(eval_list[3]), aes(x = Lat, y = eval, color = Month, linetype = Month)) + + ggplot2::geom_ribbon(data = base::as.data.frame(eval_list[10]), aes(x = Lat, ymin = ymin, ymax = ymax, color = Month, fill = Month, linetype = Month), alpha = 0.5) + + ggplot2::geom_line(data = base::as.data.frame(eval_list[10]), aes(x = Lat, y = eval, color = Month, linetype = Month)) + + ggplot2::scale_x_continuous(breaks = scales::pretty_breaks()) + + ggplot2::xlab(x_title) + + ggplot2::ylab(title) + + ggplot2::ggtitle("DOHC along IX12 in 2005") + + ggplot2::theme(plot.title = ggplot2::element_text(hjust = 0.5)) +``` + +The figure shows an increase in DOHC northward from the southernmost point until 17$^\circ$S in the southern hemisphere. There the curve peaks for the first time and then rapidly decays until 12$^\circ$S. The curve has a local minimum between -13$^\circ$S and -5$^\circ$S, after which DOHC starts to increase again, peaking at 7$^\circ$N and leveling off slightly afterwards. The seasonal (autumn/spring) pattern shows that DOHC is higher in March than October in most places. Exception is the segment between 17$^\circ$S and 0$^\circ$, where curves match (descending limb) or where October values are higher (local minimum). +The whole segment is known to have a persistent cooling, which has been present throughout the year for multiple decades as shown in other studies [@roxy2020warming; @duan2023storage]. +The minimum can be explained by the equatorial upwelling (associated with enhanced vertical advection) in so-called equatorial cold tongue (this particular region known as SCTR), which is caused by negative wind stress curl due to surface wind divergence [@chen2015equatorial] between equatorial westerlies and southeasterly trade wind [@mabarrok2023thermocline]. Wind stress is regulated by the Indian monsoon due to the change in wind direction (from easterlies in boreal summer to westerlies in boreal winter) [@yokoi2008sctr]. +The segment where both curves match is shown by @mckenna2024sst to have a higher net heat flux in March while net advection brings more heat in October due to negative vertical advection in March (associated with the same process as for the "cold tongue") while the meridional heat advection is stronger in October. +Elsewhere, March OHC has higher than October OHC. In southern hemisphere, it is expected due to increased insolation during austral summer and the lag for the ocean to heat up. However, we also observe higher OHC in northern hemisphere, where maximum values occur at the end of boreal winter. This segment has similar net heat flux values because it peaks twice during the year and both peaks are of similar magnitude [@mckenna2024sst]. However, advection contributes to more heat loss in October than March. +The final (northernmost) segment lies in close proximity to land and is affected by coastal upwelling near Somali coast [@vic2014mesoscale; @chatterjee2019somali]. + +The panel below shows the mean and standard deviation at the four sample locations along the transect shown on the map earlier. Compared to the field mean, we can observe that temporal evolution is spatially variable +```{r timeseriesPlots, error = FALSE, fig.id=TRUE, fig.cap="Timeseries for 2005 at selected points", fig.align='center', fig.width=6, fig.height=6} +ggplot2::ggplot(do.call(rbind, point_eval)) + + ggplot2::geom_line(aes(x = x, y = y), color = "black", linetype = "dashed") + + ggplot2::geom_point(aes(x = x, y = y), color = 'black', size = 1.6) + + ggplot2::geom_ribbon(aes(x = x, ymin = ymin, ymax = ymax), fill = 'grey', color = 'black', alpha = 0.2) + + ggplot2::facet_wrap(~param, nrow = 2, ncol = 2, scales = "fixed") + + ggplot2::scale_x_continuous(breaks = scales::pretty_breaks()) + + ggplot2::xlab('Month') + + ggplot2::ylab(title) + + ggplot2::ggtitle("2005 timeseries along IX12") + + ggplot2::theme_bw() + + ggplot2::theme(plot.title = ggplot2::element_text(hjust = 0.5)) +``` + +The northernmost point (1) has the highest DOHC values on average. There is a pronounced seasonal cycle, which has a maximum plateau (within standard deviation) from March to September and more pronounced trough reaching minimum in November--December. The plateau coincides with increased insolation when the sun is in zenith over the northern hemisphere. However, it does not produce the typical biannual maximum. The area is subject to monsoon winds, which cause seasonal Somali Current reversal (southward during boreal summer) and creation of a small gyre (Great Whirl) [@lhegaret2018gyres]. The winds reverse from southwesterly (JJA) to northeasterly (DJF), causing enhanced boreal winter surface cooling in the northern Arabian Sea due to the reduction in latent heat flux when wind brings dry and cool continental air from Asia [@schott2009circulation]. This suggests that an interplay between insolation and wind-driven surface cooling is likely causing the seasonal changes in this location. +The standard deviation envelope narrows slightly at the descending limb, likely due to a higher number of observations in the area during that time. + +Point 2 has a relatively even profile with lower average than at point 1. There is a peak in June that levels off over a couple of months until August. This could partly be caused by weaker equatorial upwelling as well as increased net heat flux as discussed earlier. This location is also near the South Equatorial Counter current, which is not present at this particular point during the boreal summer [@wu2020gyrestructure]. Thus, it is less affected by negative zonal heat advection when the top-layer OHC values peak. The standard deviation narrows near the peak, but is similar to point 1 elsewhere. + +Point 3 are another relatively flat timeseries, which has a small peak in January, leveling off until April. Within a standard deviation, the rest of values are similar. South Equatorial current is present in the vicinity of point 3 and provides some heat advection. @mckenna2024sst shows that zonal and meridional advection dampens the heat loss due to the net negative heat flux during austral winter. The standard deviation is similar for all timesteps. + +The southernmost point (4) mostly has the lowest DOHC values on average, which can be related to less solar radiation at higher latitudes. There is also a prominent seasonal cycle with a maximum in February and minimum in November. The standard deviation is similar for all months and also of similar magnitude as point 3. + +## References {-} + +
\ No newline at end of file From e5a7e70cfe3eed3ec229dc2f05d429a26f2368f3 Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Sat, 29 Jun 2024 15:45:59 +0100 Subject: [PATCH 19/74] Update CHANGELOG.md --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d3bcbc5..317917ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed `model_viewer` app to work with random effect models - [PR #317](https://github.com/4DModeller/fdmr/pull/317) - Updated `plot_map_leaflet` to feature the same selection of basemap tiles as `mapview` and fix features not appearing - [PR #310](https://github.com/4DModeller/fdmr/pull/310) +### Added +- Added ocean heat content mapping tutorial - [PR #321](https://github.com/4DModeller/fdmr/pull/321) + ## [0.2.0] - 2023-12-19 ### Fixed From 3e1912472bf641fc3e99c355f846ac592a9dd149 Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Sat, 29 Jun 2024 15:48:28 +0100 Subject: [PATCH 20/74] Update _pkgdown.yml --- _pkgdown.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/_pkgdown.yml b/_pkgdown.yml index 4abdf5c0..7ff16348 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -45,6 +45,8 @@ navbar: href: articles/hydro.html - text: "Priors exploration" href: articles/priors.html + - text: "Ocean heat content mapping" + href: articles/ohc_tutorial.html - text: --- - text: "FAQ" - text: INLA Crash FAQ From cec8c9f1e54e58302862141677ba1a8d62cf3734 Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Sat, 29 Jun 2024 15:51:06 +0100 Subject: [PATCH 21/74] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 317917ad..05380de5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Updated `plot_map_leaflet` to feature the same selection of basemap tiles as `mapview` and fix features not appearing - [PR #310](https://github.com/4DModeller/fdmr/pull/310) ### Added -- Added ocean heat content mapping tutorial - [PR #321](https://github.com/4DModeller/fdmr/pull/321) +- Added ocean heat content mapping tutorial - [PR #318](https://github.com/4DModeller/fdmr/pull/318) ## [0.2.0] - 2023-12-19 From 11e5d3447e4bf4a804ee1277ac94128e2f7e5c4b Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Sat, 29 Jun 2024 16:01:09 +0100 Subject: [PATCH 22/74] Update references.bib --- vignettes/references.bib | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vignettes/references.bib b/vignettes/references.bib index fc4f18b1..caf74fe7 100755 --- a/vignettes/references.bib +++ b/vignettes/references.bib @@ -841,7 +841,7 @@ @article{giglio2016subantarctic @incollection{hood2024io, author={Hood, Raleigh R and Ummenhofer, Caroline C and Philips, Helen E and Sprintall, Janet}, title={Introduction to the Indian Ocean}, - editor={Ummenhofer, Caroline C and Hood, Raleigh R} + editor={Ummenhofer, Caroline C and Hood, Raleigh R}, booktitle={The Indian Ocean and its Role in the Global Climate System}, publisher={Elsevier}, pages={1--31}, @@ -852,7 +852,7 @@ @incollection{hood2024io @incollection{phillips2024circulation, author={Philips, Helen E and Menezes, Viviane V and Nagura, Motoki and McPhaden, Michael J and Vinayachandran, P N and Beal, Lisa M}, title={Indian Ocean circulation}, - editor={Ummenhofer, Caroline C. and Hood, Raleigh R} + editor={Ummenhofer, Caroline C. and Hood, Raleigh R}, booktitle={The Indian Ocean and its Role in the Global Climate System}, publisher={Elsevier}, pages={169--203}, @@ -941,7 +941,7 @@ @article{trott2017eddies @incollection{roxy2020warming, author={Roxy, M K and Gnanaseelan, Chellappan and Parekh, Anant and Chowdary, Jasti S and Singh, Shikha and Modi, Aditi and Kakatkar, Rashmi and Mohapatra, Sandeep and Dhara, Chirag and Shenoi, S C and Rajeevan, M}, title={Indian Ocean Warming}, - editor={Krishnan, R. and Sanjay, J. and Gnanaseelan, Chellappan and Mujumdar, Milind and Kulkarni, Ashwini and Chakraborty, Supriyo} + editor={Krishnan, R. and Sanjay, J. and Gnanaseelan, Chellappan and Mujumdar, Milind and Kulkarni, Ashwini and Chakraborty, Supriyo}, booktitle={Assessment of Climate Change over the Indian Region}, publisher={Springer}, pages={191--206}, From df7e974a3d53b6f36e72ad6e65c98d81fe0f1f97 Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Sat, 29 Jun 2024 16:29:16 +0100 Subject: [PATCH 23/74] Disable map plots for ohc_tutorial.Rmd --- vignettes/ohc_tutorial.Rmd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vignettes/ohc_tutorial.Rmd b/vignettes/ohc_tutorial.Rmd index 36fb0b05..dad4fdde 100644 --- a/vignettes/ohc_tutorial.Rmd +++ b/vignettes/ohc_tutorial.Rmd @@ -262,7 +262,7 @@ title_diff <- bquote("dDOHC" ~ (TJ ~ m^-2)) Then we plot the mean field for March and October. -```{r meanPlots, error = FALSE, fig.id=TRUE, fig.cap="Mean field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} +```{r meanPlots, error = FALSE, eval=FALSE, fig.id=TRUE, fig.cap="Mean field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} mean_median <- stats::median(c(Predictor$mean[Predictor$month == 3], Predictor$mean[Predictor$month == 10]), na.rm = TRUE) mean_min <- base::min(c(Predictor$mean[Predictor$month == 3], Predictor$mean[Predictor$month == 10]), na.rm = TRUE) mean_max <- base::max(c(Predictor$mean[Predictor$month == 3], Predictor$mean[Predictor$month == 10]), na.rm = TRUE) @@ -343,7 +343,7 @@ The map reproduces main features of ocean circulation, including the Subantarcti The differences between March and October are especially different in Arabian Sea. The western part of the basin and also at the Indian coast has a lower OHC in March compared to October. Similarly, in Bay of Bengal higher OHC appears in the central for October and western part in March. As expected, the heat content is relatively low due to weaker mixing during inter-monsoon [@dandapat2021mld]. The difference between March and October could also be explained by increased riverine freshwater influx as well as precipitation and cloudiness [@ali2018nio] in October compared to March [@sandeep2018freshwater], which causes a reduction in the OHC storage immediately at the plume area due to higher heat capcity of freshwater [@dandapat2020runoff] and also where freshwater is advected [@zhang2023bengal; @jaishree2023seasdyn] along the coastline. Similarly we show the standard deviation for March and October. -```{r stdevPlots, error = FALSE, fig.id=TRUE, fig.cap="Standard deviation field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} +```{r stdevPlots, error = FALSE, eval=FALSE, fig.id=TRUE, fig.cap="Standard deviation field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} stdev_median <- stats::median(c(Predictor$sd[Predictor$month == 3], Predictor$sd[Predictor$month == 10]), na.rm = TRUE) stdev_max <- base::max(c(Predictor$sd[Predictor$month == 3], Predictor$sd[Predictor$month == 10]), na.rm = TRUE) n_march <- base::nrow(df[df$time == 3, ]) @@ -433,7 +433,7 @@ gridExtra::grid.arrange(plot_march, plot_october, ncol=2) The standard deviation is higher in areas with low number of profiles; especially, if there are no profiles in the vicinity like during March in Great Australian Bight. Despite the number of profiles being larger in October than March, the standard deviations over the whole field remained similar. This can be explained by the distribution of those extra profiles--mostly in a close proximity to other profiles. We also further explore the resampled posterior standard deviation. -```{r sterrPlots, error = FALSE, fig.id=TRUE, fig.cap="Resampled standard deviation of mean field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} +```{r sterrPlots, error = FALSE, eval=FALSE, fig.id=TRUE, fig.cap="Resampled standard deviation of mean field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} mc_serr_median <- stats::median(c(Predictor$mean.mc_std_err[Predictor$month == 3], Predictor$mean.mc_std_err[Predictor$month == 10]), na.rm = TRUE) mc_serr_max <- base::max(c(Predictor$mean.mc_std_err[Predictor$month == 3], Predictor$mean.mc_std_err[Predictor$month == 10]), na.rm = TRUE) @@ -842,4 +842,4 @@ The southernmost point (4) mostly has the lowest DOHC values on average, which c ## References {-} -
\ No newline at end of file +
From c6d8c0bcb825d34a55113c08c838867fac9902b3 Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Sat, 29 Jun 2024 16:39:36 +0100 Subject: [PATCH 24/74] Include warnings in ohc_tutorial.Rmd --- vignettes/ohc_tutorial.Rmd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vignettes/ohc_tutorial.Rmd b/vignettes/ohc_tutorial.Rmd index dad4fdde..0dc95426 100644 --- a/vignettes/ohc_tutorial.Rmd +++ b/vignettes/ohc_tutorial.Rmd @@ -219,7 +219,7 @@ pred <- fdmr::load_tutorial_data(dataset = "ohc", filename = "prediction_2005_L1 ## Spatial fields First, we prepare the results for plotting. -```{r spatial_processing, error=TRUE} +```{r spatial_processing, error=TRUE, message=FALSE, warning=FALSE} # Add month to predictor ## Number of mesh nodes mn <- mesh$n @@ -262,7 +262,7 @@ title_diff <- bquote("dDOHC" ~ (TJ ~ m^-2)) Then we plot the mean field for March and October. -```{r meanPlots, error = FALSE, eval=FALSE, fig.id=TRUE, fig.cap="Mean field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} +```{r meanPlots, error = FALSE, fig.id=TRUE, fig.cap="Mean field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} mean_median <- stats::median(c(Predictor$mean[Predictor$month == 3], Predictor$mean[Predictor$month == 10]), na.rm = TRUE) mean_min <- base::min(c(Predictor$mean[Predictor$month == 3], Predictor$mean[Predictor$month == 10]), na.rm = TRUE) mean_max <- base::max(c(Predictor$mean[Predictor$month == 3], Predictor$mean[Predictor$month == 10]), na.rm = TRUE) @@ -343,7 +343,7 @@ The map reproduces main features of ocean circulation, including the Subantarcti The differences between March and October are especially different in Arabian Sea. The western part of the basin and also at the Indian coast has a lower OHC in March compared to October. Similarly, in Bay of Bengal higher OHC appears in the central for October and western part in March. As expected, the heat content is relatively low due to weaker mixing during inter-monsoon [@dandapat2021mld]. The difference between March and October could also be explained by increased riverine freshwater influx as well as precipitation and cloudiness [@ali2018nio] in October compared to March [@sandeep2018freshwater], which causes a reduction in the OHC storage immediately at the plume area due to higher heat capcity of freshwater [@dandapat2020runoff] and also where freshwater is advected [@zhang2023bengal; @jaishree2023seasdyn] along the coastline. Similarly we show the standard deviation for March and October. -```{r stdevPlots, error = FALSE, eval=FALSE, fig.id=TRUE, fig.cap="Standard deviation field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} +```{r stdevPlots, error = FALSE, fig.id=TRUE, fig.cap="Standard deviation field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} stdev_median <- stats::median(c(Predictor$sd[Predictor$month == 3], Predictor$sd[Predictor$month == 10]), na.rm = TRUE) stdev_max <- base::max(c(Predictor$sd[Predictor$month == 3], Predictor$sd[Predictor$month == 10]), na.rm = TRUE) n_march <- base::nrow(df[df$time == 3, ]) @@ -433,7 +433,7 @@ gridExtra::grid.arrange(plot_march, plot_october, ncol=2) The standard deviation is higher in areas with low number of profiles; especially, if there are no profiles in the vicinity like during March in Great Australian Bight. Despite the number of profiles being larger in October than March, the standard deviations over the whole field remained similar. This can be explained by the distribution of those extra profiles--mostly in a close proximity to other profiles. We also further explore the resampled posterior standard deviation. -```{r sterrPlots, error = FALSE, eval=FALSE, fig.id=TRUE, fig.cap="Resampled standard deviation of mean field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} +```{r sterrPlots, error = FALSE, fig.id=TRUE, fig.cap="Resampled standard deviation of mean field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} mc_serr_median <- stats::median(c(Predictor$mean.mc_std_err[Predictor$month == 3], Predictor$mean.mc_std_err[Predictor$month == 10]), na.rm = TRUE) mc_serr_max <- base::max(c(Predictor$mean.mc_std_err[Predictor$month == 3], Predictor$mean.mc_std_err[Predictor$month == 10]), na.rm = TRUE) From b7db45fcfde9536c6698674863963851a2f0054d Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Sat, 29 Jun 2024 16:59:50 +0100 Subject: [PATCH 25/74] Update ohc_tutorial.Rmd --- vignettes/ohc_tutorial.Rmd | 59 +++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/vignettes/ohc_tutorial.Rmd b/vignettes/ohc_tutorial.Rmd index 0dc95426..71442a67 100644 --- a/vignettes/ohc_tutorial.Rmd +++ b/vignettes/ohc_tutorial.Rmd @@ -26,7 +26,7 @@ systems. The world's oceans have a huge volume so even small changes in temperature can correspond to large changes in energy. 90% of the excess energy trapped in the earth system by anthropogenic greenhouse gas emissions goes into the oceans [@trenberth2014inbalance]. -The Indian Ocean serves as a significant reservoir of this extra energy, despite its small relatively small area [@duan2023storage]. @desbruyeres2017trends found that a half of the global top-layer (<700 m) heat uptake is in the Indian Ocean. +The Indian Ocean serves as a significant reservoir of this extra energy, despite its relatively small area [@duan2023storage]. @desbruyeres2017trends found that half of the global top-layer (<700 m) heat uptake is in the Indian Ocean. ## Measuring Ocean Heat Content @@ -47,7 +47,7 @@ sub-sampled to real world observed locations. While the synthetic profile data a intended to be used to benchmark ocean heat mapping methods, the data are used in this tutorial as a case study for application of 4DModeller to map ocean heat content. -In this tutorial we will use point data of ocean heat for upper layers of the ocean +In this tutorial, we will use point data of ocean heat for the upper layers of the ocean provided in the ME4OH data files (integrated temperature profiles from the surface down to a depth of 306.25 m, multiplied by water density and heat capacity). @@ -64,7 +64,7 @@ library(scales) ``` ## Loading Data -Here we load the Indian ocean shapefile and dataset. We smooth the boundary to make the mesh creation easier. +Here we load the Indian Ocean shapefile and dataset. We smooth the boundary to make the mesh creation easier. ```{r loadData, error=TRUE, message=FALSE, warning=FALSE} fdmr::retrieve_tutorial_data(dataset = "ohc", force_update = TRUE) @@ -82,7 +82,7 @@ fmesher::fm_crs(ocean_sf) <- NULL ocean_sf2 <- sf::st_union(sf::st_buffer(ocean_sf, 1.05)) ``` -We plot the smoothed Indian ocean polygon to check if there are any issues. +We plot the smoothed Indian Ocean polygon to check if there are any issues. ```{r polygonPlot, error=TRUE, fig.id=TRUE, fig.cap="Smoothed polygon", fig.align='center'} ggplot2::ggplot() + ggplot2::geom_sf(data=ocean_sf2) @@ -119,7 +119,7 @@ ocean_bnd <- sf::st_cast( ) ``` -We create the mesh for the Indian ocean with the outer boundary. +We create the mesh for the Indian Ocean with the outer boundary. We remove Sri Lanka and keep Madagascar in the cutoff. ```{r mesh, error=TRUE, fig.id=TRUE, fig.cap="Mesh with original polygon and all datapoints", fig.align='center'} boundary <- fmesher::fm_as_segm_list(base::list(ocean_sf2, ocean_bnd)) @@ -151,9 +151,9 @@ n_time <- base::as.integer(base::length(base::unique(df_f@data$time))) ``` ## Prior selection -To implement the SPDE approach, we define the range un uncertainty priors. We assume that the probability of process spatial range (physically, a distance where correlation between two observations falls to 0.1) being under 25 degrees in latitude is 0.2. We also set the probability to 0.01 that the marginal standard deviation of the process exceeds 1. +To implement the SPDE approach, we define the range un uncertainty priors. We assume that the probability of process spatial range (physically, a distance where the correlation between two observations falls to 0.1) being under 25 degrees in latitude is 0.2. We also set the probability to 0.01 that the marginal standard deviation of the process exceeds 1. -The process is assumed to be evolving temporally as an autoregressive process of the first order (AR1) with the probability of the temporal autocorrelation parameter to be over 0 at 0.9. +The process is assumed to be evolving temporally as an autoregressive process of the first order (AR1) with the probability of the temporal autocorrelation parameter being over 0 at 0.9. ```{r spde_setup, error=FALSE} prior_range <- 25 @@ -197,15 +197,15 @@ bru_model <- ``` # Output -The `model_viewer` of 4Dmodeller interactively shows the hyperparameters and predicted random field from the `INLA` model fit. In further sections we also plot the mean and standard deviation of the predicted field for March and October as well as the measures of temporal evolution. +The `model_viewer` of 4Dmodeller interactively shows the hyperparameters and predicted random field from the `INLA` model fit. In further sections, we also plot the mean and standard deviation of the predicted field for March and October as well as the measures of temporal evolution. ```{r modelviewer, eval=FALSE} model_viewer(model_output = bru_model, mesh = mesh, measurement_data = df_f, data_distribution = "Gaussian") ``` -To estimate posterior statistics from resampled model. We only use a small number of samples -- 100 (the default) -- to reduce the computational expanse. It is possible to use this function to also re-estimate the model fit with a new set of values. +To estimate posterior statistics from the resampled model. We only use a small number of samples -- 100 (the default) -- to reduce the computational expanse. It is possible to use this function to also re-estimate the model fit with a new set of values. -> ***NOTE:*** It takes approximately 20 min (depending on hardware) to run the prediction. You can instead run the consecutive cell to load the prediction already calculated by us. +> ***NOTE:*** It takes approximately 20 min (depending on the hardware) to run the prediction. You can instead run the consecutive cell to load the prediction already calculated by us. ```{r eval=FALSE} pred <- predict(bru_model, n.samples = 100) @@ -214,6 +214,7 @@ pred <- predict(bru_model, n.samples = 100) If you decided to run the cell above, you do not need to run the cell below. ```{r error=TRUE} pred <- fdmr::load_tutorial_data(dataset = "ohc", filename = "prediction_2005_L1.rds") +mesh <- fdmr::load_tutorial_data(dataset = "ohc", filename = "mesh.rds") ``` ## Spatial fields @@ -338,11 +339,11 @@ plot_october <- gridExtra::grid.arrange(plot_march, plot_october, ncol=2) ``` -The map reproduces main features of ocean circulation, including the Subantarctic front (around 45--50$^\circ$S where transition between blue and violet occurs) [@orsi1995acc; @giglio2016subantarctic], Agulhas Current near southern African coast and Agulhas Return Current emanating from it eastwards at 40$^\circ$S [@hood2024io]. It also shows a region of increased OHC between 12$^\circ$ and 26$^\circ$S, coinciding with the subtropical gyre [@phillips2024circulation]. The maps show decreased upper-level OHC between 5$^\circ$ and 10$^\circ$S, in particular, at the Seychelles-Chagos thermocline ridge (SCTR) [@hood2024io]. Another centre of higher top-level OHC is in Arabian Sea while OHC is relatively lower in Bay of Bengal [@huang2002eof]. +The map reproduces main features of ocean circulation, including the Subantarctic front (around 45--50$^\circ$S where a transition between blue and violet occurs) [@orsi1995acc; @giglio2016subantarctic], Agulhas Current near southern African coast and Agulhas Return Current emanating from it eastwards at 40$^\circ$S [@hood2024io]. It also shows a region of increased OHC between 12$^\circ$ and 26$^\circ$S, coinciding with the subtropical gyre [@phillips2024circulation]. The maps show decreased upper-level OHC between 5$^\circ$ and 10$^\circ$S, in particular, at the Seychelles-Chagos thermocline ridge (SCTR) [@hood2024io]. Another centre of higher top-level OHC is in the Arabian Sea while OHC is relatively lower in the Bay of Bengal [@huang2002eof]. -The differences between March and October are especially different in Arabian Sea. The western part of the basin and also at the Indian coast has a lower OHC in March compared to October. Similarly, in Bay of Bengal higher OHC appears in the central for October and western part in March. As expected, the heat content is relatively low due to weaker mixing during inter-monsoon [@dandapat2021mld]. The difference between March and October could also be explained by increased riverine freshwater influx as well as precipitation and cloudiness [@ali2018nio] in October compared to March [@sandeep2018freshwater], which causes a reduction in the OHC storage immediately at the plume area due to higher heat capcity of freshwater [@dandapat2020runoff] and also where freshwater is advected [@zhang2023bengal; @jaishree2023seasdyn] along the coastline. +The differences between March and October are especially different in the Arabian Sea. The western part of the basin and also at the Indian coast has a lower OHC in March compared to October. Similarly, in Bay of Bengal higher OHC appears in the central for October and the western part in March. As expected, the heat content is relatively low due to weaker mixing during inter-monsoon [@dandapat2021mld]. The difference between March and October could also be explained by increased riverine freshwater influx as well as precipitation and cloudiness [@ali2018nio] in October compared to March [@sandeep2018freshwater], which causes a reduction in the OHC storage immediately at the plume area due to higher heat capacity of freshwater [@dandapat2020runoff] and also where freshwater is advected [@zhang2023bengal; @jaishree2023seasdyn] along the coastline. -Similarly we show the standard deviation for March and October. +Similarly, we show the standard deviation for March and October. ```{r stdevPlots, error = FALSE, fig.id=TRUE, fig.cap="Standard deviation field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} stdev_median <- stats::median(c(Predictor$sd[Predictor$month == 3], Predictor$sd[Predictor$month == 10]), na.rm = TRUE) stdev_max <- base::max(c(Predictor$sd[Predictor$month == 3], Predictor$sd[Predictor$month == 10]), na.rm = TRUE) @@ -430,10 +431,10 @@ plot_october <- gridExtra::grid.arrange(plot_march, plot_october, ncol=2) ``` -The standard deviation is higher in areas with low number of profiles; especially, if there are no profiles in the vicinity like during March in Great Australian Bight. Despite the number of profiles being larger in October than March, the standard deviations over the whole field remained similar. This can be explained by the distribution of those extra profiles--mostly in a close proximity to other profiles. +The standard deviation is higher in areas with a low number of profiles; especially, if there are no profiles in the vicinity like during March in the Great Australian Bight. Despite the number of profiles being larger in October than in March, the standard deviations over the whole field remained similar. This can be explained by the distribution of those extra profiles--mostly in a close proximity to other profiles. We also further explore the resampled posterior standard deviation. -```{r sterrPlots, error = FALSE, fig.id=TRUE, fig.cap="Resampled standard deviation of mean field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} +```{r sterrPlots, error = FALSE, fig.id=TRUE, fig.cap="Resampled standard deviation of the mean field for L1 in 2005: (left) March, (right) October", fig.align='center', fig.width=8, fig.height=4} mc_serr_median <- stats::median(c(Predictor$mean.mc_std_err[Predictor$month == 3], Predictor$mean.mc_std_err[Predictor$month == 10]), na.rm = TRUE) mc_serr_max <- base::max(c(Predictor$mean.mc_std_err[Predictor$month == 3], Predictor$mean.mc_std_err[Predictor$month == 10]), na.rm = TRUE) @@ -511,7 +512,7 @@ plot_october <- gridExtra::grid.arrange(plot_march, plot_october, ncol=2) ``` -As one can see, both standard deviation and resampled standard error of mean are highest in the same areas. However, the magnitude is much lower. +As one can see, both the standard deviation and resampled standard error of the mean are highest in the same areas. However, the magnitude is much lower. Finally, we evaluate the differences between synthetic observations and predictions at the locations of those observations. First, we calculate the predicted values at each location. ```{r error=TRUE} @@ -626,11 +627,11 @@ plot_october <- gridExtra::grid.arrange(plot_march, plot_october, ncol=2) ``` -The differences show that there is no significant bias. The regions with larger differences are typically around zones of higher mesoscale activity, for instance, Agulhas and Agulhas Return current, Leeuwin Current near Western Australian coastline, as well as western Arabian Sea (Somali Current). There is a marked increase in differences in the Arabian Sea in October compared to March, owing to a higher number of eddies after southwest monsoon in this region [@trott2017eddies]. +The differences show that there is no significant bias. The regions with larger differences are typically around zones of higher mesoscale activity, for instance, Agulhas and Agulhas Return Current, Leeuwin Current near the Western Australian coastline, as well as western Arabian Sea (Somali Current). There is a marked increase in differences in the Arabian Sea in October compared to March, owing to a higher number of eddies after the southwest monsoon in this region [@trott2017eddies]. ## Temporal evolution -Next we would like to show how the field evolves temporally. The field-mean evolution of mean and standard deviation of the posterior solution is shown in the plots below. +Next, we would like to show how the field evolves temporally. The field-mean evolution of mean and standard deviation of the posterior solution is shown in the plots below. ```{r temporalEval, error=TRUE, fig.id=TRUE, fig.cap="Area-averaged mean and standard deviation for the Indian Ocean in 2005", fig.align='center', fig.width=4, fig.height=3} meanFunc <- function(x) { @@ -663,9 +664,9 @@ ggplot2::ggplot(summ, ggplot2::aes(x = x, y = y)) + ``` -The plots show that the mean over ocean peaks between March and June and reaches minimum in September to October, in line with the southern hemisphere (austral) seasonal cycle. The uncertainties are the highest between November and May due to a lower number of measurements. +The plots show that the mean over ocean peaks between March and June and reaches a minimum in September to October, in line with the southern hemisphere (austral) seasonal cycle. The uncertainties are the highest between November and May due to a lower number of measurements. -To show the temporal evolution across the Indian Ocean basin, we also plotted March and October values of top-level DOHC along a transect. We selected the TOGA/WOCE (Tropical Ocean Global Atmosphere/World Ocean Circulation Experiment) transect IX12, which runs from Gulf of Aden to Freemantle in Western Australia. This transect is frequently (12--15 times a year) conducted by the commercial fleet that deploy expendable bathythermographs (XBTs) along the route. The data has been collected since 1983 until now. +To show the temporal evolution across the Indian Ocean basin, we also plotted March and October values of top-level DOHC along a transect. We selected the TOGA/WOCE (Tropical Ocean Global Atmosphere/World Ocean Circulation Experiment) transect IX12, which runs from the Gulf of Aden to Freemantle in Western Australia. This transect is frequently (12--15 times a year) conducted by the commercial fleet that deploys expendable bathythermographs (XBTs) along the route. The data has been collected since 1983 until now. We first define the locations of this transect and select some points for further exploration. ```{r} @@ -793,7 +794,7 @@ for (i in 1:4) { } ``` -The plot below shows the predicted DOHC for the top layer in March and October (austral autumn and spring, respectively) along the transect shown in the previous plot. The line shows the mean field predictions while envelope -- the standard deviation. +The plot below shows the predicted DOHC for the top layer in March and October (austral autumn and spring, respectively) along the transect shown in the previous plot. The line shows the mean field predictions while the envelope -- the standard deviation. ```{r transectPlot, error = FALSE, fig.id=TRUE, fig.cap="Timeseries for 2005 at selected points", fig.align='center', fig.width=6, fig.height=4} x_title <- paste0("Latitude (", intToUtf8(176), "N)") @@ -809,12 +810,12 @@ ggplot2::ggplot() + ggplot2::theme(plot.title = ggplot2::element_text(hjust = 0.5)) ``` -The figure shows an increase in DOHC northward from the southernmost point until 17$^\circ$S in the southern hemisphere. There the curve peaks for the first time and then rapidly decays until 12$^\circ$S. The curve has a local minimum between -13$^\circ$S and -5$^\circ$S, after which DOHC starts to increase again, peaking at 7$^\circ$N and leveling off slightly afterwards. The seasonal (autumn/spring) pattern shows that DOHC is higher in March than October in most places. Exception is the segment between 17$^\circ$S and 0$^\circ$, where curves match (descending limb) or where October values are higher (local minimum). +The figure shows an increase in DOHC northward from the southernmost point until 17$^\circ$S in the southern hemisphere. There the curve peaks for the first time and then rapidly decays until 12$^\circ$S. The curve has a local minimum between -13$^\circ$S and -5$^\circ$S, after which DOHC starts to increase again, peaking at 7$^\circ$N and levelling off slightly afterwards. The seasonal (autumn/spring) pattern shows that DOHC is higher in March than in October in most places. The exception is the segment between 17$^\circ$S and 0$^\circ$, where curves match (descending limb) or where October values are higher (local minimum). The whole segment is known to have a persistent cooling, which has been present throughout the year for multiple decades as shown in other studies [@roxy2020warming; @duan2023storage]. -The minimum can be explained by the equatorial upwelling (associated with enhanced vertical advection) in so-called equatorial cold tongue (this particular region known as SCTR), which is caused by negative wind stress curl due to surface wind divergence [@chen2015equatorial] between equatorial westerlies and southeasterly trade wind [@mabarrok2023thermocline]. Wind stress is regulated by the Indian monsoon due to the change in wind direction (from easterlies in boreal summer to westerlies in boreal winter) [@yokoi2008sctr]. +The minimum can be explained by the equatorial upwelling (associated with enhanced vertical advection) in the so-called equatorial cold tongue (this particular region is known as SCTR), which is caused by negative wind stress curl due to surface wind divergence [@chen2015equatorial] between equatorial westerlies and southeasterly trade wind [@mabarrok2023thermocline]. Wind stress is regulated by the Indian monsoon due to the change in wind direction (from easterlies in boreal summer to westerlies in boreal winter) [@yokoi2008sctr]. The segment where both curves match is shown by @mckenna2024sst to have a higher net heat flux in March while net advection brings more heat in October due to negative vertical advection in March (associated with the same process as for the "cold tongue") while the meridional heat advection is stronger in October. -Elsewhere, March OHC has higher than October OHC. In southern hemisphere, it is expected due to increased insolation during austral summer and the lag for the ocean to heat up. However, we also observe higher OHC in northern hemisphere, where maximum values occur at the end of boreal winter. This segment has similar net heat flux values because it peaks twice during the year and both peaks are of similar magnitude [@mckenna2024sst]. However, advection contributes to more heat loss in October than March. -The final (northernmost) segment lies in close proximity to land and is affected by coastal upwelling near Somali coast [@vic2014mesoscale; @chatterjee2019somali]. +Elsewhere, March OHC is higher than October OHC. In the southern hemisphere, it is expected due to increased insolation during the austral summer and the lag for the ocean to heat up. However, we also observe higher OHC in the northern hemisphere, where maximum values occur at the end of boreal winter. This segment has similar net heat flux values because it peaks twice during the year and both peaks are of similar magnitude [@mckenna2024sst]. However, advection contributes to more heat loss in October than in March. +The final (northernmost) segment lies close to land and is affected by coastal upwelling near the Somali coast [@vic2014mesoscale; @chatterjee2019somali]. The panel below shows the mean and standard deviation at the four sample locations along the transect shown on the map earlier. Compared to the field mean, we can observe that temporal evolution is spatially variable ```{r timeseriesPlots, error = FALSE, fig.id=TRUE, fig.cap="Timeseries for 2005 at selected points", fig.align='center', fig.width=6, fig.height=6} @@ -831,14 +832,14 @@ ggplot2::ggplot(do.call(rbind, point_eval)) + ggplot2::theme(plot.title = ggplot2::element_text(hjust = 0.5)) ``` -The northernmost point (1) has the highest DOHC values on average. There is a pronounced seasonal cycle, which has a maximum plateau (within standard deviation) from March to September and more pronounced trough reaching minimum in November--December. The plateau coincides with increased insolation when the sun is in zenith over the northern hemisphere. However, it does not produce the typical biannual maximum. The area is subject to monsoon winds, which cause seasonal Somali Current reversal (southward during boreal summer) and creation of a small gyre (Great Whirl) [@lhegaret2018gyres]. The winds reverse from southwesterly (JJA) to northeasterly (DJF), causing enhanced boreal winter surface cooling in the northern Arabian Sea due to the reduction in latent heat flux when wind brings dry and cool continental air from Asia [@schott2009circulation]. This suggests that an interplay between insolation and wind-driven surface cooling is likely causing the seasonal changes in this location. +The northernmost point (1) has the highest DOHC values on average. There is a pronounced seasonal cycle, which has a maximum plateau (within standard deviation) from March to September and a more pronounced trough reaching a minimum in November--December. The plateau coincides with increased insolation when the sun is in zenith over the northern hemisphere. However, it does not produce the typical biannual maximum. The area is subject to monsoon winds, which cause seasonal Somali Current reversal (southward during boreal summer) and the creation of a small gyre (Great Whirl) [@lhegaret2018gyres]. The winds reverse from southwesterly (JJA) to northeasterly (DJF), causing enhanced boreal winter surface cooling in the northern Arabian Sea due to the reduction in latent heat flux when the wind brings dry and cool continental air from Asia [@schott2009circulation]. This suggests that an interplay between insolation and wind-driven surface cooling is likely causing the seasonal changes in this location. The standard deviation envelope narrows slightly at the descending limb, likely due to a higher number of observations in the area during that time. -Point 2 has a relatively even profile with lower average than at point 1. There is a peak in June that levels off over a couple of months until August. This could partly be caused by weaker equatorial upwelling as well as increased net heat flux as discussed earlier. This location is also near the South Equatorial Counter current, which is not present at this particular point during the boreal summer [@wu2020gyrestructure]. Thus, it is less affected by negative zonal heat advection when the top-layer OHC values peak. The standard deviation narrows near the peak, but is similar to point 1 elsewhere. +Point 2 has a relatively even profile with a lower average than at point 1. There is a peak in June that levels off over a couple of months until August. This could partly be caused by weaker equatorial upwelling as well as increased net heat flux as discussed earlier. This location is also near the South Equatorial Counter current, which is not present at this particular point during the boreal summer [@wu2020gyrestructure]. Thus, it is less affected by negative zonal heat advection when the top-layer OHC values peak. The standard deviation narrows near the peak, but is similar to point 1 elsewhere. -Point 3 are another relatively flat timeseries, which has a small peak in January, leveling off until April. Within a standard deviation, the rest of values are similar. South Equatorial current is present in the vicinity of point 3 and provides some heat advection. @mckenna2024sst shows that zonal and meridional advection dampens the heat loss due to the net negative heat flux during austral winter. The standard deviation is similar for all timesteps. +Point 3 are another relatively flat timeseries, which has a small peak in January, levelling off until April. Within a standard deviation, the rest of the values are similar. South Equatorial current is present in the vicinity of point 3 and provides some heat advection. @mckenna2024sst shows that zonal and meridional advection dampens the heat loss due to the net negative heat flux during austral winter. The standard deviation is similar for all timesteps. -The southernmost point (4) mostly has the lowest DOHC values on average, which can be related to less solar radiation at higher latitudes. There is also a prominent seasonal cycle with a maximum in February and minimum in November. The standard deviation is similar for all months and also of similar magnitude as point 3. +The southernmost point (4) mostly has the lowest DOHC values on average, which can be related to less solar radiation at higher latitudes. There is also a prominent seasonal cycle with a maximum in February and a minimum in November. The standard deviation is similar for all months and also of similar magnitude as point 3. ## References {-} From 57732d4058e0323f58c24000aab80495c5754bae Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Thu, 11 Jul 2024 11:45:21 +0100 Subject: [PATCH 26/74] Update pkgdown.yaml --- .github/workflows/pkgdown.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index b05a381a..b98c82c8 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -13,7 +13,7 @@ name: pkgdown jobs: pkgdown: - runs-on: ubuntu-18.04 + runs-on: ubuntu-latest # Only restrict concurrency for non-PR jobs concurrency: group: pkgdown-${{ github.event_name != 'pull_request' || github.run_id }} From acfa344f2fa10b97fcb46cf052d2db1c31f6787e Mon Sep 17 00:00:00 2001 From: John Aiken Date: Fri, 12 Jul 2024 11:35:45 +0200 Subject: [PATCH 27/74] paper files for JOSS paper --- man/paper.bib | 119 ++++++++++++++++++++++++++++++++++++++++++++++++++ man/paper.md | 69 +++++++++++++++++++++++++++++ 2 files changed, 188 insertions(+) create mode 100644 man/paper.bib create mode 100644 man/paper.md diff --git a/man/paper.bib b/man/paper.bib new file mode 100644 index 00000000..958f9de6 --- /dev/null +++ b/man/paper.bib @@ -0,0 +1,119 @@ +@Article{Bachl:2019, + author = {{Bachl}, F.E., {Lindgren}, F., {Borchers}, D.L. and {Illian}, J.B}, + title = {{inlabru}: an {R} package for {Bayesian} spatial modelling from ecological survey data}, + journal = {Methods in Ecology and Evolution}, + volume = {10}, + number = {}, + pages = {760--766}, + year = {2019}, + month = {}, + doi = {10.1111/2041-210X.13168}, + publisher = {British Ecological Society} +} + +@Misc{Lindgren:2024, + author = {{Lindgren}, F., {Bachl}, F.E., {Borchers}, D.L., {Simpson}, D., {Scott-Howard}, L., {Seaton}, A., {Sue}, M.H., {Roudier}, P., {Meehan}, T., {Peddinenikalva}, N. and {Perepolkin}, D.}, + title = {inlabru}, + year = {2024}, + month = {}, + journal = {GitHub repository}, + url = {https://inlabru-org.github.io/inlabru}, + publisher = {GitHub} +} + +@Online{CORDIS:2024, + author = {{CORDIS}}, + title = {Global land ice, hydrology and ocean mass trends | GlobalMass}, + journal = {}, + volume = {}, + number = {}, + pages = {}, + year = {2024}, + month = {}, + doi = {10.3030/694188}, + url = {https://doi.org/10.3030/694188}, + urldate = {2024-05-17} +} + +@Article{Rue:2009, + author = {{Rue}, H., {Martino}, S. and {Chopin}, N.}, + title = {Approximate Bayesian inference for latent Gaussian models by using integrated nested Laplace approximations}, + journal = {Journal of the Royal Statistical Society: Series B (Statistical Methodology)}, + volume = {71}, + number = {2}, + pages = {319-392}, + year = {2009}, + month = {}, + doi = {10.1111/j.1467-9868.2008.00700.x}, + url = {https://doi.org/10.1111/j.1467-9868.2008.00700.x}, +} + +@Article{Woods:2022, + author = {{Woods}, C., {Hedges}, L., {Edsall}, C., {Brooks-Pollock}, E., {Parton-Fenton}, C., {McKinley}, T.J., {Keeling}, M.J. and {Danon}, L.}, + title = {MetaWards: A flexible metapopulation framework for modelling disease spread}, + journal = {Journal of Open Source Software}, + volume = {7}, + number = {70}, + pages = {3914}, + year = {2022}, + month = {}, + publisher = {The Open Journal} +} + +@Article{Yin:2023, + author = {{Yin}, X., {Aiken}, J.M. and {Bamber}, J.L.}, + title = {{4DModeller (fdmr): A Comprehensive R Package for Spatio-Temporal Modelling}}, + journal = {Spatial Data Science Symposium 2023 Short Paper Proceedings}, + volume = {}, + number = {}, + pages = {}, + year = {2023}, + month = {09}, + doi = {10.25436/E27C7F}, + url = {http://dx.doi.org/10.25436/E27C7F}, + publisher = {UC Santa Barbara: Center for Spatial Studies} +} + +@Article{Yin:2024, + author = {{Yin}, X., {Aiken}, J.M., {Harris}, R. and {Bamber}, J.L.}, + title = {{A Bayesian spatio-temporal model of COVID-19 spread in England}}, + journal = {Scientific Reports}, + volume = {14}, + number = {1}, + pages = {}, + year = {2024}, + month = {05}, + doi = {10.1038/s41598-024-60964-0}, + url = {https://doi.org/10.1038/s41598-024-60964-0}, + publisher = {Springer Nature} +} + +@Article{Yuan:2017, + author = {{Yuan}, Y., {Bachl}, F.E., {Lindgren}, F., {Borchers}, D.L., {Illian}, J.B., {Buckland}, S.T., {Rue}, H. and {Gerrodette}, T.}, + title = {Point process models for spatio-temporal distance sampling data from a large-scale survey of blue whales}, + journal = {Ann. Appl. Stat.}, + volume = {11}, + number = {4}, + pages = {2270--2297}, + year = {2017}, + month = {12}, + doi = {10.1214/17-AOAS1078}, + publisher = {The Institute of Mathematical Statistics}, + fjournal = {Annals of Applied Statistics} +} + +@Article{Ziegler:2022, + author = {{Ziegler}, Y., {Vishwakarma}, B.D., {Brady}, A., {Chuter}, S., {Royston}, S., {Westaway}, R.M. and {Bamber}, J.L.}, + title = {Can GPS and GRACE data be used to separate past and present-day surface loading in a data-driven approach?}, + journal = {Geophysical Journal International}, + volume = {232}, + number = {2}, + pages = {884-901}, + year = {2022}, + month = {09}, + doi = {10.1093/gji/ggac365}, + url = {https://doi.org/10.1093/gji/ggac365}, + issn = {0956-540X}, + eprint = {https://academic.oup.com/gji/article-pdf/232/2/884/46456258/ggac365.pdf} +} + diff --git a/man/paper.md b/man/paper.md new file mode 100644 index 00000000..f690e82a --- /dev/null +++ b/man/paper.md @@ -0,0 +1,69 @@ +--- +title: '4DModeller: a spatio-temporal modelling package' +tags: + - R + - spatio-temporal modelling + - Bayesian inference + - INLA + - inlabru +authors: + - name: John M. Aiken + orcid: 0000-0003-2258-3836 + affiliation: "1, 2" + - name: Gareth Jones + orcid: 0000-0003-4814-5156 + affiliation: 3 + - name: Xueqing Yin + orcid: 0000-0003-1103-8939 + affiliation: 3 + - name: Anrijs K. Abele + orcid: 0000-0002-6053-2629 + affiliation: 3 + - name: Christopher Woods + orcid: 0000-0001-6563-9903 + affiliation: 3 + - name: Richard M. Westaway + orcid: 0000-0001-6102-1540 + affiliation: 3 + - name: Jonathan L. Bamber + orcid: 0000-0002-2280-2819 + corresponding: true + affiliation: "3, 4" +affiliations: + - name: Expert Analytics, Norway + index: 1 + - name: University of Oslo, Norway + index: 2 + - name: University of Bristol, UK + index: 3 + - name: Technical University of Munich, Germany + index: 4 +date: 12 July 2024 +bibliography: paper.bib +--- + +# Summary + +4DModeller (`fdmr`) is a spatio-temporal modelling package capable of solving a wide range of large-scale space-time (i.e. four-dimensional) problems [@Yin:2023]. It is built around the inlabru framework which is a suite of R codes for fast efficient Bayesian inference [@Yuan:2017; @Bachl:2019]. The `fdmr` package expands the inlabru framework to include specific applications of latent variable modelling for 4-D geophysical problems (e.g. ocean heat content, the earth’s magnetic field, and global sea-level rise). `fdmr` also includes shiny apps that provide tools for data visualization, finite element mesh building and Bayesian hierarchical modelling based on an R package for Bayesian inference inlabru, along with model evaluation and assessment. These shiny apps are designed to make the complex INLA framework [@Rue:2009] and associated concepts accessible to a wider scientific community, including users who have little to no previous experience using R. The tools are designed with new users in mind by leveraging their expertise with their data sets while minimizing the need to develop extensive code in R [@Aiken:2018; @Vygotsky:1979]. They allow users to interact with their data first using the intuitive knowledge of the modelling process (input data, create mesh, calculate statistical model), then auto-generating code that the users can build on. + +This is extended through the Tutorial Driven Software Development practice [@Woods:2022]. This approach is designed to integrate subject matter experts into the code development cycle. It involves the identification of representative and instructive use cases, followed by tutorials that describe how the package could be used to solve them, and then finally code written and tested so that it behaved as described in the tutorials [@Woods:2022]. `fdmr` users have access to a set of domain-specific tutorials as vignettes in R Markdown notebooks; tutorials which are being added to as the user community grows. + +The current development of the `fdmr` package supports a wide range of spatially heterogeneous and areal data, including in-situ point observations and satellite data. Examples of the former are ground station air pollution observations, rain gauge data, ocean buoy measurements, or GPS ground displacements. For areal data, the domain mesh is fixed (of regular or irregular shape) and partitioned into areal units (e.g. triangles) with well-defined boundaries. Examples of areal data are attributes collected by post code, satellite imagery, spatially gridded products such as climate re-analysis or land use classification. + +Future package development efforts will focus on expanding its capabilities and broadening its applicability. Moreover, our team actively seeks interdisciplinary collaborations to further expand the modelling framework and tailor it to the specific needs of diverse disciplines. + +# Statement of Need + +The objective of the `fdmr` package is to provide researchers and practitioners with a straightforward and efficient solution for handling and analyzing different types of spatio-temporal data, enabling a comprehensive analysis of the underlying patterns, processes and trends. + +`fdmr` reduces the computational complexity for scientific users of handling high-resolution, high-dimensional spatio-temporal data. Spatio-temporal data analysis is crucial in many research fields. However, modelling large-scale spatio-temporal data presents challenges such as high computational demands, complex correlation structures and the separation of mixed sources. Additionally, it requires expert domain knowledge to interpret model results. 4DModeller has been developed to address these issues; a robust and user-friendly R package designed to model spatio-temporal data within a Bayesian framework (inlabru) but without requiring users to have an in-depth knowledge of Bayesian statistics. Users have access to different solvers through the inlabru framework, such as the Integrated Nested Laplace Approximation (INLA) solver for approximate Bayesian inference and the stochastic partial differential equations (SPDE) method for defining a spatial model. Furthermore, `fdmr` provides intuitive and interactive visual analytics tools that facilitate the exploration of data patterns across both space and time. The goal is that `fdmr` will allow such tools to be used for process modelling (via Gaussian and Poisson processes) and for tasks such as latent process source separation [e.g. @Ziegler:2022] which both complements – and distinguishes it – from the existing example applications of inlabru [@Lindgren:2024]. + +The work undertaken for 4DModeller extends the Bayesian hierarchical model developed as part of the ERC-funded GlobalMass grant (www.globalmass.eu) that advanced the use of space-time statistical inference to separate global sea level rise into its different sources [@CORDIS:2024]. The `fdmr` package has since been applied to several other use cases including COVID-19 transmission in England [@Yin:2024], streamflow in hydropower catchments in Norway, extreme rainfall in Nepal, estimating changes in the earth’s magnetic field and ocean heat content in the Pacific. + +# Code Availability + +The `fdmr` package and installation instructions are available from the 4DModeller GitHub repository () along with shiny apps and tutorials as vignettes in R Markdown notebooks. + +# Acknowledgements + +This work was supported by UK Research and Innovation grant EP/X022641/1. JLB was also supported by German Federal Ministry of Education and Research (BMBF) in the framework of the international future AI lab “AI4EO - Artificial Intelligence for Earth Observation: Reasoning, Uncertainties, Ethics, and Beyond” (grant number: 01DD20001). Code and tutorial development were aided by two hackathons (in Oslo in November 2023 and in Bristol in March 2024) which were only made possible by funding from the Research Council of Norway through the Svalbard Science Forum's funding program Svalbard Strategic Grant (project number: 344823). \ No newline at end of file From cde47c1a17e5bc4d42d2d8b6b217a8a0b92b3b21 Mon Sep 17 00:00:00 2001 From: mnky9800n Date: Fri, 12 Jul 2024 11:42:42 +0200 Subject: [PATCH 28/74] added workflows --- .github/workflows/draft-pdf.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .github/workflows/draft-pdf.yml diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml new file mode 100644 index 00000000..df95da39 --- /dev/null +++ b/.github/workflows/draft-pdf.yml @@ -0,0 +1,24 @@ +name: Draft PDF +on: [push] + +jobs: + paper: + runs-on: ubuntu-latest + name: Paper Draft + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Build draft PDF + uses: openjournals/openjournals-draft-action@master + with: + journal: joss + # This should be the path to the paper within your repo. + paper-path: /man/paper.md + - name: Upload + uses: actions/upload-artifact@v3 + with: + name: paper + # This is the output path where Pandoc will write the compiled + # PDF. Note, this should be the same directory as the input + # paper.md + path: /man/paper.pdf From 56c45b41ef0658741e5105424fb260466cf44cc3 Mon Sep 17 00:00:00 2001 From: mnky9800n Date: Fri, 12 Jul 2024 11:52:58 +0200 Subject: [PATCH 29/74] changed workflow --- .github/workflows/draft-pdf.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml index df95da39..da0d0acf 100644 --- a/.github/workflows/draft-pdf.yml +++ b/.github/workflows/draft-pdf.yml @@ -13,7 +13,7 @@ jobs: with: journal: joss # This should be the path to the paper within your repo. - paper-path: /man/paper.md + paper-path: fdmr/man/paper.md - name: Upload uses: actions/upload-artifact@v3 with: @@ -21,4 +21,4 @@ jobs: # This is the output path where Pandoc will write the compiled # PDF. Note, this should be the same directory as the input # paper.md - path: /man/paper.pdf + path: fdmr/man/paper.pdf From c3333745f7bfba9afb076d3c00dd744ea40931b4 Mon Sep 17 00:00:00 2001 From: mnky9800n Date: Mon, 15 Jul 2024 10:42:48 +0200 Subject: [PATCH 30/74] maybe / will work --- .github/workflows/draft-pdf.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml index da0d0acf..a638ef74 100644 --- a/.github/workflows/draft-pdf.yml +++ b/.github/workflows/draft-pdf.yml @@ -13,7 +13,7 @@ jobs: with: journal: joss # This should be the path to the paper within your repo. - paper-path: fdmr/man/paper.md + paper-path: /fdmr/man/paper.md - name: Upload uses: actions/upload-artifact@v3 with: @@ -21,4 +21,4 @@ jobs: # This is the output path where Pandoc will write the compiled # PDF. Note, this should be the same directory as the input # paper.md - path: fdmr/man/paper.pdf + path: /fdmr/man/paper.pdf From 55891b74d27e35859219087654f7c0d1cb42b3ad Mon Sep 17 00:00:00 2001 From: mnky9800n Date: Mon, 15 Jul 2024 10:54:09 +0200 Subject: [PATCH 31/74] added branch --- .github/workflows/draft-pdf.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml index a638ef74..8246c67f 100644 --- a/.github/workflows/draft-pdf.yml +++ b/.github/workflows/draft-pdf.yml @@ -1,5 +1,6 @@ name: Draft PDF on: [push] +branches: JOSS jobs: paper: @@ -13,7 +14,7 @@ jobs: with: journal: joss # This should be the path to the paper within your repo. - paper-path: /fdmr/man/paper.md + paper-path: fdmr/man/paper.md - name: Upload uses: actions/upload-artifact@v3 with: @@ -21,4 +22,4 @@ jobs: # This is the output path where Pandoc will write the compiled # PDF. Note, this should be the same directory as the input # paper.md - path: /fdmr/man/paper.pdf + path: fdmr/man/paper.pdf From cce83d32add273653fbe9384204f751dec8aeec1 Mon Sep 17 00:00:00 2001 From: mnky9800n Date: Mon, 15 Jul 2024 10:56:46 +0200 Subject: [PATCH 32/74] maybe workflow works --- .github/workflows/draft-pdf.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml index 8246c67f..31a9279d 100644 --- a/.github/workflows/draft-pdf.yml +++ b/.github/workflows/draft-pdf.yml @@ -1,6 +1,9 @@ name: Draft PDF -on: [push] -branches: JOSS +on: + workflow_dispatch: {} + push: + branches: + - JOSS jobs: paper: From 393760618282600dc652f3a0cc9ad7c1c3fd4ed6 Mon Sep 17 00:00:00 2001 From: mnky9800n Date: Mon, 15 Jul 2024 10:58:31 +0200 Subject: [PATCH 33/74] no fdmr --- .github/workflows/draft-pdf.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml index 31a9279d..83561c1a 100644 --- a/.github/workflows/draft-pdf.yml +++ b/.github/workflows/draft-pdf.yml @@ -17,7 +17,7 @@ jobs: with: journal: joss # This should be the path to the paper within your repo. - paper-path: fdmr/man/paper.md + paper-path: man/paper.md - name: Upload uses: actions/upload-artifact@v3 with: @@ -25,4 +25,4 @@ jobs: # This is the output path where Pandoc will write the compiled # PDF. Note, this should be the same directory as the input # paper.md - path: fdmr/man/paper.pdf + path: man/paper.pdf From a6c8d0022494a71707eb16c10b00b3ad88e7dcd3 Mon Sep 17 00:00:00 2001 From: John Aiken Date: Mon, 15 Jul 2024 11:46:16 +0200 Subject: [PATCH 34/74] updated errors in draft --- man/paper.bib | 60 ++++++++++++++++++++++++++++++++++++--------------- man/paper.md | 8 ++++--- 2 files changed, 48 insertions(+), 20 deletions(-) diff --git a/man/paper.bib b/man/paper.bib index 958f9de6..355dcbc1 100644 --- a/man/paper.bib +++ b/man/paper.bib @@ -1,5 +1,20 @@ +@article{Aiken:2018, + author={{Aiken}, J.M. and {Aiken}, C. and {Cotton}, F.}, + title = "{A Python Library for Teaching Computation to Seismology Students}", + journal = {Seismological Research Letters}, + volume = {89}, + number = {3}, + pages = {1165-1171}, + year = {2018}, + month = {03}, + issn = {0895-0695}, + doi = {10.1785/0220170246}, + url = {https://doi.org/10.1785/0220170246}, + eprint = {https://pubs.geoscienceworld.org/ssa/srl/article-pdf/89/3/1165/4127200/srl-2017246.1.pdf}, +} + @Article{Bachl:2019, - author = {{Bachl}, F.E., {Lindgren}, F., {Borchers}, D.L. and {Illian}, J.B}, + author = {{Bachl}, F.E. and {Lindgren}, F. and {Borchers}, D.L. and {Illian}, J.B}, title = {{inlabru}: an {R} package for {Bayesian} spatial modelling from ecological survey data}, journal = {Methods in Ecology and Evolution}, volume = {10}, @@ -11,16 +26,6 @@ @Article{Bachl:2019 publisher = {British Ecological Society} } -@Misc{Lindgren:2024, - author = {{Lindgren}, F., {Bachl}, F.E., {Borchers}, D.L., {Simpson}, D., {Scott-Howard}, L., {Seaton}, A., {Sue}, M.H., {Roudier}, P., {Meehan}, T., {Peddinenikalva}, N. and {Perepolkin}, D.}, - title = {inlabru}, - year = {2024}, - month = {}, - journal = {GitHub repository}, - url = {https://inlabru-org.github.io/inlabru}, - publisher = {GitHub} -} - @Online{CORDIS:2024, author = {{CORDIS}}, title = {Global land ice, hydrology and ocean mass trends | GlobalMass}, @@ -35,8 +40,18 @@ @Online{CORDIS:2024 urldate = {2024-05-17} } +@Misc{Lindgren:2024, + author = {{Lindgren}, F. and {Bachl}, F.E. and {Borchers}, D.L. and {Simpson}, D. and {Scott-Howard}, L. and {Seaton}, A. and {Sue}, M.H. and {Roudier}, P. and {Meehan}, T. and {Peddinenikalva}, N. and {Perepolkin}, D.}, + title = {inlabru}, + year = {2024}, + month = {}, + journal = {GitHub repository}, + url = {https://inlabru-org.github.io/inlabru}, + publisher = {GitHub} +} + @Article{Rue:2009, - author = {{Rue}, H., {Martino}, S. and {Chopin}, N.}, + author = {{Rue}, H. and {Martino}, S. and {Chopin}, N.}, title = {Approximate Bayesian inference for latent Gaussian models by using integrated nested Laplace approximations}, journal = {Journal of the Royal Statistical Society: Series B (Statistical Methodology)}, volume = {71}, @@ -48,8 +63,17 @@ @Article{Rue:2009 url = {https://doi.org/10.1111/j.1467-9868.2008.00700.x}, } +@book{Vygotsky:1978, + author = {{Vygotsky}, L.S.}, + title = {Mind in Society: Development of Higher Psychological Processes}, + year = {1978} + Isbn = {9780674576285}, + url = {http://www.jstor.org/stable/j.ctvjf9vz4}, + publisher = {Harvard University Press}, +} + @Article{Woods:2022, - author = {{Woods}, C., {Hedges}, L., {Edsall}, C., {Brooks-Pollock}, E., {Parton-Fenton}, C., {McKinley}, T.J., {Keeling}, M.J. and {Danon}, L.}, + author = {{Woods}, C. and {Hedges}, L. and {Edsall}, C. and {Brooks-Pollock}, E. and {Parton-Fenton}, C. and {McKinley}, T.J. and {Keeling}, M.J. and {Danon}, L.}, title = {MetaWards: A flexible metapopulation framework for modelling disease spread}, journal = {Journal of Open Source Software}, volume = {7}, @@ -57,11 +81,13 @@ @Article{Woods:2022 pages = {3914}, year = {2022}, month = {}, + doi = {10.21105/joss.03914}, + url = {https://doi.org/10.21105/joss.03914}, publisher = {The Open Journal} } @Article{Yin:2023, - author = {{Yin}, X., {Aiken}, J.M. and {Bamber}, J.L.}, + author = {{Yin}, X. and {Aiken}, J.M. and {Bamber}, J.L.}, title = {{4DModeller (fdmr): A Comprehensive R Package for Spatio-Temporal Modelling}}, journal = {Spatial Data Science Symposium 2023 Short Paper Proceedings}, volume = {}, @@ -75,7 +101,7 @@ @Article{Yin:2023 } @Article{Yin:2024, - author = {{Yin}, X., {Aiken}, J.M., {Harris}, R. and {Bamber}, J.L.}, + author = {{Yin}, X. and {Aiken}, J.M. and {Harris}, R. and {Bamber}, J.L.}, title = {{A Bayesian spatio-temporal model of COVID-19 spread in England}}, journal = {Scientific Reports}, volume = {14}, @@ -89,7 +115,7 @@ @Article{Yin:2024 } @Article{Yuan:2017, - author = {{Yuan}, Y., {Bachl}, F.E., {Lindgren}, F., {Borchers}, D.L., {Illian}, J.B., {Buckland}, S.T., {Rue}, H. and {Gerrodette}, T.}, + author = {{Yuan}, Y. and {Bachl}, F.E. and {Lindgren}, F. and {Borchers}, D.L. and {Illian}, J.B. and {Buckland}, S.T. and {Rue}, H. and {Gerrodette}, T.}, title = {Point process models for spatio-temporal distance sampling data from a large-scale survey of blue whales}, journal = {Ann. Appl. Stat.}, volume = {11}, @@ -103,7 +129,7 @@ @Article{Yuan:2017 } @Article{Ziegler:2022, - author = {{Ziegler}, Y., {Vishwakarma}, B.D., {Brady}, A., {Chuter}, S., {Royston}, S., {Westaway}, R.M. and {Bamber}, J.L.}, + author = {{Ziegler}, Y. and {Vishwakarma}, B.D. and {Brady}, A. and {Chuter}, S. and {Royston}, S. and {Westaway}, R.M. and {Bamber}, J.L.}, title = {Can GPS and GRACE data be used to separate past and present-day surface loading in a data-driven approach?}, journal = {Geophysical Journal International}, volume = {232}, diff --git a/man/paper.md b/man/paper.md index f690e82a..744fb778 100644 --- a/man/paper.md +++ b/man/paper.md @@ -44,7 +44,7 @@ bibliography: paper.bib # Summary -4DModeller (`fdmr`) is a spatio-temporal modelling package capable of solving a wide range of large-scale space-time (i.e. four-dimensional) problems [@Yin:2023]. It is built around the inlabru framework which is a suite of R codes for fast efficient Bayesian inference [@Yuan:2017; @Bachl:2019]. The `fdmr` package expands the inlabru framework to include specific applications of latent variable modelling for 4-D geophysical problems (e.g. ocean heat content, the earth’s magnetic field, and global sea-level rise). `fdmr` also includes shiny apps that provide tools for data visualization, finite element mesh building and Bayesian hierarchical modelling based on an R package for Bayesian inference inlabru, along with model evaluation and assessment. These shiny apps are designed to make the complex INLA framework [@Rue:2009] and associated concepts accessible to a wider scientific community, including users who have little to no previous experience using R. The tools are designed with new users in mind by leveraging their expertise with their data sets while minimizing the need to develop extensive code in R [@Aiken:2018; @Vygotsky:1979]. They allow users to interact with their data first using the intuitive knowledge of the modelling process (input data, create mesh, calculate statistical model), then auto-generating code that the users can build on. +4DModeller (`fdmr`) is a spatio-temporal modelling package capable of solving a wide range of large-scale space-time (i.e. four-dimensional) problems [@Yin:2023]. It is built around the inlabru framework which is a suite of R codes for fast efficient Bayesian inference [@Yuan:2017; @Bachl:2019]. The `fdmr` package expands the inlabru framework to include specific applications of latent variable modelling for 4-D geophysical problems (e.g. ocean heat content, the Earth’s magnetic field, and global sea-level rise). `fdmr` also includes shiny apps that provide tools for data visualization, finite element mesh building and Bayesian hierarchical modelling based on an R package for Bayesian inference, inlabru, along with model evaluation and assessment. These shiny apps are designed to make the complex INLA framework [@Rue:2009] and associated concepts accessible to a wider scientific community, including users who have little to no previous experience using R. The tools are designed with new users in mind by leveraging their expertise with their data sets while minimizing the need to develop extensive code in R [@Aiken:2018; @Vygotsky:1979]. They allow users to interact with their data first using the intuitive knowledge of the modelling process (input data, create mesh, calculate statistical model), then auto-generating code that the users can build on. This is extended through the Tutorial Driven Software Development practice [@Woods:2022]. This approach is designed to integrate subject matter experts into the code development cycle. It involves the identification of representative and instructive use cases, followed by tutorials that describe how the package could be used to solve them, and then finally code written and tested so that it behaved as described in the tutorials [@Woods:2022]. `fdmr` users have access to a set of domain-specific tutorials as vignettes in R Markdown notebooks; tutorials which are being added to as the user community grows. @@ -58,7 +58,7 @@ The objective of the `fdmr` package is to provide researchers and practitioners `fdmr` reduces the computational complexity for scientific users of handling high-resolution, high-dimensional spatio-temporal data. Spatio-temporal data analysis is crucial in many research fields. However, modelling large-scale spatio-temporal data presents challenges such as high computational demands, complex correlation structures and the separation of mixed sources. Additionally, it requires expert domain knowledge to interpret model results. 4DModeller has been developed to address these issues; a robust and user-friendly R package designed to model spatio-temporal data within a Bayesian framework (inlabru) but without requiring users to have an in-depth knowledge of Bayesian statistics. Users have access to different solvers through the inlabru framework, such as the Integrated Nested Laplace Approximation (INLA) solver for approximate Bayesian inference and the stochastic partial differential equations (SPDE) method for defining a spatial model. Furthermore, `fdmr` provides intuitive and interactive visual analytics tools that facilitate the exploration of data patterns across both space and time. The goal is that `fdmr` will allow such tools to be used for process modelling (via Gaussian and Poisson processes) and for tasks such as latent process source separation [e.g. @Ziegler:2022] which both complements – and distinguishes it – from the existing example applications of inlabru [@Lindgren:2024]. -The work undertaken for 4DModeller extends the Bayesian hierarchical model developed as part of the ERC-funded GlobalMass grant (www.globalmass.eu) that advanced the use of space-time statistical inference to separate global sea level rise into its different sources [@CORDIS:2024]. The `fdmr` package has since been applied to several other use cases including COVID-19 transmission in England [@Yin:2024], streamflow in hydropower catchments in Norway, extreme rainfall in Nepal, estimating changes in the earth’s magnetic field and ocean heat content in the Pacific. +The work undertaken for 4DModeller extends the Bayesian hierarchical model developed as part of the ERC-funded GlobalMass grant (www.globalmass.eu) that advanced the use of space-time statistical inference to separate global sea level rise into its different sources [@CORDIS:2024]. The `fdmr` package has since been applied to several other use cases including COVID-19 transmission in England [@Yin:2024], streamflow in hydropower catchments in Norway, extreme rainfall in Nepal, changes in the Earth’s magnetic field and ocean heat content in the Pacific. # Code Availability @@ -66,4 +66,6 @@ The `fdmr` package and installation instructions are available from the 4DModell # Acknowledgements -This work was supported by UK Research and Innovation grant EP/X022641/1. JLB was also supported by German Federal Ministry of Education and Research (BMBF) in the framework of the international future AI lab “AI4EO - Artificial Intelligence for Earth Observation: Reasoning, Uncertainties, Ethics, and Beyond” (grant number: 01DD20001). Code and tutorial development were aided by two hackathons (in Oslo in November 2023 and in Bristol in March 2024) which were only made possible by funding from the Research Council of Norway through the Svalbard Science Forum's funding program Svalbard Strategic Grant (project number: 344823). \ No newline at end of file +This work was supported by UK Research and Innovation grant EP/X022641/1. JLB was also supported by German Federal Ministry of Education and Research (BMBF) in the framework of the international future AI lab “AI4EO - Artificial Intelligence for Earth Observation: Reasoning, Uncertainties, Ethics, and Beyond” (grant number: 01DD20001). Code and tutorial development were aided by two hackathons (in Oslo in November 2023 and in Bristol in March 2024) which were only made possible by funding from the Research Council of Norway through the Svalbard Science Forum's funding program Svalbard Strategic Grant (project number: 344823). + +# References \ No newline at end of file From 0934eedf8aa28cb4e6cdb5c324ed980190f93d37 Mon Sep 17 00:00:00 2001 From: John Aiken Date: Mon, 15 Jul 2024 13:25:59 +0200 Subject: [PATCH 35/74] fixed error in bib file --- man/paper.bib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/paper.bib b/man/paper.bib index 355dcbc1..502e6b1b 100644 --- a/man/paper.bib +++ b/man/paper.bib @@ -67,7 +67,7 @@ @book{Vygotsky:1978 author = {{Vygotsky}, L.S.}, title = {Mind in Society: Development of Higher Psychological Processes}, year = {1978} - Isbn = {9780674576285}, + isbn = {9780674576285}, url = {http://www.jstor.org/stable/j.ctvjf9vz4}, publisher = {Harvard University Press}, } From f2f3735d37ee61dc7165c929f28151407263e358 Mon Sep 17 00:00:00 2001 From: John Aiken Date: Mon, 15 Jul 2024 13:42:47 +0200 Subject: [PATCH 36/74] fixed more errors in bibfile --- man/paper.bib | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/man/paper.bib b/man/paper.bib index 502e6b1b..52c74a6f 100644 --- a/man/paper.bib +++ b/man/paper.bib @@ -10,7 +10,7 @@ @article{Aiken:2018 issn = {0895-0695}, doi = {10.1785/0220170246}, url = {https://doi.org/10.1785/0220170246}, - eprint = {https://pubs.geoscienceworld.org/ssa/srl/article-pdf/89/3/1165/4127200/srl-2017246.1.pdf}, + eprint = {https://pubs.geoscienceworld.org/ssa/srl/article-pdf/89/3/1165/4127200/srl-2017246.1.pdf} } @Article{Bachl:2019, @@ -66,10 +66,10 @@ @Article{Rue:2009 @book{Vygotsky:1978, author = {{Vygotsky}, L.S.}, title = {Mind in Society: Development of Higher Psychological Processes}, - year = {1978} + year = {1978}, isbn = {9780674576285}, url = {http://www.jstor.org/stable/j.ctvjf9vz4}, - publisher = {Harvard University Press}, + publisher = {Harvard University Press} } @Article{Woods:2022, From 5d7419183b4a375b7f62ff14ee72092fd0d54b0e Mon Sep 17 00:00:00 2001 From: John Aiken Date: Mon, 15 Jul 2024 14:11:24 +0200 Subject: [PATCH 37/74] fixed reference --- man/paper.bib | 1 + man/paper.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/man/paper.bib b/man/paper.bib index 52c74a6f..29c77e41 100644 --- a/man/paper.bib +++ b/man/paper.bib @@ -69,6 +69,7 @@ @book{Vygotsky:1978 year = {1978}, isbn = {9780674576285}, url = {http://www.jstor.org/stable/j.ctvjf9vz4}, + doi = {10.2307/j.ctvjf9vz4}, publisher = {Harvard University Press} } diff --git a/man/paper.md b/man/paper.md index 744fb778..7e3cbaae 100644 --- a/man/paper.md +++ b/man/paper.md @@ -44,7 +44,7 @@ bibliography: paper.bib # Summary -4DModeller (`fdmr`) is a spatio-temporal modelling package capable of solving a wide range of large-scale space-time (i.e. four-dimensional) problems [@Yin:2023]. It is built around the inlabru framework which is a suite of R codes for fast efficient Bayesian inference [@Yuan:2017; @Bachl:2019]. The `fdmr` package expands the inlabru framework to include specific applications of latent variable modelling for 4-D geophysical problems (e.g. ocean heat content, the Earth’s magnetic field, and global sea-level rise). `fdmr` also includes shiny apps that provide tools for data visualization, finite element mesh building and Bayesian hierarchical modelling based on an R package for Bayesian inference, inlabru, along with model evaluation and assessment. These shiny apps are designed to make the complex INLA framework [@Rue:2009] and associated concepts accessible to a wider scientific community, including users who have little to no previous experience using R. The tools are designed with new users in mind by leveraging their expertise with their data sets while minimizing the need to develop extensive code in R [@Aiken:2018; @Vygotsky:1979]. They allow users to interact with their data first using the intuitive knowledge of the modelling process (input data, create mesh, calculate statistical model), then auto-generating code that the users can build on. +4DModeller (`fdmr`) is a spatio-temporal modelling package capable of solving a wide range of large-scale space-time (i.e. four-dimensional) problems [@Yin:2023]. It is built around the inlabru framework which is a suite of R codes for fast efficient Bayesian inference [@Yuan:2017; @Bachl:2019]. The `fdmr` package expands the inlabru framework to include specific applications of latent variable modelling for 4-D geophysical problems (e.g. ocean heat content, the Earth’s magnetic field, and global sea-level rise). `fdmr` also includes shiny apps that provide tools for data visualization, finite element mesh building and Bayesian hierarchical modelling based on an R package for Bayesian inference, inlabru, along with model evaluation and assessment. These shiny apps are designed to make the complex INLA framework [@Rue:2009] and associated concepts accessible to a wider scientific community, including users who have little to no previous experience using R. The tools are designed with new users in mind by leveraging their expertise with their data sets while minimizing the need to develop extensive code in R [@Aiken:2018; @Vygotsky:1978]. They allow users to interact with their data first using the intuitive knowledge of the modelling process (input data, create mesh, calculate statistical model), then auto-generating code that the users can build on. This is extended through the Tutorial Driven Software Development practice [@Woods:2022]. This approach is designed to integrate subject matter experts into the code development cycle. It involves the identification of representative and instructive use cases, followed by tutorials that describe how the package could be used to solve them, and then finally code written and tested so that it behaved as described in the tutorials [@Woods:2022]. `fdmr` users have access to a set of domain-specific tutorials as vignettes in R Markdown notebooks; tutorials which are being added to as the user community grows. From 30c557155337ccb81babdb74cd38429a94f6e4c0 Mon Sep 17 00:00:00 2001 From: rwestaway Date: Wed, 24 Jul 2024 15:17:14 +0100 Subject: [PATCH 38/74] Addition of new reference (Lindgren et al., 2024 arXiv) --- man/paper.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/man/paper.md b/man/paper.md index 7e3cbaae..a4031d8e 100644 --- a/man/paper.md +++ b/man/paper.md @@ -44,7 +44,7 @@ bibliography: paper.bib # Summary -4DModeller (`fdmr`) is a spatio-temporal modelling package capable of solving a wide range of large-scale space-time (i.e. four-dimensional) problems [@Yin:2023]. It is built around the inlabru framework which is a suite of R codes for fast efficient Bayesian inference [@Yuan:2017; @Bachl:2019]. The `fdmr` package expands the inlabru framework to include specific applications of latent variable modelling for 4-D geophysical problems (e.g. ocean heat content, the Earth’s magnetic field, and global sea-level rise). `fdmr` also includes shiny apps that provide tools for data visualization, finite element mesh building and Bayesian hierarchical modelling based on an R package for Bayesian inference, inlabru, along with model evaluation and assessment. These shiny apps are designed to make the complex INLA framework [@Rue:2009] and associated concepts accessible to a wider scientific community, including users who have little to no previous experience using R. The tools are designed with new users in mind by leveraging their expertise with their data sets while minimizing the need to develop extensive code in R [@Aiken:2018; @Vygotsky:1978]. They allow users to interact with their data first using the intuitive knowledge of the modelling process (input data, create mesh, calculate statistical model), then auto-generating code that the users can build on. +4DModeller (`fdmr`) is a spatio-temporal modelling package capable of solving a wide range of large-scale space-time (i.e. four-dimensional) problems [@Yin:2023]. It is built around the inlabru framework which is a suite of R codes for fast efficient Bayesian inference [@Yuan:2017; @Bachl:2019;@Lindgren:2024a]. The `fdmr` package expands the inlabru framework to include specific applications of latent variable modelling for 4-D geophysical problems (e.g. ocean heat content, the Earth’s magnetic field, and global sea-level rise). `fdmr` also includes shiny apps that provide tools for data visualization, finite element mesh building and Bayesian hierarchical modelling based on an R package for Bayesian inference, inlabru, along with model evaluation and assessment. These shiny apps are designed to make the complex INLA framework [@Rue:2009] and associated concepts accessible to a wider scientific community, including users who have little to no previous experience using R. The tools are designed with new users in mind by leveraging their expertise with their data sets while minimizing the need to develop extensive code in R [@Aiken:2018; @Vygotsky:1978]. They allow users to interact with their data first using the intuitive knowledge of the modelling process (input data, create mesh, calculate statistical model), then auto-generating code that the users can build on. This is extended through the Tutorial Driven Software Development practice [@Woods:2022]. This approach is designed to integrate subject matter experts into the code development cycle. It involves the identification of representative and instructive use cases, followed by tutorials that describe how the package could be used to solve them, and then finally code written and tested so that it behaved as described in the tutorials [@Woods:2022]. `fdmr` users have access to a set of domain-specific tutorials as vignettes in R Markdown notebooks; tutorials which are being added to as the user community grows. @@ -56,7 +56,7 @@ Future package development efforts will focus on expanding its capabilities and The objective of the `fdmr` package is to provide researchers and practitioners with a straightforward and efficient solution for handling and analyzing different types of spatio-temporal data, enabling a comprehensive analysis of the underlying patterns, processes and trends. -`fdmr` reduces the computational complexity for scientific users of handling high-resolution, high-dimensional spatio-temporal data. Spatio-temporal data analysis is crucial in many research fields. However, modelling large-scale spatio-temporal data presents challenges such as high computational demands, complex correlation structures and the separation of mixed sources. Additionally, it requires expert domain knowledge to interpret model results. 4DModeller has been developed to address these issues; a robust and user-friendly R package designed to model spatio-temporal data within a Bayesian framework (inlabru) but without requiring users to have an in-depth knowledge of Bayesian statistics. Users have access to different solvers through the inlabru framework, such as the Integrated Nested Laplace Approximation (INLA) solver for approximate Bayesian inference and the stochastic partial differential equations (SPDE) method for defining a spatial model. Furthermore, `fdmr` provides intuitive and interactive visual analytics tools that facilitate the exploration of data patterns across both space and time. The goal is that `fdmr` will allow such tools to be used for process modelling (via Gaussian and Poisson processes) and for tasks such as latent process source separation [e.g. @Ziegler:2022] which both complements – and distinguishes it – from the existing example applications of inlabru [@Lindgren:2024]. +`fdmr` reduces the computational complexity for scientific users of handling high-resolution, high-dimensional spatio-temporal data. Spatio-temporal data analysis is crucial in many research fields. However, modelling large-scale spatio-temporal data presents challenges such as high computational demands, complex correlation structures and the separation of mixed sources. Additionally, it requires expert domain knowledge to interpret model results. 4DModeller has been developed to address these issues; a robust and user-friendly R package designed to model spatio-temporal data within a Bayesian framework (inlabru) but without requiring users to have an in-depth knowledge of Bayesian statistics. Users have access to different solvers through the inlabru framework, such as the Integrated Nested Laplace Approximation (INLA) solver for approximate Bayesian inference and the stochastic partial differential equations (SPDE) method for defining a spatial model. Furthermore, `fdmr` provides intuitive and interactive visual analytics tools that facilitate the exploration of data patterns across both space and time. The goal is that `fdmr` will allow such tools to be used for process modelling (via Gaussian and Poisson processes) and for tasks such as latent process source separation [e.g. @Ziegler:2022] which both complements – and distinguishes it – from the existing example applications of inlabru [@Lindgren:2024b]. The work undertaken for 4DModeller extends the Bayesian hierarchical model developed as part of the ERC-funded GlobalMass grant (www.globalmass.eu) that advanced the use of space-time statistical inference to separate global sea level rise into its different sources [@CORDIS:2024]. The `fdmr` package has since been applied to several other use cases including COVID-19 transmission in England [@Yin:2024], streamflow in hydropower catchments in Norway, extreme rainfall in Nepal, changes in the Earth’s magnetic field and ocean heat content in the Pacific. @@ -68,4 +68,4 @@ The `fdmr` package and installation instructions are available from the 4DModell This work was supported by UK Research and Innovation grant EP/X022641/1. JLB was also supported by German Federal Ministry of Education and Research (BMBF) in the framework of the international future AI lab “AI4EO - Artificial Intelligence for Earth Observation: Reasoning, Uncertainties, Ethics, and Beyond” (grant number: 01DD20001). Code and tutorial development were aided by two hackathons (in Oslo in November 2023 and in Bristol in March 2024) which were only made possible by funding from the Research Council of Norway through the Svalbard Science Forum's funding program Svalbard Strategic Grant (project number: 344823). -# References \ No newline at end of file +# References From 70904168ac39ae0fe1adfee8b575b96837ddaa7f Mon Sep 17 00:00:00 2001 From: rwestaway Date: Wed, 24 Jul 2024 15:22:27 +0100 Subject: [PATCH 39/74] Addition of new reference (Lindgren et al., 2024 arXiv) --- man/paper.bib | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/man/paper.bib b/man/paper.bib index 29c77e41..29f66225 100644 --- a/man/paper.bib +++ b/man/paper.bib @@ -40,10 +40,20 @@ @Online{CORDIS:2024 urldate = {2024-05-17} } -@Misc{Lindgren:2024, - author = {{Lindgren}, F. and {Bachl}, F.E. and {Borchers}, D.L. and {Simpson}, D. and {Scott-Howard}, L. and {Seaton}, A. and {Sue}, M.H. and {Roudier}, P. and {Meehan}, T. and {Peddinenikalva}, N. and {Perepolkin}, D.}, +@Misc{Lindgren:2024a, + author={{Lindgren}, F. and {Bachl}, F.E. and {Illian}, J. and {Suen}, M.H. and {Rue}, H. and {Seaton}, A.E.}, + title={inlabru: software for fitting latent Gaussian models with non-linear predictors}, + year={2024a}, + eprint={2407.00791}, + archivePrefix={arXiv}, + primaryClass={stat.ME}, + url={https://arxiv.org/abs/2407.00791}, +} + +@Misc{Lindgren:2024b, + author = {{Lindgren}, F. and {Bachl}, F.E. and {Borchers}, D.L. and {Simpson}, D. and {Scott-Howard}, L. and {Seaton}, A. and {Suen}, M.H. and {Roudier}, P. and {Meehan}, T. and {Peddinenikalva}, N. and {Perepolkin}, D.}, title = {inlabru}, - year = {2024}, + year = {2024b}, month = {}, journal = {GitHub repository}, url = {https://inlabru-org.github.io/inlabru}, From 35f148a1bc6d2025574c08d566b28a582fe05cbf Mon Sep 17 00:00:00 2001 From: John Aiken Date: Fri, 26 Jul 2024 12:18:22 +0200 Subject: [PATCH 40/74] Revert "Addition of new reference (Lindgren et al., 2024 arXiv)" --- .github/workflows/draft-pdf.yml | 28 ------ man/paper.bib | 156 -------------------------------- man/paper.md | 71 --------------- 3 files changed, 255 deletions(-) delete mode 100644 .github/workflows/draft-pdf.yml delete mode 100644 man/paper.bib delete mode 100644 man/paper.md diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml deleted file mode 100644 index 83561c1a..00000000 --- a/.github/workflows/draft-pdf.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: Draft PDF -on: - workflow_dispatch: {} - push: - branches: - - JOSS - -jobs: - paper: - runs-on: ubuntu-latest - name: Paper Draft - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Build draft PDF - uses: openjournals/openjournals-draft-action@master - with: - journal: joss - # This should be the path to the paper within your repo. - paper-path: man/paper.md - - name: Upload - uses: actions/upload-artifact@v3 - with: - name: paper - # This is the output path where Pandoc will write the compiled - # PDF. Note, this should be the same directory as the input - # paper.md - path: man/paper.pdf diff --git a/man/paper.bib b/man/paper.bib deleted file mode 100644 index 29f66225..00000000 --- a/man/paper.bib +++ /dev/null @@ -1,156 +0,0 @@ -@article{Aiken:2018, - author={{Aiken}, J.M. and {Aiken}, C. and {Cotton}, F.}, - title = "{A Python Library for Teaching Computation to Seismology Students}", - journal = {Seismological Research Letters}, - volume = {89}, - number = {3}, - pages = {1165-1171}, - year = {2018}, - month = {03}, - issn = {0895-0695}, - doi = {10.1785/0220170246}, - url = {https://doi.org/10.1785/0220170246}, - eprint = {https://pubs.geoscienceworld.org/ssa/srl/article-pdf/89/3/1165/4127200/srl-2017246.1.pdf} -} - -@Article{Bachl:2019, - author = {{Bachl}, F.E. and {Lindgren}, F. and {Borchers}, D.L. and {Illian}, J.B}, - title = {{inlabru}: an {R} package for {Bayesian} spatial modelling from ecological survey data}, - journal = {Methods in Ecology and Evolution}, - volume = {10}, - number = {}, - pages = {760--766}, - year = {2019}, - month = {}, - doi = {10.1111/2041-210X.13168}, - publisher = {British Ecological Society} -} - -@Online{CORDIS:2024, - author = {{CORDIS}}, - title = {Global land ice, hydrology and ocean mass trends | GlobalMass}, - journal = {}, - volume = {}, - number = {}, - pages = {}, - year = {2024}, - month = {}, - doi = {10.3030/694188}, - url = {https://doi.org/10.3030/694188}, - urldate = {2024-05-17} -} - -@Misc{Lindgren:2024a, - author={{Lindgren}, F. and {Bachl}, F.E. and {Illian}, J. and {Suen}, M.H. and {Rue}, H. and {Seaton}, A.E.}, - title={inlabru: software for fitting latent Gaussian models with non-linear predictors}, - year={2024a}, - eprint={2407.00791}, - archivePrefix={arXiv}, - primaryClass={stat.ME}, - url={https://arxiv.org/abs/2407.00791}, -} - -@Misc{Lindgren:2024b, - author = {{Lindgren}, F. and {Bachl}, F.E. and {Borchers}, D.L. and {Simpson}, D. and {Scott-Howard}, L. and {Seaton}, A. and {Suen}, M.H. and {Roudier}, P. and {Meehan}, T. and {Peddinenikalva}, N. and {Perepolkin}, D.}, - title = {inlabru}, - year = {2024b}, - month = {}, - journal = {GitHub repository}, - url = {https://inlabru-org.github.io/inlabru}, - publisher = {GitHub} -} - -@Article{Rue:2009, - author = {{Rue}, H. and {Martino}, S. and {Chopin}, N.}, - title = {Approximate Bayesian inference for latent Gaussian models by using integrated nested Laplace approximations}, - journal = {Journal of the Royal Statistical Society: Series B (Statistical Methodology)}, - volume = {71}, - number = {2}, - pages = {319-392}, - year = {2009}, - month = {}, - doi = {10.1111/j.1467-9868.2008.00700.x}, - url = {https://doi.org/10.1111/j.1467-9868.2008.00700.x}, -} - -@book{Vygotsky:1978, - author = {{Vygotsky}, L.S.}, - title = {Mind in Society: Development of Higher Psychological Processes}, - year = {1978}, - isbn = {9780674576285}, - url = {http://www.jstor.org/stable/j.ctvjf9vz4}, - doi = {10.2307/j.ctvjf9vz4}, - publisher = {Harvard University Press} -} - -@Article{Woods:2022, - author = {{Woods}, C. and {Hedges}, L. and {Edsall}, C. and {Brooks-Pollock}, E. and {Parton-Fenton}, C. and {McKinley}, T.J. and {Keeling}, M.J. and {Danon}, L.}, - title = {MetaWards: A flexible metapopulation framework for modelling disease spread}, - journal = {Journal of Open Source Software}, - volume = {7}, - number = {70}, - pages = {3914}, - year = {2022}, - month = {}, - doi = {10.21105/joss.03914}, - url = {https://doi.org/10.21105/joss.03914}, - publisher = {The Open Journal} -} - -@Article{Yin:2023, - author = {{Yin}, X. and {Aiken}, J.M. and {Bamber}, J.L.}, - title = {{4DModeller (fdmr): A Comprehensive R Package for Spatio-Temporal Modelling}}, - journal = {Spatial Data Science Symposium 2023 Short Paper Proceedings}, - volume = {}, - number = {}, - pages = {}, - year = {2023}, - month = {09}, - doi = {10.25436/E27C7F}, - url = {http://dx.doi.org/10.25436/E27C7F}, - publisher = {UC Santa Barbara: Center for Spatial Studies} -} - -@Article{Yin:2024, - author = {{Yin}, X. and {Aiken}, J.M. and {Harris}, R. and {Bamber}, J.L.}, - title = {{A Bayesian spatio-temporal model of COVID-19 spread in England}}, - journal = {Scientific Reports}, - volume = {14}, - number = {1}, - pages = {}, - year = {2024}, - month = {05}, - doi = {10.1038/s41598-024-60964-0}, - url = {https://doi.org/10.1038/s41598-024-60964-0}, - publisher = {Springer Nature} -} - -@Article{Yuan:2017, - author = {{Yuan}, Y. and {Bachl}, F.E. and {Lindgren}, F. and {Borchers}, D.L. and {Illian}, J.B. and {Buckland}, S.T. and {Rue}, H. and {Gerrodette}, T.}, - title = {Point process models for spatio-temporal distance sampling data from a large-scale survey of blue whales}, - journal = {Ann. Appl. Stat.}, - volume = {11}, - number = {4}, - pages = {2270--2297}, - year = {2017}, - month = {12}, - doi = {10.1214/17-AOAS1078}, - publisher = {The Institute of Mathematical Statistics}, - fjournal = {Annals of Applied Statistics} -} - -@Article{Ziegler:2022, - author = {{Ziegler}, Y. and {Vishwakarma}, B.D. and {Brady}, A. and {Chuter}, S. and {Royston}, S. and {Westaway}, R.M. and {Bamber}, J.L.}, - title = {Can GPS and GRACE data be used to separate past and present-day surface loading in a data-driven approach?}, - journal = {Geophysical Journal International}, - volume = {232}, - number = {2}, - pages = {884-901}, - year = {2022}, - month = {09}, - doi = {10.1093/gji/ggac365}, - url = {https://doi.org/10.1093/gji/ggac365}, - issn = {0956-540X}, - eprint = {https://academic.oup.com/gji/article-pdf/232/2/884/46456258/ggac365.pdf} -} - diff --git a/man/paper.md b/man/paper.md deleted file mode 100644 index a4031d8e..00000000 --- a/man/paper.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: '4DModeller: a spatio-temporal modelling package' -tags: - - R - - spatio-temporal modelling - - Bayesian inference - - INLA - - inlabru -authors: - - name: John M. Aiken - orcid: 0000-0003-2258-3836 - affiliation: "1, 2" - - name: Gareth Jones - orcid: 0000-0003-4814-5156 - affiliation: 3 - - name: Xueqing Yin - orcid: 0000-0003-1103-8939 - affiliation: 3 - - name: Anrijs K. Abele - orcid: 0000-0002-6053-2629 - affiliation: 3 - - name: Christopher Woods - orcid: 0000-0001-6563-9903 - affiliation: 3 - - name: Richard M. Westaway - orcid: 0000-0001-6102-1540 - affiliation: 3 - - name: Jonathan L. Bamber - orcid: 0000-0002-2280-2819 - corresponding: true - affiliation: "3, 4" -affiliations: - - name: Expert Analytics, Norway - index: 1 - - name: University of Oslo, Norway - index: 2 - - name: University of Bristol, UK - index: 3 - - name: Technical University of Munich, Germany - index: 4 -date: 12 July 2024 -bibliography: paper.bib ---- - -# Summary - -4DModeller (`fdmr`) is a spatio-temporal modelling package capable of solving a wide range of large-scale space-time (i.e. four-dimensional) problems [@Yin:2023]. It is built around the inlabru framework which is a suite of R codes for fast efficient Bayesian inference [@Yuan:2017; @Bachl:2019;@Lindgren:2024a]. The `fdmr` package expands the inlabru framework to include specific applications of latent variable modelling for 4-D geophysical problems (e.g. ocean heat content, the Earth’s magnetic field, and global sea-level rise). `fdmr` also includes shiny apps that provide tools for data visualization, finite element mesh building and Bayesian hierarchical modelling based on an R package for Bayesian inference, inlabru, along with model evaluation and assessment. These shiny apps are designed to make the complex INLA framework [@Rue:2009] and associated concepts accessible to a wider scientific community, including users who have little to no previous experience using R. The tools are designed with new users in mind by leveraging their expertise with their data sets while minimizing the need to develop extensive code in R [@Aiken:2018; @Vygotsky:1978]. They allow users to interact with their data first using the intuitive knowledge of the modelling process (input data, create mesh, calculate statistical model), then auto-generating code that the users can build on. - -This is extended through the Tutorial Driven Software Development practice [@Woods:2022]. This approach is designed to integrate subject matter experts into the code development cycle. It involves the identification of representative and instructive use cases, followed by tutorials that describe how the package could be used to solve them, and then finally code written and tested so that it behaved as described in the tutorials [@Woods:2022]. `fdmr` users have access to a set of domain-specific tutorials as vignettes in R Markdown notebooks; tutorials which are being added to as the user community grows. - -The current development of the `fdmr` package supports a wide range of spatially heterogeneous and areal data, including in-situ point observations and satellite data. Examples of the former are ground station air pollution observations, rain gauge data, ocean buoy measurements, or GPS ground displacements. For areal data, the domain mesh is fixed (of regular or irregular shape) and partitioned into areal units (e.g. triangles) with well-defined boundaries. Examples of areal data are attributes collected by post code, satellite imagery, spatially gridded products such as climate re-analysis or land use classification. - -Future package development efforts will focus on expanding its capabilities and broadening its applicability. Moreover, our team actively seeks interdisciplinary collaborations to further expand the modelling framework and tailor it to the specific needs of diverse disciplines. - -# Statement of Need - -The objective of the `fdmr` package is to provide researchers and practitioners with a straightforward and efficient solution for handling and analyzing different types of spatio-temporal data, enabling a comprehensive analysis of the underlying patterns, processes and trends. - -`fdmr` reduces the computational complexity for scientific users of handling high-resolution, high-dimensional spatio-temporal data. Spatio-temporal data analysis is crucial in many research fields. However, modelling large-scale spatio-temporal data presents challenges such as high computational demands, complex correlation structures and the separation of mixed sources. Additionally, it requires expert domain knowledge to interpret model results. 4DModeller has been developed to address these issues; a robust and user-friendly R package designed to model spatio-temporal data within a Bayesian framework (inlabru) but without requiring users to have an in-depth knowledge of Bayesian statistics. Users have access to different solvers through the inlabru framework, such as the Integrated Nested Laplace Approximation (INLA) solver for approximate Bayesian inference and the stochastic partial differential equations (SPDE) method for defining a spatial model. Furthermore, `fdmr` provides intuitive and interactive visual analytics tools that facilitate the exploration of data patterns across both space and time. The goal is that `fdmr` will allow such tools to be used for process modelling (via Gaussian and Poisson processes) and for tasks such as latent process source separation [e.g. @Ziegler:2022] which both complements – and distinguishes it – from the existing example applications of inlabru [@Lindgren:2024b]. - -The work undertaken for 4DModeller extends the Bayesian hierarchical model developed as part of the ERC-funded GlobalMass grant (www.globalmass.eu) that advanced the use of space-time statistical inference to separate global sea level rise into its different sources [@CORDIS:2024]. The `fdmr` package has since been applied to several other use cases including COVID-19 transmission in England [@Yin:2024], streamflow in hydropower catchments in Norway, extreme rainfall in Nepal, changes in the Earth’s magnetic field and ocean heat content in the Pacific. - -# Code Availability - -The `fdmr` package and installation instructions are available from the 4DModeller GitHub repository () along with shiny apps and tutorials as vignettes in R Markdown notebooks. - -# Acknowledgements - -This work was supported by UK Research and Innovation grant EP/X022641/1. JLB was also supported by German Federal Ministry of Education and Research (BMBF) in the framework of the international future AI lab “AI4EO - Artificial Intelligence for Earth Observation: Reasoning, Uncertainties, Ethics, and Beyond” (grant number: 01DD20001). Code and tutorial development were aided by two hackathons (in Oslo in November 2023 and in Bristol in March 2024) which were only made possible by funding from the Research Council of Norway through the Svalbard Science Forum's funding program Svalbard Strategic Grant (project number: 344823). - -# References From 73e75e174bb62ebba7301dad47fb42feb879c809 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sat, 21 Sep 2024 14:12:40 +0100 Subject: [PATCH 41/74] Added the (default) option to save to the session's temporary directory --- R/util_paths.R | 38 +++++++++++++++++++++++++++----------- R/util_retrieve.R | 17 ++++++++++++++--- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/R/util_paths.R b/R/util_paths.R index 5ccee5b2..6309f568 100644 --- a/R/util_paths.R +++ b/R/util_paths.R @@ -2,11 +2,12 @@ #' #' @param dataset Name of dataset #' @param filename Name of file +#' @param temp Save in a temporary directory. Defaults to TRUE. #' #' @return fs::path Full filepath #' @export -get_tutorial_datapath <- function(dataset, filename) { - tutorial_datapath <- fs::path(get_tutorial_cache_datapath(), dataset) +get_tutorial_datapath <- function(dataset, filename, temp) { + tutorial_datapath <- fs::path(get_tutorial_cache_datapath(temp), dataset) if (!fs::dir_exists(tutorial_datapath)) { stop("Unable to load data, the folder ", toString(tutorial_datapath), " does not exist. Have you run retrieve_tutorial_data?") @@ -26,15 +27,16 @@ get_tutorial_datapath <- function(dataset, filename) { #' #' @param dataset Name of dataset #' @param filename Name of file +#' @param temp Use the temporary directory #' #' @return loaded object #' @export -load_tutorial_data <- function(dataset, filename) { +load_tutorial_data <- function(dataset, filename, temp) { if (!tolower(fs::path_ext(filename)) == "rds") { stop("We can only load rds files.") } - fpath <- get_tutorial_datapath(dataset = dataset, filename = filename) + fpath <- get_tutorial_datapath(dataset = dataset, filename = filename, temp = temp) return(readRDS(fpath)) } @@ -63,29 +65,43 @@ clean_path <- function(path, check_exists = FALSE) { } #' Get path to tutorial data cache folder +#' +#' @param temp Use the temporary directory #' #' @return fs::path #' @keywords internal -get_tutorial_cache_datapath <- function() { - fs::path(fs::path_home(), "fdmr", "tutorial_data") +get_tutorial_cache_datapath <- function(temp) { + if (temp){ + fs::path(fs::path_temp(), "fdmr", "tutorial_data") + } else{ + fs::path(fs::path_home(), "fdmr", "tutorial_data") + } } #' Get path to downloaded archive cache folder +#' +#' @param temp Use temporary directory #' #' @return fs::path #' @keywords internal -get_archive_cache_datapath <- function() { - fs::path(fs::path_home(), "fdmr", "download_cache") +get_archive_cache_datapath <- function(temp) { + if (temp){ + fs::path(fs::path_temp(), "fdmr", "download_cache") + } else{ + fs::path(fs::path_home(), "fdmr", "download_cache") + } } #' Clear both tutorial data and downloaded archive caches #' +#' @param temp Use temporary directory +#' #' @return NULL #' @export -clear_caches <- function() { - tut_path <- get_tutorial_cache_datapath() - cache_path <- get_archive_cache_datapath() +clear_caches <- function(temp) { + tut_path <- get_tutorial_cache_datapath(temp) + cache_path <- get_archive_cache_datapath(temp) print(paste("Deleting ", tut_path, cache_path)) fs::dir_delete(tut_path) fs::dir_delete(cache_path) diff --git a/R/util_retrieve.R b/R/util_retrieve.R index 7a284c2a..26156386 100644 --- a/R/util_retrieve.R +++ b/R/util_retrieve.R @@ -2,13 +2,19 @@ #' #' @param dataset Name of dataset to retrieve #' @param force_update Force retrieval of metadata and dataset +#' @param save Unpack the dataset to ~/fdmr/tutorial_data #' #' @return NULL #' @export -retrieve_tutorial_data <- function(dataset, force_update = FALSE) { +retrieve_tutorial_data <- function(dataset, force_update = FALSE, save = FALSE) { dataset <- base::tolower(dataset) - download_cache_folder <- fs::path(fs::path_home(), "fdmr", "download_cache") + if (save){ + download_cache_folder <- fs::path(fs::path_home(), "fdmr", "download_cache") + } else { + download_cache_folder <- fs::path(fs::path_temp(), "fdmr", "download_cache") + } + if (!fs::dir_exists(download_cache_folder)) { fs::dir_create(download_cache_folder, recurse = TRUE) } @@ -40,7 +46,12 @@ retrieve_tutorial_data <- function(dataset, force_update = FALSE) { jsonlite::write_json(retrieval_info, path = file_metadata_file) } - extract_path <- fs::path(fs::path_home(), "fdmr", "tutorial_data", dataset) + if (save){ + extract_path <- fs::path(fs::path_home(), "fdmr", "tutorial_data", dataset) + } else { + extract_path <- fs::path(fs::path_temp(), "fdmr", "tutorial_data", dataset) + } + if (!fs::dir_exists(extract_path)) { fs::dir_create(extract_path, recurse = TRUE) From a7223ee6874afa30887a07ffba90478504a5c5b3 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sat, 21 Sep 2024 19:22:18 +0100 Subject: [PATCH 42/74] Improved the option so that the user can pass a character. Also added a checker if the character is a valid pass. --- R/util_paths.R | 73 ++++++++++++++++++++++++++++++++++------------- R/util_retrieve.R | 43 ++++++++++++++++++++++++---- 2 files changed, 90 insertions(+), 26 deletions(-) diff --git a/R/util_paths.R b/R/util_paths.R index 6309f568..5bbcd1dd 100644 --- a/R/util_paths.R +++ b/R/util_paths.R @@ -2,12 +2,12 @@ #' #' @param dataset Name of dataset #' @param filename Name of file -#' @param temp Save in a temporary directory. Defaults to TRUE. +#' @param saved Specify the location where user unpacked the data. #' #' @return fs::path Full filepath #' @export -get_tutorial_datapath <- function(dataset, filename, temp) { - tutorial_datapath <- fs::path(get_tutorial_cache_datapath(temp), dataset) +get_tutorial_datapath <- function(dataset, filename, saved = FALSE) { + tutorial_datapath <- fs::path(get_tutorial_cache_datapath(saved), dataset) if (!fs::dir_exists(tutorial_datapath)) { stop("Unable to load data, the folder ", toString(tutorial_datapath), " does not exist. Have you run retrieve_tutorial_data?") @@ -27,16 +27,16 @@ get_tutorial_datapath <- function(dataset, filename, temp) { #' #' @param dataset Name of dataset #' @param filename Name of file -#' @param temp Use the temporary directory +#' @param saved Specify the location where user unpacked the data #' #' @return loaded object #' @export -load_tutorial_data <- function(dataset, filename, temp) { +load_tutorial_data <- function(dataset, filename, saved = FALSE) { if (!tolower(fs::path_ext(filename)) == "rds") { stop("We can only load rds files.") } - fpath <- get_tutorial_datapath(dataset = dataset, filename = filename, temp = temp) + fpath <- get_tutorial_datapath(dataset = dataset, filename = filename, saved = saved) return(readRDS(fpath)) } @@ -64,44 +64,77 @@ clean_path <- function(path, check_exists = FALSE) { return(fpath) } + +#' Checks if a path exists and returns an absolute path +#' +#' @param path Path to check +#' +#' @return fs::path Expanded absolute path +#' @keywords internal +#' +check_path <- function(path) { + if (is.null(path) || nchar(path) == 0) { + stop("Invalid path of zero length given.") + } + + fpath <- fs::path_abs(fs::path_expand(path)) + + if (!fs::file_exists(fpath)) { + stop(paste("The path", fpath, "does not exist.")) + } + + return(fpath) +} + + #' Get path to tutorial data cache folder #' -#' @param temp Use the temporary directory +#' @param saved Specify the location where user unpacked the data #' #' @return fs::path #' @keywords internal -get_tutorial_cache_datapath <- function(temp) { - if (temp){ +get_tutorial_cache_datapath <- function(saved) { + if (base::isTRUE(saved) | base::is.character(saved)){ + if (base::is.character(saved)) { + save_path <- check_path(saved) + fs::path(save_path, "fdmr", "tutorial_data") + } else{ + fs::path(fs::path_home(), "fdmr", "tutorial_data") + } + } else { fs::path(fs::path_temp(), "fdmr", "tutorial_data") - } else{ - fs::path(fs::path_home(), "fdmr", "tutorial_data") } } #' Get path to downloaded archive cache folder #' -#' @param temp Use temporary directory +#' @param saved Specify the location where user unpacked the data #' #' @return fs::path #' @keywords internal -get_archive_cache_datapath <- function(temp) { - if (temp){ +get_archive_cache_datapath <- function(saved) { + if (base::isTRUE(saved) | base::is.character(saved)){ + if (base::is.character(saved)) { + save_path <- check_path(saved) + fs::path(save_path, "fdmr", "download_cache") + } else{ + fs::path(fs::path_home(), "fdmr", "download_cache") + } + } else { fs::path(fs::path_temp(), "fdmr", "download_cache") - } else{ - fs::path(fs::path_home(), "fdmr", "download_cache") } } #' Clear both tutorial data and downloaded archive caches #' -#' @param temp Use temporary directory +#' @param saved Specify the location where user unpacked the data #' #' @return NULL #' @export -clear_caches <- function(temp) { - tut_path <- get_tutorial_cache_datapath(temp) - cache_path <- get_archive_cache_datapath(temp) +clear_caches <- function(saved = TRUE) { + tut_path <- get_tutorial_cache_datapath(saved) + cache_path <- get_archive_cache_datapath(saved) print(paste("Deleting ", tut_path, cache_path)) fs::dir_delete(tut_path) fs::dir_delete(cache_path) diff --git a/R/util_retrieve.R b/R/util_retrieve.R index 26156386..9393cb48 100644 --- a/R/util_retrieve.R +++ b/R/util_retrieve.R @@ -1,16 +1,21 @@ -#' Retrieve a tutorial dataset and unpacks it to ~/fdmr/tutorial_data +#' Retrieves a tutorial dataset and unpacks it to a place specified by the user (~/fdmr/tutorial_data) #' #' @param dataset Name of dataset to retrieve #' @param force_update Force retrieval of metadata and dataset -#' @param save Unpack the dataset to ~/fdmr/tutorial_data +#' @param save Unpack the dataset to where user specified (character), home directory (TRUE), session's temporary directory (FALSE: default). #' #' @return NULL #' @export retrieve_tutorial_data <- function(dataset, force_update = FALSE, save = FALSE) { dataset <- base::tolower(dataset) - if (save){ - download_cache_folder <- fs::path(fs::path_home(), "fdmr", "download_cache") + if (base::isTRUE(save) | base::is.character(save)){ + if (base::is.character(save)) { + save_path <- check_path(save) + download_cache_folder <- fs::path(save_path, "fdmr", "download_cache") + } else{ + download_cache_folder <- fs::path(fs::path_home(), "fdmr", "download_cache") + } } else { download_cache_folder <- fs::path(fs::path_temp(), "fdmr", "download_cache") } @@ -46,8 +51,13 @@ retrieve_tutorial_data <- function(dataset, force_update = FALSE, save = FALSE) jsonlite::write_json(retrieval_info, path = file_metadata_file) } - if (save){ - extract_path <- fs::path(fs::path_home(), "fdmr", "tutorial_data", dataset) + if (base::isTRUE(save) | base::is.character(save)){ + if (base::is.character(save)){ + save_path <- check_path(save, check_exists = TRUE) + extract_path <- fs::path(save_path, "fdmr", "tutorial_data", dataset) + } else{ + extract_path <- fs::path(fs::path_home(), "fdmr", "tutorial_data", dataset) + } } else { extract_path <- fs::path(fs::path_temp(), "fdmr", "tutorial_data", dataset) } @@ -84,3 +94,24 @@ retrieve_tutorial_data <- function(dataset, force_update = FALSE, save = FALSE) stop("Invalid dataset, please see available datasets at https://github.com/4DModeller/fdmr_data") } } + +#' Checks if a path exists and returns an absolute path +#' +#' @param path Path to check +#' +#' @return fs::path Expanded absolute path +#' @keywords internal +#' +check_path <- function(path) { + if (is.null(path) || nchar(path) == 0) { + stop("Invalid path of zero length given.") + } + + fpath <- fs::path_abs(fs::path_expand(path)) + + if (!fs::file_exists(fpath)) { + stop(paste("The path", fpath, "does not exist.")) + } + + return(fpath) +} From 4f32550cb66d974c46ba7b864ad8a1ba65fb554c Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sat, 21 Sep 2024 19:32:56 +0100 Subject: [PATCH 43/74] Corrected an error --- R/util_retrieve.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/util_retrieve.R b/R/util_retrieve.R index 9393cb48..0bd73eca 100644 --- a/R/util_retrieve.R +++ b/R/util_retrieve.R @@ -53,7 +53,7 @@ retrieve_tutorial_data <- function(dataset, force_update = FALSE, save = FALSE) if (base::isTRUE(save) | base::is.character(save)){ if (base::is.character(save)){ - save_path <- check_path(save, check_exists = TRUE) + save_path <- check_path(save) extract_path <- fs::path(save_path, "fdmr", "tutorial_data", dataset) } else{ extract_path <- fs::path(fs::path_home(), "fdmr", "tutorial_data", dataset) From 9eb5cfee23c27d96a00432a287a2818b2fbec378 Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Sat, 21 Sep 2024 19:44:10 +0100 Subject: [PATCH 44/74] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 05380de5..6d2ff42d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Added to `retrieve_tutorial_data` an option to save tutorial data at user-specified location or in a temporary directory as default - [PR #330](https://github.com/4DModeller/fdmr/pull/330) - Fixed `model_viewer` app to work with random effect models - [PR #317](https://github.com/4DModeller/fdmr/pull/317) - Updated `plot_map_leaflet` to feature the same selection of basemap tiles as `mapview` and fix features not appearing - [PR #310](https://github.com/4DModeller/fdmr/pull/310) From d8c02a0e529491dc407ab22d8d6fd619f0faafe3 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sun, 22 Sep 2024 00:23:41 +0100 Subject: [PATCH 45/74] Forgot to update the documentation --- man/clear_caches.Rd | 5 ++++- man/get_archive_cache_datapath.Rd | 5 ++++- man/get_tutorial_cache_datapath.Rd | 5 ++++- man/get_tutorial_datapath.Rd | 4 +++- man/load_tutorial_data.Rd | 4 +++- man/retrieve_tutorial_data.Rd | 8 +++++--- 6 files changed, 23 insertions(+), 8 deletions(-) diff --git a/man/clear_caches.Rd b/man/clear_caches.Rd index f5fb2f6a..e05db3bb 100644 --- a/man/clear_caches.Rd +++ b/man/clear_caches.Rd @@ -4,7 +4,10 @@ \alias{clear_caches} \title{Clear both tutorial data and downloaded archive caches} \usage{ -clear_caches() +clear_caches(saved = TRUE) +} +\arguments{ +\item{saved}{Specify the location where user unpacked the data} } \description{ Clear both tutorial data and downloaded archive caches diff --git a/man/get_archive_cache_datapath.Rd b/man/get_archive_cache_datapath.Rd index d41132d0..153ab8f6 100644 --- a/man/get_archive_cache_datapath.Rd +++ b/man/get_archive_cache_datapath.Rd @@ -4,7 +4,10 @@ \alias{get_archive_cache_datapath} \title{Get path to downloaded archive cache folder} \usage{ -get_archive_cache_datapath() +get_archive_cache_datapath(saved) +} +\arguments{ +\item{saved}{Specify the location where user unpacked the data} } \value{ fs::path diff --git a/man/get_tutorial_cache_datapath.Rd b/man/get_tutorial_cache_datapath.Rd index 2fa2e8a8..fa6370a0 100644 --- a/man/get_tutorial_cache_datapath.Rd +++ b/man/get_tutorial_cache_datapath.Rd @@ -4,7 +4,10 @@ \alias{get_tutorial_cache_datapath} \title{Get path to tutorial data cache folder} \usage{ -get_tutorial_cache_datapath() +get_tutorial_cache_datapath(saved) +} +\arguments{ +\item{saved}{Specify the location where user unpacked the data} } \value{ fs::path diff --git a/man/get_tutorial_datapath.Rd b/man/get_tutorial_datapath.Rd index b7776a8d..598ceba0 100644 --- a/man/get_tutorial_datapath.Rd +++ b/man/get_tutorial_datapath.Rd @@ -4,12 +4,14 @@ \alias{get_tutorial_datapath} \title{Return the filepath for a tutorial data file.} \usage{ -get_tutorial_datapath(dataset, filename) +get_tutorial_datapath(dataset, filename, saved = FALSE) } \arguments{ \item{dataset}{Name of dataset} \item{filename}{Name of file} + +\item{saved}{Specify the location where user unpacked the data.} } \value{ fs::path Full filepath diff --git a/man/load_tutorial_data.Rd b/man/load_tutorial_data.Rd index 0f8a5768..74a494fd 100644 --- a/man/load_tutorial_data.Rd +++ b/man/load_tutorial_data.Rd @@ -4,12 +4,14 @@ \alias{load_tutorial_data} \title{Load data from the tutorial data store} \usage{ -load_tutorial_data(dataset, filename) +load_tutorial_data(dataset, filename, saved = FALSE) } \arguments{ \item{dataset}{Name of dataset} \item{filename}{Name of file} + +\item{saved}{Specify the location where user unpacked the data} } \value{ loaded object diff --git a/man/retrieve_tutorial_data.Rd b/man/retrieve_tutorial_data.Rd index 07c6d2a7..d6006fb8 100644 --- a/man/retrieve_tutorial_data.Rd +++ b/man/retrieve_tutorial_data.Rd @@ -2,15 +2,17 @@ % Please edit documentation in R/util_retrieve.R \name{retrieve_tutorial_data} \alias{retrieve_tutorial_data} -\title{Retrieve a tutorial dataset and unpacks it to ~/fdmr/tutorial_data} +\title{Retrieves a tutorial dataset and unpacks it to a place specified by the user (~/fdmr/tutorial_data)} \usage{ -retrieve_tutorial_data(dataset, force_update = FALSE) +retrieve_tutorial_data(dataset, force_update = FALSE, save = FALSE) } \arguments{ \item{dataset}{Name of dataset to retrieve} \item{force_update}{Force retrieval of metadata and dataset} + +\item{save}{Unpack the dataset to where user specified (character), home directory (TRUE), session's temporary directory (FALSE: default).} } \description{ -Retrieve a tutorial dataset and unpacks it to ~/fdmr/tutorial_data +Retrieves a tutorial dataset and unpacks it to a place specified by the user (~/fdmr/tutorial_data) } From 0ce34ce611735d16452c35c144541a1f174fca06 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sun, 22 Sep 2024 00:53:21 +0100 Subject: [PATCH 46/74] Added a line to call for tutorial data retrieval - I guess testing has new temporary directory for each vignette rebuild. --- vignettes/expected_data_structure.Rmd | 1 + 1 file changed, 1 insertion(+) diff --git a/vignettes/expected_data_structure.Rmd b/vignettes/expected_data_structure.Rmd index 8a1f1ecb..a0a6084d 100644 --- a/vignettes/expected_data_structure.Rmd +++ b/vignettes/expected_data_structure.Rmd @@ -18,6 +18,7 @@ In this tutorial, we will show the expected data structure for running the Bayes In the [COVID-19 tutorial](https://4dmodeller.github.io/fdmr/articles/covid.html), we aim to fit a Bayesian spatio-temporal model to predict the COVID-19 infection rates across mainland England over space and time, and investigate the impacts of socioeconomic, demographic and environmental factors on COVID-19 infection. We load the dataset `covid19_data` and the type of this object is a `data.frame`. ```{r classcovidat} +fdmr::retrieve_tutorial_data(dataset = "covid") covid19_data <- fdmr::load_tutorial_data(dataset = "covid", filename = "covid19_data.rds") class(covid19_data) ``` From 655405c4fec0e51c04cfe075a4f71e687b9d0281 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sun, 22 Sep 2024 15:19:35 +0100 Subject: [PATCH 47/74] Changed the description to match the function --- R/shiny_modelviewer.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/shiny_modelviewer.R b/R/shiny_modelviewer.R index 1bb6a9e9..13c23b8a 100644 --- a/R/shiny_modelviewer.R +++ b/R/shiny_modelviewer.R @@ -295,7 +295,7 @@ model_viewer_shiny <- function(model_output, mesh, measurement_data, data_distri shiny::shinyApp(ui = ui, server = server) } -#' Mesh building shiny app. Creates and visualises a mesh from some spatial data. +#' Model viewing shiny app. Visualises INLA model output, plots the posterior distributions of model parameters and prediction statistics. #' #' @param model_output INLA model output #' @param mesh INLA mesh From acc4f86d3cf900c6bb2df0cdff7738bf9e054040 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sun, 22 Sep 2024 15:20:57 +0100 Subject: [PATCH 48/74] Updated documentation --- man/model_viewer.Rd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/man/model_viewer.Rd b/man/model_viewer.Rd index 8ea96f7e..ec809f2a 100644 --- a/man/model_viewer.Rd +++ b/man/model_viewer.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/shiny_modelviewer.R \name{model_viewer} \alias{model_viewer} -\title{Mesh building shiny app. Creates and visualises a mesh from some spatial data.} +\title{Model viewing shiny app. Visualises INLA model output, plots the posterior distributions of model parameters and prediction statistics.} \usage{ model_viewer( model_output, @@ -24,5 +24,5 @@ model_viewer( shiny::app } \description{ -Mesh building shiny app. Creates and visualises a mesh from some spatial data. +Model viewing shiny app. Visualises INLA model output, plots the posterior distributions of model parameters and prediction statistics. } From 68e7d3260a16996826db61e89a046a8ce6e1f3d4 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sun, 22 Sep 2024 21:59:51 +0100 Subject: [PATCH 49/74] Improved desciptions of model_parse --- R/model_parse.R | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/R/model_parse.R b/R/model_parse.R index 2e8a9a12..be620acb 100644 --- a/R/model_parse.R +++ b/R/model_parse.R @@ -1,9 +1,9 @@ #' Parses inlabru::bru model output to create a list of model parameters #' #' @param model_output Output from running inlabru::bru -#' @param measurement_data Measurement data +#' @param measurement_data Measurement data (can be numeric, SpatialPoints/SpatialPointsDataFrame, or simple feature collection) #' -#' @return list +#' @return Creates a list of model outputs for the first timestep, including fitted mean and sd, mean of fixed effects, mean and sd of random effects, posterior hyperparameters, and DIC #' @keywords internal parse_model_output_bru <- function(model_output, measurement_data) { fitted_mean_post <- model_output$summary.fitted.values$mean[seq_len(nrow(measurement_data))] @@ -33,11 +33,11 @@ parse_model_output_bru <- function(model_output, measurement_data) { #' Parse model output to create a list of model parameters #' -#' @param model_output Data returned by model -#' @param measurement_data Measurement data -#' @param model_type Type of model, we currently support inlabru +#' @param model_output Output returned by model (currently only from running inlabru::bru) +#' @param measurement_data Measurement data (can be numeric, SpatialPoints/SpatialPointsDataFrame, or simple feature collection) +#' @param model_type Type of model, we currently only support inlabru #' -#' @return list +#' @return Creates a list of model outputs, including fitted mean and sd, mean of fixed effects, mean and sd of random effects, posterior hyperparameters, and DIC #' @export parse_model_output <- function(model_output, measurement_data, model_type = "inlabru") { if (model_type == "inlabru") { @@ -48,13 +48,13 @@ parse_model_output <- function(model_output, measurement_data, model_type = "inl #' Create a prediction field from the parsed model output and the mesh #' -#' @param mesh INLA mesh -#' @param plot_type Type of plot to create, "predicted_mean_fields" etc -#' @param data_dist Type of data, "poisson" etc -#' @param var_a Data for variable a, required for "predicted_mean_fields" and "random_effect_fields" -#' @param var_b Data for variable b, required for "predicted_mean_fields" +#' @param mesh INLA/fmesher mesh +#' @param plot_type Type of plot to create, "predicted_mean_fields" or "random_mean_fields" +#' @param data_dist Type of data, "poisson" or "gaussian" +#' @param var_a Data for variable a (numeric), required for "predicted_mean_fields" and "random_effect_fields"; normally, random effect field from "summary.random$f" +#' @param var_b Data for variable b (numeric), required for "predicted_mean_fields"; normally, fixed effect from "summary.fixed" #' -#' @return data.frame +#' @return data.frame with mesh node latlong coordinates (x, y) and the selected field values at the mesh nodes (z) #' @export create_prediction_field <- function(mesh, plot_type = "predicted_mean_fields", From a04066d36124a863868c664d502dfd4e26a1726b Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sun, 22 Sep 2024 22:36:36 +0100 Subject: [PATCH 50/74] Improved the documentation for shiny_meshbuilder --- R/shiny_meshbuilder.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/shiny_meshbuilder.R b/R/shiny_meshbuilder.R index 8a22be0d..4202b78b 100644 --- a/R/shiny_meshbuilder.R +++ b/R/shiny_meshbuilder.R @@ -1,6 +1,6 @@ #' Mesh building shiny app #' -#' @param spatial_data Spatial data +#' @param spatial_data Spatial data (must be a data.frame, SpatialPointsDataFrame or SpatialPolygonsDataFrame) #' @param obs_data Measurement data #' @param crs CRS as a proj4string #' @param offset Specifies the size of the inner and outer extensions around data locations, passed to fmesher::fm_mesh_2d_inla @@ -11,7 +11,7 @@ #' #' @importFrom magrittr %>% #' -#' @return shiny::app +#' @return shiny::app with meshbuilder functionality #' @keywords internal meshbuilder_shiny <- function( spatial_data, @@ -270,7 +270,7 @@ meshbuilder_shiny <- function( #' Mesh building shiny app. Creates and visualises a mesh from some spatial data. #' -#' @param spatial_data Spatial data +#' @param spatial_data Spatial data (must be a data.frame, SpatialPointsDataFrame or SpatialPolygonsDataFrame) #' @param obs_data Measurement data #' @param crs CRS as a proj4string #' @param offset Specifies the size of the inner and outer extensions around data locations, passed to fmesher::fm_mesh_2d_inla @@ -279,7 +279,7 @@ meshbuilder_shiny <- function( #' @param y_coord Name of the latitude column in the spatial data #' @param x_coord Name of the longitude column in the spatial data #' -#' @return shiny::app +#' @return shiny::app with meshbuilder functionality #' @export mesh_builder <- function(spatial_data, obs_data = NULL, crs = NULL, max_edge = NULL, offset = NULL, cutoff = NULL, y_coord = "LAT", x_coord = "LONG") { shiny::runApp(meshbuilder_shiny( From 6bbf6b046eab915fa80a3c4a82c0cf113c26421e Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sun, 22 Sep 2024 23:11:59 +0100 Subject: [PATCH 51/74] Updated model builder documentation --- R/shiny_modelbuilder.R | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/R/shiny_modelbuilder.R b/R/shiny_modelbuilder.R index fc395d31..b390c826 100644 --- a/R/shiny_modelbuilder.R +++ b/R/shiny_modelbuilder.R @@ -1,15 +1,15 @@ #' Interactively set and see the result of different priors #' -#' @param spatial_data Spatial data -#' @param measurement_data Measurement data -#' @param time_variable Time variable in measurement_data -#' @param mesh INLA mesh +#' @param spatial_data Spatial data (must be SpatialPoints or SpatialPointsDataFrame) +#' @param measurement_data Measurement data (data.frame, SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements) +#' @param time_variable Time variable name in measurement_data +#' @param mesh INLA/fmesher mesh #' @param data_distribution Data distribution, Poisson or Gaussian -#' @param log_folder Folder to write out logs +#' @param log_folder Folder to write out logs (character) #' #' @importFrom INLA f #' -#' @return shiny::app +#' @return shiny::app with model builder functionality #' @keywords internal model_builder_shiny <- function(spatial_data, measurement_data, @@ -697,12 +697,12 @@ model_builder_shiny <- function(spatial_data, #' Interactively set and see the result of different priors #' #' @param spatial_data Spatial data -#' @param measurement_data Measurement data -#' @param time_variable Time variable in measurement_data -#' @param mesh INLA mesh -#' @param log_folder Folder to write logs to +#' @param measurement_data Measurement data (data.frame, SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements) +#' @param time_variable Time variable name in measurement_data +#' @param mesh INLA/fmesher mesh +#' @param log_folder Folder to write logs to (character) #' -#' @return shiny::app +#' @return shiny::app with model builder functionality #' @export model_builder <- function(spatial_data, measurement_data, time_variable, mesh, data_distribution = "Poisson", log_folder = NULL) { shiny::runApp(model_builder_shiny(spatial_data = spatial_data, measurement_data = measurement_data, time_variable = time_variable, mesh = mesh, data_distribution = data_distribution, log_folder = log_folder)) From 48d90cb8a0c83c6b0d7cb6bed9ee351f73a2f771 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sun, 22 Sep 2024 23:14:22 +0100 Subject: [PATCH 52/74] Updated model viewer documentation --- R/shiny_modelviewer.R | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/R/shiny_modelviewer.R b/R/shiny_modelviewer.R index 1bb6a9e9..f633771d 100644 --- a/R/shiny_modelviewer.R +++ b/R/shiny_modelviewer.R @@ -1,13 +1,13 @@ #' Parse inlabru model output #' -#' @param model_output INLA model output -#' @param mesh INLA mesh -#' @param measurement_data Measurement data +#' @param model_output INLA/inlabru model output +#' @param mesh INLA/fmesher mesh +#' @param measurement_data Measurement data (can be numeric, SpatialPoints/SpatialPointsDataFrame, or simple feature collection) #' @param data_distribution Type of data, Poisson or Gaussian #' #' @importFrom magrittr %>% #' -#' @return shiny::app +#' @return shiny::app with model viewer functionality #' @keywords internal model_viewer_shiny <- function(model_output, mesh, measurement_data, data_distribution) { busy_spinner <- get_busy_spinner() @@ -297,12 +297,12 @@ model_viewer_shiny <- function(model_output, mesh, measurement_data, data_distri #' Mesh building shiny app. Creates and visualises a mesh from some spatial data. #' -#' @param model_output INLA model output -#' @param mesh INLA mesh -#' @param measurement_data Measurement data -#' @param data_distribution Type of data, Poisson or Gaussian +#' @param model_output INLA/inlabru model output +#' @param mesh INLA/fmesher mesh used for the run +#' @param measurement_data Measurement data used for the run (sp) +#' @param data_distribution Type of data, Poisson or Gaussian (character) #' -#' @return shiny::app +#' @return shiny::app with model viewer functionality #' @export model_viewer <- function(model_output, mesh, measurement_data, data_distribution = "Poisson") { shiny::runApp(model_viewer_shiny(model_output = model_output, mesh = mesh, measurement_data = measurement_data, data_distribution = data_distribution)) From 80a87c1d303db0a8c033eb9465054d9e9f7f6f67 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sun, 22 Sep 2024 23:22:53 +0100 Subject: [PATCH 53/74] Updated plot_mesh documentation --- R/plot_mesh.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/plot_mesh.R b/R/plot_mesh.R index 617ad9a4..07fd6d52 100644 --- a/R/plot_mesh.R +++ b/R/plot_mesh.R @@ -1,14 +1,14 @@ #' Plot a mesh on a Leaflet map #' -#' @param mesh Mesh data +#' @param mesh Mesh object from INLA or fmesher #' @param spatial_data Spatial data, either a SpatialPolygonsDataFrame, SpatialPointsDataFrame or an object #' that can be converted to a data.frame with longitude and latitude columns -#' @param longitude_column Longitude column in spatial_data -#' @param latitude_column Latitude column in spatial_data name +#' @param longitude_column Longitude column name in spatial_data +#' @param latitude_column Latitude column name in spatial_data #' @param markers Markers to display on top of mesh. A named list with latitude, longitude and label names must be given. #' Expects longitude name to be longitude, latitude name to be latitude, label name to be label. #' -#' @return leaflet::leaflet +#' @return leaflet::leaflet with mesh and markers #' @export plot_mesh <- function(mesh, spatial_data = NULL, longitude_column = "LONG", latitude_column = "LAT", markers = NULL) { expected_crs <- "+proj=longlat +datum=WGS84" From 361154666d0e9bcd400d75a108f01a5ec3f98084 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sun, 22 Sep 2024 23:34:37 +0100 Subject: [PATCH 54/74] Simplified so that we use the functions we already have --- R/util_paths.R | 22 ---------------------- R/util_retrieve.R | 27 +++------------------------ 2 files changed, 3 insertions(+), 46 deletions(-) diff --git a/R/util_paths.R b/R/util_paths.R index 5bbcd1dd..24c748f6 100644 --- a/R/util_paths.R +++ b/R/util_paths.R @@ -65,28 +65,6 @@ clean_path <- function(path, check_exists = FALSE) { } -#' Checks if a path exists and returns an absolute path -#' -#' @param path Path to check -#' -#' @return fs::path Expanded absolute path -#' @keywords internal -#' -check_path <- function(path) { - if (is.null(path) || nchar(path) == 0) { - stop("Invalid path of zero length given.") - } - - fpath <- fs::path_abs(fs::path_expand(path)) - - if (!fs::file_exists(fpath)) { - stop(paste("The path", fpath, "does not exist.")) - } - - return(fpath) -} - - #' Get path to tutorial data cache folder #' #' @param saved Specify the location where user unpacked the data diff --git a/R/util_retrieve.R b/R/util_retrieve.R index 0bd73eca..12707564 100644 --- a/R/util_retrieve.R +++ b/R/util_retrieve.R @@ -11,7 +11,7 @@ retrieve_tutorial_data <- function(dataset, force_update = FALSE, save = FALSE) if (base::isTRUE(save) | base::is.character(save)){ if (base::is.character(save)) { - save_path <- check_path(save) + save_path <- clean_path(save, check_exists = TRUE) download_cache_folder <- fs::path(save_path, "fdmr", "download_cache") } else{ download_cache_folder <- fs::path(fs::path_home(), "fdmr", "download_cache") @@ -53,7 +53,7 @@ retrieve_tutorial_data <- function(dataset, force_update = FALSE, save = FALSE) if (base::isTRUE(save) | base::is.character(save)){ if (base::is.character(save)){ - save_path <- check_path(save) + save_path <- clean_path(save, check_exists = TRUE) extract_path <- fs::path(save_path, "fdmr", "tutorial_data", dataset) } else{ extract_path <- fs::path(fs::path_home(), "fdmr", "tutorial_data", dataset) @@ -93,25 +93,4 @@ retrieve_tutorial_data <- function(dataset, force_update = FALSE, save = FALSE) } else { stop("Invalid dataset, please see available datasets at https://github.com/4DModeller/fdmr_data") } -} - -#' Checks if a path exists and returns an absolute path -#' -#' @param path Path to check -#' -#' @return fs::path Expanded absolute path -#' @keywords internal -#' -check_path <- function(path) { - if (is.null(path) || nchar(path) == 0) { - stop("Invalid path of zero length given.") - } - - fpath <- fs::path_abs(fs::path_expand(path)) - - if (!fs::file_exists(fpath)) { - stop(paste("The path", fpath, "does not exist.")) - } - - return(fpath) -} +} \ No newline at end of file From be58c52a7c2600d97c6d4bc7f87ff51c27e5196b Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Sun, 22 Sep 2024 23:41:00 +0100 Subject: [PATCH 55/74] Improved meshing documentation --- R/meshing.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/meshing.R b/R/meshing.R index 9d4e7045..9eb36c31 100644 --- a/R/meshing.R +++ b/R/meshing.R @@ -1,10 +1,10 @@ # This function taken from https://groups.google.com/g/r-inla-discussion-group/c/z1n1exlZrKM/m/8vYNr2D8BwAJ #' Convert an INLA mesh to a SpatialPolygonsDataFrame #' -#' @param mesh Mesh -#' @param crs Coordinate Reference System as proj4string +#' @param mesh Mesh object from INLA or fmesher (only R2 manifolds are valid) +#' @param crs Coordinate Reference System as proj4string, does not support geocentric coordinates #' -#' @return SpatialPolygonsDataFrame +#' @return SpatialPolygonsDataFrame with mesh triangles #' @export mesh_to_spatial <- function(mesh, crs) { if (!is.character(crs)) { From 7d6feadf683df98ee29cbe5650619cee908718eb Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Mon, 23 Sep 2024 00:05:30 +0100 Subject: [PATCH 56/74] Updated plot_priors documentation --- R/plot_priors.R | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/R/plot_priors.R b/R/plot_priors.R index 7c8524a0..d6280a0a 100644 --- a/R/plot_priors.R +++ b/R/plot_priors.R @@ -1,10 +1,11 @@ #' Plot line comparison for stdev etc #' -#' @param data Parsed model output +#' @param data List of parsed model outputs from "parse_model_output" (a list of lists) #' @param to_plot Type of data to plot, "Range for f" etc +#' @param title Title of the plot, defaults to the value of "to_plot" #' -#' @return ggplot2::ggplot -plot_line_comparison <- function(data, to_plot, title) { +#' @return ggplot2::ggplot of the selected hyperparameter posterior distribution +plot_line_comparison <- function(data, to_plot, title = to_plot) { parsed_data <- purrr::map(data, function(x) as.data.frame(x$pars[[to_plot]])) single_df <- dplyr::bind_rows(parsed_data, .id = "Run") if (nrow(single_df) == 0) { @@ -19,9 +20,9 @@ plot_line_comparison <- function(data, to_plot, title) { #' Create boxplots from priors run data #' -#' @param data +#' @param data A list of parsed model output from "parse_model_output" (a list of lists) #' -#' @return graphics::boxplot +#' @return graphics::boxplot of fitted values plot_priors_boxplot <- function(data) { # TODO - I'm sure this can be done in a nicer functional way fitted_mean_post <- purrr::map(data, function(x) x$fitted_mean_post) @@ -34,10 +35,10 @@ plot_priors_boxplot <- function(data) { #' Plot density function #' #' -#' @param data Parsed model outputs -#' @param measurement_data Measurement data +#' @param data List of parsed model outputs from "parse_model_output" (a list of lists) +#' @param measurement_data Measurement data (can be numeric, SpatialPoints/SpatialPointsDataFrame, or simple feature collection) #' -#' @return ggplot2::ggplot +#' @return ggplot2::ggplot of measurement density by value plot_priors_density <- function(data, measurement_data) { # Can this be done in a cleaner way? Just create a dataframe from the lists? fitted_values <- unlist(purrr::map(data, function(x) x$fitted_mean_post)) @@ -56,9 +57,9 @@ plot_priors_density <- function(data, measurement_data) { #' Plot Deviance Information Criterion (DIC) values #' -#' @param data +#' @param data List of parsed model outputs from "parse_model_output" (a list of lists) #' -#' @return ggplot2::ggplot +#' @return ggplot2::ggplot with DIC values shown as points plot_dic <- function(data) { infocri <- base::cbind.data.frame( priors = unlist(purrr::map(seq(1, length(data)), function(x) paste("Run", x))), From ac8d677a9d9105dc47e3d2e5043ff6ee6bf59896 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Mon, 23 Sep 2024 00:06:45 +0100 Subject: [PATCH 57/74] Updated meshing_checks documentation --- R/meshing_checks.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/meshing_checks.R b/R/meshing_checks.R index 78271bbe..5d2a5d38 100644 --- a/R/meshing_checks.R +++ b/R/meshing_checks.R @@ -3,8 +3,8 @@ #' 2. A greater number of mesh triangles than observations #' 3. Isolated triangles in mesh #' -#' @param mesh INLA mesh -#' @param observations Observations data to be used woith model +#' @param mesh INLA/fmesher mesh +#' @param observations Observations data to be used with model (can be data.frame, SpatialPoints/SpatialPointsDataFrame, or simple feature collection) #' #' @return list: Named list containing errors #' @export From b9a6b5c1a24b7293fab4d8d6830c5447508f1b82 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Mon, 23 Sep 2024 00:21:39 +0100 Subject: [PATCH 58/74] Fixed an error is the description --- R/model_parse.R | 4 ++-- R/plot_priors.R | 2 +- R/shiny_modelviewer.R | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/R/model_parse.R b/R/model_parse.R index be620acb..786523d3 100644 --- a/R/model_parse.R +++ b/R/model_parse.R @@ -1,7 +1,7 @@ #' Parses inlabru::bru model output to create a list of model parameters #' #' @param model_output Output from running inlabru::bru -#' @param measurement_data Measurement data (can be numeric, SpatialPoints/SpatialPointsDataFrame, or simple feature collection) +#' @param measurement_data Measurement data (can be data.frame, SpatialPoints/SpatialPointsDataFrame, or simple feature collection) #' #' @return Creates a list of model outputs for the first timestep, including fitted mean and sd, mean of fixed effects, mean and sd of random effects, posterior hyperparameters, and DIC #' @keywords internal @@ -34,7 +34,7 @@ parse_model_output_bru <- function(model_output, measurement_data) { #' Parse model output to create a list of model parameters #' #' @param model_output Output returned by model (currently only from running inlabru::bru) -#' @param measurement_data Measurement data (can be numeric, SpatialPoints/SpatialPointsDataFrame, or simple feature collection) +#' @param measurement_data Measurement data (can be data.frame, SpatialPoints/SpatialPointsDataFrame, or simple feature collection) #' @param model_type Type of model, we currently only support inlabru #' #' @return Creates a list of model outputs, including fitted mean and sd, mean of fixed effects, mean and sd of random effects, posterior hyperparameters, and DIC diff --git a/R/plot_priors.R b/R/plot_priors.R index d6280a0a..d4312b8b 100644 --- a/R/plot_priors.R +++ b/R/plot_priors.R @@ -36,7 +36,7 @@ plot_priors_boxplot <- function(data) { #' #' #' @param data List of parsed model outputs from "parse_model_output" (a list of lists) -#' @param measurement_data Measurement data (can be numeric, SpatialPoints/SpatialPointsDataFrame, or simple feature collection) +#' @param measurement_data Measurement data (can be data.frame, SpatialPoints/SpatialPointsDataFrame, or simple feature collection) #' #' @return ggplot2::ggplot of measurement density by value plot_priors_density <- function(data, measurement_data) { diff --git a/R/shiny_modelviewer.R b/R/shiny_modelviewer.R index f633771d..7a8f5d76 100644 --- a/R/shiny_modelviewer.R +++ b/R/shiny_modelviewer.R @@ -2,7 +2,7 @@ #' #' @param model_output INLA/inlabru model output #' @param mesh INLA/fmesher mesh -#' @param measurement_data Measurement data (can be numeric, SpatialPoints/SpatialPointsDataFrame, or simple feature collection) +#' @param measurement_data Measurement data (can be data.frame, SpatialPoints/SpatialPointsDataFrame, or simple feature collection) #' @param data_distribution Type of data, Poisson or Gaussian #' #' @importFrom magrittr %>% @@ -299,7 +299,7 @@ model_viewer_shiny <- function(model_output, mesh, measurement_data, data_distri #' #' @param model_output INLA/inlabru model output #' @param mesh INLA/fmesher mesh used for the run -#' @param measurement_data Measurement data used for the run (sp) +#' @param measurement_data Measurement data used for the run (can be data.frame, SpatialPoints/SpatialPointsDataFrame, or simple feature collection) #' @param data_distribution Type of data, Poisson or Gaussian (character) #' #' @return shiny::app with model viewer functionality From e672be907a7289c552f078731565a2e26cbcb2a2 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Mon, 23 Sep 2024 00:23:08 +0100 Subject: [PATCH 59/74] Added more information to the docs --- R/plot_mapping.R | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/R/plot_mapping.R b/R/plot_mapping.R index bc79a9dd..a9be9463 100644 --- a/R/plot_mapping.R +++ b/R/plot_mapping.R @@ -6,10 +6,10 @@ #' The leaflet backend will work for most use cases and is recommended. #' For plotting of maps with UTM coordinates, the mapview backend is recommended. #' -#' @param polygon_data Polygon data -#' @param raster_data Raster datas -#' @param domain Domain data to be passed to leaflet::colorNumeric and leaflet::addLegend -#' @param markers Markers to display on map. A named list with latitude, longitude and label names must be given. +#' @param polygon_data Polygon data (SpatialPolygon or SpatialPolygonDataFrame) +#' @param raster_data Raster data (RasterLayer or SpatialRaster) +#' @param domain Domain data (numeric or factor) to be passed to leaflet::colorNumeric and leaflet::addLegend +#' @param markers Markers to display on map. A named list or data.frame with latitude, longitude and label names must be given. #' @param palette Palette to be used for colours, defaults to viridis #' @param legend_title Title for legend #' @param add_scale_bar Add scale bar if TRUE @@ -71,10 +71,10 @@ plot_map <- function(polygon_data = NULL, #' Create a simple Leaflet map from data #' -#' @param polygon_data Polygon data -#' @param raster_data Raster data -#' @param domain Domain data to be passed to leaflet::colorNumeric and leaflet::addLegend -#' @param markers Markers to display on map. A named list with latitude, longitude and label names must be given. +#' @param polygon_data Polygon data (SpatialPolygon or SpatialPolygonDataFrame) +#' @param raster_data Raster data (RasterLayer or SpatialRaster) +#' @param domain Domain data (numeric or factor) to be passed to leaflet::colorNumeric and leaflet::addLegend +#' @param markers Markers to display on map. A named list or data.frame with latitude, longitude and label names must be given. #' @param palette Palette to be used for colours, defaults to viridis #' @param legend_title Title for legend #' @param add_scale_bar Add scale bar if TRUE From e951927eaf7d446c9ebd7bde97ae92e2bb04c5c3 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Mon, 23 Sep 2024 10:18:51 +0100 Subject: [PATCH 60/74] Updated plot_graph --- R/plot_graph.R | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/R/plot_graph.R b/R/plot_graph.R index 5bc8beb8..c486936a 100644 --- a/R/plot_graph.R +++ b/R/plot_graph.R @@ -1,9 +1,9 @@ #' Plot a bar chart using ggplot2 #' -#' @param data Data to plot -#' @param x x-axis data +#' @param data Data to plot (all data types recognised by ggplot2::geom_bar() like data.frame) +#' @param x x-axis data, must be a Date object #' @param y y-axis data -#' @param breaks Break points +#' @param breaks Break points, must be a sequence of dates #' @param x_label x-axis label #' @param y_label y-axis label #' @param fill Fill colour @@ -47,10 +47,10 @@ plot_barchart <- function(data, x, y, breaks, x_label, y_label, fill = "pink", c #' Plot a boxplot using ggplot2 #' -#' @param data Data to plot -#' @param x x-axis data +#' @param data Data to plot (all data types recognised by ggplot2::geom_boxplot() like data.frame) +#' @param x x-axis data, must be a Date object #' @param y y-axis data -#' @param breaks Break points +#' @param breaks Break points, must be a sequence of dates #' @param x_label x-axis label #' @param y_label y-axis label #' @@ -82,10 +82,10 @@ plot_boxplot <- function(data, x, y, breaks, x_label, y_label) { #' Plot timeseries data #' -#' @param data Data to plot -#' @param x Name of column to plot on x-axis, should be datetime, will be converted to Dates using as.Date +#' @param data Data to plot (data.frame with x-axis a character convertible to Date) +#' @param x Name of column to plot on x-axis #' @param y Name of column to plot on y-axis -#' @param breaks Date break points +#' @param breaks Date break points, must be a sequence of dates #' @param x_label x-axis label #' @param y_label y-axis label #' @param title Figure title @@ -93,8 +93,8 @@ plot_boxplot <- function(data, x, y, breaks, x_label, y_label) { #' @param line_colour Line colour #' @param horizontal_y y-intercept for horizontal line #' @param vertical_x x-intercept for vertical line -#' @param x_lim Limits for x-axis continous scale, vector passed to scale_x_continuous -#' @param y_lim Limits for y-axis continuous scale, vector passed to scale_y_continous +#' @param x_lim Limits for x-axis continuous scale, vector passed to scale_x_continuous +#' @param y_lim Limits for y-axis continuous scale, vector passed to scale_y_continuous #' #' @return ggplot #' @export @@ -172,12 +172,12 @@ plot_timeseries <- function(data, #' Create a line plot with a confidence interval. #' -#' @param data Data to plot -#' @param x x-axis data +#' @param data Data to plot (all data types recognised by ggplot2::geom_line() like data.frame) +#' @param x x-axis data, must be a Date object #' @param y1 y1 line data - solid #' @param y2 y2 line data - dashed #' @param y3 y3 line data - dashed -#' @param breaks Breaks vector +#' @param breaks Breaks vector, must be a sequence of dates #' @param x_label x-axis label #' @param y_label y-axis label #' @param y1_colour Colour for y1 From efa4144865eeba27988b2ca66103523d4431a41f Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Mon, 23 Sep 2024 10:21:09 +0100 Subject: [PATCH 61/74] Another small update to plot_graph --- R/plot_graph.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/plot_graph.R b/R/plot_graph.R index c486936a..153abe2d 100644 --- a/R/plot_graph.R +++ b/R/plot_graph.R @@ -82,7 +82,7 @@ plot_boxplot <- function(data, x, y, breaks, x_label, y_label) { #' Plot timeseries data #' -#' @param data Data to plot (data.frame with x-axis a character convertible to Date) +#' @param data Data to plot (data.frame with x-axis column a character convertible to Date) #' @param x Name of column to plot on x-axis #' @param y Name of column to plot on y-axis #' @param breaks Date break points, must be a sequence of dates From 4a1c27950cc0b71d295eb6fd0a11ec6ad6aa7f65 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Mon, 23 Sep 2024 10:22:26 +0100 Subject: [PATCH 62/74] Updated doc --- man/create_prediction_field.Rd | 12 ++++++------ man/mesh_builder.Rd | 4 ++-- man/mesh_checker.Rd | 4 ++-- man/mesh_to_spatial.Rd | 6 +++--- man/meshbuilder_shiny.Rd | 4 ++-- man/model_builder.Rd | 10 +++++----- man/model_builder_shiny.Rd | 12 ++++++------ man/model_viewer.Rd | 10 +++++----- man/model_viewer_shiny.Rd | 8 ++++---- man/parse_model_output.Rd | 8 ++++---- man/parse_model_output_bru.Rd | 4 ++-- man/plot_barchart.Rd | 6 +++--- man/plot_boxplot.Rd | 6 +++--- man/plot_dic.Rd | 4 ++-- man/plot_line_average.Rd | 6 +++--- man/plot_line_comparison.Rd | 8 +++++--- man/plot_map.Rd | 8 ++++---- man/plot_map_leaflet.Rd | 8 ++++---- man/plot_mesh.Rd | 8 ++++---- man/plot_priors_boxplot.Rd | 4 ++-- man/plot_priors_density.Rd | 6 +++--- man/plot_timeseries.Rd | 10 +++++----- 22 files changed, 79 insertions(+), 77 deletions(-) diff --git a/man/create_prediction_field.Rd b/man/create_prediction_field.Rd index aa3a115a..cc3dd09e 100644 --- a/man/create_prediction_field.Rd +++ b/man/create_prediction_field.Rd @@ -13,18 +13,18 @@ create_prediction_field( ) } \arguments{ -\item{mesh}{INLA mesh} +\item{mesh}{INLA/fmesher mesh} -\item{plot_type}{Type of plot to create, "predicted_mean_fields" etc} +\item{plot_type}{Type of plot to create, "predicted_mean_fields" or "random_mean_fields"} -\item{data_dist}{Type of data, "poisson" etc} +\item{data_dist}{Type of data, "poisson" or "gaussian"} -\item{var_a}{Data for variable a, required for "predicted_mean_fields" and "random_effect_fields"} +\item{var_a}{Data for variable a (numeric), required for "predicted_mean_fields" and "random_effect_fields"; normally, random effect field from "summary.random$f"} -\item{var_b}{Data for variable b, required for "predicted_mean_fields"} +\item{var_b}{Data for variable b (numeric), required for "predicted_mean_fields"; normally, fixed effect from "summary.fixed"} } \value{ -data.frame +data.frame with mesh node latlong coordinates (x, y) and the selected field values at the mesh nodes (z) } \description{ Create a prediction field from the parsed model output and the mesh diff --git a/man/mesh_builder.Rd b/man/mesh_builder.Rd index b8b00eee..dc884678 100644 --- a/man/mesh_builder.Rd +++ b/man/mesh_builder.Rd @@ -16,7 +16,7 @@ mesh_builder( ) } \arguments{ -\item{spatial_data}{Spatial data} +\item{spatial_data}{Spatial data (must be a data.frame, SpatialPointsDataFrame or SpatialPolygonsDataFrame)} \item{obs_data}{Measurement data} @@ -33,7 +33,7 @@ mesh_builder( \item{x_coord}{Name of the longitude column in the spatial data} } \value{ -shiny::app +shiny::app with meshbuilder functionality } \description{ Mesh building shiny app. Creates and visualises a mesh from some spatial data. diff --git a/man/mesh_checker.Rd b/man/mesh_checker.Rd index 186009ff..0300b0dd 100644 --- a/man/mesh_checker.Rd +++ b/man/mesh_checker.Rd @@ -12,9 +12,9 @@ mesh_checker(mesh, observations) } \arguments{ -\item{mesh}{INLA mesh} +\item{mesh}{INLA/fmesher mesh} -\item{observations}{Observations data to be used woith model} +\item{observations}{Observations data to be used with model (can be data.frame, SpatialPoints/SpatialPointsDataFrame, or simple feature collection)} } \value{ list: Named list containing errors diff --git a/man/mesh_to_spatial.Rd b/man/mesh_to_spatial.Rd index d5b8481f..160b0ec3 100644 --- a/man/mesh_to_spatial.Rd +++ b/man/mesh_to_spatial.Rd @@ -7,12 +7,12 @@ mesh_to_spatial(mesh, crs) } \arguments{ -\item{mesh}{Mesh} +\item{mesh}{Mesh object from INLA or fmesher (only R2 manifolds are valid)} -\item{crs}{Coordinate Reference System as proj4string} +\item{crs}{Coordinate Reference System as proj4string, does not support geocentric coordinates} } \value{ -SpatialPolygonsDataFrame +SpatialPolygonsDataFrame with mesh triangles } \description{ Convert an INLA mesh to a SpatialPolygonsDataFrame diff --git a/man/meshbuilder_shiny.Rd b/man/meshbuilder_shiny.Rd index 27656e22..b8d5f405 100644 --- a/man/meshbuilder_shiny.Rd +++ b/man/meshbuilder_shiny.Rd @@ -17,7 +17,7 @@ meshbuilder_shiny( ) } \arguments{ -\item{spatial_data}{Spatial data} +\item{spatial_data}{Spatial data (must be a data.frame, SpatialPointsDataFrame or SpatialPolygonsDataFrame)} \item{obs_data}{Measurement data} @@ -34,7 +34,7 @@ meshbuilder_shiny( \item{x_coord}{Name of the longitude column in the spatial data} } \value{ -shiny::app +shiny::app with meshbuilder functionality } \description{ Mesh building shiny app diff --git a/man/model_builder.Rd b/man/model_builder.Rd index c9f43df0..3ea0ac14 100644 --- a/man/model_builder.Rd +++ b/man/model_builder.Rd @@ -16,16 +16,16 @@ model_builder( \arguments{ \item{spatial_data}{Spatial data} -\item{measurement_data}{Measurement data} +\item{measurement_data}{Measurement data (data.frame, SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements)} -\item{time_variable}{Time variable in measurement_data} +\item{time_variable}{Time variable name in measurement_data} -\item{mesh}{INLA mesh} +\item{mesh}{INLA/fmesher mesh} -\item{log_folder}{Folder to write logs to} +\item{log_folder}{Folder to write logs to (character)} } \value{ -shiny::app +shiny::app with model builder functionality } \description{ Interactively set and see the result of different priors diff --git a/man/model_builder_shiny.Rd b/man/model_builder_shiny.Rd index e48b0332..22baa871 100644 --- a/man/model_builder_shiny.Rd +++ b/man/model_builder_shiny.Rd @@ -14,20 +14,20 @@ model_builder_shiny( ) } \arguments{ -\item{spatial_data}{Spatial data} +\item{spatial_data}{Spatial data (must be SpatialPoints or SpatialPointsDataFrame)} -\item{measurement_data}{Measurement data} +\item{measurement_data}{Measurement data (data.frame, SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements)} -\item{time_variable}{Time variable in measurement_data} +\item{time_variable}{Time variable name in measurement_data} -\item{mesh}{INLA mesh} +\item{mesh}{INLA/fmesher mesh} \item{data_distribution}{Data distribution, Poisson or Gaussian} -\item{log_folder}{Folder to write out logs} +\item{log_folder}{Folder to write out logs (character)} } \value{ -shiny::app +shiny::app with model builder functionality } \description{ Interactively set and see the result of different priors diff --git a/man/model_viewer.Rd b/man/model_viewer.Rd index 8ea96f7e..6a4aa8be 100644 --- a/man/model_viewer.Rd +++ b/man/model_viewer.Rd @@ -12,16 +12,16 @@ model_viewer( ) } \arguments{ -\item{model_output}{INLA model output} +\item{model_output}{INLA/inlabru model output} -\item{mesh}{INLA mesh} +\item{mesh}{INLA/fmesher mesh used for the run} -\item{measurement_data}{Measurement data} +\item{measurement_data}{Measurement data used for the run (can be data.frame, SpatialPoints/SpatialPointsDataFrame, or simple feature collection)} -\item{data_distribution}{Type of data, Poisson or Gaussian} +\item{data_distribution}{Type of data, Poisson or Gaussian (character)} } \value{ -shiny::app +shiny::app with model viewer functionality } \description{ Mesh building shiny app. Creates and visualises a mesh from some spatial data. diff --git a/man/model_viewer_shiny.Rd b/man/model_viewer_shiny.Rd index 1e0fbcb9..471d154e 100644 --- a/man/model_viewer_shiny.Rd +++ b/man/model_viewer_shiny.Rd @@ -7,16 +7,16 @@ model_viewer_shiny(model_output, mesh, measurement_data, data_distribution) } \arguments{ -\item{model_output}{INLA model output} +\item{model_output}{INLA/inlabru model output} -\item{mesh}{INLA mesh} +\item{mesh}{INLA/fmesher mesh} -\item{measurement_data}{Measurement data} +\item{measurement_data}{Measurement data (can be data.frame, SpatialPoints/SpatialPointsDataFrame, or simple feature collection)} \item{data_distribution}{Type of data, Poisson or Gaussian} } \value{ -shiny::app +shiny::app with model viewer functionality } \description{ Parse inlabru model output diff --git a/man/parse_model_output.Rd b/man/parse_model_output.Rd index 9caa7b9c..ca0fbeea 100644 --- a/man/parse_model_output.Rd +++ b/man/parse_model_output.Rd @@ -7,14 +7,14 @@ parse_model_output(model_output, measurement_data, model_type = "inlabru") } \arguments{ -\item{model_output}{Data returned by model} +\item{model_output}{Output returned by model (currently only from running inlabru::bru)} -\item{measurement_data}{Measurement data} +\item{measurement_data}{Measurement data (can be data.frame, SpatialPoints/SpatialPointsDataFrame, or simple feature collection)} -\item{model_type}{Type of model, we currently support inlabru} +\item{model_type}{Type of model, we currently only support inlabru} } \value{ -list +Creates a list of model outputs, including fitted mean and sd, mean of fixed effects, mean and sd of random effects, posterior hyperparameters, and DIC } \description{ Parse model output to create a list of model parameters diff --git a/man/parse_model_output_bru.Rd b/man/parse_model_output_bru.Rd index f5439cee..42fbb435 100644 --- a/man/parse_model_output_bru.Rd +++ b/man/parse_model_output_bru.Rd @@ -9,10 +9,10 @@ parse_model_output_bru(model_output, measurement_data) \arguments{ \item{model_output}{Output from running inlabru::bru} -\item{measurement_data}{Measurement data} +\item{measurement_data}{Measurement data (can be data.frame, SpatialPoints/SpatialPointsDataFrame, or simple feature collection)} } \value{ -list +Creates a list of model outputs for the first timestep, including fitted mean and sd, mean of fixed effects, mean and sd of random effects, posterior hyperparameters, and DIC } \description{ Parses inlabru::bru model output to create a list of model parameters diff --git a/man/plot_barchart.Rd b/man/plot_barchart.Rd index 27832e92..b02b0213 100644 --- a/man/plot_barchart.Rd +++ b/man/plot_barchart.Rd @@ -16,13 +16,13 @@ plot_barchart( ) } \arguments{ -\item{data}{Data to plot} +\item{data}{Data to plot (all data types recognised by ggplot2::geom_bar() like data.frame)} -\item{x}{x-axis data} +\item{x}{x-axis data, must be a Date object} \item{y}{y-axis data} -\item{breaks}{Break points} +\item{breaks}{Break points, must be a sequence of dates} \item{x_label}{x-axis label} diff --git a/man/plot_boxplot.Rd b/man/plot_boxplot.Rd index 6e3477e5..41398dcd 100644 --- a/man/plot_boxplot.Rd +++ b/man/plot_boxplot.Rd @@ -7,13 +7,13 @@ plot_boxplot(data, x, y, breaks, x_label, y_label) } \arguments{ -\item{data}{Data to plot} +\item{data}{Data to plot (all data types recognised by ggplot2::geom_boxplot() like data.frame)} -\item{x}{x-axis data} +\item{x}{x-axis data, must be a Date object} \item{y}{y-axis data} -\item{breaks}{Break points} +\item{breaks}{Break points, must be a sequence of dates} \item{x_label}{x-axis label} diff --git a/man/plot_dic.Rd b/man/plot_dic.Rd index b92fa7d9..631813e0 100644 --- a/man/plot_dic.Rd +++ b/man/plot_dic.Rd @@ -7,10 +7,10 @@ plot_dic(data) } \arguments{ -\item{data}{} +\item{data}{List of parsed model outputs from "parse_model_output" (a list of lists)} } \value{ -ggplot2::ggplot +ggplot2::ggplot with DIC values shown as points } \description{ Plot Deviance Information Criterion (DIC) values diff --git a/man/plot_line_average.Rd b/man/plot_line_average.Rd index 778408f9..d9ee39c9 100644 --- a/man/plot_line_average.Rd +++ b/man/plot_line_average.Rd @@ -21,9 +21,9 @@ plot_line_average( ) } \arguments{ -\item{data}{Data to plot} +\item{data}{Data to plot (all data types recognised by ggplot2::geom_line() like data.frame)} -\item{x}{x-axis data} +\item{x}{x-axis data, must be a Date object} \item{y1}{y1 line data - solid} @@ -31,7 +31,7 @@ plot_line_average( \item{y3}{y3 line data - dashed} -\item{breaks}{Breaks vector} +\item{breaks}{Breaks vector, must be a sequence of dates} \item{x_label}{x-axis label} diff --git a/man/plot_line_comparison.Rd b/man/plot_line_comparison.Rd index b185b7d4..7846a69f 100644 --- a/man/plot_line_comparison.Rd +++ b/man/plot_line_comparison.Rd @@ -4,15 +4,17 @@ \alias{plot_line_comparison} \title{Plot line comparison for stdev etc} \usage{ -plot_line_comparison(data, to_plot, title) +plot_line_comparison(data, to_plot, title = to_plot) } \arguments{ -\item{data}{Parsed model output} +\item{data}{List of parsed model outputs from "parse_model_output" (a list of lists)} \item{to_plot}{Type of data to plot, "Range for f" etc} + +\item{title}{Title of the plot, defaults to the value of "to_plot"} } \value{ -ggplot2::ggplot +ggplot2::ggplot of the selected hyperparameter posterior distribution } \description{ Plot line comparison for stdev etc diff --git a/man/plot_map.Rd b/man/plot_map.Rd index 75c2f3d9..5f039cf0 100644 --- a/man/plot_map.Rd +++ b/man/plot_map.Rd @@ -22,13 +22,13 @@ plot_map( ) } \arguments{ -\item{polygon_data}{Polygon data} +\item{polygon_data}{Polygon data (SpatialPolygon or SpatialPolygonDataFrame)} -\item{raster_data}{Raster datas} +\item{raster_data}{Raster data (RasterLayer or SpatialRaster)} -\item{domain}{Domain data to be passed to leaflet::colorNumeric and leaflet::addLegend} +\item{domain}{Domain data (numeric or factor) to be passed to leaflet::colorNumeric and leaflet::addLegend} -\item{markers}{Markers to display on map. A named list with latitude, longitude and label names must be given.} +\item{markers}{Markers to display on map. A named list or data.frame with latitude, longitude and label names must be given.} \item{palette}{Palette to be used for colours, defaults to viridis} diff --git a/man/plot_map_leaflet.Rd b/man/plot_map_leaflet.Rd index b6e583c5..cb07cfeb 100644 --- a/man/plot_map_leaflet.Rd +++ b/man/plot_map_leaflet.Rd @@ -21,13 +21,13 @@ plot_map_leaflet( ) } \arguments{ -\item{polygon_data}{Polygon data} +\item{polygon_data}{Polygon data (SpatialPolygon or SpatialPolygonDataFrame)} -\item{raster_data}{Raster data} +\item{raster_data}{Raster data (RasterLayer or SpatialRaster)} -\item{domain}{Domain data to be passed to leaflet::colorNumeric and leaflet::addLegend} +\item{domain}{Domain data (numeric or factor) to be passed to leaflet::colorNumeric and leaflet::addLegend} -\item{markers}{Markers to display on map. A named list with latitude, longitude and label names must be given.} +\item{markers}{Markers to display on map. A named list or data.frame with latitude, longitude and label names must be given.} \item{palette}{Palette to be used for colours, defaults to viridis} diff --git a/man/plot_mesh.Rd b/man/plot_mesh.Rd index 9656973d..0bf7e75f 100644 --- a/man/plot_mesh.Rd +++ b/man/plot_mesh.Rd @@ -13,20 +13,20 @@ plot_mesh( ) } \arguments{ -\item{mesh}{Mesh data} +\item{mesh}{Mesh object from INLA or fmesher} \item{spatial_data}{Spatial data, either a SpatialPolygonsDataFrame, SpatialPointsDataFrame or an object that can be converted to a data.frame with longitude and latitude columns} -\item{longitude_column}{Longitude column in spatial_data} +\item{longitude_column}{Longitude column name in spatial_data} -\item{latitude_column}{Latitude column in spatial_data name} +\item{latitude_column}{Latitude column name in spatial_data} \item{markers}{Markers to display on top of mesh. A named list with latitude, longitude and label names must be given. Expects longitude name to be longitude, latitude name to be latitude, label name to be label.} } \value{ -leaflet::leaflet +leaflet::leaflet with mesh and markers } \description{ Plot a mesh on a Leaflet map diff --git a/man/plot_priors_boxplot.Rd b/man/plot_priors_boxplot.Rd index e7ee38dc..b1d9178b 100644 --- a/man/plot_priors_boxplot.Rd +++ b/man/plot_priors_boxplot.Rd @@ -7,10 +7,10 @@ plot_priors_boxplot(data) } \arguments{ -\item{data}{} +\item{data}{A list of parsed model output from "parse_model_output" (a list of lists)} } \value{ -graphics::boxplot +graphics::boxplot of fitted values } \description{ Create boxplots from priors run data diff --git a/man/plot_priors_density.Rd b/man/plot_priors_density.Rd index c840ab5c..8b827017 100644 --- a/man/plot_priors_density.Rd +++ b/man/plot_priors_density.Rd @@ -7,12 +7,12 @@ plot_priors_density(data, measurement_data) } \arguments{ -\item{data}{Parsed model outputs} +\item{data}{List of parsed model outputs from "parse_model_output" (a list of lists)} -\item{measurement_data}{Measurement data} +\item{measurement_data}{Measurement data (can be data.frame, SpatialPoints/SpatialPointsDataFrame, or simple feature collection)} } \value{ -ggplot2::ggplot +ggplot2::ggplot of measurement density by value } \description{ Plot density function diff --git a/man/plot_timeseries.Rd b/man/plot_timeseries.Rd index 1c948b7c..3cbb1a41 100644 --- a/man/plot_timeseries.Rd +++ b/man/plot_timeseries.Rd @@ -20,13 +20,13 @@ plot_timeseries( ) } \arguments{ -\item{data}{Data to plot} +\item{data}{Data to plot (data.frame with x-axis column a character convertible to Date)} -\item{x}{Name of column to plot on x-axis, should be datetime, will be converted to Dates using as.Date} +\item{x}{Name of column to plot on x-axis} \item{y}{Name of column to plot on y-axis} -\item{breaks}{Date break points} +\item{breaks}{Date break points, must be a sequence of dates} \item{x_label}{x-axis label} @@ -40,9 +40,9 @@ plot_timeseries( \item{vertical_x}{x-intercept for vertical line} -\item{x_lim}{Limits for x-axis continous scale, vector passed to scale_x_continuous} +\item{x_lim}{Limits for x-axis continuous scale, vector passed to scale_x_continuous} -\item{y_lim}{Limits for y-axis continuous scale, vector passed to scale_y_continous} +\item{y_lim}{Limits for y-axis continuous scale, vector passed to scale_y_continuous} \item{line_width}{Line width} } From b6ee2bded2141adb2f4222be29ce52a64dc4a0fc Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Mon, 23 Sep 2024 10:36:59 +0100 Subject: [PATCH 63/74] Update CHANGELOG.md --- CHANGELOG.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d2ff42d..ea84989e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed -- Added to `retrieve_tutorial_data` an option to save tutorial data at user-specified location or in a temporary directory as default - [PR #330](https://github.com/4DModeller/fdmr/pull/330) +- Updated documentation for all functions to reflect better the inputs and outputs - [PR #332](https://github.com/4DModeller/fdmr/pull/332) +- Fixed an error in `model_viewer` description - [PR #331](https://github.com/4DModeller/fdmr/pull/331) +- Added to `retrieve_tutorial_data` an option to save tutorial data at a user-specified location or in a temporary directory as default - [PR #330](https://github.com/4DModeller/fdmr/pull/330) - Fixed `model_viewer` app to work with random effect models - [PR #317](https://github.com/4DModeller/fdmr/pull/317) - Updated `plot_map_leaflet` to feature the same selection of basemap tiles as `mapview` and fix features not appearing - [PR #310](https://github.com/4DModeller/fdmr/pull/310) From e5ff9e1067cf523daa8f2d9923c517fd697ae11c Mon Sep 17 00:00:00 2001 From: John Aiken Date: Sat, 12 Oct 2024 14:25:18 +0000 Subject: [PATCH 64/74] added install INLA to the quickstart --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7a25c950..8e028055 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ The easiest way to do this is to [install RStudio](https://posit.co/downloads/). Next start an R session and run ```R +install.packages("INLA") install.packages("devtools") library(devtools) devtools::install_github("4DModeller/fdmr") From 3b65174de30223d74e9ad8875f43ced3c7d865b1 Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Thu, 17 Oct 2024 09:52:50 +0100 Subject: [PATCH 65/74] Correction to install INLA --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8e028055..48560f20 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ The easiest way to do this is to [install RStudio](https://posit.co/downloads/). Next start an R session and run ```R -install.packages("INLA") +install.packages("INLA", repos=c(getOption("repos"), INLA="https://inla.r-inla-download.org/R/stable"), dep=TRUE) install.packages("devtools") library(devtools) devtools::install_github("4DModeller/fdmr") From 2b45c95f93c39b159b348257dcd5af5ac7dbdc89 Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Sat, 16 Nov 2024 09:43:27 +0000 Subject: [PATCH 66/74] Update README.md Changed it from the "stable" to "testing". It shouldn't cause issues as the R-CMD-check already has the testing version as a requirement. --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 48560f20..e56157bf 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ The easiest way to do this is to [install RStudio](https://posit.co/downloads/). Next start an R session and run ```R -install.packages("INLA", repos=c(getOption("repos"), INLA="https://inla.r-inla-download.org/R/stable"), dep=TRUE) +install.packages("INLA", repos=c(getOption("repos"), INLA="https://inla.r-inla-download.org/R/testing"), dep=TRUE) install.packages("devtools") library(devtools) devtools::install_github("4DModeller/fdmr") @@ -38,6 +38,8 @@ devtools::install_github("4DModeller/fdmr") You should now have `fdmr` and all its dependencies installed and you can continue on [one of our tutorials](https://4dmodeller.github.io/fdmr/articles/). +If your installation of `INLA` fails, please consult the [R-INLA website](https://www.r-inla.org/download-install) for platform-specific instructions. + ## Installation On most systems the commands above should get you up and running. On some Linux systems we've found the need to From 595a86b96eae95a9903a20455edaa0d25a6fa2cd Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Wed, 18 Dec 2024 11:37:06 +0000 Subject: [PATCH 67/74] Removing the non-numeric or non-logical variables from the model features options --- R/shiny_modelbuilder.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/shiny_modelbuilder.R b/R/shiny_modelbuilder.R index b390c826..577fcdd9 100644 --- a/R/shiny_modelbuilder.R +++ b/R/shiny_modelbuilder.R @@ -1,7 +1,7 @@ #' Interactively set and see the result of different priors #' #' @param spatial_data Spatial data (must be SpatialPoints or SpatialPointsDataFrame) -#' @param measurement_data Measurement data (data.frame, SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements) +#' @param measurement_data Measurement data (SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements) #' @param time_variable Time variable name in measurement_data #' @param mesh INLA/fmesher mesh #' @param data_distribution Data distribution, Poisson or Gaussian @@ -65,7 +65,7 @@ model_builder_shiny <- function(spatial_data, citation_control_group <- "Prior explanation text modified from https://www.paulamoraga.com/book-geospatial/sec-geostatisticaldataexamplest.html" initial_equation_val <- "formula <- model_var ~ 0 + Intercept(1)" - features <- names(measurement_data) + features <- names(measurement_data@data[base::sapply(measurement_data@data, is.numeric) | base::sapply(measurement_data@data, is.logical)]) if (is.null(features)) { stop("We require the columns of measurement_data to have the names of the features to use in the model.") } @@ -697,7 +697,7 @@ model_builder_shiny <- function(spatial_data, #' Interactively set and see the result of different priors #' #' @param spatial_data Spatial data -#' @param measurement_data Measurement data (data.frame, SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements) +#' @param measurement_data Measurement data (SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements) #' @param time_variable Time variable name in measurement_data #' @param mesh INLA/fmesher mesh #' @param log_folder Folder to write logs to (character) From c5f64d3e9cf3bb86181647931b7347e3e6ad6046 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Wed, 18 Dec 2024 11:40:07 +0000 Subject: [PATCH 68/74] Updated the docs. Passing a "data.frame" to measurement_data in "model_builder" would fail with the latest changes. --- man/model_builder.Rd | 2 +- man/model_builder_shiny.Rd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/man/model_builder.Rd b/man/model_builder.Rd index 3ea0ac14..d8b83742 100644 --- a/man/model_builder.Rd +++ b/man/model_builder.Rd @@ -16,7 +16,7 @@ model_builder( \arguments{ \item{spatial_data}{Spatial data} -\item{measurement_data}{Measurement data (data.frame, SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements)} +\item{measurement_data}{Measurement data (SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements)} \item{time_variable}{Time variable name in measurement_data} diff --git a/man/model_builder_shiny.Rd b/man/model_builder_shiny.Rd index 22baa871..e7281970 100644 --- a/man/model_builder_shiny.Rd +++ b/man/model_builder_shiny.Rd @@ -16,7 +16,7 @@ model_builder_shiny( \arguments{ \item{spatial_data}{Spatial data (must be SpatialPoints or SpatialPointsDataFrame)} -\item{measurement_data}{Measurement data (data.frame, SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements)} +\item{measurement_data}{Measurement data (SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements)} \item{time_variable}{Time variable name in measurement_data} From fb21bec0dcf85d548333077743df2cf9725e1278 Mon Sep 17 00:00:00 2001 From: Anrijs Abele Date: Wed, 18 Dec 2024 11:49:45 +0000 Subject: [PATCH 69/74] Removing the non-numeric or non-logical variables from the model features options --- DESCRIPTION | 2 +- R/shiny_modelbuilder.R | 6 +++--- man/model_builder.Rd | 2 +- man/model_builder_shiny.Rd | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 08d10885..4ebd2bf9 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -16,7 +16,7 @@ BugReports: https://github.com/4DModeller/fdmr/issues License: GPL (>= 3) Encoding: UTF-8 Roxygen: list(markdown = TRUE) -RoxygenNote: 7.2.3 +RoxygenNote: 7.3.2 Additional_repositories: https://inla.r-inla-download.org/R/testing Imports: colorspace, diff --git a/R/shiny_modelbuilder.R b/R/shiny_modelbuilder.R index b390c826..577fcdd9 100644 --- a/R/shiny_modelbuilder.R +++ b/R/shiny_modelbuilder.R @@ -1,7 +1,7 @@ #' Interactively set and see the result of different priors #' #' @param spatial_data Spatial data (must be SpatialPoints or SpatialPointsDataFrame) -#' @param measurement_data Measurement data (data.frame, SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements) +#' @param measurement_data Measurement data (SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements) #' @param time_variable Time variable name in measurement_data #' @param mesh INLA/fmesher mesh #' @param data_distribution Data distribution, Poisson or Gaussian @@ -65,7 +65,7 @@ model_builder_shiny <- function(spatial_data, citation_control_group <- "Prior explanation text modified from https://www.paulamoraga.com/book-geospatial/sec-geostatisticaldataexamplest.html" initial_equation_val <- "formula <- model_var ~ 0 + Intercept(1)" - features <- names(measurement_data) + features <- names(measurement_data@data[base::sapply(measurement_data@data, is.numeric) | base::sapply(measurement_data@data, is.logical)]) if (is.null(features)) { stop("We require the columns of measurement_data to have the names of the features to use in the model.") } @@ -697,7 +697,7 @@ model_builder_shiny <- function(spatial_data, #' Interactively set and see the result of different priors #' #' @param spatial_data Spatial data -#' @param measurement_data Measurement data (data.frame, SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements) +#' @param measurement_data Measurement data (SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements) #' @param time_variable Time variable name in measurement_data #' @param mesh INLA/fmesher mesh #' @param log_folder Folder to write logs to (character) diff --git a/man/model_builder.Rd b/man/model_builder.Rd index 3ea0ac14..d8b83742 100644 --- a/man/model_builder.Rd +++ b/man/model_builder.Rd @@ -16,7 +16,7 @@ model_builder( \arguments{ \item{spatial_data}{Spatial data} -\item{measurement_data}{Measurement data (data.frame, SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements)} +\item{measurement_data}{Measurement data (SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements)} \item{time_variable}{Time variable name in measurement_data} diff --git a/man/model_builder_shiny.Rd b/man/model_builder_shiny.Rd index 22baa871..e7281970 100644 --- a/man/model_builder_shiny.Rd +++ b/man/model_builder_shiny.Rd @@ -16,7 +16,7 @@ model_builder_shiny( \arguments{ \item{spatial_data}{Spatial data (must be SpatialPoints or SpatialPointsDataFrame)} -\item{measurement_data}{Measurement data (data.frame, SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements)} +\item{measurement_data}{Measurement data (SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements)} \item{time_variable}{Time variable name in measurement_data} From c8af62d69fec0f0ea535e02b48a18ed38a7c1405 Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Wed, 18 Dec 2024 11:58:28 +0000 Subject: [PATCH 70/74] Revert "Removing the non-numeric or non-logical variables from the model features options" This reverts commit 595a86b96eae95a9903a20455edaa0d25a6fa2cd. --- R/shiny_modelbuilder.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/shiny_modelbuilder.R b/R/shiny_modelbuilder.R index 577fcdd9..b390c826 100644 --- a/R/shiny_modelbuilder.R +++ b/R/shiny_modelbuilder.R @@ -1,7 +1,7 @@ #' Interactively set and see the result of different priors #' #' @param spatial_data Spatial data (must be SpatialPoints or SpatialPointsDataFrame) -#' @param measurement_data Measurement data (SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements) +#' @param measurement_data Measurement data (data.frame, SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements) #' @param time_variable Time variable name in measurement_data #' @param mesh INLA/fmesher mesh #' @param data_distribution Data distribution, Poisson or Gaussian @@ -65,7 +65,7 @@ model_builder_shiny <- function(spatial_data, citation_control_group <- "Prior explanation text modified from https://www.paulamoraga.com/book-geospatial/sec-geostatisticaldataexamplest.html" initial_equation_val <- "formula <- model_var ~ 0 + Intercept(1)" - features <- names(measurement_data@data[base::sapply(measurement_data@data, is.numeric) | base::sapply(measurement_data@data, is.logical)]) + features <- names(measurement_data) if (is.null(features)) { stop("We require the columns of measurement_data to have the names of the features to use in the model.") } @@ -697,7 +697,7 @@ model_builder_shiny <- function(spatial_data, #' Interactively set and see the result of different priors #' #' @param spatial_data Spatial data -#' @param measurement_data Measurement data (SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements) +#' @param measurement_data Measurement data (data.frame, SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements) #' @param time_variable Time variable name in measurement_data #' @param mesh INLA/fmesher mesh #' @param log_folder Folder to write logs to (character) From c22ce630ffec2451cd6a6ebc304e23dfd73132c5 Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Wed, 18 Dec 2024 11:58:33 +0000 Subject: [PATCH 71/74] Revert "Updated the docs. Passing a "data.frame" to measurement_data in "model_builder" would fail with the latest changes." This reverts commit c5f64d3e9cf3bb86181647931b7347e3e6ad6046. --- man/model_builder.Rd | 2 +- man/model_builder_shiny.Rd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/man/model_builder.Rd b/man/model_builder.Rd index d8b83742..3ea0ac14 100644 --- a/man/model_builder.Rd +++ b/man/model_builder.Rd @@ -16,7 +16,7 @@ model_builder( \arguments{ \item{spatial_data}{Spatial data} -\item{measurement_data}{Measurement data (SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements)} +\item{measurement_data}{Measurement data (data.frame, SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements)} \item{time_variable}{Time variable name in measurement_data} diff --git a/man/model_builder_shiny.Rd b/man/model_builder_shiny.Rd index e7281970..22baa871 100644 --- a/man/model_builder_shiny.Rd +++ b/man/model_builder_shiny.Rd @@ -16,7 +16,7 @@ model_builder_shiny( \arguments{ \item{spatial_data}{Spatial data (must be SpatialPoints or SpatialPointsDataFrame)} -\item{measurement_data}{Measurement data (SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements)} +\item{measurement_data}{Measurement data (data.frame, SpatialPointsDataFrame, SpatialPolygonsDataFrame with a named time column and at least 1 named feature column with measurements)} \item{time_variable}{Time variable name in measurement_data} From 7ee39ea4d872579f619426e8e574a670b99669b0 Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Wed, 18 Dec 2024 12:12:43 +0000 Subject: [PATCH 72/74] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea84989e..4e4f9cc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- Removed non-numeric/non-logical variable features from `shiny_modelbuilder` - [PR #341](https://github.com/4DModeller/fdmr/pull/341) - Updated documentation for all functions to reflect better the inputs and outputs - [PR #332](https://github.com/4DModeller/fdmr/pull/332) - Fixed an error in `model_viewer` description - [PR #331](https://github.com/4DModeller/fdmr/pull/331) - Added to `retrieve_tutorial_data` an option to save tutorial data at a user-specified location or in a temporary directory as default - [PR #330](https://github.com/4DModeller/fdmr/pull/330) From 24d1a62402eaad6465bd233784a0200f67bfaf9d Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Wed, 18 Dec 2024 21:17:20 +0000 Subject: [PATCH 73/74] Changed the default parameters --- R/shiny_meshbuilder.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/shiny_meshbuilder.R b/R/shiny_meshbuilder.R index 4202b78b..7ce5ed99 100644 --- a/R/shiny_meshbuilder.R +++ b/R/shiny_meshbuilder.R @@ -55,10 +55,10 @@ meshbuilder_shiny <- function( stop("Cannot read latitude and longitude data from spatial data. Please ensure given names are correct.") } - default_max_edge_min <- 0.01 - default_max_edge_max <- 0.3 + default_max_edge_min <- 0.9 + default_max_edge_max <- 1.8 default_offset_min <- 0.02 - default_offset_max <- 0.2 + default_offset_max <- 2 default_cutoff <- 0.02 # TODO - these defaults need changing? if (!is.null(max_edge)) { @@ -234,7 +234,7 @@ meshbuilder_shiny <- function( spatial_data } }) - + output$map <- leaflet::renderLeaflet({ map_tiles <- c("OpenStreetMap", "Esri.WorldImagery", "OpenTopoMap") m <- mapview::mapview(mesh_spatial(), layer.name = "Mesh", col.regions = "#548C2F", map.types = map_tiles) + mapview::mapview(spatial(), layer.name = "Spatial") From f6b844297155a7d60198ee2203296833138246b9 Mon Sep 17 00:00:00 2001 From: "Anrijs K. Abele" <57137242+aabelean@users.noreply.github.com> Date: Wed, 18 Dec 2024 21:42:16 +0000 Subject: [PATCH 74/74] Corrected the error in text --- vignettes/meshbuilder.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/meshbuilder.Rmd b/vignettes/meshbuilder.Rmd index 7a029780..0b586d50 100644 --- a/vignettes/meshbuilder.Rmd +++ b/vignettes/meshbuilder.Rmd @@ -54,7 +54,7 @@ sp_data <- fdmr::load_tutorial_data(dataset = "covid", filename = "spatial_data. head(sp_data) ``` -The `sp_data` object is a `SpatialPolygonsDataFrame` containing 6789 features for areas of England. This object contains all the contains all the values we +The `sp_data` object is a `SpatialPolygonsDataFrame` containing 6789 features for areas of England. This object contains all the values we need to build a mesh. We can build a mesh by passing `sp_data` to the `mesh_builder` function. ```{r eval=FALSE}