From 1a2b0c25ba7bfbf6280a29be7237c9eddd0477bd Mon Sep 17 00:00:00 2001 From: jkmusyoka Date: Thu, 13 Jun 2024 23:01:21 +0300 Subject: [PATCH] Initial commit --- .quarto/cites/index.json | 1 + ...aring_Data_from_Different_Sources.qmd.json | 1 + .quarto/idx/Chapter_11_Drawing_Maps.qmd.json | 1 + .quarto/idx/Chapter_12_Extremes.qmd.json | 1 + ..._13_PICSA__Long_Before_the_season.qmd.json | 1 + .../Chapter_14_The_Seasonal_forecast.qmd.json | 1 + ...tting_and_using_stochastic_models.qmd.json | 1 + .../idx/Chapter_16_Withinday_data.qmd.json | 1 + ...r_17_Circular_data_and_wind_roses.qmd.json | 1 + .quarto/idx/Chapter_18_Temperatures.qmd.json | 1 + .../Chapter_19_Drought_Indices__SPI.qmd.json | 1 + .../idx/Chapter_1_About_this_guide.qmd.json | 1 + .../idx/Chapter_20_Climate_Normals.qmd.json | 1 + .quarto/idx/Chapter_21_Various.qmd.json | 1 + .quarto/idx/Chapter_22_References.qmd.json | 1 + .quarto/idx/Chapter_23_Index.qmd.json | 1 + ...pter_2_More_Practice_with_RInstat.qmd.json | 1 + ...apter_3_Using_RInstat_effectively.qmd.json | 1 + ...ter_4_Getting_the_data_into_shape.qmd.json | 1 + .../Chapter_5_Quantity_and_quality.qmd.json | 1 + .../Chapter_6_Preparing_summaries.qmd.json | 1 + .../idx/Chapter_7_Tailored_Products.qmd.json | 1 + ..._8_Efficient_use_of_RInstat_and_R.qmd.json | 1 + .quarto/idx/Chapter_9_Gridded_Data.qmd.json | 1 + .quarto/idx/index.qmd.json | 1 + .quarto/xref/04bf8f47 | 1 + .quarto/xref/09d69ae9 | 1 + .quarto/xref/0b9f6219 | 1 + .quarto/xref/0d0c6dbf | 1 + .quarto/xref/1e20ec21 | 1 + .quarto/xref/2364b70b | 1 + .quarto/xref/245ad8c7 | 1 + .quarto/xref/27c0cb18 | 1 + .quarto/xref/281ba8de | 1 + .quarto/xref/2b2e672d | 1 + .quarto/xref/34b90079 | 1 + .quarto/xref/4cc833a0 | 1 + .quarto/xref/53fe8b05 | 1 + .quarto/xref/5eea7dbd | 1 + .quarto/xref/665fb489 | 1 + .quarto/xref/6c73654d | 1 + .quarto/xref/85b3c403 | 1 + .quarto/xref/86862ac5 | 1 + .quarto/xref/8b8d3e9d | 1 + .quarto/xref/8bd4f299 | 1 + .quarto/xref/8eca05bc | 1 + .quarto/xref/9df82ecb | 1 + .quarto/xref/INDEX | 89 + .quarto/xref/b8e82ca6 | 1 + .quarto/xref/bc681641 | 1 + .quarto/xref/c2e5a108 | 1 + .quarto/xref/cc18ed16 | 1 + .quarto/xref/eb1f944e | 1 + .quarto/xref/f0768d19 | 1 + .quarto/xref/f25506fb | 1 + ..._Comparing_Data_from_Different_Sources.qmd | 90 + Chapter_11_Drawing_Maps.qmd | 240 + Chapter_12_Extremes.qmd | 491 + Chapter_13_PICSA__Long_Before_the_season.qmd | 1268 ++ Chapter_14_The_Seasonal_forecast.qmd | 465 + ...15_Fitting_and_using_stochastic_models.qmd | 1 + Chapter_16_Withinday_data.qmd | 1 + Chapter_17_Circular_data_and_wind_roses.qmd | 908 + Chapter_18_Temperatures.qmd | 16 + Chapter_19_Drought_Indices__SPI.qmd | 165 + Chapter_1_About_this_guide.qmd | 245 + Chapter_20_Climate_Normals.qmd | 669 + Chapter_21_Various.qmd | 10 + Chapter_22_References.qmd | 96 + Chapter_23_Index.qmd | 297 + Chapter_2_More_Practice_with_RInstat.qmd | 702 + Chapter_3_Using_RInstat_effectively.qmd | 673 + Chapter_4_Getting_the_data_into_shape.qmd | 915 + Chapter_5_Quantity_and_quality.qmd | 562 + Chapter_6_Preparing_summaries.qmd | 999 + Chapter_7_Tailored_Products.qmd | 1399 ++ Chapter_8_Efficient_use_of_RInstat_and_R.qmd | 160 + Chapter_9_Gridded_Data.qmd | 729 + ...Comparing_Data_from_Different_Sources.html | 788 + _book/Chapter_11_Drawing_Maps.html | 987 + _book/Chapter_12_Extremes.html | 1357 ++ ...pter_13_PICSA__Long_Before_the_season.html | 1951 ++ _book/Chapter_14_The_Seasonal_forecast.html | 1152 ++ ...5_Fitting_and_using_stochastic_models.html | 724 + _book/Chapter_16_Withinday_data.html | 724 + ...apter_17_Circular_data_and_wind_roses.html | 1556 ++ _book/Chapter_18_Temperatures.html | 744 + _book/Chapter_19_Drought_Indices__SPI.html | 856 + _book/Chapter_1_About_this_guide.html | 823 + _book/Chapter_20_Climate_Normals.html | 1530 ++ _book/Chapter_21_Various.html | 742 + _book/Chapter_22_References.html | 749 + _book/Chapter_23_Index.html | 721 + .../Chapter_2_More_Practice_with_RInstat.html | 1376 ++ .../Chapter_3_Using_RInstat_effectively.html | 1294 ++ ...Chapter_4_Getting_the_data_into_shape.html | 1622 ++ _book/Chapter_5_Quantity_and_quality.html | 1281 ++ _book/Chapter_6_Preparing_summaries.html | 1688 ++ _book/Chapter_7_Tailored_Products.html | 1984 ++ ...pter_8_Efficient_use_of_RInstat_and_R.html | 819 + _book/Chapter_9_Gridded_Data.html | 1313 ++ _book/index.html | 744 + _book/site_libs/bootstrap/bootstrap-icons.css | 2078 +++ .../site_libs/bootstrap/bootstrap-icons.woff | Bin 0 -> 176200 bytes _book/site_libs/bootstrap/bootstrap.min.css | 12 + _book/site_libs/bootstrap/bootstrap.min.js | 7 + _book/site_libs/clipboard/clipboard.min.js | 7 + _book/site_libs/quarto-html/anchor.min.js | 9 + _book/site_libs/quarto-html/popper.min.js | 6 + .../quarto-syntax-highlighting.css | 205 + _book/site_libs/quarto-html/quarto.js | 908 + _book/site_libs/quarto-html/tippy.css | 1 + _book/site_libs/quarto-html/tippy.umd.min.js | 2 + _book/site_libs/quarto-nav/headroom.min.js | 7 + _book/site_libs/quarto-nav/quarto-nav.js | 325 + .../quarto-search/autocomplete.umd.js | 3 + _book/site_libs/quarto-search/fuse.min.js | 9 + .../site_libs/quarto-search/quarto-search.js | 1290 ++ _quarto.yml | 44 + cover.png | Bin 0 -> 51194 bytes index.qmd | 2 + index.tex | 15418 ++++++++++++++++ intro.qmd | 5 + references.bib | 19 + references.qmd | 4 + summary.qmd | 3 + 126 files changed, 59133 insertions(+) create mode 100644 .quarto/cites/index.json create mode 100644 .quarto/idx/Chapter_10_Comparing_Data_from_Different_Sources.qmd.json create mode 100644 .quarto/idx/Chapter_11_Drawing_Maps.qmd.json create mode 100644 .quarto/idx/Chapter_12_Extremes.qmd.json create mode 100644 .quarto/idx/Chapter_13_PICSA__Long_Before_the_season.qmd.json create mode 100644 .quarto/idx/Chapter_14_The_Seasonal_forecast.qmd.json create mode 100644 .quarto/idx/Chapter_15_Fitting_and_using_stochastic_models.qmd.json create mode 100644 .quarto/idx/Chapter_16_Withinday_data.qmd.json create mode 100644 .quarto/idx/Chapter_17_Circular_data_and_wind_roses.qmd.json create mode 100644 .quarto/idx/Chapter_18_Temperatures.qmd.json create mode 100644 .quarto/idx/Chapter_19_Drought_Indices__SPI.qmd.json create mode 100644 .quarto/idx/Chapter_1_About_this_guide.qmd.json create mode 100644 .quarto/idx/Chapter_20_Climate_Normals.qmd.json create mode 100644 .quarto/idx/Chapter_21_Various.qmd.json create mode 100644 .quarto/idx/Chapter_22_References.qmd.json create mode 100644 .quarto/idx/Chapter_23_Index.qmd.json create mode 100644 .quarto/idx/Chapter_2_More_Practice_with_RInstat.qmd.json create mode 100644 .quarto/idx/Chapter_3_Using_RInstat_effectively.qmd.json create mode 100644 .quarto/idx/Chapter_4_Getting_the_data_into_shape.qmd.json create mode 100644 .quarto/idx/Chapter_5_Quantity_and_quality.qmd.json create mode 100644 .quarto/idx/Chapter_6_Preparing_summaries.qmd.json create mode 100644 .quarto/idx/Chapter_7_Tailored_Products.qmd.json create mode 100644 .quarto/idx/Chapter_8_Efficient_use_of_RInstat_and_R.qmd.json create mode 100644 .quarto/idx/Chapter_9_Gridded_Data.qmd.json create mode 100644 .quarto/idx/index.qmd.json create mode 100644 .quarto/xref/04bf8f47 create mode 100644 .quarto/xref/09d69ae9 create mode 100644 .quarto/xref/0b9f6219 create mode 100644 .quarto/xref/0d0c6dbf create mode 100644 .quarto/xref/1e20ec21 create mode 100644 .quarto/xref/2364b70b create mode 100644 .quarto/xref/245ad8c7 create mode 100644 .quarto/xref/27c0cb18 create mode 100644 .quarto/xref/281ba8de create mode 100644 .quarto/xref/2b2e672d create mode 100644 .quarto/xref/34b90079 create mode 100644 .quarto/xref/4cc833a0 create mode 100644 .quarto/xref/53fe8b05 create mode 100644 .quarto/xref/5eea7dbd create mode 100644 .quarto/xref/665fb489 create mode 100644 .quarto/xref/6c73654d create mode 100644 .quarto/xref/85b3c403 create mode 100644 .quarto/xref/86862ac5 create mode 100644 .quarto/xref/8b8d3e9d create mode 100644 .quarto/xref/8bd4f299 create mode 100644 .quarto/xref/8eca05bc create mode 100644 .quarto/xref/9df82ecb create mode 100644 .quarto/xref/INDEX create mode 100644 .quarto/xref/b8e82ca6 create mode 100644 .quarto/xref/bc681641 create mode 100644 .quarto/xref/c2e5a108 create mode 100644 .quarto/xref/cc18ed16 create mode 100644 .quarto/xref/eb1f944e create mode 100644 .quarto/xref/f0768d19 create mode 100644 .quarto/xref/f25506fb create mode 100644 Chapter_10_Comparing_Data_from_Different_Sources.qmd create mode 100644 Chapter_11_Drawing_Maps.qmd create mode 100644 Chapter_12_Extremes.qmd create mode 100644 Chapter_13_PICSA__Long_Before_the_season.qmd create mode 100644 Chapter_14_The_Seasonal_forecast.qmd create mode 100644 Chapter_15_Fitting_and_using_stochastic_models.qmd create mode 100644 Chapter_16_Withinday_data.qmd create mode 100644 Chapter_17_Circular_data_and_wind_roses.qmd create mode 100644 Chapter_18_Temperatures.qmd create mode 100644 Chapter_19_Drought_Indices__SPI.qmd create mode 100644 Chapter_1_About_this_guide.qmd create mode 100644 Chapter_20_Climate_Normals.qmd create mode 100644 Chapter_21_Various.qmd create mode 100644 Chapter_22_References.qmd create mode 100644 Chapter_23_Index.qmd create mode 100644 Chapter_2_More_Practice_with_RInstat.qmd create mode 100644 Chapter_3_Using_RInstat_effectively.qmd create mode 100644 Chapter_4_Getting_the_data_into_shape.qmd create mode 100644 Chapter_5_Quantity_and_quality.qmd create mode 100644 Chapter_6_Preparing_summaries.qmd create mode 100644 Chapter_7_Tailored_Products.qmd create mode 100644 Chapter_8_Efficient_use_of_RInstat_and_R.qmd create mode 100644 Chapter_9_Gridded_Data.qmd create mode 100644 _book/Chapter_10_Comparing_Data_from_Different_Sources.html create mode 100644 _book/Chapter_11_Drawing_Maps.html create mode 100644 _book/Chapter_12_Extremes.html create mode 100644 _book/Chapter_13_PICSA__Long_Before_the_season.html create mode 100644 _book/Chapter_14_The_Seasonal_forecast.html create mode 100644 _book/Chapter_15_Fitting_and_using_stochastic_models.html create mode 100644 _book/Chapter_16_Withinday_data.html create mode 100644 _book/Chapter_17_Circular_data_and_wind_roses.html create mode 100644 _book/Chapter_18_Temperatures.html create mode 100644 _book/Chapter_19_Drought_Indices__SPI.html create mode 100644 _book/Chapter_1_About_this_guide.html create mode 100644 _book/Chapter_20_Climate_Normals.html create mode 100644 _book/Chapter_21_Various.html create mode 100644 _book/Chapter_22_References.html create mode 100644 _book/Chapter_23_Index.html create mode 100644 _book/Chapter_2_More_Practice_with_RInstat.html create mode 100644 _book/Chapter_3_Using_RInstat_effectively.html create mode 100644 _book/Chapter_4_Getting_the_data_into_shape.html create mode 100644 _book/Chapter_5_Quantity_and_quality.html create mode 100644 _book/Chapter_6_Preparing_summaries.html create mode 100644 _book/Chapter_7_Tailored_Products.html create mode 100644 _book/Chapter_8_Efficient_use_of_RInstat_and_R.html create mode 100644 _book/Chapter_9_Gridded_Data.html create mode 100644 _book/index.html create mode 100644 _book/site_libs/bootstrap/bootstrap-icons.css create mode 100644 _book/site_libs/bootstrap/bootstrap-icons.woff create mode 100644 _book/site_libs/bootstrap/bootstrap.min.css create mode 100644 _book/site_libs/bootstrap/bootstrap.min.js create mode 100644 _book/site_libs/clipboard/clipboard.min.js create mode 100644 _book/site_libs/quarto-html/anchor.min.js create mode 100644 _book/site_libs/quarto-html/popper.min.js create mode 100644 _book/site_libs/quarto-html/quarto-syntax-highlighting.css create mode 100644 _book/site_libs/quarto-html/quarto.js create mode 100644 _book/site_libs/quarto-html/tippy.css create mode 100644 _book/site_libs/quarto-html/tippy.umd.min.js create mode 100644 _book/site_libs/quarto-nav/headroom.min.js create mode 100644 _book/site_libs/quarto-nav/quarto-nav.js create mode 100644 _book/site_libs/quarto-search/autocomplete.umd.js create mode 100644 _book/site_libs/quarto-search/fuse.min.js create mode 100644 _book/site_libs/quarto-search/quarto-search.js create mode 100644 _quarto.yml create mode 100644 cover.png create mode 100644 index.qmd create mode 100644 index.tex create mode 100644 intro.qmd create mode 100644 references.bib create mode 100644 references.qmd create mode 100644 summary.qmd diff --git a/.quarto/cites/index.json b/.quarto/cites/index.json new file mode 100644 index 0000000..ecfa597 --- /dev/null +++ b/.quarto/cites/index.json @@ -0,0 +1 @@ +{"Chapter_4_Getting_the_data_into_shape.qmd":[],"Chapter_2__About_this_guide.qmd":[],"intro.qmd":["knuth84"],"Chapter_2_More_Practice_with_RInstat.qmd":[],"Chapter_15_Fitting_and_using_stochastic_models.qmd":[],"references.qmd":[],"Chapter_13_PICSA__Long_Before_the_season.qmd":[],"Chapter_11_Drawing_Maps.qmd":[],"Chapter_17_Circular_data_and_wind_roses.qmd":[],"Chapter_20_Climate_Normals.qmd":[],"Chapter_3_Using_RInstat_effectively.qmd":[],"Chapter_21_Various.qmd":[],"Chapter_16_Withinday_data.qmd":[],"Chapter_12_Extremes.qmd":[],"index.qmd":[],"Chapter_19_Drought_Indices__SPI.qmd":[],"Chapter_22_References.qmd":[],"Chapter_9_Gridded_Data.qmd":[],"Chapter_5_Quantity_and_quality.qmd":[],"Chapter_14_The_Seasonal_forecast.qmd":[],"Chapter_23_Index.qmd":[],"summary.qmd":[],"Chapter_6_Preparing_summaries.qmd":[],"Chapter_10_Comparing_Data_from_Different_Sources.qmd":[],"Chapter_7_Tailored_Products.qmd":[],"Chapter_18_Temperatures.qmd":[],"Chapter_8_Efficient_use_of_RInstat_and_R.qmd":[],"Chapter_1_About_this_guide.qmd":[],"Chapter_1__Acknowledgments.qmd":[]} diff --git a/.quarto/idx/Chapter_10_Comparing_Data_from_Different_Sources.qmd.json b/.quarto/idx/Chapter_10_Comparing_Data_from_Different_Sources.qmd.json new file mode 100644 index 0000000..f71f099 --- /dev/null +++ b/.quarto/idx/Chapter_10_Comparing_Data_from_Different_Sources.qmd.json @@ -0,0 +1 @@ +{"title":"Comparing Data from Different Sources","markdown":{"headingText":"Comparing Data from Different Sources","containsRefs":false,"markdown":"## Introduction\n\nThe satellite and reanalysis data, discussed in Chapter 9, provides a\nwonderful resource that can supplement the historical station data that\nis described in this guide. The satellite data is usually from the early\n1980s, while some of the reanalysis data is from 1950. Table 10.1\nsummarises some sources of rainfall data:\n\n -----------------------------------------------------------------------\n Table 10.1\n -----------------------------------------------------------------------\n ![](media/image115.png){width=\"6.268055555555556in\"\n height=\"1.9694444444444446in\"}\n\n -----------------------------------------------------------------------\n\nSome of these products also include other elements, including\ntemperatures and ERA5 is for many elements.\n\nThese data are already used extensively. However, often users access\nonly one type, i.e. either station or satellite/reanalysis. This is\noften either because that is what the researcher is comfortable with, or\nonly one type is easily available. We consider here how station and\nsatellite data can be compared and then perhaps used together. There are\na range of possible objectives from these comparisons including the\nfollowing:\n\na) The satellite/reanalysis data, from the same location as a ground\n station, can perhaps be considered as an additional station. As\n such, perhaps the data can be used to complete, or infill missing\n values in the station data.\n\nb) Similarly, perhaps this new (satellite) station could be used to\n support the quality-control of the station data.\n\nThese objectives may be more interesting for countries where there is a\nrelatively sparse station network. Where the network is dense,\nneighbouring ground stations may be used for these objectives.\n\nc) The bonus is that the satellite data does provide a dense network.\n For example, for CHIRPS the estimated daily rainfall data is on\n roughly a 5km square, so the equivalent of about 400 (pseudo)\n stations per square degree. Hence it provides estimated daily\n rainfall data for the whole of Africa, and beyond with a pseudo\n station that is always close to any given location.\n\nComparisons between station and gridded data must recognise that they\nhave not measured the same thing. Station data are measured at a point,\nwhile gridded data represent an area. The size of the area depends on\nthe method with an example shown in Fig. 10.1a.\n\nIn Barbados, Fig. 10.1a the point shown is a station called Husbands,\nthe site of a regional climate centre. CIMH. The largest pixel is for\nthe ERA5 reanalysis data and the smallest is for CHIRPS. This figure\nalso shows that the pixel in coastal sites can sometimes be largely over\nthe ocean and hence a neighbouring pixel may be more relevant.\n\n+------------------------------------+---------------------------------+\n| ***Fig. 10.1a Pixel size for 3 | ***Fig. 10.1b Difference |\n| methods in Barbados*** | between gridded and point data |\n| | for rainfall*** |\n| | |\n| | (Figure with permission from H. |\n| | Greatrex) |\n+====================================+=================================+\n| ![Chart Description automatically | ![](media/image104.pn |\n| generated](media/image11 | g){width=\"2.7712182852143483in\" |\n| 2.png){width=\"3.094673009623797in\" | height=\"2.506793525809274in\"} |\n| height=\"2.188830927384077in\"} | |\n+------------------------------------+---------------------------------+\n\nFig 10.1b illustrates a reason for possible differences between area and\npoint data for rainfall. The sketch shows a cloud, and hence possibly\nrain in part of the pixel, but not at the station in the top left. Hence\nthe station may be zero, while the gridded data notes some rain. Thus,\nunless the satellite data are adjusted, we would expect more rain days\n(and potentially less extreme values) than at a point. This feature is\nparticularly for rainfall, but may also be shown for other elements,\nsuch as sunshine hours, where there may be zeros in the data.\n\nThe problem that is addressed in this chapter is essentially just the\ncomparison of two variables, i.e. 2 columns of data, where the first is\nthe station and the second is the satellite, or reanalysis data. This is\nessentially the same problem as in forecasting, where the forecast is\ncompared with the actual data. Many of the methods are from software\nthat was originally constructed for the forecasting problem.\n\nFrom a statistical point of view this problem is just the same as\ncomparing","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_10_Comparing_Data_from_Different_Sources.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_10_Comparing_Data_from_Different_Sources.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_11_Drawing_Maps.qmd.json b/.quarto/idx/Chapter_11_Drawing_Maps.qmd.json new file mode 100644 index 0000000..8c8644e --- /dev/null +++ b/.quarto/idx/Chapter_11_Drawing_Maps.qmd.json @@ -0,0 +1 @@ +{"title":"Drawing Maps","markdown":{"headingText":"Drawing Maps","containsRefs":false,"markdown":"## Introduction\n\nClimatic data is often presented in map form. Common examples include\ndetails of the stations in each country, plus further information about\neach station.\n\nPreparing a map is usually a 2-stage process. The first stage, described\nin Section 10.2, uses a shape file to provide an outline of the country,\nand other general details. Then climatic details are added, as is\ndescribed in Section 10.3.\n\n## Using a shape file\n\nR-Instat does not currently have any shape files in the library, so they\nhave to be downloaded. There are various sites that offer shape files\nand GADM (GADM, 2019) is comprehensive, Fig. 10.2a.\n\n -----------------------------------------------------------------------\n ***Fig. 10.2a The GADM data page***\n -----------------------------------------------------------------------\n ![](media/image190.png){width=\"6.11749343832021in\"\n height=\"3.305452755905512in\"}\n\n -----------------------------------------------------------------------\n\nC licking on country in Fig. 10.1a allows the input of a country name,\nas shown in Fig. 10.2b. For Kenya, as for most other formats, there are\ndifferent ways to download the data.\n\n+------------------------------+---------------------------------------+\n| ***Fig. 10.2b*** | ***Fig. 10.2c*** |\n| | |\n| | ***Climatic \\> File \\> Open and Tidy |\n| | Shapefile*** |\n+==============================+=======================================+\n| ![](media/image185.png){ | ![](media/image |\n| width=\"2.7050929571303586in\" | 187.png){width=\"3.3892760279965004in\" |\n| h | height=\"1.7678455818022747in\"} |\n| eight=\"2.183115704286964in\"} | |\n+------------------------------+---------------------------------------+\n\nData at level 0 is simply the country boundary, while level 1 gives the\noutline for each of Kenya's 47 counties. Levels 2 and 3 provide even\nmore detail.\n\nIn Fig. 10.2b the R(sf) option provides a file, with an ***rds***\nextension, that can be opened into R-Instat through the ***File \\>\nOpen*** dialogue. However, we suggest clicking on Shapefile in Fig.\n10.2. This downloads a zip file that is about 20 Mbytes for Kenya and\nwhich contains data at all 4 levels, 0, 1, 2, 3.\n\nUnzip this file. In R-Instat use ***Climatic \\> File \\> Open and Tidy\nShapefile***, Fig. 10.2c. Go to the unzipped files and open the Level 1\nshapefile. There are 47 rows of data, shown in Fig. 10.2d, (after\nreordering the variables for clarity.)\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 10.2d*** ***Fig. 10.2e***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image188.png){width=\"3.5070898950131233in\" ![](media/image163.png){width=\"2.380729440069991in\"\n height=\"3.419274934383202in\"} height=\"2.9443088363954506in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nGo to ***Climatic \\> Mapping***. Part of this dialogue is shown in Fig.\n10.2e. Choose the data frame with the shape file if it isn't chosen\nautomatically. Then just press Ok for the map shown in Fig. 10.2f.\n\nWhat could be easier?\n\nReturn to the ***Climatic \\> Mapping*** dialogue and add the\n***NAME_1*** variable from Fig. 10.2d into the ***Fill field*** of Fig.\n10.2e. The result is in Fig. 10.2g. The map is now nicely colourful. If\nthere were, say, 10 regions, this would be fine, but with 47 counties\nthe legend is taking too much space and can't easily be associated with\neach county.\n\n ----------------------------------------------------------------------------------------------------------\n ***Fig. 10.2fKenya county map*** ***Fig. 10.2g***\n ---------------------------------------------------- -----------------------------------------------------\n ![](media/image172.png){width=\"2.97536198600175in\" ![](media/image189.png){width=\"3.021402012248469in\"\n height=\"3.437853237095363in\"} height=\"2.575886920384952in\"}\n\n ----------------------------------------------------------------------------------------------------------\n\nSo, return to the ***Climatic \\> Mapping*** dialogue. Press ***Plot\nOptions,*** then use the ***Theme*** tab and set the ***Legend to\nNone***, Fig. 10.2h.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 10.2h*** ***Fig. 10.2i***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image139.png){width=\"2.9793011811023624in\" ![](media/image166.png){width=\"3.0055807086614172in\"\n height=\"2.9853805774278217in\"} height=\"3.5880883639545056in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nThe resulting map is shown in Fig. 10.2i.\n\nSometimes it is useful for an initial map to include the names of the\ndistricts as labels.\n\nReturn to the ***Climatic \\> Mapping*** dialogue and include the same\ndata frame also on the right-hand side of the dialogue, Fig 10.2j.\n\n -----------------------------------------------------------------------\n ***Fig. 10.2j***\n -----------------------------------------------------------------------\n ![](media/image182.png){width=\"5.439518810148732in\"\n height=\"2.9879385389326334in\"}\n\n -----------------------------------------------------------------------\n\nThe initial results are in Fig. 10.2k. It shows that, with 47 labels we\nhave given the software a considerable challenge to make all the labels\nvisible. The geom is called geom_label_repel and has done its best, but\nperhaps it needs some help. Two possibilities are to make the labels\nsmaller, Fig. 10.2l, or to omit the box round each label. This then uses\ngeom_text_repel instead, Fig. 10.2m.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 10.2k*** ***Fig. 10.2l***\n ------------------------------------------------------ ----------------------------------------------------\n ![](media/image103.png){width=\"3.0282250656167977in\" ![](media/image74.png){width=\"2.979179790026247in\"\n height=\"3.608007436570429in\"} height=\"3.6041830708661418in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nFinally, in this section, we go \"down a level\". This uses the level 2\ndata, which has 310 rows. Then we filter to give just one district,\nchoosing Kisumu. (A few neighbouring districts could be chosen.) The\nresulting map is shown in Fig. 10.2n.\n\nThe GADM site is limited to administrative data only. There are other\nsites, such as\n[[http://www.diva-gis.org/]{.underline}](http://www.diva-gis.org/) with\nadditional information, such as roads and elevation.\n\n ---------------------------------------------------------------------------------------------------------\n ***Fig. 10.2m Text, rather than label*** ***Fig. 10.2n***\n ---------------------------------------------------- ----------------------------------------------------\n ![](media/image78.png){width=\"2.865278871391076in\" ![](media/image85.png){width=\"3.192403762029746in\"\n height=\"3.3938265529308835in\"} height=\"1.2317147856517936in\"}\n\n ---------------------------------------------------------------------------------------------------------\n\n## Adding station data\n\nAdding station data to a map is just as easy as adding the county\ninformation in Section 10.2. If your data are in CLIMSOFT, and you have\nthe necessary permissions, then transferring the data may be done with\nthe ***Climatic \\> File \\> Import from Climsoft*** dialogue. Here we\nillustrate with the Kenya data from the Instat library.\n\nUse ***File \\> Open from Library \\> Instat \\> Browse \\> Climatic \\>\nKenya*** and open the file called western_kenya.rds. This has 3 data\nframes, including one called wkenya_stationinfo, Fig. 10.3a.\n\n ----------------------------------------------------------------------------------------------------------\n ***Fig. 10.3a*** ***Fig. 10.3b***\n ---------------------------------------------------- -----------------------------------------------------\n ![](media/image60.png){width=\"4.219044181977253in\" ![](media/image63.png){width=\"1.6362029746281714in\"\n height=\"3.1557469378827645in\"} height=\"2.9429680664916886in\"}\n\n ----------------------------------------------------------------------------------------------------------\n\nThere are 52 stations, Fig. 10.3a, and the information includes the\nCounty as well as the latitude and longitude. An initial step is to\nexamine how many counties have data. This uses the ***Right-Click***\nfrom the top of the County column, and the ***Levels/Labels*** option,\nalso shown in Fig. 10.3a.\n\nThe Levels/Labels dialogue shows there are data from 12 counties. The\nspelling is consistent with the County=level file, used in Section 10.2\nexcept for Homabay, which we change, in this dialogue, to Homa Bay.\n\nThis initial check is important, as any spelling mistakes in the county\nname, when entering the data, will invent a new county!\n\n+-------------------------------+--------------------------------------+\n| ***Fig. 10.3d Filter the map | ***Fig. 10.3e Map file for Western |\n| file*** | Kenya*** |\n| | |\n| ***Right Click \\> Filter \\> | |\n| Define New Filter*** | |\n+===============================+======================================+\n| ![](media/image61.png | ![](media/imag |\n| ){width=\"2.791648075240595in\" | e62.png){width=\"3.346146106736658in\" |\n| height=\"2.561923665791776in\"} | height=\"2.414307742782152in\"} |\n+-------------------------------+--------------------------------------+\n\nReturn to the level 1 map file, Right-Click and Filter to choose the\nsame 12 counties, Fig. 10.3d. The data file should now have just 12\nrows, to match the number of counties that will be mapped.\n\nReturn to the Climatic \\> Mapping dialogue. The map information is on\nthe left-hand side of the dialogue and the new station information is\nnow on the right, Fig. 10.3f.\n\n -----------------------------------------------------------------------\n ***Fig. 10.3f***\n -----------------------------------------------------------------------\n ![](media/image58.png){width=\"5.3781485126859145in\"\n height=\"3.0781649168853895in\"}\n\n -----------------------------------------------------------------------\n\nThe result is shown in Fig. 10.3g with labels, and with the county given\nas a legend. Fig. 10.3h uses text and omits the legend. This is quite a\nchallenging map, because so may stations are close together.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 10.3g*** ***Fig. 10.3h***\n ---------------------------------------------------- ------------------------------------------------------\n ![](media/image59.png){width=\"3.244919072615923in\" ![](media/image101.png){width=\"2.7297692475940507in\"\n height=\"2.782950568678915in\"} height=\"2.7890474628171478in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nThe results show there are at least 2 obvious errors in the data. The\nmost obvious is Chemilil, which should be in Kisumu county, but is shown\nin the middle of Kajaido. And Akira, that should be in Kajaido is shown\nslightly outside any of the counties. It is tempting to correct these\nobvious errors. However, better is the message that there may be other\nerrors and a strategy for checking the geographical information would be\nuseful.\n\nWe wonder whether google maps could be used for checking? This aspect\nhas become important, partly because of the potential of combining\nstation and satellite information. However, the combining is only\nsensible if the locations of the station data are correct.\n\n## Information about the stations\n\n[To be added.]{.mark}\n\n## Further types of mapping\n\n[Contours, gridded data]{.mark}","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_11_Drawing_Maps.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_11_Drawing_Maps.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_12_Extremes.qmd.json b/.quarto/idx/Chapter_12_Extremes.qmd.json new file mode 100644 index 0000000..7c3de00 --- /dev/null +++ b/.quarto/idx/Chapter_12_Extremes.qmd.json @@ -0,0 +1 @@ +{"title":"Extremes","markdown":{"headingText":"Extremes","containsRefs":false,"markdown":"## Introduction\n\nStarting with daily, or sub-daily data the analysis proceeds in two\nstages. The first is to get the extremes and the second is to analyse\nthem. The data from two stations in Ghana are used for illustration. Use\n***File \\> Open from Library \\> Instat \\> Browse \\> Climatic \\> Ghana***\nand open the RDS file called ***Ghana two stations***. From Fig 11.1a we\nsee the data start in 1944, though the elements, other than rainfall\nstart later.\n\n ----------------------------------------------------------------------------------------------------------\n ***Fig. 11.1a Two stations from Ghana*** ***Fig. 11.1b***\n ---------------------------------------------------- -----------------------------------------------------\n ![](media/image98.png){width=\"3.032425634295713in\" ![](media/image113.png){width=\"2.950962379702537in\"\n height=\"2.8353412073490816in\"} height=\"2.535641951006124in\"}\n\n ----------------------------------------------------------------------------------------------------------\n\nIn the Climatic menu the data are already in the right \"shape\" and there\nis a date column, see Fig. 11.1a. So start by checking whether there are\nany missing dates to infill, Fig. 11.1b.\n\n --------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 11.1c*** ***Fig. 11.1d***\n ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------\n ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTML177df15.PNG](media/image97.png){width=\"2.620236220472441in\" ![](media/image100.png){width=\"3.3276706036745405in\"\n height=\"1.9923840769903762in\"} height=\"1.519601924759405in\"}\n\n --------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nIn ***Climatic \\> Dates Infill Missing Dates***, include the\n***Station***, Fig. 11.1c. The results, in Fig. 11.1d, indicate that\nthere were 5 missing months in the record at Saltpond and four at\nTamale. There are now 53297 rows of data.\n\nNow use ***Climatic \\> Dates \\> Use Date***, Fig. 11.1e, and complete as\nshown.\n\nThen use Climatic \\> Define Climatic data. It should complete\nautomatically. Check for uniqueness and then press OK.\n\n ---------------------------------------------------------------------------------------------------------\n ***Fig. 11.1e*** ***Fig. 11.1f***\n --------------------------------------------------- -----------------------------------------------------\n ![](media/image90.png){width=\"2.28207895888014in\" ![](media/image88.png){width=\"3.4914720034995628in\"\n height=\"3.2165966754155733in\"} height=\"4.148623140857393in\"}\n\n ---------------------------------------------------------------------------------------------------------\n\nNow use ***Climatic \\> Check Data \\> Inventory***, Fig. 11.1g. Include\nthe elements down to wind speed.\n\n ----------------------------------------------------------------------------------------------------------\n ***Fig. 11.1g*** ***Fig. 11.1h***\n ---------------------------------------------------- -----------------------------------------------------\n ![](media/image99.png){width=\"2.729400699912511in\" ![](media/image89.png){width=\"3.3204877515310587in\"\n height=\"3.16913823272091in\"} height=\"3.202425634295713in\"}\n\n ----------------------------------------------------------------------------------------------------------\n\nThe results show the other elements started roughly in 1960. There are\nrelatively few missing values in the rainfall, and the other elements\nare also reasonably complete.\n\nThe same Climatic \\> Check Data menu has options for quality control\nchecks. These are assumed, as we proceed to examine the extremes.\n\n## Getting the extremes\n\nIn the ***Climatic \\> Prepare*** menu there are four dialogues that get\nextremes. They are considered briefly and then ***Climatic \\> Prepare \\>\nExtremes*** is examined in detail.\n\nThe ***Climatic \\> Prepare \\> Climatic Summaries***, Fig. 11.2b has\nalready been used extensively in this guide.\n\n -----------------------------------------------------------------------------------------------------------\n ***The ClimzaFig. 11.2a*** ***Fig. 11.2b***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image91.png){width=\"2.9926891951006125in\" ![](media/image56.png){width=\"2.9134219160104986in\"\n height=\"3.2375459317585302in\"} height=\"3.1352055993000874in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nIn Fig. 11.2c we can choose the extremes, i.e. the minimum and/or\nmaximum. These can be annual, as shown in Fig. 11.2b, or for a part of\nthe year, or perhaps monthly.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 11.2c*** ***Fig. 11.2d***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image55.png){width=\"2.8620866141732284in\" ![](media/image52.png){width=\"2.8025732720909886in\"\n height=\"3.151451224846894in\"} height=\"3.2878444881889766in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nFig. 11.2d shows the ***Climatic \\> Prepare \\> Spells*** dialogue. This\nautomatically gives the extreme, i.e. longest spell each year. This may\nbe the longest dry spell for rainfall, or the longest hot (or cold)\nspell for temperatures, etc.\n\nThe Climdex system is covered in Sections 11.3 and 11.4. Hence now\nconsider ***the Climatic \\> Prepare \\> Extremes*** dialogue, Fig. 11.2e.\n\n ---------------------------------------------------------------------------------------\n ***Fig. 11.2e*** ***Fig. 11.2f***\n --------------------------------------------------- -----------------------------------\n ![](media/image51.png){width=\"2.98702646544182in\" \n height=\"4.1097736220472445in\"} \n\n ---------------------------------------------------------------------------------------\n\n[To be continued]{.mark}\n\n## Climdex Indices - precipitation\n\nA set of 27 climate change indices have resulted from WMO meetings and\nreports. They are described in\n[[http://etccdi.pacificclimate.org/list_27_indices.shtml]{.underline}](http://etccdi.pacificclimate.org/list_27_indices.shtml)\nand implemented through an R package called climdex.pcic. The pcic\nstands for Pacific Islands Impacts Consortium, but the indices are\ngeneral.\n\nEach index can produce an annual summary, and some offer the option of\nmonthly summaries. The are a single dialogue in R-Instat. Sixteen of the\nindices are temperature-based. The other 11 are rainfall indices.\n\nThe Dodoma data from Tanzania are used for illustration. Use ***File \\>\nOpen from Library \\> Instat \\> Browse \\> Climatic \\> Tanzania*** and\nopen the file called Dodoma.rds. It is already defined as a climatic\ndataset. Hence the climatic dialogues can be used immediately.\n\nThe annual summaries from climdex are compared with those used in\nChapters 6 and 7. Hence start with the ***Climatic \\> Prepare \\>\nClimatic Summaries***, Fig. 11.3b.\n\n ----------------------------------------------------------------------------------------------------------\n ***Fig. 11.3a*** ***Fig. 11.3b***\n ---------------------------------------------------- -----------------------------------------------------\n ![](media/image54.png){width=\"3.153367235345582in\" ![](media/image53.png){width=\"2.8408005249343833in\"\n height=\"3.609623797025372in\"} height=\"3.593584864391951in\"}\n\n ----------------------------------------------------------------------------------------------------------\n\nPress ***Summaries*** on the main dialogue and choose the summaries\nindicated in Fig. 11.3c. Then choose the ***Missing Options*** tab to\ngive Fig. 11.3d. The default in climdex is to set the summary to missing\nif more than 15 days in the year are missing, so the same is done here.\n\n ---------------------------------------------------------------------------------------------------------\n ***Fig. 11.3c*** ***Fig. 11.3d***\n ---------------------------------------------------- ----------------------------------------------------\n ![](media/image49.png){width=\"3.008050087489064in\" ![](media/image50.png){width=\"2.982723097112861in\"\n height=\"2.9473370516185478in\"} height=\"2.1991699475065616in\"}\n\n ---------------------------------------------------------------------------------------------------------\n\nThe result is two annual summaries, Fig. 11.3e, that are like two of the\nclimdex indices. They are ready to draw graphs, fir trend lines and so\non. The data frame, in Fig. 11.3e, has 79 rows, because there are 79\nyears of data\n\nUse ***Climatic \\> Prepare \\> Climdex***, Fig. 11.3f. The dialogue\nshould fill automatically. If not, then check you are using the correct\ndata frame.\n\n ----------------------------------------------------------------------------------------------------------\n ***Fig. 11.3e*** ***Fig. 11.3f***\n ---------------------------------------------------- -----------------------------------------------------\n ![](media/image57.png){width=\"2.275330271216098in\" ![](media/image48.png){width=\"3.6112981189851268in\"\n height=\"3.5917311898512687in\"} height=\"3.6112981189851268in\"}\n\n ----------------------------------------------------------------------------------------------------------\n\nIn Fig. 11.3f click on ***Indices***. Complete the settings as shown in\nFig. 11.3g and then choose the ***precipitation tab***. The numbers for\neach index match those given in\n[[http://etccdi.pacificclimate.org/list_27_indices.shtml]{.underline}](http://etccdi.pacificclimate.org/list_27_indices.shtml)\n. For illustration***, tick everything*** there and press ***Return***.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 11.3g*** ***Fig. 11.3h***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image982.png){width=\"3.097315179352581in\" ![](media/image984.png){width=\"2.8853073053368328in\"\n height=\"2.6226126421697287in\"} height=\"2.862516404199475in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nThis results in 11 further columns, for each of the precipitation\nindices. They are added to the yearly data frame and shown in Fig.\n11.3i. Each is described briefly, before continuing with the analysis.\n\n -----------------------------------------------------------------------\n ***Fig. 11.3i***\n -----------------------------------------------------------------------\n ![](media/image980.png){width=\"6.155778652668417in\"\n height=\"2.999458661417323in\"}\n\n -----------------------------------------------------------------------\n\nThe indices are defined as shown in table 11.3a. In Fig. 11.3i the\nvariable max_rain, from the Climatic \\> Prepare \\> Climatic Summaries is\nseen to be the same as Rx1day. We consider briefly how to get each of\nthese indices using the other R-Instat dialogues.\n\n ---------------------------------------------------------------------------------\n ***Table 11.3a \n Precipitation \n indices from \n climdex*** \n --------------- ------------ ----------------------------------------------------\n ***Number*** ***Name*** ***Description***\n\n 17 Rx1day Annual maximum\n\n 18 Rx5day Maximum from 5-day running totals\n\n 19 SRII Simple intensity index, i.e. Annual total/Number of\n rain days\n\n 20 R10mm Annual number of rain-days with 10mm or more\n\n 21 R20mm Annual number of rain-days with 20mm or more\n\n 22 Rnnmm Annual number of days with ≥ nn(mms). User chooses\n value of nn\n\n 23 CDD Longest dry spell in the year (dry is \\<1mm)\n\n 24 CWD Longest spell of successive rain days (rain is\n \\>=1mm)\n\n 25 R95p Annual total greater than 95^th^ percentile in base\n period\n\n 26 R99p Ditto for 99^th^ percentile\n\n 27 PRCPTOT Total annual rainfall (from days with ≥ 1mm)\n ---------------------------------------------------------------------------------\n\nThis comparison is partly to help users understand exactly what each\nindex is measuring. In addition the regular dialogues provide additional\nflexibility, if needed to examine the indices in more detail.\n\nThe second summary, produced earlier is the total annual rainfall,\ncalled sum_rain in Fig. 11.3i. This is almost the same as the climdex\nindex 27, PRCPTOT. For example sum_rain = 523mm in 1935, compared to\n514mm for PRCPTOT.\n\nThe small difference is because the sum_rain has totalled all the rain\ndays, while PRCPTOT only considers those with at least 1mm.\n\nCheck this with ***Prepare \\> Column: Calculate \\> Calculation***. With\nthe ***Logical keyboard*** make a new column, called rain1, Fig. 11.3j,\nwith:\n\nrain1 \\<- ***ifelse(rain\\<1, 0, rain)***, or equivalently rain1 \\<-\n***(rain\\>=1) \\* rain***.\n\nThen use ***Climatic \\> Prepare \\> Climatic Summaries*** with the new\n***rain1*** variable to check the annual totals now agree with those\nfrom climdex.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 11.3j*** ***Fig. 11.3k***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image983.png){width=\"3.2370570866141732in\" ![](media/image976.png){width=\"2.731232502187227in\"\n height=\"2.3834208223972in\"} height=\"3.5022265966754156in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nFrom the rain5 variable, the ***Climatic \\> Prepare \\> Extremes*** is an\nalternative dialogue to give the annual maxima, Fig. 11.3l. This gives\nthe same results as the climdex Rx5day variable. It also gives a further\nthe day in the year of the maximum. This could be used in a study to\ninvestigate whether there is any evidence for a trend in ***when the\nmaximum occurs*** as well as its value.\n\n+-------------------------------------+--------------------------------+\n| ***Fig. 11.3l*** | ***Fig. 11.3m*** |\n| | |\n| | ***Climatic \\> Prepare \\> |\n| | Climatic Summaries\\ |\n| | with sub-dialogue*** |\n+=====================================+================================+\n| ![](media/image98 | ![](media/image977.pn |\n| 6.png){width=\"3.1908333333333334in\" | g){width=\"2.838053368328959in\" |\n| height=\"4.309553805774279in\"} | height=\"2.913501749781277in\"} |\n+-------------------------------------+--------------------------------+\n\nThe \"Simple intensity index\", SRII is essentially the mean rain per rain\nday, (just using the values of days with more than 1mm). In Fig. 11.3i\nit is just PRCPTOT/Rnnmm, because we chose 1mm as the threshold. For\nexample, in 1935 there were 36 rain days with a total of 514mm. Hence\n\nSRII~1935~ = 514/36 = 14.26mm\n\nThe next 2 indices, R10mm and R20mm are just the number days each year\nwith 10mm, and 20mm or more, each year. They can also be given using the\n***Climatic \\> Prepare \\> Climatic Summaries*** dialogue.\n\nThe indices CDD and CWD give the maximum dry-spell length and rain-spell\nlengths, where rain = 1mm. They are special cases of the ***Climatic \\>\nPrepare \\> Spells*** dialogue, Fig. 11.3n. The data in Fig. 11.3i show\nthat the CDD index for the whole calendar year is probably of little\ninterest, for this site, because the months of May to October are\nusually dry. Hence the longest dry-spell of 197 days, in 1935, is not a\nsurprise. However, assessing evidence for trends in the longest\ndry-spell during the season, perhaps from 1 January to 31 March, may be\nuseful.\n\n ----------------------------------------------------------------------------------------------------------\n ***Fig. 11.3n Spells dialogue to give CWD index*** ***Fig. 11.3o Filter sub-dialogue for rain days in\n baseline years***\n ---------------------------------------------------- -----------------------------------------------------\n ![](media/image978.png){width=\"2.80285542432196in\" ![](media/image985.png){width=\"3.185751312335958in\"\n height=\"3.4301082677165353in\"} height=\"3.2739555993000873in\"}\n\n ----------------------------------------------------------------------------------------------------------\n\nThe final 2 precipitation indices are R95p and R99p. They are the total\nrainfall each year from heavy rain days. The definition of \"heavy\" is\nrelative to the baseline years. The first step is therefore to find the\nthresholds. The process is as follows:\n\n1. ***Filter*** the Dodoma data to the baseline years and just the rain\n days, Fig. 11.3.\n\n2. Use the ***Prepare \\> Column: Calculate \\> Column Summaries***, Fig.\n 11.3p, with the ***percentile summary***, Fig. 11.3q, to give the\n 95% and 99% points of the rain variable. The 95% point, Fig. 11.3q,\n = 45.57mm and the 99% point = 67.3mm\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 11.3p*** | ***Fig. 11.3q*** |\n+==================================+===================================+\n| ![](media/image981. | ![](media/image1391. |\n| png){width=\"2.959998906386702in\" | png){width=\"3.0570866141732282in\" |\n| height=\"3.4789588801399827in\"} | height=\"1.347684820647419in\"} |\n| | |\n| | ***Result in the output window*** |\n| | |\n| | ![](media/image1388 |\n| | .png){width=\"3.055495406824147in\" |\n| | height=\"1.0605249343832022in\"} |\n+----------------------------------+-----------------------------------+\n\n3. Now ***filter*** to use just the days for the whole record where\n (rain \\> 45.57), Fig. 11.3r. .\n\n4. ***Use Climatic \\> Prepare \\> Climatic Summaries*** to give the sum\n and number of observations, Fig. 11.3s\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 11.3r*** ***Fig. 11.3s***\n ------------------------------------------------------ -------------------------------------------------------\n ![](media/image1390.png){width=\"2.996907261592301in\" ![](media/image1380.png){width=\"2.6710126859142607in\"\n height=\"3.2817366579177603in\"} height=\"3.5565507436570427in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nThe resulting data are in Fig. 11.3t. The new sum_rain variable gives\nthe same values as the R95p. In the first year, the total was 210.3mm\nfrom 3 rain days.\n\n -----------------------------------------------------------------------\n ***Fig. 11.3t***\n -----------------------------------------------------------------------\n ![](media/image1384.png){width=\"3.06751968503937in\"\n height=\"3.325728346456693in\"}\n\n -----------------------------------------------------------------------\n\n## Climdex -- Temperatures\n\nThe 16 temperature indices are shown in Table 11.4a.\n\n --------------------------------------------------------------------------------\n ***Table 11.4a \n Temperature \n indices from \n climdex*** \n -------------- ------------ ----------------------------------------------------\n ***Number*** ***Name*** ***Description***\n\n 1 FD Number of frost days, when daily minimum\n temperature, Tn \\<0.\n\n 2 SU Number of \"Summer\" days, when daily maximum\n temperature, Tx \\> 25\n\n 3 ID Number of icing days, when Tx \\< 0\n\n 4 TR Number of tropical nights, when Tn \\> 20\n\n 5 GSL Growing season length. Number of days between first\n span of 6 consecutive days with daily Tmean \\> 5°C\n and first span of 6 days (after July 1^st^) with\n Tmean \\< 5°C. (July to June in Southern hemisphere.)\n\n 6 TXx Annual or monthly maximum of Tx\n\n 7 TNx Annual or monthly maximum of Tn\n\n 8 TXn Annual or monthly minimum of Tx\n\n 9 TNn Annual or monthly minimum of Tn\n\n 10 TN10p Percentage of days when Tn \\< 10^th^ percentile from\n the baseline\n\n 11 TX10p Ditto for Tx \\< 10^th^ percentile\n\n 12 TN90p Ditto for Tn \\> 90^th^ percentile\n\n 13 TX90p Ditto for Tx \\> 90^th^ percentile\n\n 14 WSDI Warm spell duration index, the annual number of day\n where at least 6 consecutive days are warmer than\n the 90^th^ percentile\n\n 15 CSDI Cold spell duration index, the annual number of days\n when at least 6 consecutive days are colder than the\n 10^th^ percentile\n\n 16 DTR Mean temperature range, i.e. mean difference between\n Tx and Tn\n --------------------------------------------------------------------------------\n\nThey are again illustrated with the Dodoma data. Use Climatic \\> Prepare\n\\> Climdex, Fig. 11.4a and complete the Temperature sub-dialogue as\nshown in Fig. 11.4b.\n\n+---------------------------+------------------------------------------+\n| ***Fig. 11.4a The Climdex | ***Fig. 11.4b Climdex temperature |\n| dialogue*** | sub-dialogue*** |\n| | |\n| ***Climatic \\> Prepare \\> | |\n| Climdex*** | |\n+===========================+==========================================+\n| ![] | ![](media/ima |\n| (media/image1381.png){wid | ge1378.png){width=\"3.7590102799650045in\" |\n| th=\"2.3313899825021873in\" | height=\"2.7697976815398073in\"} |\n| heig | |\n| ht=\"2.152358923884514in\"} | |\n+---------------------------+------------------------------------------+\n\nThe results are in Fig. 11.4c. Some results are obvious; in particular\nin the later years, shown in Fig. 11.4c, there are about 30% of days per\nyear in TN90p, i.e. with Tn higher than the 90% point from the 1961-90\nbaseline. And TN10p has very low values. The change in Tn is clearer\nthan that of the maximum temperatures, Tx.\n\n -----------------------------------------------------------------------\n ***Fig. 11.4c***\n -----------------------------------------------------------------------\n ![](media/image1383.png){width=\"6.069974846894138in\"\n height=\"3.988590332458443in\"}\n\n -----------------------------------------------------------------------\n\nAs in Section 11.3, some of the temperature indices can be calculated\nthrough the ***Climatic \\> Prepare \\> Climatic Summaries*** dialogue.\nFor example completing Fig. 11.4d and Fig. 11.4e as shown produces the\nindices TNn and TNx.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 11.4d*** | ***Fig. 11.4e Choosing the max |\n| | and min*** |\n| ***Climatic \\> Prepare \\> | |\n| Climatic Summaries*** | |\n+===================================+==================================+\n| ![](media/image1386. | ![](media/image1382.p |\n| png){width=\"3.0453029308836395in\" | ng){width=\"2.8903346456692915in\" |\n| height=\"3.371376859142607in\"} | height=\"2.777569991251094in\"} |\n+-----------------------------------+----------------------------------+\n\nThe calculations for 6 of the indices is more complex. They are numbered\n10 to 15 in Table 11.4a and depend on the temperatures in the baseline\nperiod, usually 1961 to 1990. In this case the 10% and 90% points are\nfound, in turn, for each day of the year[^48] and these values are then\ncompared with the temperature on that day for the record.\n\n## Using the climdex indices\n\n[To be completed]{.mark}\n\n## Extreme value analysis\n\n[Using the extRemes package]{.mark}","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_12_Extremes.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_12_Extremes.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_13_PICSA__Long_Before_the_season.qmd.json b/.quarto/idx/Chapter_13_PICSA__Long_Before_the_season.qmd.json new file mode 100644 index 0000000..eadbf29 --- /dev/null +++ b/.quarto/idx/Chapter_13_PICSA__Long_Before_the_season.qmd.json @@ -0,0 +1 @@ +{"title":"PICSA -- Long Before the season","markdown":{"headingText":"PICSA -- Long Before the season","containsRefs":false,"markdown":"## Introduction\n\nPICSA (Participatory Integrated Climate Services for Agriculture) is an\ninitiative to share climate information with small-scale farmers. It was\ndescribed briefly in Chapter 1 and Fig. 12.1a is a repeat of Fig. 1.6a\nto show the different stages of the PICSA activity.\n\n -----------------------------------------------------------------------\n ***Fig. 12.1a Stages of the PICSA project***\n -----------------------------------------------------------------------\n ![](media/image1407.png){width=\"4.880428696412948in\"\n height=\"3.5892180664916884in\"}\n\n -----------------------------------------------------------------------\n\nPICSA has been used in many countries in Africa and beyond, including\nTanzania, Malawi, Lesotho, Ghana, Guyana, Rwanda, Haiti and Bangladesh.\nAt first glance it may seem like many other initiatives to share climate\ninformation with farmers. It has some distinguishing features, that\nexplain its inclusion in this guide.\n\nThe first distinguishing feature is the large set of activities that are\nundertaken prior to the availability of the seasonal forecast. They\nbuild on the information from the historical climatic data. There is a\ndetailed instruction guide, with 12 sections. The first 7 are shown in\nFig. 12.1b and take place in the \"Long-before-the- season\", step shown\nin Fig. 12.1a.\n\n -----------------------------------------------------------------------\n ***Fig. 12.1b***\n -----------------------------------------------------------------------\n ![](media/image1415.png){width=\"5.551943350831146in\"\n height=\"3.387387357830271in\"}\n\n -----------------------------------------------------------------------\n\nThe second distinguishing feature is that PICSA supports farmer's\nactivities in relation to crops, livestock or other livelihood\nactivities. It identifies options and is not directed towards any\nparticular crop or activity. This is indicated in Step d) of Fig. 12.1b.\n\nThird is the emphasis on \"options by context\" that places the farmer\n(and not the \"expert\") at the centre. Thus, PICSA does not make\nrecommendations for the farmers. Instead it offers options, with the\nidea, shown in steps d and e, in Fig. 12.1b, that the farmers, or\nhouseholds, may wish to select those that particularly fit their\ncircumstances. Fig. 12.1c shows an example of options related to\nlivelihood activities.\n\n ---------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 12.1c*** ***Fig. 12.1d***\n ------------------------------------------------------------------------------------------- -------------------------------------------------------\n ![0F15318A-1080-4C3C-AAB7-34B2C68B99B4](media/image1418.jpg){width=\"3.0914698162729657in\" ![](media/image1392.png){width=\"3.1392847769028873in\"\n height=\"1.9868832020997376in\"} height=\"2.0113549868766403in\"}\n\n ---------------------------------------------------------------------------------------------------------------------------------------------------\n\nThese options are not pre-selected but are constructed through dialogues\nbetween the farmers and extension workers. Farmers evaluate options via\na set of participatory exercises. One is a resource allocation map\n(RAM), step a) in Fig. 12.1b, an example of which is in Fig. 12.1d.\n\nFurther information on PICSA is available via the website\n[[https://research.reading.ac.uk/picsa/]{.underline}](https://research.reading.ac.uk/picsa/),\nFig. 12.1e. Information includes the field manual, from which Fig. 12.1b\nshows the first 7 sections. This is currently available in 4 languages,\nnamely English, Bengali, French and Spanish.\n\nThe idea, in PICSA, is that by step g, in Fig. 12.1b, the farmer has\nprovisional plans for the season. These could apply to any season. These\nplans may then be modified by the extra information for this season,\nfrom the seasonal forecast, discussed in Chapter 13.\n\n -----------------------------------------------------------------------\n ***Fig. 12.1e The PICSA webpage***\n -----------------------------------------------------------------------\n ![](media/image1428.png){width=\"6.078515966754156in\"\n height=\"2.4789512248468943in\"}\n\n -----------------------------------------------------------------------\n\nIn this chapter we mainly consider Steps b and c from Fig. 12.1b. This\nis a discussion of the historical temperature and rainfall data, both in\nrelation to climate change (Step b) and then to consider the risks from\ndifferent options (Step c).\n\n## Climate change and variability \n\nIn PICSA it has been useful for farmers to examine and use the\nhistorical graphs themselves, e.g. Fig. 12.2a. Some have had little or\nno formal education, but almost all have been able to follow and\ninterpret the ideas of these time series graphs.\n\n -----------------------------------------------------------------------\n ***Fig. 12.2a***\n -----------------------------------------------------------------------\n ![](media/image1422.png){width=\"5.957272528433946in\"\n height=\"3.622808398950131in\"}\n\n -----------------------------------------------------------------------\n\nStep b, in Fig. 12.1b is one of comparing farmers (and extension\nworkers) perceptions of climate change with the evidence from the\nhistorical climatic records.\n\nMany farmers, NGO and extension staff already have strong views on\nclimate change. However, most have never seen any of the time series\ngraphs of the type shown in Fig. 12.2b and Fig. 12.2c.\n\nTemperatures usually show a clear trend, illustrated by Tmin in Fig.\n12.2b. For rainfall the message is usually one of variability, Fig.\n12.2c, rather than trend, being the main concern. This is a surprise for\nsome, who interprete climate change as implying a change in the pattern\nof rainfall. This is partly because rainfall is by far the most\nimportant climatic element for tropical agriculture.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 12.2b Tmax and Tmin, | ***Fig. 12.2c Total annual |\n| Dodoma*** | rainfall, Dodoma*** |\n+===================================+==================================+\n| ![](media/image1406. | ![](media/image1402.p |\n| png){width=\"3.1087773403324586in\" | ng){width=\"3.0078958880139983in\" |\n| height=\"1.2193744531933508in\"} | height=\"3.004401793525809in\"} |\n| | |\n| ![](media/image1389 | |\n| .png){width=\"3.068208661417323in\" | |\n| height=\"1.2979308836395451in\"} | |\n+-----------------------------------+----------------------------------+\n\nOf course, if there is a trend in temperatures, then this ***is***\nclimate change. The climatic elements are interlinked, hence there must\nbe a corresponding change in the other elements, including rainfall.\nHowever, rainfall is so variable from year to year, that any change is\noften not detectable. In addition, unlike temperatures, that are rising,\nthe changes in the patterns of rainfall will not be so simple -some\nplaces will become wetter and others dryer.\n\nHence, in most sites where PICSA has been used, many of the activities,\ni.e. the options for farming households, are designed to manage the\nrainfall risks, (i.e. variability), rather than change.\n\nThere is an important corollary to this idea. It is easy to blame\nclimate change \"on the West\" and hence assume it is a problem for others\nto solve. But rainfall variability, as shown in Fig. 12.2c, is a problem\nfaced locally by successive generations. Hence discussing options to\nmanage the risks is sensible for individual farmers to consider.\n\nThis type of discussion, within PICSA, is constructive for both the\nintermediaries (NGO and extension staff) and farmers in encouraging an\nopenness to consider changes in their activities, i.e. to consider what\noptions might be useful to manage the (rainfall) risks. This idea is\nwell phrased in the ICRISAT study, (Cooper, et al., 2008). They claim\nthat managing the current climate risks has a double benefit. It is\nuseful itself, as well as preparing farmers for future climate change.\n\nAn initial one-week workshop is often used to introduce PICSA in a new\ncountry, or in a new district, within a country. The graphs, such as\nFig. 12.2b and Fig. 12.2cc are usually part of the materials from the\nfirst day.\n\n## Producing the initial graphs - no data issues\n\nCurrently a key input in PICSA is a series of time-series graphs on\naspects of the rainfall that are of direct interest, and support farmers\nin their choice of options. They don't just look at the graphs, but also\nuse them, as shown in Fig 12.2a, to calculate risks for themselves.\n\nFor many farmers, also for intermediaries, this is the first time they\nhave seen this type of time-series graph. Hence, as mentioned above, it\nusually serves two purposes. The first is as a practical demonstration,\nthat (for the rainfall) the main issue is one of variability, rather\nthan change. Hence \"the ball is in their court\" to manage their climatic\nrisks, rather than being part of the general topic of climate change.\nThe second is as a tool to calculate the risks for alternative options.\n\nThese graphs are usually prepared by staff from the corresponding NMS.\nCurrently the work is often by NMS headquarters staff, but perhaps LMS\nstaff based locally may be able to do some of this work in the future.\nThe production is simple when there are no \"data issues\" and is\ndescribed in this section.\n\nA checklist may useful, and an initial version is in Table 12.3a. Start\nwith this list, and then edit to produce your own.\n\n ---------------------------------------------------------------------------------\n ***Table 12.3a \n Initial \n checklist*** \n -------------- ----------------------------------- ------------------------------\n ***Step*** ***Action*** ***R-Instat Dialogue***\n\n 1 Read the data into R-Instat File \\> Open from File\n\n 2 Check the data as input Climatic \\> Tidy and Examine\n \\>\\\n One Variable Summarise\n\n 3 Make a date variable Climatic \\> Dates \\> Make Date\n\n 4 Infill if dates are absent Climatic \\> Dates \\> Infill\n\n 5 Make further date variables Climatic \\> Dates \\> Use Date\n (possibly shifted) \n\n 6 Probably delete the initial year, Right-click, then Delete and\n month, day variables, plus further Reorder variables\n \"housekeeping\" \n\n 7 Define the data as climatic Climatic \\> Define Climatic\n Data\n\n 8 Omitting Check Data, because data Could add:\\\n are ok! Climatic \\> Check Data \\>\n Inventory,\\\n Climatic \\> Check Data \\>\n Display Daily,\\\n Climatic \\> Check Data \\>\n Boxplot, etc.\n\n 9 Add rain-day variable Climatic \\> Prepare \\>\n Transform\n\n 10 Save data as a R-file File \\> Save As\n\n 11 Get annual/seasonal rainfall and Climatic \\> Prepare \\>\n rain day totals Climatic Summaries\n\n 12 Get annual/seasonal mean Climatic \\> Prepare \\>\n temperatures Climatic Summaries\n\n 13 Graph the max and min temperature Describe \\> Specific \\> Line\n Plot\n\n 14 Graph the rainfall and rain day Climatic \\> PICSA \\> Rainfall\n totals graphs\n ---------------------------------------------------------------------------------\n\nThis checklist involves largely going systematically down R-Instat's\nclimatic menu, shown in Fig. 12.3a, from ***Tidy and Examine***, to the\n***PICSA menu*** for the graphs of the annual summaries.\n\nThe data used for illustration are from a single station, Dodoma, in\nTanzania, but the checklist works equally well with data from multiple\nstations. If the data file only has rainfall, then omit steps 12 and 13.\n\nThe data from Tanzania were supplied as an Excel file as shown in Fig.\n12.3b. This was exported from Clidata (Tolatz, 2019) and is in the\n\"right shape\" for R-Instat, i.e. each row of data is for one day and the\nfour elements are in successive columns.\n\n ---------------------------------------------------------------------------------------------------------------\n ***Fig. 12.3a*** ***Fig. 12.3b***\n ------------------------------------------------------- -------------------------------------------------------\n ![](media/image1414.png){width=\"2.1945570866141733in\" ![](media/image1359.png){width=\"3.8149748468941382in\"\n height=\"2.2015015310586175in\"} height=\"2.8353357392825895in\"}\n\n ---------------------------------------------------------------------------------------------------------------\n\nUse ***File \\> Open from File*** to input your data.\n\nTo practice with these data, use ***Open from Library \\> Instat \\>\nBrowse \\> Climatic \\>Tanzania*** and open the ***Dodoma18.xlsx*** file,\nFig. 12.3c.\n\nWe first make a deliberate mistake. If you are following the exercise,\nthen we strongly recommend that you make this mistake also. It is very\ncommon!\n\n+---------------------------------------+------------------------------+\n| ***Fig. 12.3c Importing from Excel*** | ***Fig. 12.3d Data imported |\n| | incorrectly*** |\n| ***File \\> Open from File or Open | |\n| from Library*** | |\n+=======================================+==============================+\n| ![](media/image | ![](media/image1364.png){ |\n| 1358.png){width=\"3.363928258967629in\" | width=\"2.6359897200349955in\" |\n| height=\"2.814714566929134in\"} | h |\n| | eight=\"2.800184820647419in\"} |\n+---------------------------------------+------------------------------+\n\nIn Fig. 12.3c the data frame preview indicates something is wrong,\nbecause there are m values present. This is not always so obvious,\nbecause only 10 lines are shown, which may not include missing values.\n\nPress ***Ok*** to import that data. The problem is now shown, in\nR-Instat, by the (c) after SUNHRS(c) and TMPMIN(c) and TMPMAX(c). These\nvariables are numeric but have been imported as character (text)\nvariables, because there are some non-numeric characters in these\ncolumns.\n\nYou can correct this problem in R-Instat, but it is simpler to correct\nwhen you import the data, or in Excel. Here it is easy to correct when\nthe data are imported.\n\nSo, use ***File \\> Close Data File***[^49]. Then recall the last\ndialogue to give Fig. 12.3c again and insert ***m*** as the ***Missing\nValue String***, Fig. 12.3c. The preview changes to show NA instead of\nm. Press ***Ok*** and the variables are imported correctly.\n\nUse the climatic menu, Fig. 12.3e and item 2 in the checklist, see Table\n12.3a. Start with the ***Tidy and Examine*** menu, Fig. 12.3e. The data\nhere are already tidy, hence move straight to the ***One Variable\nSummarise Dialogue***. If your data are in a \"different shape\" some of\nthe other dialogues in this menu may be needed.\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 12.3e The Tidy and | ***Fig. 12.3f One Variable |\n| Examine menu*** | Summarise*** |\n| | |\n| | ***Climatic \\> Tidy and Examine |\n| | \\> Summarise*** |\n+==================================+===================================+\n| ![](media/image1355.p | ![](media/image1356. |\n| ng){width=\"2.9702985564304463in\" | png){width=\"2.7105074365704285in\" |\n| height=\"2.4269542869641296in\"} | height=\"2.8048304899387575in\"} |\n+----------------------------------+-----------------------------------+\n\nThe results are in Fig. 12.3g. They are promising, because of the\nfollowing:\n\na) There are no missing values in the Year, Month, Day variables. It\n would be a problem if there were.\n\nb) Amazingly the rainfall variable is also complete. This is great, but\n rare. There are missing values in the other elements, partly because\n they started later than the rainfall.\n\nc) However, the Station name was imported as a character, and not a\n factor variable.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 12.3g Results from Summary -- Step 2 in ***Fig. 12.3h Name as Factor***\n checklist*** \n ------------------------------------------------------ -------------------------------------------------------\n ![](media/image1387.png){width=\"4.383143044619422in\" ![](media/image1353.png){width=\"1.6977471566054243in\"\n height=\"2.081823053368329in\"} height=\"2.714501312335958in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nThe Station name is not a problem here, because there is only one\nstation. However, it is still made into a Factor variable for\ncompleteness, Fig. 12.3h. This is important when there are multiple\nstations in the same file.\n\n ---------------------------------------------------------------------------------------------------------------\n ***Fig. 12.3i*** ***Fig. 12.3j***\n ------------------------------------------------------- -------------------------------------------------------\n ![](media/image1354.png){width=\"2.7324212598425195in\" ![](media/image1361.png){width=\"3.1415496500437445in\"\n height=\"1.6530107174103237in\"} height=\"3.01915135608049in\"}\n\n ---------------------------------------------------------------------------------------------------------------\n\nThe ***Climatic \\> Date*** menu, Fig. 12.3i is used for Steps 3 to 5 in\nthe checklist, Table 12.3a. First calculate a single Date variable, i.e.\na Variable of Type (D). Here it is calculated from the 3 variables,\ngiving the YEAR, MONTH and DAY as shown in Fig. 12.3j.\n\n+------------------------------------+---------------------------------+\n| ***Fig. 12.3k Infilling where | ***Fig. 13 Adding variables |\n| dates are omitted*** | from the date*** |\n| | |\n| ***Climatic \\> Dates \\> Infill | ***Climatic \\> Dates \\> Use |\n| Missing Dates*** | Date*** |\n+====================================+=================================+\n| ![](media/image136 | ![](media/image1376.p |\n| 0.png){width=\"3.102471566054243in\" | ng){width=\"2.859963910761155in\" |\n| height=\"2.9833847331583554in\"} | height=\"4.37336176727909in\"} |\n+------------------------------------+---------------------------------+\n\nNext -- Step 4 - is to check for any gaps in the data, using ***Climatic\n\\> Dates \\> Infill Missing Dates***, Fig. 12.3k. They are absent dates\nin the file, for example a year being absent. This is separate from the\ndates being complete, but with missing values in the data.\n\nIn this case the result was that there was nothing to infill. Proceed to\nStep 5 with ***Climatic \\> Dates \\> Use Date***, Fig. 12.3l. Dodoma is\nin the southern hemisphere, with a single rainy season from November to\nApril. Hence, in Fig. 12.3l, the year is shifted to start in July. Five\nvariables are generated, as shown in Fig. 12.3l.\n\nNow a little \"housekeeping\", Step 6 in the checklist. ***Right-click***\nand ***delete*** the 3 original YEAR, MONTH DAY variables and re-order\nthe remaining variables, Fig. 12.3m, so the measurements are last. This\nis a convenient, and not an essential step.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 12.3m*** ***Fig. 12.3n***\n ------------------------------------------------------ -------------------------------------------------------\n ![](media/image1363.png){width=\"2.459254155730534in\" ![](media/image1367.png){width=\"3.5132097550306214in\"\n height=\"1.949679571303587in\"} height=\"2.354465223097113in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nThe data are shown in Fig. 12.3n. They are now ready for Step 7, which\nis to define the data as climatic, as shown in Fig. 12.3o.\n\n+------------------------------------+---------------------------------+\n| ***Fig. 12.3o Defining a data | ***Fig. 12.3p The Check Data |\n| frame as climatic*** | menu*** |\n| | |\n| ***Climatic \\> Define Climatic | ***Climatic \\> Check Data*** |\n| Data*** | |\n+====================================+=================================+\n| ![](media/image138 | ![](media/image1365.p |\n| 5.png){width=\"3.073804680664917in\" | ng){width=\"2.909319772528434in\" |\n| height=\"3.739970472440945in\"} | height=\"1.7850229658792651in\"} |\n+------------------------------------+---------------------------------+\n\nThe ***Climatic \\>*** ***Define Climatic Data*** dialogue should largely\nbe filled automatically. Check carefully this it has the variables you\nwill be using in the future analyses. Check, especially, the variable\nfor the Station names and those for the dates. Then ***press the Check\nUnique button***.\n\nIn this check, green is a good colour as is shown in Fig. 12.3o. This\ncheck verifies that the combination of Station name and Date can become\nkey fields in this data frame. If not, then it is likely that you have\nsome duplicates in the data. Duplicates are days (rows) in the file\nwhere a date has been given twice. Then you need to return to the\n***Climatic \\> Tidy and Explore*** menu as we discuss in Section 12.6.\n\nIn the checklist, Table 12.3a you now usually move to the ***Climatic \\>\nCheck Data*** menu, Fig 12.3p. This is described in detail in Chapter 5,\nand we return to this menu in Section 12.6. It is omitted here to\nproceed quickly to the production of the variables and graphs needed for\nPICSA.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 12.3q*** ***Fig. 12.3r***\n ------------------------------------------------------- -----------------------------------------------------\n ![](media/image1369.png){width=\"3.1966568241469817in\" ![](media/image1379.png){width=\"2.34839457567804in\"\n height=\"2.9785728346456692in\"} height=\"3.0432392825896764in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nHence, move to Step 9 in the checklist, i.e. the ***Climatic \\>\nPrepare*** menu, Fig. 12.3q. The ***Climatic \\> Prepare \\> Transform***\ndialogue, Fig. 12.3r is used first as explained below.\n\nComplete Fig. 12.3r as shown and press ***Ok***. This produces a new\nvariable, called ***rainday***, that takes the value 1 when it is rainy\n-- defined here as a day with more than 0.85mm. It is zero otherwise, as\nshown in Fig. 12.3s. This is used for graphs of the number of rain days.\n\n+---------------------------------+------------------------------------+\n| ***Fig. 12.3s Saving the | ***Fig. 12.3t Save the RDS file*** |\n| data*** | |\n| | ***File \\> Save As \\>Save Data |\n| | As*** |\n+=================================+====================================+\n| ![](media/image1417.pn | ![](media/image137 |\n| g){width=\"2.8975043744531934in\" | 2.png){width=\"3.153951224846894in\" |\n| height=\"1.8040365266841645in\"} | height=\"0.9491251093613299in\"} |\n+---------------------------------+------------------------------------+\n\nThese data are now saved as an R file, i.e. with an RDS extension. Use\n***File \\> Save As \\> Save Data As***, Fig. 12.3s to give the dialogue\nshown in Fig. 12.3t. ***Browse*** to where you want to save the data.\nOnce you click ***Save*** on that dialogue, you return automatically to\nFig. 12.3t and ***click Ok*** to make the Save.\n\nOnce the data are saved, then re-open these saved data, to continue the\nwork on a future occasion. The first 10 steps do not have to be repeated\n\nThese steps, so far, have been described in detail. In practice, once\nthey become routine, they typically take 5 minutes or less. If problems\nare found during the process, then we strongly recommend you consider\nmaking corrections in the database, or (less comfortably) in an Excel\nfile, and then start the checklist again.\n\nIf you are following these steps with the Dodoma data, then it is time\nto substitute a further data set. The data used, so far, was of very\ngood quality, but there were still some issues, that we discuss in\nSection 12.6. Hence use ***File \\> Open From Library \\> Instat \\> Browse\n\\> Climatic \\> Tanzania*** again and choose the file called\n***Dodoma18c***. The data are the same, except 2 more variables are\nadded, with the corrected temperature data. These new variables are\ncalled Tmax and Tmin.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 12.3u Rainfall and | ***Fig. 12.3v Day range |\n| temperature summaries*** | sub-dialogue*** |\n| | |\n| ***Climatic \\> Prepare \\> | |\n| Climatic Summaries*** | |\n+===================================+==================================+\n| ![](media/image1377. | ![](media/image1351.p |\n| png){width=\"3.0173523622047242in\" | ng){width=\"2.9682020997375327in\" |\n| height=\"3.719714566929134in\"} | height=\"2.7967705599300086in\"} |\n+-----------------------------------+----------------------------------+\n\nThe next steps, 11 and 12 in the checklist, both use the ***Climatic \\>\nPrepare \\> Climatic Summaries*** dialogue, Fig. 12.3u\n\nTwo important decisions are i) whether the summaries are to be for the\nwhole (shifted) year, or perhaps just for the rainy season? Then ii) how\nyou will handle missing values in the data.\n\nIn Fig. 12.3u we choose to get all summaries for the ***rain variable***\nfor the 6 months of the rainy season, from November to April. Hence\nclick on the ***Day Range*** button in Fig. 12.3u.\n\nIn the sub-dialogue in Fig. 12.3v, choose the range to be ***November\n1st to April 30th***. After pressing ***Return*** you see that the day\nrange is now 6 months, from the shifted day number 124 to day 305, i.e.\nabout 182 days.\n\nNow, in Fig. 12.3u, check the ***Omit Missing Values checkbox***. Then\nclick on the ***Summaries button***, and then on the ***Missing Tab***,\nFig. 12.3w. Set it, as shown in Fig. 12.3w, to about 160 days. This\npermits a few missing values, but not a complete month missing.\n\nThen, in the same sub-dialogue, click on the ***Summaries tab*** and\njust have the ***N-Non Missing*** and the ***Sum*** checked, as shown in\nFig. 12.3x.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 12.3w Missing values tab*** ***Fig. 12.3x Summaries calculated***\n ------------------------------------------------------ -------------------------------------------------------\n ![](media/image1339.png){width=\"2.949481627296588in\" ![](media/image1334.png){width=\"3.1188287401574804in\"\n height=\"1.9575754593175854in\"} height=\"2.7169477252843395in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nPressing Ok in the dialogue in Fig. 12.3u results in a new data frame\nwith 4 variables and 85 rows, Fig. 12.3y, because there are 85 years\n(seasons) of data. The summary for the first year (1934/35 season) is\nmissing. This may come as a slight surprise, because there are no\nmissing values in the rainfall data. However, the record starts on 1\nJanuary 1935, which therefore does not have November or December of the\n1934/35 season.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 12.3y*** ***Fig. 12.3z***\n ------------------------------------------------------ -------------------------------------------------------\n ![](media/image1342.png){width=\"1.984459755030621in\" ![](media/image1335.png){width=\"3.9305555555555554in\"\n height=\"3.0939971566054245in\"} height=\"3.126576990376203in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nReturn to the same dialogue (***Climatic \\> Prepare \\> Climatic\nSummaries***) to add 3 more summaries.\n\na) Change the ***rain*** to the ***rainday*** variable in the main\n dialogue, Fig. 12.3u. Press Ok.\n\nb) Change the element to ***Tmin*** and change the ***Summary*** to the\n ***Mean***, (rather than the Sum). Press ***Ok***.\n\nc) Change the element to ***Tmax***. Press Ok.\n\nThe results are in Fig. 12.3z. They show, for example, that in the\n1962-63 season (November to April) there was a total of 422mm rain from\n41 rain days, hence an average of just over 10mm per rain day. The value\nof Tmin could not be given, because there were only 147 non-missing days\nin that season. The mean for Tmax was 29.4˚C.\n\nFinally, in this initial checklist, give the corresponding graphs. For\nthe temperature data there is not yet a special climatic dialogue, so\nuse ***Describe \\> Specific \\> Line Plot***, as shown in Fig. 12.3aa.\n\n+---------------------------------+------------------------------------+\n| ***Fig. 12.3aa*** | ***Fig. 12.3ab*** |\n| | |\n| ***Describe \\> Specific \\> Line | |\n| Plot*** | |\n+=================================+====================================+\n| ![](media/image1327.pn | ![](media/image133 |\n| g){width=\"2.9165726159230094in\" | 7.png){width=\"3.211813210848644in\" |\n| height=\"3.036790244969379in\"} | height=\"3.0356714785651793in\"} |\n+---------------------------------+------------------------------------+\n\nIn Fig. 12.3aa the ***Multiple Variables*** option is used to facilitate\nplotting Tmax and Tmin together. ***Points are added***, as is a ***line\nof best fit***. The ***Data Options*** button is also used to\n***filter*** the data to just ***s_year \\> 1957***.\n\nThe resulting graph is shown in Fig. 12.3ab. It indicates an increase of\ntemperatures, with Tmin having a higher slope than Tmax. The analysis of\nthe temperature data and the presentation of the corresponding PICSA\ngraphs is considered further in Section 12.5.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 12.3ac Remove filter*** ***Fig. 12.3ad The Climatic \\> PICSA dialogues***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image1333.png){width=\"2.43494750656168in\" ![](media/image1348.png){width=\"3.483146325459318in\"\n height=\"2.9829297900262466in\"} height=\"2.312853237095363in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nBefore doing a rainfall graph use ***Right-click*** and the last option\nis to ***Remove Current Filter***, Fig. 12.3ac.\n\nThen use ***Climatic \\> PICSA \\> Rainfall Graph***, Fig 12.3ad. Graph\nthe variable called sum_rain, Fig. 12.3ae. Then use the ***PICSA\nOptions*** button to add a horizontal line for the mean, Fig. 12.3af.\n\n+---------------------------------+------------------------------------+\n| ***Fig. 12.3ae*** | ***Fig. 12.3af*** |\n| | |\n| ***Climatic \\> PICSA \\> | |\n| Rainfall Graph*** | |\n+=================================+====================================+\n| ![](media/image1325.pn | ![](media/image135 |\n| g){width=\"2.8456485126859143in\" | 2.png){width=\"3.093505030621172in\" |\n| height=\"2.7895516185476814in\"} | height=\"2.1058464566929134in\"} |\n+---------------------------------+------------------------------------+\n\nThe resulting graph is shown in Fig. 12.3ag. Return to the ***Climatic\n\\> PICSA \\> Rainfall Graph*** dialogue and substitute the\n***sum_rainday*** variable to give a similar graph of the seasonal\nnumber of rain-days.\n\n -----------------------------------------------------------------------\n ***Fig. 12.3ag PICSA graphs of the seasonal totals and number of rain\n days***\n -----------------------------------------------------------------------\n ![](media/image1350.png){width=\"4.825438538932634in\"\n height=\"2.4303608923884514in\"}\n\n ![](media/image1347.png){width=\"4.849785651793526in\"\n height=\"2.4711023622047246in\"}\n -----------------------------------------------------------------------\n\nThe results are in Fig. 12.3ag. They show that the mean rainfall total\nwas about 560mm from an average of just over 40 rain days. This is an\naverage of about 7 rain days per month, roughly one day in 4. This is\nsufficiently low that it is likely that there are often long dry spells\nduring the season.\n\nWe have produced our first \"PICSA-style\" graphs. Further graphs are\nproduced in the next Section, together with ways of making the graphs\nappropriate for the extension staff and for farmers.\n\n## The rainy season\n\nIn this section we consider the production of further rainfall summaries\nwith the ***Climatic \\> Prepare*** menu and the corresponding graphs\nfrom the ***Climatic \\> PICSA*** menu.\n\nUsually between 6 and 8 graphs are prepared and discussed on the first\nday of the main PICSA workshop. They all have the same format as shown\nin Fig. 12.3ag and are designed to look consistent. The x-axis is the\nyears (or seasons) and the y-axis is for something of interest. They\nusually include a rainfall total, Fig. 12.3ag together with the start,\nend and length of the rainy season. There are then one or two graphs of\nevents within the season, for example the length of the longest dry\nspell or the most extreme daily rainfall.\n\nDefinitions can be changed easily. PICSA encourages \"options by context\"\nand this can apply to households and or crops having different\ndefinitions for the start of the rains, and for any other\ncharacteristic.\n\nThe graphs are also used on the \"practice with farmers day\", during the\nworkshop, usually day 4. Following the workshop, the agreed graphs are\nthen used by the extension staff or farmer's representatives to share\nwith individuals or groups of farmers.\n\nWe continue with the data from Dodoma, used in Section 12.3.\n\n+----------------------------------------+-----------------------------+\n| ***Fig. 12.4a Start of the rains*** | ***Fig. 12.4b Adding a |\n| | dry-spell condition*** |\n| ***Climatic \\> Prepare \\> Start of the | |\n| Rains*** | |\n+========================================+=============================+\n| ![](media/image | ![](media/image1362.png){ |\n| 1344.png){width=\"3.4121161417322834in\" | width=\"2.573474409448819in\" |\n| height=\"3.154821741032371in\"} | hei |\n| | ght=\"2.9682469378827645in\"} |\n+----------------------------------------+-----------------------------+\n\nUse ***Climatic \\> Prepare \\> Start of the Rains***, Fig. 12.4a. A range\nof definitions of the Start of the rains is discussed in Section 7.3. In\n2019, in Malawi and Tanzania the definitions used were:\n\n- Malawi: First occasion from 1 October with 25mm or more in 3 days.\n\n- Tanzania: First occasion from 15 November with 20mm in 4 days, of\n which 2 days were rainy.\n\nWe here use the same as Tanzania. Hence click on the ***Day Range*** in\nFig. 12.4a and set the earliest date to ***15 November***. Make the\nlatest date ***29 February***. Then ***complete the dialogue*** as shown\nin Fig. 12.4a and press ***Ok***.\n\nThis generates 2 new variables, the first with the day number in the\n(shifted) year and the second giving the corresponding date.\n\nReturn to the ***Climatic \\> Prepare \\> Start of the Rains*** dialogue\nand add the dry-spells condition, Fig. 12.4b. Change the default of 9\ndays to 10 days as the maximum allowable spell[^50]. Also change the\nnames of the resulting variables, or the events produced before will be\noverwritten.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 12.4c End of the rains*** | ***Fig. 12.4d*** |\n| | |\n| ***Climatic \\> Prepare \\> End of | |\n| the Rains*** | |\n+===================================+==================================+\n| ![](media/image1343. | ![](media/image1341.p |\n| png){width=\"3.0006211723534557in\" | ng){width=\"2.9240430883639545in\" |\n| height=\"3.02583552055993in\"} | height=\"2.478840769903762in\"} |\n+-----------------------------------+----------------------------------+\n\nIn Chapter 7 we discuss the use of these alternative definitions of the\nstart. Here we simply choose one of them -- for the next PICSA graph. We\nquickly also get data on the end and length of the season.\n\nIn many countries we use a simple water-balance definition of the end of\nthe rains/season. This does not work well in Southern Africa, as\nexplained in Section 7.4. Hence here we use the method proposed by\n(Mupamgwa, Walker, & Twomlow, 2011).\n\nSo, complete the ***Climatic \\> Prepare \\> End of the Rains*** dialogue\nas shown in Fig. 12.4c. In the ***Day Range*** use ***15 February to 30\nJune***.\n\nThen use ***Climatic \\> Prepare \\> Length of the Season***, Fig. 12.4d\nand complete as shown.\n\nThe results have added variables to the annual data frame, Fig. 12.4e.\nThe year indicated shows that in the 1937/38 season there was a planting\nopportunity on day 174, (i.e. 21 December). But, if the dry-spell\ndefinition is included then the start was on 23rd January. The last\nheavy rainfall was on 31^st^ March, which was defined as the end of the\nrains/season, giving a season length of 101 days.\n\nGraphs can be produced assuming the user accepts the definitions.\n\n ---------------------------------------------------------------------------------------------------------------\n ***Fig. 12.4e The annual data frame*** ***Fig. 12.4f A graph of the Start***\n ------------------------------------------------------- -------------------------------------------------------\n ![](media/image1346.png){width=\"3.2341983814523183in\" ![](media/image1349.png){width=\"2.7932720909886264in\"\n height=\"2.942286745406824in\"} height=\"2.8815354330708662in\"}\n\n ---------------------------------------------------------------------------------------------------------------\n\nUse ***Climatic \\> PICSA \\> Rainfall Graph*** for the variable\n***start_rain*** and complete as shown in Fig. 12.4f. Then complete the\n***PICSA options*** for the ***Y-axis*** and the ***Lines***, as shown\nin Fig. 12.4g and 12.4h.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 12.4g*** ***Fig. 12.4h***\n ------------------------------------------------------ -------------------------------------------------------\n ![](media/image1357.png){width=\"2.811955380577428in\" ![](media/image1294.png){width=\"2.9353149606299214in\"\n height=\"2.2885793963254595in\"} height=\"2.232117235345582in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nThe resulting graph is in Fig. 12.4i. There can be similar graphs for\nthe end of the rains and the length of the season.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 12.4i PICSA graph for the start*** ***Fig. 12.4j The start with the dry-spell condition***\n ------------------------------------------------------ -------------------------------------------------------\n ![](media/image1292.png){width=\"2.963582677165354in\" ![](media/image1291.png){width=\"3.1734350393700788in\"\n height=\"2.6766152668416447in\"} height=\"2.6980872703412073in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nThen it is time to reflect in three different ways:\n\na) Is this the ***right definition to use for the start***? For\n example, should the 15 Nov be the earliest possible starting date,\n given that quite a lot of seasons had a starting opportunity very\n close to this earliest date. Or should the dry spell have been\n included.\\\n It is easy to try the graph with the dry spell included. Just return\n to the ***Climatic \\> PICSA \\> Rainfall Graph*** dialogue,\n substitute the start_dry variable and press Ok to give the graph in\n Fig. 12.4j. The mean starting date is now about a week later and\n there are considerably more years that do not have a successful\n start until January. Which graph more closely reflects the farmer's\n situation?\n\nb) Does the graph indicate there may be ***problems with the data***?\n Often the first results indicate possible data issues. In this case\n there is nothing that stands out, but to show what might be done, we\n examine the extreme value in Fig. 12.4i. This was a start only on\n 6^th^ February in the 1960/61 season.\n\n+------------+--------------+-----------------------------------------+\n| ***Fig. | | ***Fig. 12.4l PICSA graph with |\n| 12.4k The | | options*** |\n| start in | | |\n| the | | |\n| extreme | | |\n| year*** | | |\n| | | |\n| * | | |\n| **Climatic | | |\n| \\> Check | | |\n| Data \\> | | |\n| Display | | |\n| Daily*** | | |\n+============+==============+=========================================+\n| ![] | ![](m | ![](media/ima |\n| (media/ima | edia/image12 | ge1297.png){width=\"3.490313867016623in\" |\n| ge1284.png | 85.png){widt | height=\"3.295974409448819in\"} |\n| ){width=\"0 | h=\"1.1892607 | |\n| .981046587 | 174103238in\" | |\n| 9265092in\" | heigh | |\n| height=\"4 | t=\"4.1505664 | |\n| .193491907 | 91688539in\"} | |\n| 261592in\"} | | |\n+------------+--------------+-----------------------------------------+\n\nUse the ***Climatic \\> Check Data \\> Display Daily*** dialogue to give\nthe results in Fig. 12.4k. This shows that November and December did\nhave very poor rains in that season. With the definition of the start\nused in Malawi (25mm in 3 days) the start would have been on 23^rd^\nJanuary, but the insistence, in the Tanzania definition, of at least 2\nrain days ruled this out. Hence the start was indeed on 6^th^ February.\n\nc) Is the graph as clear as possible for the intended PICSA audience?\n This is what we address here.\n\nAn example of a graph with additional options is in Fig. 12.4l. The\nelements changed, compared to the default, are shown in Fig. 12.4m.\n\n -----------------------------------------------------------------------\n ***Fig. 12.4m Setting PICSA graph options***\n -----------------------------------------------------------------------\n ![](media/image1307.png){width=\"5.997491251093614in\"\n height=\"2.5479090113735783in\"}\n\n ![](media/image1282.png){width=\"6.012708880139982in\"\n height=\"1.6143339895013122in\"}\n\n ![](media/image1286.png){width=\"2.433937007874016in\"\n height=\"1.8857534995625547in\"}\n -----------------------------------------------------------------------\n\n1) From the titles tab in Fig. 12.4m, a sub-title shows what has been\n plotted. The caption gives credit to TMA for supplying the data. The\n units are now specified on the y-axis.\n\n2) On the x-axis the labels are given every 10 years.\n\n3) On the y-axis the data start at zero. I like that!\n\nIn Fig. 12.4n the x-axis labels have been changed to every 4 years. The\nminor-grid lines are now omitted (using the Panel tab in the\nsub-dialogue). The sub-title has also been moved to become part of the\ncaption[^51].\n\n ---------------------------------------------------------------------------------------------------------------\n ***Fig. 12.4n*** ***Fig. 12.4o***\n ------------------------------------------------------- -------------------------------------------------------\n ![](media/image1298.png){width=\"2.9957917760279966in\" ![](media/image1328.png){width=\"3.0032381889763777in\"\n height=\"2.755722878390201in\"} height=\"2.7912871828521433in\"}\n\n ---------------------------------------------------------------------------------------------------------------\n\nFurther \"within the season\" graphs can be given as needed. The season\nlength was calculated earlier, Fig. 12.4e and is plotted in Fig. 12.4o.\nThe median length at Dodoma was about 4 months and varies between 2 and\n6 months.\n\nThe total rainfall within the season is sometimes requested. This is the\nrainfall between the start dates and the end dates. This again uses the\n***Climatic \\> Prepare \\> Climatic Summaries***, as shown in Fig. 12.4p.\n\n+----------------------------+-----------------------------------------+\n| ***Fig. 12.4p*** | ***Fig. 12.4r Day Range from start to |\n| | end*** |\n| ***Climatic \\> Prepare \\> | |\n| Summaries*** | |\n+============================+=========================================+\n| ! | ![](media/imag |\n| [](media/image1329.png){wi | e1331.png){width=\"3.6065048118985126in\" |\n| dth=\"2.4361231408573927in\" | height=\"2.3646872265966756in\"} |\n| heig | |\n| ht=\"3.1956178915135607in\"} | |\n+----------------------------+-----------------------------------------+\n\nThe difference here, from the summaries given earlier, is the choice of\nthe dates, from the ***Day Range*** button in Fig. 12.4q. In Fig. 12.4r\nthey are specified as ***Variable Day*** and use the summary data for\nthe start and end of the rains, that was found earlier. In the dialogue,\nin Fig. 12.4q the missing values checkbox is now unticked to dis-allow\nany years when there are missing values for the rainfall during the\nseason.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 12.4s*** ***Fig. 12.4t***\n ------------------------------------------------------ -------------------------------------------------------\n ![](media/image1332.png){width=\"2.741344050743657in\" ![](media/image1308.png){width=\"3.2065726159230095in\"\n height=\"2.8988910761154854in\"} height=\"2.9150656167979in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nThe results are in the last 2 variables of the summary data, shown in\nFig. 12.4s. In this summary, the variable called ***count_rain*** is the\nnumber of days used for the sum and is almost the same as the length --\nwhich is also given in Fig. 12.4s. It should be the same, because it is\nsimply counting the number of days used for that calculation, i.e.\nbetween the start and end dates. It is thus effectively another way of\nfinding the length[^52].\n\nThe resulting graph is shown in Fig. 12.4t.\n\nAn attractive way these results can be used is shown in Fig. 12.4u. The\ndata, from Fig. 12.4s, can be transferred to an interactive app which\n(unlike R-Instat) is available for a smart-phone. In Fig. 12.4u the user\ncan move the slider, shown at 600mm to find the risks for any given\nseasonal rainfall required.\n\n -----------------------------------------------------------------------\n ***Fig. 12.4u***\n -----------------------------------------------------------------------\n ![](media/image1311.png){width=\"6.148199912510936in\"\n height=\"2.9562587489063867in\"}\n\n -----------------------------------------------------------------------\n\nIt is an obvious graph and is often proposed for PICSA. However, it is\ncomplicated, as it is composed of three elements, namely the start, the\nend, and then the totals within this period, that varies from season to\nseason. We often find it is not very different to the graph with fixed\nend points, such as Fig. 12.3ag that gave the totals from November to\nApril.\n\nThese graphs, from the start to the end may be more relevant for sites\nwhere there is a bimodal pattern of rainfall. Even then that would be\n\"in competition\" with simpler graphs giving the totals for fixed\nperiods, say from October to December and then for March to May.\n\nWe return to the possible use of the facility for variable dates in the\nSection 12.5.\n\nThis same facility for flexible choice of the starting and ending dates\nis available in other dialogues and the longest dry-spell length during\nthe season is an obvious graph.\n\nThe ***Climatic \\> Prepare \\> Spells*** dialogue is shown in Fig. 12.4v.\nThe ***Day Range*** is completed as shown earlier in Fig. 12.4r. The\ngraph of the spell lengths, using Climatic \\> PICSA \\> Rainfall Graphs\nis then shown in Fig. 12.4 w. The median for the longest spell length in\nthe season is 2.5 weeks and about 1 year in 7 has a dry spell of 25 days\nor more.\n\n+------------------------------+---------------------------------------+\n| ***Fig. 12.4v Dry spells | ***Fig. 12.4w Graph of maximum spell |\n| during the season*** | lengths*** |\n| | |\n| ***Climatic \\> Prepare \\> | |\n| Spells*** | |\n+==============================+=======================================+\n| ![](media/image1320.png){ | ![](media/image1 |\n| width=\"2.5910148731408573in\" | 317.png){width=\"3.4119761592300963in\" |\n| he | height=\"3.088657042869641in\"} |\n| ight=\"3.0473589238845142in\"} | |\n+------------------------------+---------------------------------------+\n\nThe Climatic \\> Prepare \\> Extremes dialogue facilitates a study of\nextreme events. It is used in Fig. 12.4x to find the maximum single day\nrainfall each year, together with when the maximum occurred.\n\nThe graph, in Fig. 12.4y shows the median is 66mm on a day and just a\nfew years have a day with more than 100mm. The colours in Fig. 12.4y\nindicate which month the maximum value occurred, and indicate that it\ncan be in any of the months of the rainy season[^53].\n\n+----------------------------+-----------------------------------------+\n| ***Fig. 12.4x*** | ***Fig. 12.4y*** |\n| | |\n| ***Climaitc \\> prepare \\> | |\n| Extremes*** | |\n+============================+=========================================+\n| ![](media/image1319.png){w | ![](media/imag |\n| idth=\"2.415457130358705in\" | e1310.png){width=\"3.5962543744531934in\" |\n| hei | height=\"3.2320866141732285in\"} |\n| ght=\"3.559381014873141in\"} | |\n+----------------------------+-----------------------------------------+\n\n## More with the rainfall and temperature data?\n\nWith rainfall propose more detailed analyses and other types of\npresentation.\n\nVertical lines instead of joined lines[^54]?\n\n -----------------------------------------------------------------------\n ![](media/image1261.png){width=\"6.268055555555556in\"\n height=\"2.8256944444444443in\"}\n\n -----------------------------------------------------------------------\n\n[Also do risks for temperatures, where no special facilities exist.\nFirst frost and last frost in Leshoto as examples. Also in more detail\nin Chapter 8.]{.mark}\n\n[Also ask about Bangladesh where the risks may be of too much rain,\nrather than too little?]{.mark}\n\n## Coping with data issues\n\n## Combining risks for different crops\n\nTable 12.7a is taken from the PICSA Field Guide, (Dorward, Clarkson, &\nStern, 2016) and shows the sort of results we are aiming for. The first\nstep is for the Ministry of Agriculture or elsewhere to provide the\ninformation in the first 4 columns of Table 12.7a. This specifies\nvarious crops (options for PICSA farmers) together their length and\nwater requirement. For example, the local variety of maize is a 120-day\ncrop and needs 480mm water. Alternatively, a possible variety of sorghum\nis 110 days and needs 300mm.\n\nThe calculations in this section provide the risks from specified dates\nof planting. In the last column of Table 12.7a the chance of success\nfrom a late planting is just one year in 5 for the local maize, compared\nto 3 years in 5 for the sorghum.\n\n --------------------------------------------------------------------------------------\n **Table \n 12.7a \n Example \n crop \n table** \n ---------- ------------- ------------ ---------- ----------- ------------ ------------\n **Crop** **Variety** **Days to **Crop **Chance of \n maturity** water need success if \n (mm)** season \n starts:** \n\n **on x **on x **on x\n (Early)** (Middle)** (Late)**\n\n Maize Local 120 480 5/10 4/10 2/10\n\n Maize Pioneer xxx 100 350 7/10 5/10 4/10\n\n Sorghum Seed Co xxx 110 300 8/10 7/10 6/10\n --------------------------------------------------------------------------------------\n\nOverall, for a chosen planting date, there are 3 separate risks, as\nfollows:\n\n1. Planting may not be possible by that date, i.e. the season starts\n later.\n\n2. There may not be time to grow the crop, i.e. the season ends too\n early\n\n3. There may be insufficient water in the time needed for the crop.\n\nThe crop will only be successful if none of these three risks occurs. We\ncall this the \"Overall risk\".\n\nA second possibility is the calculation of the risk of success if there\nis a planting opportunity on day x. In that case, just risks 2 and 3\napply. This is the \"Conditional risk\".\n\nThe example used is for Dodoma in Tanzania. Use ***File \\> Open from\nLibrary \\> Instat \\> Browse \\> Tanzania \\> Dodoma***.\n\nUse ***Climatic \\> Check Data \\> Boxplot*** as shown in Fig. 12.7a to\nshow the seasonal pattern of rainfall. The results are in Fig. 12.7b.\nThere July and August are omitted because there was no rain over the\nlower threshold of 0.85mm. The rainy season is seen to be from November\nto April.\n\n ---------------------------------------------------------------------------------------------------------------\n ***Fig. 12.7a*** ***Fig. 12.7b***\n ------------------------------------------------------- -------------------------------------------------------\n ![](media/image1258.png){width=\"2.9769870953630795in\" ![](media/image1250.png){width=\"3.0695778652668415in\"\n height=\"3.1413003062117237in\"} height=\"2.9936154855643045in\"}\n\n ---------------------------------------------------------------------------------------------------------------\n\nAs a second preliminary, Fig. 12.7c uses ***Climatic \\> Prepare \\>\nClimatic Summaries*** to show the seasonal totals. The summary data are\nin Fig. 12.7d.\n\n+---------------------------------------+------------------------------+\n| ***Fig. 12.7c*** | ***Fig. 12.7d Summary |\n| | Data*** |\n| ***Climatic \\> Prepare \\> Climatic | |\n| Summaries*** | |\n| | |\n| ***Summaries sub-dialogue for total | |\n| and missing values*** | |\n+=======================================+==============================+\n| ![](media/image1 | ![](media/image1257.png) |\n| 255.png){width=\"3.0278248031496062in\" | {width=\"2.008472222222222in\" |\n| height=\"3.533358486439195in\"} | he |\n| | ight=\"3.5148261154855645in\"} |\n+---------------------------------------+------------------------------+\n\nThe ***Climatic \\> PICSA \\> Rainfall Graph***, Fig. 12.5e is then used\nto show the resulting data. This is in Fig. 12.7f, and shows the\nseasonal mean is just over 550mm.\n\n+--------------------------+-------------------------------------------+\n| ***Fig. 12.7e*** | ***Fig. 12.7f*** |\n| | |\n| ***Climatic \\> PICSA \\> | |\n| Rainfall Graph*** | |\n+==========================+===========================================+\n| ![](m | ![](media/i |\n| edia/image1242.png){widt | mage1253.png){width=\"3.830748031496063in\" |\n| h=\"2.2830610236220474in\" | height=\"2.8240419947506563in\"} |\n| height | |\n| =\"2.6302777777777777in\"} | |\n+--------------------------+-------------------------------------------+\n\nThe start and end of the rains are two of the building blocks for the\ncrops dialogue. Hence these are now found. They will usually already be\navailable from earlier calculations, see Section 12.3, but are also\nshown here for completeness of this section.\n\n+-------------------------------------+--------------------------------+\n| ***Fig. 12.7g*** | ***Fig. 12.7h*** |\n| | |\n| ***Climatic \\> Prepare \\> Start of | ***Climatic \\> Prepare \\> End |\n| the Rains*** | of the Rains*** |\n+=====================================+================================+\n| ![](media/image125 | ![](media/image1256.png |\n| 1.png){width=\"3.3399529746281713in\" | ){width=\"2.8455391513560806in\" |\n| height=\"3.198429571303587in\"} | height=\"3.1844127296587925in\"} |\n+-------------------------------------+--------------------------------+\n\nThe resulting data frame is shown in Fig. 12.7i and the start and end of\nthe rains are shown graphically in Fig. 12.7j.\n\nWith these preparatory steps the scene is now set for the crops\ndialogue.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 12.7i*** ***Fig. 12.7j***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image1252.png){width=\"2.951829615048119in\" ![](media/image639.png){width=\"2.942677165354331in\"\n height=\"3.082483595800525in\"} height=\"3.0885640857392826in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nUse ***Climatic \\> PICSA \\> Crops***. For clarity the dialogue is shown\ntwice. In Fig. 12.7k the top controls are completed with the data frame\nfor the daily data, i.e. dodoma.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 12.7k Crops with daily | ***Fig. 12.7l Crops with start |\n| data*** | and end data*** |\n| | |\n| Climatic \\> PICSA \\> Crops | |\n+===================================+==================================+\n| ![](media/image637. | ![](media/image640.p |\n| png){width=\"3.0290857392825896in\" | ng){width=\"2.9666754155730533in\" |\n| height=\"2.6049267279090116in\"} | height=\"2.6094991251093616in\"} |\n+-----------------------------------+----------------------------------+\n\nThen, as shown in Fig. 12.7l, the dates for the start and end of the\nrains are from the summary data, i.e. using the dodoma_by_s_year data\nframe. The details of the crop are then also specified.\n\nFor this first illustration a crop planted on day 185 (1 January) that\nneeds 300mm water and has a growing season length of 90 days is used.\n\nThe results are in the output window and also in two new data frames,\nshown in Fig. 12.7m and Fig 12.7n. The overall summary is in Fig. 12.7m\nand shows that this combination has a chance of success of 0.412, about\n4 years in 10.\n\nThe detailed results are in Fig. 12.7n. In the 1935/36 season there was\na planting opportunity on day 177, i.e. before our day 185 requirement.\nThe rainfall in the 90 days from day 185 was 357mm, which is sufficient\nand the end date of day 296 was also more than 90 days from the starting\ndate.\n\n+----------------------------+-----------------------------------------+\n| ***Fig. 12.7m*** | ***Fug 12.7n*** |\n| | |\n| | [Redo when no zero in first |\n| | year]{.mark} |\n+============================+=========================================+\n| ![](media/image654.png){wi | ![](media/im |\n| dth=\"2.4111964129483816in\" | age644.png){width=\"3.565169510061242in\" |\n| he | height=\"3.1352241907261593in\"} |\n| ight=\"2.10790135608049in\"} | |\n+----------------------------+-----------------------------------------+\n\nHence all 3 conditions were TRUE and hence the final column, called\n***overall_cond*** is also TRUE. This final variable is TRUE in xxx of\nthe 77 years that did not have missing data, giving the overall result\nof 0.412. [Change when corrected.]{.mark}\n\nThe 1947/48 season was one where the rainfall in the 90 days was just\n244mm and hence was insufficient. In 1949/50 the season was not long\nenough and in 1950/51 there was no starting opportunity by January\n1^st^. These years all contributed to the 6 years in 10 when the crop\nwould have had problems.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 12.7o*** ***Fig. 12.7p***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image638.png){width=\"2.976654636920385in\" ![](media/image641.png){width=\"2.935657261592301in\"\n height=\"2.223937007874016in\"} height=\"3.0640923009623795in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nReturn to the ***Climatic \\> PICSA \\> Crops*** dialogue and specify\nplanting dates from 1^st^ December to mid-January as shown in Fig.\n12.7o. There is also a range of crop water requirements, from 250 to\n400mm) and crop durations from 75 to 120 days. At other sites crops with\na greater water requirement and with longer season lengths could also be\nconsidered. For Dodoma, the initial graphs in Fig. 12.7b, 12.7f and\n12.7j suggest the range of values given in Fig. 12.7o.\n\nThe results, in the output window, are shown in Fig. 12.7p. They can be\ninterpreted here, but for presentation they are copied into Excel or to\nCalc (in Open Office). Copied from Fig. 12.7p they can be pasted into\nExcel, using the Import wizard. The results are shown in Fig. 12.7r\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 12.7r*** ***Fig. 12.7s***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image627.png){width=\"3.011803368328959in\" ![](media/image626.png){width=\"3.008370516185477in\"\n height=\"1.499838145231846in\"} height=\"1.74082239720035in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nIn Excel it is convenient to express the risks as fractions over 10\nyears as is shown in Fig. 12.7s. The results are in Fig. 12.7t. From\nFig. 12.7t we see that a 75 day crop that needed 250mm and planted in\n1^st^ December would be OK in 6 years out of 10. Later planting would\nslightly increase the chance of success.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 12.7t*** ***Fig. 12.7u Find the planting probabilities***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image645.png){width=\"3.074582239720035in\" ![](media/image610.png){width=\"2.857296587926509in\"\n height=\"2.1449365704286962in\"} height=\"1.8919181977252844in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nA 90-day crop with this same modest water requirement would have a\ngreater chance of success, if planted in December, but not if planting\nwere delayed till January.\n\nIt would be useful to include the chance of being able to plant by the\ndates given in Fig. 12.7t. A possible exercise in a training workshop is\nto consider how many different ways this can be found in R-Instat[^55].\nWe choose a bizarre, but simple way using the ***Climatic \\> PICSA \\>\nCrops*** dialogue as shown in Fig. 12.7u. Complete the dialogue as shown\nin Fig. 12.7u. This is just for the first day of the crop, when we\nassume it needs no water. So the only risk is from the planting day.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 12.7v*** ***Fig. 12.7w***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image608.png){width=\"3.1308114610673665in\" ![](media/image622.png){width=\"2.8979527559055116in\"\n height=\"1.2700459317585302in\"} height=\"2.1428182414698163in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nThe results are in Fig. 12.7v. They show, for example that there is a\nplanting opportunity by 1 Jan in 9 years out of 10. This information is\nnow added to the table of crop risks, Fig. 12.7w. The interpretation is\nthat in 4 years in 10 there was a planting opportunity by 1^st^\nDecember. In a year when planting was possible on 1^st^ December the\nproportion of successes for a 75-day crop needing 250mm water was 6 out\nof 10.","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_13_PICSA__Long_Before_the_season.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_13_PICSA__Long_Before_the_season.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_14_The_Seasonal_forecast.qmd.json b/.quarto/idx/Chapter_14_The_Seasonal_forecast.qmd.json new file mode 100644 index 0000000..3d8f0cd --- /dev/null +++ b/.quarto/idx/Chapter_14_The_Seasonal_forecast.qmd.json @@ -0,0 +1 @@ +{"title":"The Seasonal forecast","markdown":{"headingText":"The Seasonal forecast","containsRefs":false,"markdown":"## Introduction\n\nMany countries produce a seasonal forecast. (Hansen, Mason, Sun, & Tall,\n2011) provides a review for Sub-Saharan Africa. The forecast, for a\ngiven season, often results from a Regional Climate Outlook Forum\n(RCOF), updated and down-scaled by the National Meteorological Service\n(NMS). In some countries the forecast is a mixture of results from the\nglobal climate models (GCMs) and statistical methods relating historical\nclimatic data to sea-surface temperatures. Fig. 13.1a and Fig. 13.1b\ngive examples of the forecast from Ghana and the Caribbean.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig 13.1a Ghana rainfall forecast, April - June ***Fig. 13.1b Caribbean rainfall forecast April --\n 2015*** June 2015***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image606.gif){width=\"2.991641513560805in\" ![](media/image623.png){width=\"3.008535651793526in\"\n height=\"3.068241469816273in\"} height=\"2.7479418197725285in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nWhen statistical methods are used, the Climate Predictability Tool (CPT)\nsoftware is usually used to produce the forecast. CPT uses multiple\nregression with usually the rainfall as the y (dependent or predictand)\nvariables and SSTs as the x's (independent, or predictor) variables.\nThere are usually many x (SST) variables and hence CPT offers the option\nof doing a principal component analysis first.\n\nWhen there are also many y (rainfall) variables, a canonical correlation\nanalysis may precede the multiple regression analysis.\n\nR-Instat can export data for CPT. Hence one use of R-Instat is to\nprepare the y-variables (rainfall or temperature) for analysis with CPT.\nTraditionally these are 3-month rainfall totals, but any other summary\nis possible, for example 3-month total rain days, or the date of the\nstart of the rains. The requirement is that there is one summary per\nyear (per station) and the ***Climatic \\> Prepare*** menu provides many\noptions. This is considered in Section 13.2.\n\nThe rainfall (or temperature data) are often station values, but they\nmay also originate from other sources, e.g. reanalysis, or satellite or\nmerged data. These are sometimes provided ready for CPT. Sometimes\nR-Instat could examine these data also and then prepare a subset for\nCPT. This option is considered in Section 13.3\n\n## The Y variables - Examining the rainfall data\n\nOne use we propose for R-Instat is to examine the rainfall data, before\nit is analysed with CPT. The first example is data from Ghana, already\nprepared for CPT. The data are in the R-Instat library, hence use\n***File \\> Open from Library \\> Instat \\> Browse \\> Climatic \\> Ghana***\nand open the file called ***rr-amj-1981-2014.txt***. The data are shown\nin Fig. 13.2a.\n\nThe first 2 lines are the locations (Lat and Long) of each station. Then\nthere are the rainfall data, the 3-month totals from April to June, for\nthe 34 years from 1981 to 2014. They are from the 22 synoptic stations\nin Ghana.\n\nWe also need the locations of the station, but in a separate data frame.\nReturn to the last dialogue and read the data again. This time read just\nthe first 2 rows, Fig. 13.2b and give the file a new name.\n\n ---------------------------------------------------------------------------------------------------------\n ***Fig. 13.2a*** ***Fig. 13.2b***\n ----------------------------------------------------- ---------------------------------------------------\n ![](media/image615.png){width=\"2.998064304461942in\" ![](media/image607.png){width=\"3.0224343832021in\"\n height=\"2.7682305336832895in\"} height=\"3.2848982939632547in\"}\n\n ---------------------------------------------------------------------------------------------------------\n\nThe station data are now still the \"wrong way round\". There is a\ndialogue to transpose, but it is simpler to use ***Prepare \\> Column:\nReshape \\> Stack***, Fig. 13.2c, as shown in Fig. 13.2d.\n\nIn Fig. 13.2d put all the columns, except the first to be stacked and\nput the STN column to be \"carried\".\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 13.2c*** ***Fig. 13.2d***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image609.png){width=\"3.5934798775153105in\" ![](media/image602.png){width=\"2.477023184601925in\"\n height=\"1.7293897637795275in\"} height=\"2.1099081364829395in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nIn the stacked data the column called STN now has the Lat and Long. Now,\nFig. 13.2e, use the ***Prepare \\> Column: Reshape \\> Unstack***, as\nshown to produce the location data as shown in Fig. 13.2f.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 13.2e*** ***Fig. 13.2f***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image599.png){width=\"3.2505271216097986in\" ![](media/image642.png){width=\"2.7720789588801398in\"\n height=\"3.3606167979002626in\"} height=\"3.350340113735783in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nThe rainfall data are first examined briefly (as usual) with ***Climatic\n\\> Tidy and Examine \\> One Variable Summaries.*** Use all the columns.\nThe results are shown in Fig. 13.2g. There is a problem with the station\nWEN, where the minimum is -999.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 13.2g*** ***Fig. 13.2h***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image624.png){width=\"3.1101279527559056in\" ![](media/image619.png){width=\"2.8708475503062116in\"\n height=\"2.217218941382327in\"} height=\"2.8815398075240597in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nThis could have been changed to a missing value when the data were\nimported. Now the change is made with the dialogue ***Climatic \\> Tidy\nand Examine \\> Replace Values***. Fig 13.2h.\n\nNow stack the rainfall data using ***Climatic \\> Tidy and Examine \\>\nStack***, as shown in Fig. 13.2i.\n\nNow use ***Describe \\> Specific \\> Line Plot***, as shown in Fig. 13.2j.\nInclude the ***Station*** as a ***facet***.\n\n+------------------------------------+---------------------------------+\n| ***Fig. 13.2i*** | ***Fig. 13.2j*** |\n| | |\n| ***Climatic \\> Tidy and Examine \\> | |\n| Stack*** | |\n+====================================+=================================+\n| ![](media/image6 | ![](media/image630.pn |\n| 18.png){width=\"3.15838801399825in\" | g){width=\"2.8473687664041996in\" |\n| height=\"2.91377624671916in\"} | height=\"2.88209208223972in\"} |\n+------------------------------------+---------------------------------+\n\nThe results are roughly as shown in Fig. 13.2k. (If you would like to\nget the results exactly as Fig. 13.2k, then either follow the note\nbelow[^56] or open the file that is better prepared -- called\nghana1981-2014.rds and use the Climatic \\> PICSA \\> Rainfall Graph\ndialogue.)\n\n -----------------------------------------------------------------------\n ***Fig. 13.2k***\n -----------------------------------------------------------------------\n ![](media/image617.png){width=\"6.268055555555556in\"\n height=\"3.057638888888889in\"}\n\n -----------------------------------------------------------------------\n\nThe stations go from South to North in Fig. 13.2k. We see that the most\nSoutherly station, Axim, is different to the other stations. The\nvariability of the few stations in the North of Ghana is much less than\nthose in the South. This is going to make the forecasting task much\nharder to expect much that is meaningful for the North.\n\nNext examine the correlations. They use the original data, but\nunstacking the data with the Stations from South to North will put the\nresulting columns in the same order.\n\nHence (assuming you have the data in this order) use Climatic \\> Tidy\nand Examine \\> Unstack, as shown in Fig. 13.2l\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 13.2l*** ***Fig. 13.2m***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image620.png){width=\"3.0245745844269467in\" ![](media/image625.png){width=\"2.868203193350831in\"\n height=\"2.9575273403324585in\"} height=\"3.0626574803149604in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nNext use ***Climatic \\> Seasonal Forecast Support \\> Correlations***.\nFig. 13.2m. The results provide further \"food-for-thought. The most\nSoutherly station (bottom row in Fig 13.2m) and the most Northerly\n(column to the right in Fig. 13.2m) each have quite a lot of blue\nvalues, i.e. negative correlations. There are just 5 stations in the\nNorth of Ghana (latitudes between 9°N and 11°N and the correlations\nthere are low. If 2 stations have a low or zero correlation, then\nlogically they should have a separate seasonal forecast. However, Fig.\n13.1a shows the whole of the North has a single forecast.\n\nWith this information we would be inclined to\n\na) Omit Axim as it seems so different\n\nb) Consider only using the stations from the South.\n\nc) Query including Akatsi, which is the furtherst to the Eaqst and has\n very low correlation with the other stations\n\nd) Look for more rainfall stations from the North.\n\nIf, instread, all the stations are used in CPT, then the finalo stage is\na multiple regression on each y-variable separately, as a function of\nthe set of x-variables, and they are usually the principal components.\nThen the interest would be more in the individual results at a station\nlevel -- and these are given by CPT.\n\n -----------------------------------------------------------------------\n ***Fig. 13.2n***\n -----------------------------------------------------------------------\n ![](media/image621.png){width=\"5.91378280839895in\"\n height=\"5.039098862642169in\"}\n\n -----------------------------------------------------------------------\n\nFinally, in ***Climatic \\> Seasonal Forecast Support \\> Correlations***\n(Fig. 13.2m) use just the 5 columns from the North, (from Bole to\nNavrongo) and opt for a pairwise plot. This shows the size of the\ncorrelations clearly and confirms that the whole of the North should not\nhave a single forecast.\n\n -----------------------------------------------------------------------\n ***Fig. 13.2o***\n -----------------------------------------------------------------------\n ![](media/image614.png){width=\"6.112517497812774in\"\n height=\"3.49576990376203in\"}\n\n -----------------------------------------------------------------------\n\n## Rainfall data with many stations\n\nThe second example is from Rwanda. The rainfall data are considered in\nthis section. The data file is again in a form that reads directly into\nCPT. The file, in Excel, is shown in Fig. 13.3a. These data are again\n3-month rainfall totals and are from March to May. They are for 37\nyears, from 1981 to 2017.\n\nThese are estimated rainfall from ENACTS. This is a merged product,\ncombining station data with estimated rainfall from satellite\nobservations (Siebert, et al., 2019). In Fig. 13.3a the first column\ngives the latitude and row 5 gives the longitude of each grid point. So,\nthe estimated rainfall total at 1.05°S and 28.54°E in 1981 was 550mm.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 13.3a*** | ***Fig. 13.3b*** |\n| | |\n| | ***File \\> Open*** |\n+===================================+==================================+\n| ![](media/image952 | ![](media/image969.p |\n| .png){width=\"3.004711286089239in\" | ng){width=\"2.9594510061242345in\" |\n| height=\"2.948018372703412in\"} | height=\"3.2666458880139984in\"} |\n+-----------------------------------+----------------------------------+\n\nIn the data in Fig. 13.3a the rectangle of data for 1981 is followed by\nan approximate repeat of lines 4 and 5, followed by the data for 1982.\nAnd so on to 2017.\n\nIf the data, from Excel are saved, then the default (by Excel) is to add\nthe ***txt*** extension and this makes it easy to import into R-Instat.\n\nIn R-Instat use ***File \\> Open***, Fig. 13.3b. Change the ***Lines to\nSkip*** to 4, so the first line is the longitudes.\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 13.3c*** | ***Fig. 13.3d Setting the |\n| | filter*** |\n| | |\n| | ***(Omit level 1 and from 54 |\n| | onwards)*** |\n+==================================+===================================+\n| ![](media/image951. | ![](media/image940. |\n| png){width=\"2.938659230096238in\" | png){width=\"2.9718602362204725in\" |\n| height=\"3.8734087926509186in\"} | height=\"2.960559930008749in\"} |\n+----------------------------------+-----------------------------------+\n\nThese data, in Fig. 13.3c, need tidying. The first step is to delete the\nrows between each year. This uses a filter, so right click, choose\nFilter and then define a new filter on the first column. Part of the\nfilter sub-dialogue is shown in Fig. 13.3d.\n\nWhen you return to the main dialogue, Fig. 13.3e choose to make the\nfiltered data a subset. If you feel bold, then give the new name the\nsame as the old one, so the original file is overwritten.\n\nThere are now 1924 rows of data, i.e. 52 rows each year, for 37 years.\n\nNow a year variable is added as shown in Fig. 13.3f. Check, Fig. 13.3f,\nthat it will be the same length as the other columns of data.\n\n+----------------------------+-----------------------------------------+\n| ***Fig. 13.3e Making a | ***Fig. 13.3f Adding a year variable*** |\n| subset*** | |\n| | ***Prepare \\> Column: Generate \\> |\n| | Regular Sequence*** |\n+============================+=========================================+\n| ![](media/image942.png){wi | ![](media/ima |\n| dth=\"2.4592377515310586in\" | ge960.png){width=\"3.5354002624671916in\" |\n| hei | height=\"2.9525820209973754in\"} |\n| ght=\"2.761431539807524in\"} | |\n+----------------------------+-----------------------------------------+\n\nNow all that remains is to stack the data, ***Climatic \\> Tidy and\nExamine \\> Stack***, as shown in Fig. 13.3g. The re4sulting data are in\nFig.13.3h. There are now 126984 rows of data, i.e. 37 years from 52 \\*\n66 = 3432 equally spaced locations.\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 13.3g*** | ***Fig. 13.3h The Rwanda ENACTS |\n| | data so far*** |\n| ***Climatic \\> Tidy and Examine | |\n| \\> Stack*** | |\n+==================================+===================================+\n| ![](media/image943. | ![](media/image941 |\n| png){width=\"2.946774934383202in\" | .png){width=\"2.965952537182852in\" |\n| height=\"2.53537510936133in\"} | height=\"3.399851268591426in\"} |\n+----------------------------------+-----------------------------------+\n\nWe outline further \"housekeeping\" steps on these data to make it simpler\nto examine and to export back to CPT when needed:\n\na) Use ***Prepare \\> Column: Text \\> Transform \\> Substring*** on the\n variable ***Lat*** into ***LatS*** from Start Value 2 to End Value\n 5.\n\nb) Recall the ***last dialogue*** and put ***Lon*** into ***LonE***\n from 2 to 6.\n\nc) ***Select*** both these columns, (LatS and LonE), then\n ***right-click*** and make them ***Factors***.\n\nd) Use ***Prepare \\> Column: Factor: Factor \\> Combine Factors***.\n Choose ***LatS and LonE***, make the separator an ***underscore***\n and make the ***New Column Name:*** ***Location***.\n\ne) Select LatS and LonE again. Right-click and ***Convert to Numeric***\n columns.\n\nf) Use ***Prepare \\> Column: Factor \\> Recode Numeric*** and make a new\n column from ***Lats*** into ***Lat6S***, with 10 break points at\n about (1.03, 1.25, 1.48, 1.7,1.93, 2.15, 2.38, 2.6, 2.83, 2.98).\n\ng) Recall the last dialogue and make LonE into Lon6E using (28.5,\n 28.74, 28.97, 29.2, 29.42, 29.64, 29.87, 30.1, 30.32, 30.54, 30.77,\n 31).\n\nh) Right click to delete the 2 columns Lat, Lon.\n\ni) Reorder the columns possibly as shown in Fig. 13.3i\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 13.3i ENACTS data for Rwanda*** ***Fig. 13.3j The locations***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image953.png){width=\"3.459744094488189in\" ![](media/image949.png){width=\"2.6555074365704288in\"\n height=\"2.7487062554680666in\"} height=\"2.722613735783027in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nA Station (i.e. Location data frame is also needed for exporting back to\nCPT. From here:\n\na) ***Right-click*** and choose ***Filter*** on the year column and put\n just the first year (1981) into a new data frame called\n ***Location***.\n\nb) Delete the ***year and rain*** variables from the Location data\n frame.\n\nThe resulting data frame is in Fig. 13.3j.\n\nNow look at the at the data. Start with a given part of Rwanda.\nRight-click and filter the data file to the ***last set of stations in\nLat6S*** and ***Lon6E***, i.e. the South-East corner. This is a 30km\nsquare and there should be 880 rows of data, Fig. 13.3k.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 13.3k SE corner (24 locations)*** ***Fig. 13.3l***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image965.png){width=\"3.0264523184601924in\" ![](media/image964.png){width=\"2.8941546369203848in\"\n height=\"2.2105172790901135in\"} height=\"2.9555139982502188in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nThese data can now be graphed. The results from a ***Describe \\>\nSpecific \\> Line Plot*** of ***rain*** against ***year*** by\n***location*** is in Fig. 13.3l. (A facetted graph by LonE and LatS,\nafter making them factors, is an alternative).\n\nFig. 13.3l the coherence (high correlation) between the different\nlocations is clear. The last point (data from 2017) is a cause for\nconcern. This is also indicated for 4 of the locations in Fig. 13.3k.\nThis last year has less than half the rain of any of the other 36 years\nat most locations. That can greatly affect a regression model. Perhaps\nonly fit using the data to 2016?\n\nNext, use ***Climatic \\> Tidy and Examine \\> Unstack*** for the\n***rain***, by the ***location*** and ***carry the year***. This gives\nthe 24 stations in separate columns and ***Climatic \\> Seasonal Forecast\nSupport \\> Correlations***, gives the results in Fig. 13.3m. They are\nall coloured dark red (compare with Fig. 13.2n) as all correlations are\nmore than 0.8.\n\n -----------------------------------------------------------------------\n ***Fig. 13.3m***\n -----------------------------------------------------------------------\n ![](media/image961.png){width=\"5.9061286089238845in\"\n height=\"5.168680008748907in\"}\n\n -----------------------------------------------------------------------\n\nThis can be repeated for further parts of Rwanda. We suggest that\nexporting the data from individual \"blocks\" of 24 or usually 36 stations\nfor CPT, may enable separate local forecasts to be given?\n\nChange the filter to choose 12 blocks over the country, possibly Lat6S =\n(1, 5, 9) and Lon6E = (1, 4, 7, 10).\n\n+------------------------------------------+---------------------------+\n| ***Fig. 13.3n Choosing 12 blocks as a | ***Fig. 13.3oFacet with 2 |\n| filter*** | variables*** |\n| | |\n| ***Right-Click \\> Filter \\> Define New | ***Describe \\> Specific |\n| Filter*** | \\> Line Plot Options \\> |\n| | Facet*** |\n+==========================================+===========================+\n| ![](media/im | ! |\n| age963.png){width=\"3.6805905511811026in\" | [](media/image979.png){wi |\n| height=\"2.7163943569553806in\"} | dth=\"2.402188320209974in\" |\n| | heigh |\n| | t=\"2.6810597112860894in\"} |\n+------------------------------------------+---------------------------+\n\n -----------------------------------------------------------------------\n ***Fig. 13.3p***\n -----------------------------------------------------------------------\n ![](media/image966.png){width=\"6.268055555555556in\"\n height=\"3.0805555555555557in\"}\n\n -----------------------------------------------------------------------\n\nThe results in Fig. 13.3p show some part of the country, e.g. North-West\n-- (top-left) with very high correlations, but also relatively little\nyear-to-year variability to be explained, compared to other parts. (The\nblue set of graphs in the middle of Fig. 13.3p should be examined in\nmore detail, as the large rainfall in about 1990 is just in a few\nlocations -- perhaps caused by data from a single station?). The low\nrainfall totals in 2017, mentioned above, is apparent in some parts of\nthe country, but not all.\n\nPlots of further combinations could be useful. Then 2 alternative\nstrategies for CPT (in addition to the default of using the 3432\nstations individually) could be:\n\na) Use data from single blocks of interest, i.e. usually 36 locations\n over a 30km by 30km grid, to examine the forecast for specific parts\n of the country.\n\nb) Take the means (or medians) each year, for each of the blocks, so\n reducing the number of locations to 96 and use these data instead of\n the data individually for the 3432 locations.\n\n## The X variables -- Sea Surface Temperatures\n\nGhana data first.\n\nThen Rwanda data!\n\nFor Rwanda data use\n[[http://iridl.ldeo.columbia.edu/SOURCES/.IRI/.Analyses/.ICPAC/.Models/.GFDL/.GFDL-CM2p5-FLOR-A06/.MONTHLY/.sst/index.html]{.underline}](http://iridl.ldeo.columbia.edu/SOURCES/.IRI/.Analyses/.ICPAC/.Models/.GFDL/.GFDL-CM2p5-FLOR-A06/.MONTHLY/.sst/index.html)\n\nThe data were downloaded from this\nlink [[http://iridl.ldeo.columbia.edu/SOURCES/.Models/.NMME/.GFDL-CM2p5-FLOR-A06/.MONTHLY/.sst/]{.underline}](http://iridl.ldeo.columbia.edu/SOURCES/.Models/.NMME/.GFDL-CM2p5-FLOR-A06/.MONTHLY/.sst/) \nHowever you may decide to choose any other model of your choice.  \n\nThose Sea Surface Temperature (SST) are GCM outputs from different\nsource (GFDL, CFS2, NASA etc). Initialization is the process of locating\nand using the defined values for variable data that is used by a model\nor system. For our model we choose February as the month forecasts (MAM)\nwere initialized.","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_14_The_Seasonal_forecast.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_14_The_Seasonal_forecast.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_15_Fitting_and_using_stochastic_models.qmd.json b/.quarto/idx/Chapter_15_Fitting_and_using_stochastic_models.qmd.json new file mode 100644 index 0000000..05d92e4 --- /dev/null +++ b/.quarto/idx/Chapter_15_Fitting_and_using_stochastic_models.qmd.json @@ -0,0 +1 @@ +{"title":"Fitting and using stochastic models","markdown":{"headingText":"Fitting and using stochastic models","containsRefs":false,"markdown":"","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_15_Fitting_and_using_stochastic_models.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_15_Fitting_and_using_stochastic_models.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_16_Withinday_data.qmd.json b/.quarto/idx/Chapter_16_Withinday_data.qmd.json new file mode 100644 index 0000000..f1e99a5 --- /dev/null +++ b/.quarto/idx/Chapter_16_Withinday_data.qmd.json @@ -0,0 +1 @@ +{"title":"Within-day data","markdown":{"headingText":"Within-day data","containsRefs":false,"markdown":"","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_16_Withinday_data.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_16_Withinday_data.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_17_Circular_data_and_wind_roses.qmd.json b/.quarto/idx/Chapter_17_Circular_data_and_wind_roses.qmd.json new file mode 100644 index 0000000..37641f6 --- /dev/null +++ b/.quarto/idx/Chapter_17_Circular_data_and_wind_roses.qmd.json @@ -0,0 +1 @@ +{"title":"Circular data and wind roses","markdown":{"headingText":"Circular data and wind roses","containsRefs":false,"markdown":"## Introduction\n\nFig. 16.1a shows data from the R openair package. These are hourly data\nand the two columns called ws and wd are wind speed and direction. Fig.\n16.1b shows a single wind rose and these are discussed in detail in\nSection 16.4. The wind rose is a circular stacked histogram that shows\nboth wind speeds and wind directions on the same graph. They are a\npopular form of display by National Met Services (NMSs) for these data.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 16.1a*** ***Fig. 16.1b***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image876.png){width=\"2.6243372703412073in\" ![](media/image975.png){width=\"3.3880194663167105in\"\n height=\"2.683885608048994in\"} height=\"2.6981517935258092in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\n[For reference the command was as follows:]{.mark}\n\n[last_graph \\<- clifro::windrose(speed=ws, direction=wd,\nspeed_cuts=c(3,6,9,12,15,18), col_pal=\\\"Dark2\\\", ggtheme=\\\"linedraw\\\") +\nggplot2::labs(title=\\\"\\\", caption=\\\"\\\", subtitle=\\\"\\\")]{.mark}\n\nWind direction is an example of circular data and this type of data\nneeds some special treatment. Circular variables are common in climatic\ndata. The obvious example is wind direction, but there are many others:\n\n- Time in hours at which rainfall starts. The circle is 24 hours.\n\n- The hour of the minimum temperature each day. The circle is again 24\n hours.\n\n- Day of the year when the season starts. The circle is 366 days.\n\n- The month of maximum rainfall. The circle is 12 months.\n\nSpecial methods are needed to cope with circular data. Sometimes they\ncan be avoided, and we have done this often in this guide. For example,\nthe date of the start of the rains may be from November to January. If\nthe year is always defined from January, then these data mist be handled\nas circular. But the complexity can be avoided by shifting the year to\nstart in August, as was shown in Chapter 7.\n\nSection 16.2 considers the general idea of circular data and Section\n16.3 shows some simple graphs. Then we return to wind roses in Section\n16.4.\n\n## Circular data\n\nWikipedia (Wikipedia contributors) shows a small example of 10, 20, 30\ndegrees to illustrate circular data. The mean is obviously 20. Now\nsubtract 15 degrees, so the mean becomes 5. The data are now 355, 5, 15,\nso the usual formula for the mean is (355 + 5 + 15)/3 = 125 -- obviously\nwrong. With circular data, once we \"go over\" zero, the usual formulae no\nlonger apply.\n\nThere are books on circular statistics, for example (Pewsey & D., 2013)\nand, of course, R packages. R-Instat mainly uses the ***circular***\npackage. (Agostinelli & Lund, n.d.).\n\nAn example from the circular package is called wind. This has 310\nobservations on wind direction. The data in ***File \\> Open from Library\n\\> R package \\> circular \\> wind***, just has a single variable. The\ndescription states it is five 15-minute observations per day, for 62\ndays, from 3am to 4am. It is for a single site from 29 January to 31\nMarch 2001.\n\nFig. 16.2a shows the data in R-Instat. The wind directions (column\nwind_dir) are in radians, i.e. they are an angle between 0 and 2pi (i.e.\n2 \\* 3.14 = 6.28).\n\n+------------------------------+---------------------------------------+\n| ***Fig. 16.2a Data from | ***Fig. 16.2b Adding a date |\n| circular package*** | variable*** |\n| | |\n| | ***Climatic \\> Dates \\> Generate |\n| | Dates*** |\n+==============================+=======================================+\n| ![](media/image955.png){ | ![](media/imag |\n| width=\"2.5966491688538933in\" | e954.png){width=\"3.488678915135608in\" |\n| h | height=\"3.357030839895013in\"} |\n| eight=\"3.298924978127734in\"} | |\n+------------------------------+---------------------------------------+\n\nDirectional data are often given in degrees. Hence also use ***Prepare\n\\> Column: Calculate \\> Calculations***, with the formula:\n\nwind_dir \\*360/(2\\*pi)\n\nData should be given with their \"structure\". The dialogue ***Climatic \\>\nDates \\> Generate Dates***, Fig. 16.2b is used to add the date column,\nthen ***Prepare \\> Column: Generate \\> Regular Sequence***, Fig. 16.2c,\nto add the time column.\n\nto give the directions in degrees. The results are all shown in Fig.\n16.2a.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 16.2c*** ***Fig. 16.2d***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image900.png){width=\"2.5924682852143484in\" ![](media/image916.png){width=\"3.5642311898512684in\"\n height=\"2.2782305336832898in\"} height=\"1.0976224846894138in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nStart, as usual with a check on the data. Use ***Climatic \\> Tidy and\nExamine \\> One Variable Summarise*** to give the results in Fig. 16.2d.\nThe summaries for the 2 wind variables are of course for linear, rather\nthan circular data. The analysis can begin. One aspect that is simpler\nhere is that there are no missing values in these data.\n\nThe structure of the data is ignored initially, to concentrate on the\nnew summary statistics for circular data. Graphs are discussed in\nSection 16.3. A preview, in Fig. 16.2e indicates the data are reasonably\nconcentrated near zero. From the graph we expect a mean just above zero,\ni.e. perhaps North-North-East, (where East = pi/2 = 1.57 in radians) and\na standard deviation that indicates a good level of concentration of the\ndata. Thus, we don't expect the circular mean to be as large as 2.36\nradians, or 135 degrees, as shown in Fig. 16.2d\n\n+-----------------------------+----------------------------------------+\n| ***Fig. 16.2e A circular | ***Fig. 16.2f The circular keyboard*** |\n| histogram of the wind | |\n| data*** | ***Prepare \\> Column: Calculate \\> |\n| | Calculations*** |\n+=============================+========================================+\n| ![](media/image928.png){ | ![](media/imag |\n| width=\"2.557014435695538in\" | e921.png){width=\"3.5340409011373577in\" |\n| hei | height=\"1.9491097987751531in\"} |\n| ght=\"2.6285608048993874in\"} | |\n+-----------------------------+----------------------------------------+\n\nUse ***Prepare \\> Column: Calculate \\> Calculations*** and open the\n***Circular*** keyboard, Fig. 16.2f. The initial step is to define the\ntwo variables wind_dir and wind_deg in Fig. 16.2a as circular. For\nwind_dir, click on the ***circular button*** and add the variable,\n***wind_dir***. Save the result back into the same variable, Fig. 16.2g.\n\nThen press ***Clear***, and do the same for the wind_deg variable, Fig.\n16.2h. In this case you need to replace the word \"radians\" by \"degrees\".\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 16.2g*** ***Fig. 16.2h***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image902.png){width=\"3.5270439632545934in\" ![](media/image919.png){width=\"2.536725721784777in\"\n height=\"2.5473108048993875in\"} height=\"2.549666447944007in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nIt seems that nothing has happened. But now press the\n![](media/image898.png){width=\"0.2736023622047244in\"\nheight=\"0.30578958880139984in\"}icon on the toolbar, Fig. 16.2i to\nconfirm that the two variables are now defined as circular. Press\n![](media/image950.png){width=\"0.26344050743657044in\"\nheight=\"0.23361767279090115in\"} to close the metadata window.\n\n -----------------------------------------------------------------------\n ***Fig. 16.2i***\n -----------------------------------------------------------------------\n ![](media/image929.png){width=\"4.6506572615923005in\"\n height=\"1.764834864391951in\"}\n\n -----------------------------------------------------------------------\n\nClick ***Clear***, then the ***mean button*** and add the ***wind_dir***\ncolumn as shown in Fig. 16.2j. Un-check Save so the result is in the\nOutput window, Fig. 16.2k.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 16.2j*** ***Fig. 16.2k***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image899.png){width=\"3.1713484251968502in\" ![](media/image939.png){width=\"2.8102821522309713in\"\n height=\"3.01583552055993in\"} height=\"1.6273206474190727in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nThe mean direction is 0.2922 radians (or 0.2922\\*360/(2\\*pi) = 16.7\ndegrees.)\n\nIn the command in Fig. 16.2j the package name is given first, i.e.\n\ncircular::mean.circular(wind_dir)\n\nChange the variable in Fig. 16.2j to ***wind_deg*** to give the result\ndirectly as 16.7 degrees, Fig. 16.2l.\n\nThis result for the circular mean of 17 degrees is consistent with the\ngraph, given in Fig. 16.2e. It is a long way from the result in Fig.\n16.2d that has ignored the circular nature of the data (and is wrong!)\n\n ----------------------------------------------------------------------------------------------------------\n ***Fig. 16.2l*** ***Fig. 16.2m***\n ---------------------------------------------------- -----------------------------------------------------\n ![](media/image948.png){width=\"2.40545384951881in\" ![](media/image930.png){width=\"3.680741469816273in\"\n height=\"1.7108311461067367in\"} height=\"2.1625273403324585in\"}\n\n ----------------------------------------------------------------------------------------------------------\n\nNow examine the spread of the data. In the dialogue, ***Clear the\nexpression again***, and find the ***circular variance*** of the\n***wind_dir*** variable. The result is seen to be 0.3443 from pressing\nthe ***Try*** button. Pressing ***Ok*** puts this result into the output\nwindow.\n\n***Return to this dialogue*** and find the circular variance of the same\ndata in degrees. The result is identical, i.e. 0.3443, despite the\nnumbers being very different! Some explanation is needed, because with\nordinary (linear) data, that is not the case.\n\nChange the function to get the ***standard deviation***, i.e. the sd key\non the circular keyboard, rather than var. The formula is then\n\ncircular::sd.circular(wind_deg).\n\nThis gives the circular standard deviation as 0.9187, and again this is\nthe same for the wind_dir variable.\n\nHowever, in addition, the circular standard deviation is not the square\nroot of the circular variance. The var = 0.3443 and √0.3443 = 0.5868\nwhich is quite a long way from the result above.\n\nThe results for the variability (spread) of circular data require\nexplanation, because they are so different to \"ordinary\" data.\n\nWe need a formula. With angles (in degrees), x~1~, x~2~,... x~n~ define:\n\nR = √((Σcos(x~i~))^2^ +(Σsin(x~i~))^2^)\n\nR is called the resultant length, and r = R/n is called the mean\nresultant length. It is the ***rho key*** on the circular keyboard, with\n\ncircular::rho.circular(wind_dir) or circular::rho.circular(wind_deg)\n\nIn each case it gives the value of r = 0.6557 for these data.\n\nThe mean resultant length, r, is between 0 and 1 and values near to 1\ncorrespond to low variation.\n\nIn the R circular package, and hence in R-Instat the var.circular =\n(1-r) = 0.3443 as found above. So, the circular variance is between 0\nand 1 with 0 being no variation.\n\nThen, sd.circular = √(-2log(r), to be consistent with the definition\nfirst given in (Mardia, 1972).\n\nAlso available in R-Instat is the angular.variance = 2 \\* (1-r) = 2 \\*\nvar.circular.\n\nFor these data, the angular.variance is the ***ang.var*** key = 0.6886\n\nAnd there is also the angular.deviation = √(angular variance)\n\nThe angular.deviation is the ang.dev key = √0.6886 = 0.8298.\n\nTo help with the interpretation, of these summaries, take a very simple\nexample with 5 observations. In degrees take 10, 15, 20, 25 30, Fig.\n16.2n. Round the circle they are not very spread out.\n\n+------------------------------------+---------------------------------+\n| ***Fig. 16.2n*** | ***Fig. 16.2o*** |\n| | |\n| ***File \\> New Data Frame*** | |\n+====================================+=================================+\n| ![](media/image93 | ![](media/image937.pn |\n| 8.png){width=\"3.098264435695538in\" | g){width=\"2.7570877077865266in\" |\n| height=\"2.7773720472440946in\"} | height=\"2.7570877077865266in\"} |\n+------------------------------------+---------------------------------+\n\nUse ***Prepare \\> Column: Calculations \\> Calculate*** and produce\n***data_rad = (data_deg/360)\\*2\\*pi***.\n\nIn radians, these data are 0.175, 0.262, 0.349, 0.436, 0.524 as shown in\nFig. 16.2o.\n\nIn ***Prepare \\> Column: Calculations \\> Calculate*** use the\n***degrees*** and ***radians*** buttons to define each of these\nvariables as circular.\n\nThen, with the ***sd button***, the sd.circular = 0.1235 for each\nvariable.\n\nThe ordinary standard deviation for the data in radians is 0.138, i.e.\nis close. So, for circular data, with small spread the circular standard\ndeviation can be interpreted roughly as the ordinary standard deviation,\ni.e. a typical distance from the circular mean (which is 0.349 radians),\nof the data -- when measured in radians.\n\nLet's confirm this, with even smaller spread. Divide all the values (in\nradians) by 2. The new circular standard deviation = 0.617, which is\nhalf the previous value. Of course, the ordinary standard deviation also\nhalves, so the interpretation is ok.\n\nNow multiply the values by 10. In degrees, the values are now 100, 150,\n200, 250, 300 so almost round the circle. This is therefore very large\nspread for the circular data. In radians this becomes 1.75, 2.62, 3.49,\n4.36, 5.24. The maximum is 360 degrees = 2π = 6.28 radians.\n\nFor the data in radians, the ordinary standard deviation is 1.38 and the\ncircular standard deviation is the same. Hence, a very spread-out\ncircular dataset has a circular standard deviation of more than 1.\n(Otieno Sango & Anderson-Cook, 2003)\n\nThe wind data, analysed in this section, had a circular standard\ndeviation of 0.92 (radians). So quite large as can be seen from the\ngraph in Fig. 16.2e.\n\nWhat of r and the circular variance = (1-r)? For the 5 values from 10,\nto 30 degrees, the circular variance = 0.0076. For large spread, e.g.\nthe 5 values from 100 to 300 degrees the circular variance = 0.6123. So,\nthe circular variance can be interpreted directly, with close to 0 being\nvery concentrated data and close to 1 being very spread out -- round the\ncircle. The wind data had a spread -- as measured by the circular\nvariance of 0.3443, i.e. about 1/3.\n\nOther summary statistics, including the median are also available,\nthrough the circular package, and hence through R-Instat. These are the\nmedian and the quantiles, including the quartiles, the \"maximum\" and\n\"minimum\" and the range. Most are intuitively obvious for data that are\n\"concentrated\", i.e. have small variability, but are more difficult to\nconsider where data can be anywhere round the circle. And general\ndefinitions are needed.\n\nThe median is defined by considering diameters that cut the circle in\ntwo. Look for the diameter with end-points P and Q, so that half the\ndata points are in each semi-circle. Then the median is either P or Q\nand choose P, so that the data are more concentrated round it, compared\nto Q,\n\nFor the wind data the median is 9.5 degrees, so a little lower than the\nmean.\n\nOnce the median exists, the other quantiles, including the maximum and\nminimum, can go outwards from this point. The lower quartile is 355\ndegrees and the upper quartile is 37 degrees.\n\nThe range is defined as the extent of the circle, minus the biggest gap\nof data. This is usually (but not necessarily) the maximum minus the\nminimum!\n\nThe von Mises distribution is roughly the equivalent to the normal\ndistribution for linear data, Fig. 16.2k. This has, similarly, 2\nparameters and is symmetrical about the circular mean.\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 16.2k Examples of von | ***Fig. 16.2l*** |\n| Mises distributions*** | |\n+==================================+===================================+\n| [Prefer from R-Instat]{.mark} | ![](media/image934 |\n| | .png){width=\"3.070688976377953in\" |\n| ![](media/image933. | height=\"2.5898534558180226in\"} |\n| png){width=\"2.939744094488189in\" | |\n| height=\"2.360246062992126in\"} | |\n+----------------------------------+-----------------------------------+\n\nThe shape is dictated by the к parameter. К = 0 corresponds to the\nuniform distribution (round the circle) and large values of к correspond\nto a concentrated distribution, i.e. one with low variation.\n\nEstimating к is done by setting r = A~1~(к) = I~1~(к)/I~0~(к) = 1 --\nvar.circular, where I~1~ and I~0~ are modified Bessel functions. In the\nR-Instat circular keyboard the function A1(к) is available, Fig. 16.2l.\nWith a little trial and error we see that, for the wind data the\nappropriate value of к = 0.734, i.e. the shape is just above the blue\nline in Fig. 16.2k.\n\nCompared to the circular histogram, Fig. 16.2e it is not clear that a\nsymmetrical distribution is appropriate. However, more important is that\nthe wind data have structure that the above analysis has ignored. In\nparticular, the data are 5 observations from each of 62 days. In any\nanalysis this sort of structure should not be ignored.\n\nHence get the mean each day and then analyse the resulting daily data.\nThis is the circular mean, and uses the ***Prepare \\> Column: Reshape \\>\nColumn Summaries*** as shown in Fig. 16.2m and Fig. 16.2n.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 16.2m*** | ***Fig. 16.2n Circular |\n| | sub-dialogue*** |\n| ***Prepare \\> Column: Reshape \\> | |\n| Column Summaries*** | |\n+===================================+==================================+\n| ![](media/image932. | ![](media/image926. |\n| png){width=\"2.9925721784776904in\" | png){width=\"2.955838801399825in\" |\n| height=\"3.2901760717410324in\"} | height=\"2.0233978565179354in\"} |\n+-----------------------------------+----------------------------------+\n| | ![](media/image931.p |\n| | ng){width=\"2.9682622484689416in\" |\n| | height=\"1.713193350831146in\"} |\n+-----------------------------------+----------------------------------+\n\nThese daily data have 62 records as shown in Fig. 16.2o. For example on\n2^nd^ February the mean wind direction was 355 degrees (or 6.19\nradians). The 5 observations were all close in direction, with the\nminimum being 345 degrees and the maximum 0.5 degrees. The (circular)\nstandard deviation was 0.1. The directions were much more variable on\nthe next day, ranging from 303 degrees (roughly from the West) to 77\ndegrees (almost East) within the hour. The (circular) standard deviation\nwas just over 1.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 16.2o*** ***Fig. 16.2p***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image885.png){width=\"3.054669728783902in\" ![](media/image879.png){width=\"2.9363615485564303in\"\n height=\"2.7000721784776904in\"} height=\"2.3743088363954508in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nIt is simply for illustration that the results, in Fig. 16.2o are given\nin both degrees and radians. As discussed above, the standard deviation\nis the same, whatever the units and the interpretation is similar to the\nordinary standard deviation for the data in radians.\n\nThe resulting daily data can now be plotted and summarised. As an\nexample, a circular histogram is shown in Fig. 16.2p.\n\nThese data are fine to illustrate the commands in the R circular package\nbut not for real applications because they are all from a single year\nand the summaries, from January to March may also include some\nseasonality. In the following sections, we therefore largely consider\ndata from multiple years.\n\n## Graphs for wind direction\n\nThe example used is from ***File \\> Open From Library \\> Open from R \\>\nR package \\> openair*** that was shown earlier in Fig. 16.1a and Fig\n16.1b. Open the dataset called ***mydata.*** It is hourly data on\npollution concentrations plus wind speed (ws) and wind direction (wd).\nThere are 65,533 records, shown again in Fig. 16.3a. The data are from\nLondon for 7.5 years from January 1998 to June 2005.\n\nSection 16.4 examines wind roses, that examine wind speeds and wind\ndirections together. Here simpler plots are used to examine just the\ncircular element, i.e. the wind directions in the variable called wd.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 16.3a Wind and pollution | ***Fig. 16.3b Checking the wind |\n| data*** | data*** |\n| | |\n| | ***Climatic \\> Tidy and Examine |\n| | \\> One Variable Frequencies*** |\n+===================================+==================================+\n| ![](media/image876. | ![](media/image878.p |\n| png){width=\"2.9951706036745405in\" | ng){width=\"2.5270352143482064in\" |\n| height=\"3.0631321084864394in\"} | height=\"3.0722867454068243in\"} |\n+-----------------------------------+----------------------------------+\n\nFirst examine the wind direction data. One way uses the ***Climatic \\>\nTidy and Examine \\> One Variable Frequencies*** dialogue, Fig. 16.3b.\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 16.3c Different values | ***Fig. 16.3d Duplicating the |\n| in the wd variable*** | wind variable*** |\n| | |\n| | ***Right click (in wd variable) |\n| | \\> Duplicate Column*** |\n| | |\n| | [Redo with new duplicate column |\n| | dialogue]{.mark} |\n+==================================+===================================+\n| ![](media/image873. | ![](media/image889 |\n| png){width=\"2.902083333333333in\" | .png){width=\"3.140196850393701in\" |\n| height=\"3.334722222222222in\"} | height=\"2.535087489063867in\"} |\n+----------------------------------+-----------------------------------+\n\nThe results are in Fig. 16.3c. They confirm that the data are measured\nto the nearest 10 degrees. There is one possible oddity, namely that\nthere are 37 different directions and not 36. There are 608 hours with\nNorth, i.e. 0 degrees and 1377 values at 360 degrees. One obvious reason\nfor this feature is that there are calm days, i.e. zero wind speed, and\nhence no direction. This could reasonably be given the direction of\nzero. Use of the right-click and Filter however shows this is not the\ncase.\n\nThere are 4 alternative next steps to resolve this oddity in the data:\n\n1. Ignore it and see what happens\n\n2. Omit one category, i.e. recode those observations as missing\n\n3. Recode the value 0 to be 360, or 360 to become 0, so the frequencies\n are added\n\n4. Contact the supplier to resolve the oddity.\n\nWe tried option 4 first but had no response. The frequency at 360\ndegrees seems reasonable, compared to the values at 350 and 10 degrees,\nhence we adopt option 2, and set the zero-degree values to be missing.\n\nFirst use the ***Right-click \\> Duplicate Column*** dialogue, Fig. 16.3d\nto avoid overwriting the original data in wd.\n\n+--------------------------+-------------------------------------------+\n| ***Fig. 16.3e Replace 0 | ***Fig. 16.3f Results from summary of 4 |\n| by missing*** | variables*** |\n| | |\n| ***Climatic \\> Tidy and | ***Climatic \\> Tidy and Examine \\> One |\n| Examine \\> Replace*** | Variable Summarise*** |\n+==========================+===========================================+\n| ![] | ![](media/i |\n| (media/image872.png){wid | mage871.png){width=\"3.8288287401574803in\" |\n| th=\"2.243173665791776in\" | height=\"1.8698742344706911in\"} |\n| heigh | |\n| t=\"2.243173665791776in\"} | |\n+--------------------------+-------------------------------------------+\n\nNow use ***Climatic \\> Tidy and Examine \\> Replace Values***, Fig.\n16.3e, to replace all instances of 0 by missing values. The result can\nbe checked with the ***Climatic \\> Tidy and Examine \\> One Variable\nSummarise*** dialogue, the results of which are in Fig. 16.3f. The new\nwd1 variable now has 608 missing values and ranges from 10 to 360\ndegrees.\n\nThere isn't yet a special climatic graph for these data, so the general\ngraphics dialogues are used. Use ***Describe \\> Specific \\> Histogram***\nwith the variable wd1, Fig. 16.3g to give the result in Fig. 16.3h.\n\nBefore making this graph circular, note an oddity in the results in Fig.\n16.3h. There are exactly 6 directions that stand out. This could either\nbe a real feature in the data, or an oddity caused by the grouping of\nthe data when the histogram is constructed. The default in the ggplot2\nsystem is 30 bins, and we just have 36 different values in the data. So\nhere the grouping for the histogram is probably to blame.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 16.3g*** ***Fig. 16.3h***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image877.png){width=\"2.882574365704287in\" ![](media/image870.png){width=\"3.096017060367454in\"\n height=\"3.0101727909011373in\"} height=\"3.2579746281714788in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nSo return to the dialogue and click on the Histogram Options button to\nset the number of bins to 36, Fig. 16.3i. We make the histogram a little\nmore colourful at the same time.\n\n+------------------------------+---------------------------------------+\n| ***Fig. 16.3i Setting bins | ***Fig. 16.3j Ordinary histogram*** |\n| in the histogram*** | |\n| | |\n| ***Describe \\> Specific \\> | |\n| Histogram\\ | |\n| Then Histogram Options*** | |\n+==============================+=======================================+\n| ![](media/image895.png | ![](media/image |\n| ){width=\"2.63702646544182in\" | 915.png){width=\"3.3948250218722658in\" |\n| h | height=\"3.5374660979877515in\"} |\n| eight=\"3.539001531058618in\"} | |\n+------------------------------+---------------------------------------+\n\nThis is now ready to produce a circular plot. Return to the dialogue,\nuse the Plot Options and the Y-axis tab, Fig. 16.3k. Set the axis limits\nfor the y-axis as shown in Fig. 16.3k. Also press on the\n***Coordinates*** tab in Fig. 16.3k and specify ***polar*** coordinates.\n\n+---------------------------------+------------------------------------+\n| ***Fig. 16.3k*** | ***Fig. 16.3l Histogram as a |\n| | circular plot*** |\n| ***Describe \\> Specific \\> | |\n| Histogram\\ | |\n| Then Plot Options \\> Y-Axis and | |\n| Coordinates*** | |\n+=================================+====================================+\n| ![](media/image897.pn | ![](media/image886 |\n| g){width=\"2.8561056430446192in\" | .png){width=\"2.7276979440069993in\" |\n| height=\"2.6587325021872266in\"} | height=\"2.743533464566929in\"} |\n+---------------------------------+------------------------------------+\n\nThe \"trick\" of starting the Y-Axis with a negative value in Fig 16.3k,\ngives the \"hole\" in the circular plot.\n\nThere is therefore a series of steps to constructing a circular plot in\nR-Instat. They could be avoided through using a special function, such\nas ***rose.diag*** in the circular package. One reason for continuing\nwith the ggplot graphs is the ease with which multiple plots (facets)\ncan be constructed.\n\nThis is illustrated by examining whether there are obvious differences\nin the pattern of the wind directions at different times of the day.\n\nUse ***Prepare \\> Column: Calculate \\> Calculations***, with the\n***Dates*** keyboard, Fig. 16.3m and the ***hour*** key.\n\nCheck the calculation by using the ***Try button***, Fig. 16.3m and save\nthe result into a variable called ***hour***.\n\n+--------------------------------+-------------------------------------+\n| ***Fig. 16.3m Making an hour | ***Fig. 16.3n Making a 3-hour |\n| variable*** | variable*** |\n| | |\n| ***Prepare \\> Column: | ***Prepare \\> Column: Calculate \\> |\n| Calculate \\> Calculations*** | Calculations*** |\n+================================+=====================================+\n| ![](media/image888.pn | ![](media/image91 |\n| g){width=\"2.794021216097988in\" | 7.png){width=\"3.1914271653543307in\" |\n| height=\"3.2234055118110234in\"} | height=\"3.2890627734033244in\"} |\n+--------------------------------+-------------------------------------+\n\nThe hour variable is from 0 (midnight) to 23 (11pm). This can be used to\ngive 24 plots, one for each hour. This is unnecessarily detailed, so\ncombine the hours into blocks of 3. There are many ways this can be done\nin R-Instat. We choose the calculator again, with the DIV function,\nwhich is given by %/% in R and is on the Logical keyboard, Fig. 16.3n.\n\nThe formula: ***threehour \\<- (hour %/% 3)*** gives the values 0, 0, 0,\n1, 1, 1,...,8,8,8 so multiplying by 3 and adding 1 gives the middle hour\nof each 3-hour period as shown in Fig. 16.3n.\n\n***Right-click*** and make the resulting variable into a ***factor***.\nThen return to the ***histogram dialogue, Plot Options*** and use this\nvariable as a ***facet***, Fig. 16.3o. Also change the ***Y-axis\nlimits*** to ***-600 to 600***.\n\n+-------------------------+--------------------------------------------+\n| ***Fig. 16.3o*** | ***Fig. 16.3p Circular histogram with |\n| | facets*** |\n| ***Describe \\> Specific | |\n| \\> Histogram\\ | |\n| Plot Options \\> Facets | |\n| and Y-axis*** | |\n+=========================+============================================+\n| ![](m | ![](media |\n| edia/image901.png){widt | /image882.png){width=\"3.889770341207349in\" |\n| h=\"2.160592738407699in\" | height=\"2.695122484689414in\"} |\n| height | |\n| =\"2.357010061242345in\"} | |\n+-------------------------+--------------------------------------------+\n\nThe resulting graph is shown in Fig. 16.3p. There is no obviously\nconsistent pattern for different times of the day.\n\nThe next step is to summarise the hourly data to a daily basis. To\nenable this, use the ***Climatic \\> Dates \\> Make Date*** dialogue, Fig.\n16.3q to make a Date column from the date-time column.\n\n+-----------------------------------+-----------------------------------+\n| ***Fig. 16.3q*** | ***Fig. 16.3r Defining a variable |\n| | as circular*** |\n| ***Climatic \\> Dates \\> Make | |\n| Date*** | ***Prepare \\> Column: Define \\> |\n| | Circular*** |\n+===================================+===================================+\n| ![](media/image883. | [The new dialogue when |\n| png){width=\"2.9268219597550305in\" | ready]{.mark} |\n| height=\"3.5730719597550307in\"} | |\n+-----------------------------------+-----------------------------------+\n\nNow use the ***Prepare \\>Column: Define \\> Circular*** to set the ***wd\nvariable*** as ***circular, Fig 16.4r***.\n\n+---------------------------------+------------------------------------+\n| ***Fig. 16.4s Calculating | ***Fig. 16.4t*** |\n| circular summaries*** | |\n| | |\n| ***Prepare \\> Column: Reshape | |\n| \\> Summarise*** | |\n+=================================+====================================+\n| ![](media/image892.p | ![](media/image855 |\n| ng){width=\"2.861185476815398in\" | .png){width=\"3.2525437445319336in\" |\n| height=\"2.8767071303587053in\"} | height=\"1.0542038495188102in\"} |\n+---------------------------------+------------------------------------+\n| | ![](media/image851 |\n| | .png){width=\"3.2090365266841645in\" |\n| | height=\"1.2806244531933508in\"} |\n+---------------------------------+------------------------------------+\n| | ![](media/image86 |\n| | 7.png){width=\"3.264692694663167in\" |\n| | height=\"0.9643383639545057in\"} |\n+---------------------------------+------------------------------------+\n\nThen use the ***Prepare \\> Column: Reshape \\> Column Summaries, Fig\n16.4s*** to give the ***circular mean and standard deviation,*** Fig.\n16.4t. One complication is that there are missing values in these data.\nWe choose, in Fig. 16.4t, to allow up to 3 missing hours in the day.\n\nThe resulting data frame has 2731 rows (days) of data, Fig. 16.4u. The\nsummary in Fig. 16.4uhas a few missing daily values, when less than 21\nhours are available.\n\n --------------------------------------------------------------------------------------------\n ***Fig. 16.3u*** ***Fig. 16.3v***\n ------------------------------------------------------ -------------------------------------\n ![](media/image862.png){width=\"2.6617049431321087in\" \n height=\"3.3775021872265967in\"} \n\n --------------------------------------------------------------------------------------------\n\n ----------------------------------- ------------------------------------------------------\n ![](media/image843.png){width=\"2.9924245406824146in\"\n height=\"2.9322222222222223in\"}\n\n ----------------------------------- ------------------------------------------------------\n\nThe obvious extension of this plotting is to consider the seasonality,\ne.g. to produce the plot on a monthly basis. This is left largely as a\nchallenge[^57]. This produces the plot in Fig. 16.3u. This shows the\npredominant wind direction is consistent in each month, but some have an\nindication of bimodality.\n\n -----------------------------------------------------------------------\n ***Fig. 16.3u***\n -----------------------------------------------------------------------\n ![](media/image849.png){width=\"6.120766622922135in\"\n height=\"2.369372265966754in\"}\n\n -----------------------------------------------------------------------\n\n[Discuss further once it is easy to have percentages and proportions in\nhistograms.]{.mark}\n\n## Wind roses\n\nIn this section we consider graphs of the wind speed and the wind\ndirection together. This is simpler, because of the special wind-rose\ndialogue using the R clifro package. [(reference)]{.mark}.\n\nThe steps in the previous section are followed. First, produce a single\nwind rose of the two columns, wind speed (ws) and direction (wd)\ntogether using the hourly data.\n\nUse ***Climatic \\> Describe \\> Wind Speed/Direction \\> Wind Rose***,\nFig. 16.4a. Ignore the Windrose Options to investigate the default\nresults from the hourly data.\n\n+-------------------------------+--------------------------------------+\n| ***Fig. 16.4a Default wind | ***Fig. 16.4b Default wind-rose*** |\n| rose*** | |\n| | ***(5 wind speeds, colours: Blues, |\n| ***Climatic \\> Describe \\> | Theme: Minimal)*** |\n| Wind \\> Wind Rose*** | |\n+===============================+======================================+\n| ![](media/image866.png) | ![](media/image |\n| {width=\"2.7000404636920385in\" | 853.png){width=\"3.279529746281715in\" |\n| height=\"2.970044838145232in\"} | height=\"2.730269028871391in\"} |\n+-------------------------------+--------------------------------------+\n\nMany wind roses will be produced, so a useful step is to fix on a\nsuitable colour scheme and theme for the graphs.\n\nReturn to the dialogue and choose ***Windrose Options***, Fig. 16.4c.\nThis shows that 12 is the default number of directions for the graph --\nlucky for us as the wd1 variable has 36 distinct values. Change the\ntheme to Classical. Then choose the Colours tab and try Red-Yellow-Blue.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 16.4c Windrose Options*** ***Fig. 16.4d***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image839.png){width=\"2.305673665791776in\" ![](media/image844.png){width=\"3.5765726159230096in\"\n height=\"2.826534339457568in\"} height=\"2.8056999125109363in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nThe resulting wind rose is in Fig. 16.4e. Changing the theme to linedraw\n(Fig. 16.4c) and the colours to Qualitative \\> Dark2 gives Fig. 16.4f.\n\n ----------------------------------------------------------------------------------------------------------\n ***Fig. 16.4e*** ***Fig. 16.4f***\n ---------------------------------------------------- -----------------------------------------------------\n ![](media/image352.png){width=\"2.99290791776028in\" ![](media/image348.png){width=\"2.940764435695538in\"\n height=\"2.7942268153980754in\"} height=\"2.7876476377952755in\"}\n\n ----------------------------------------------------------------------------------------------------------\n\nIt is easy to add facets, and Fig. 16.4g shows the windspeeds and\ndirections at different times of the day.\n\n+-----------------------------------------------------------------------+\n| ***Fig. 16.2g Time of day as facets*** |\n| |\n| ***Climatic \\> Describe \\> Wind Speed/Direction \\> Wind Rose - |\n| three-hour as facet and 4 columns*** |\n+=======================================================================+\n| ![](media/image340.png){width=\"6.1262849956255465in\" |\n| height=\"2.9776224846894137in\"} |\n+-----------------------------------------------------------------------+\n\nAs in the previous section, the data are now summarised to a daily\nbasis. This uses ***the Prepare \\> Column: Reshape \\> Column\nSummaries*** dialogue. We add the daily values of both the mean wind\nspeed and the maximum speed in the 24 hours to the daily data frame.\n\nThe daily data are shown in Fig. 16.4h.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 16.4h*** ***Fig. 16.4i***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image337.png){width=\"3.3471358267716536in\" ![](media/image342.png){width=\"2.649762685914261in\"\n height=\"3.201608705161855in\"} height=\"2.5432163167104114in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\n -----------------------------------------------------------------------\n ***Fig. 16.4j***\n -----------------------------------------------------------------------\n ![](media/image341.png){width=\"6.124628171478565in\"\n height=\"2.3491535433070867in\"}\n\n -----------------------------------------------------------------------\n\n## More displays for circular data\n\nThe wind roses, shown in Section 16.4 are essentially stacked histograms\nround a circle. As such they remain largely a circular plot, showing the\nwind direction and something of the wind speeds. If more detail is\nneeded on the wind speeds, then boxplots may be useful. If necessary,\nthey can also be displayed round a circle as is shown below.\n\nThe daily data from the previous section are used again. The 12\ndirections used in Section 16.4 seem appropriate, so these are\nconstructed. These are 30 degrees per category, and the only\ncomplication is that the first category is conveniently 345 to 15\ndegrees. This is therefore a 2-step process. The first step uses the\n***Prepare \\> Factor \\> Recode Numeric*** dialogue, Fig. 16.5a. The 14\nbreak points are:\n\n-1, 15, 45,75, 105, 135, 165, 195, 225, 255, 285, 315, 345, 361\n\nThis gives a factor column with 13 levels (not 12!). The second step is\nto use ***Prepare \\> Column: Factor \\> Recode Factor*** to combine the\nfirst and last levels. In Fig. 16.5b make the new first label into (345,\n15\\] and do the same to the last level. Give the new column a sensible\nname, Fig. 16.5b.\n\nIf you prefer, then relabel each level in Fig. 16.5b to indicate the\nmiddle angle of that group, namely 0, 30, 60, 90,... , 0. Or you could\nuse directions, i.e. N, NNE, etc.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 16.5a*** ***Fig. 16.5b***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image338.png){width=\"2.9411942257217847in\" ![](media/image353.png){width=\"2.9109405074365706in\"\n height=\"2.2323447069116362in\"} height=\"2.239504593175853in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nCheck, using ***Right-Click \\> Levels/Labels*** that the new Direction\nvariable has 12 levels.\n\nUse ***Describe \\> Specific \\> Boxplot***, Fig. 16.5c, to get a boxplot\nof the wind speeds by these 12 directions.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 16.5c*** ***Fig. 16.5d Maximum daily wind speeds, by\n direction***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image339.png){width=\"2.5343930446194225in\" ![](media/image346.png){width=\"3.4517311898512686in\"\n height=\"2.976563867016623in\"} height=\"3.5370078740157482in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nIn Fig. 16.5c make the boxplots of variable width, so the width of each\nboxplot indicates the relative frequencies of each wind direction. One\nsmall problem in Fig. 16.5d is that the missing values are included as a\n13^th^ category. Use ***Right-Click \\> Filter*** (or ***Data Options***\nin the Boxplot dialogue) to omit the missing values in the wind speed\ncolumn and repeat the boxplot. At the same time you may wish to use\n***Plot Options \\> Coordinates*** to make this into a circular plot,\nFig. 16.5e.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 16.5e*** ***Fig. 16.5f***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image315.png){width=\"2.9485433070866143in\" ![](media/image324.png){width=\"2.9764621609798776in\"\n height=\"2.9555708661417324in\"} height=\"2.958765310586177in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nThere are alternative displays, from the Describe \\> Specific \\> Boxplot\ndialogue. Fig. 16.5f shows a violin plot(essentially a density plot\ninstead of the boxplot[^58].\n\nFig. 16.5g, shows the boxplot without the red outliers of Fig. 16.5e,\nwhile Fig. 16.5h adds the jittered points to the diagram.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 16.5g*** ***Fig. 16.5h***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image311.png){width=\"2.992658573928259in\" ![](media/image302.png){width=\"2.977374234470691in\"\n height=\"2.9998425196850396in\"} height=\"2.988058836395451in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nUsually it will be informative to have a set of graphs to investigate a\nfurther factor at the same time. These are usually the seasonality, or\nthe station. Fig. 16.5i shows the data for the mean daily windspeed\n(rather than the maximums, shown above) for each month.\n\n -----------------------------------------------------------------------\n ***Fig. 16.5i***\n -----------------------------------------------------------------------\n ![](media/image333.png){width=\"6.155880358705162in\"\n height=\"2.937444225721785in\"}\n\n -----------------------------------------------------------------------\n\nFig. 16.5i shows the data as linear plots and Fig. 16.5j as circular\nplots. We invite you to compare the two displays. The wind direction\ndata are circular, so perhaps Fig. 16.5j is the more natural display.\nBut, for some readers we suggest the comparisons between the months seem\neasier to make from Fig. 16.5i.\n\n -----------------------------------------------------------------------\n ***Fig. 16.5j***\n -----------------------------------------------------------------------\n ![](media/image313.png){width=\"6.137919947506561in\"\n height=\"2.27128937007874in\"}\n\n -----------------------------------------------------------------------","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_17_Circular_data_and_wind_roses.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_17_Circular_data_and_wind_roses.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_18_Temperatures.qmd.json b/.quarto/idx/Chapter_18_Temperatures.qmd.json new file mode 100644 index 0000000..2e61f7e --- /dev/null +++ b/.quarto/idx/Chapter_18_Temperatures.qmd.json @@ -0,0 +1 @@ +{"title":"Temperatures","markdown":{"headingText":"Temperatures","containsRefs":false,"markdown":"## Examining trends\n\n[Check on scale, daily, monthly, annual.]{.mark}\n\n[Consider adding broken stick -- segmented regression model. With fixed\nor estimated break points. Package segmented may be used if estimated.\nProbably not needed if a break-point and want to try a fixed\nvalue.]{.mark}\n\nSee, for example\n[[https://stats.stackexchange.com/questions/382114/segmented-regression]{.underline}](https://stats.stackexchange.com/questions/382114/segmented-regression)\n\n## Comparing gridded and station data\n\n## Degree days","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_18_Temperatures.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_18_Temperatures.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_19_Drought_Indices__SPI.qmd.json b/.quarto/idx/Chapter_19_Drought_Indices__SPI.qmd.json new file mode 100644 index 0000000..4756081 --- /dev/null +++ b/.quarto/idx/Chapter_19_Drought_Indices__SPI.qmd.json @@ -0,0 +1 @@ +{"title":"Drought Indices -- SPI","markdown":{"headingText":"Drought Indices -- SPI","containsRefs":false,"markdown":"## Introduction\n\nThe Standardised Precipitation Index (SPI) is acknowledged as an obvious\nindex to monitor drought, e.g. (Keyantash & (Eds), 2018). It is\ndescribed in the WMO guide (Svoboda, Hayes, & Wood, 2012).\n\nThere are various R packages to implement SPI and R-Instat includes the\ncommand from the SPEI package (Beguería & Vicente-Serrano, 2017). This\npermits the calculation of the SPI index, as described by WMO and an\nSPEI index that includes evapotranspiration, (Vicente-Serrano, Beguería,\n& López-Moreno, 2010).\n\nThe SPI index is promoted as being superior to the Palmer Drought\nSeverity Index. This is based on an original index by (Palmer, 1965),\ngeneralised by (Wells, Goddard, & Hayes, 2004) and implemented in their\nR package, called scPDSI (Zhong, Chen, Wang, & Chengguang, 2018) to\nproduce both the self-calibrating and the conventional Palmer index.\n\n## Using the SPI index \n\nFor illustration use the Nigerian data from Samaru, ***File \\> Open from\nLibrary \\> Instat \\> Browse \\> Climatic \\> Nigeria***, Fig. 12.2a. The\ndata frame, called samaru56t, has already been defined as climatic and\nhas 56 years of daily rainfall data.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 18.2a*** ***Fig. 18.2b***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image332.png){width=\"2.754974846894138in\" ![](media/image312.png){width=\"3.198131014873141in\"\n height=\"3.516872265966754in\"} height=\"3.513098206474191in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nThe SPI index is usually used on monthly data, though this is not\nessential. Hence use ***Climatic \\> Prepare \\> Climatic Summaries***, as\nshown in Fig. 18.2b. On the ***Summaries sub-dialogue*** choose the\n***Count not missing*** and the ***Sum***. The monthly totals are shown\nin Fig. 18.2a.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 18.2c*** ***Fig. 18.2d***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image319.png){width=\"2.616885389326334in\" ![](media/image305.png){width=\"3.352402668416448in\"\n height=\"3.7938856080489938in\"} height=\"3.8009251968503937in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nNow use Climatic \\> Prepare \\> SPI, Fig. 18.2d. Complete the dialogue as\nshown in Fig. 18.2d, giving the resulting column the name spi1, because\nthe index is for single months.\n\nThen return to the SPI dialogue. Change the time scale to 3 (months) and\nthe name of the resulting column to spi3.\n\nRepeat again, changing the time scale to 12, i.e. to a full year and\nchange the name to spi12.\n\nThe first years of the resulting data are shown in Fig. 18.2e. The\nresults are interpreted and the graphed.\n\nTo help with the interpretation Fig. 18.2f shows boxplots of the monthly\ndata.\n\n+---------------------------------+------------------------------------+\n| ***Fig. 18.2e spi1, spi3 and | ***Fig. 18.2f*** |\n| spi12*** | |\n| | ***Describe \\> Specific Boxplot: |\n| | sum_rain by month*** |\n+=================================+====================================+\n| ![](media/image321.pn | ![](media/image33 |\n| g){width=\"2.8649070428696413in\" | 4.png){width=\"3.175556649168854in\" |\n| height=\"3.703416447944007in\"} | height=\"3.468993875765529in\"} |\n+---------------------------------+------------------------------------+\n\nFirst examine March 1928, that has an spi1 index of +2. This has\nresulted from the rainfall total of 52.6mm. Fig. 18.2f shows that this\nis very large for March -- it is the 2^nd^ highest from the 56 years.\nHence positive values of 2 (or more) indicate very rainy compared to the\nnorm. March 1929 had 12.7mm, and the spi1 index of 1.06 indicates that\neven this value is quite large. Often the March total is zero.\n\nAugust 1928 had a modestly negative value of spi1 = -0.456. This was\nfrom the August total of 233mm, and the boxplot indicated that this is\nslightly lower than average. In contrast, August 1929 had 356mm, which\nis higher than the average, and corresponds to the spi1 index of +1.\n\nThe spi3 index fist calculates the 3-month running sums. Hence it\nindicates how they compare with what is expected. For example, from Fig.\n18.2e, April to June 1928 is all each individually higher than expected.\nHence the April to June 1928 total is surprisingly high and has an spi3\nindex of +1.83.\n\nThe 12-month index gives information about the annual (running) totals.\nTo investigate these, use the Climatic \\> Prepare \\> Climatic Summaries\nagain. Change the top button in Fig. 18.2b to Annual to give a data\nframe with 56 values. Now use either ***Prepare \\> Column: Calculations\n\\> Calculate*** or ***Prepare Column: Calculate \\> Column Summaries***\non the ***sum_rain*** variable to show the annual mean is 1068mm and the\nstandard deviation is 178.5mm.\n\nThe total in 1928 was 1262mm. This is higher than the mean of 1068mm and\nhence a positive spi12 value is expected for December 1928 in Fig.\n18.2e. If we standardise the annual total, i.e. evaluate:\n\n(1262 -- mean)/sd = (1262 -- 1068) /178.5 = +1.086, which is close to\nthe spi12value of 1.074.\n\nIn 1929, the total was 1284mm and the standardised value was (1284 --\n1068)/178.5 = 1.21, again close to the spi12 index for December 1929 in\nFig. 18.2e, of 1.18.\n\nThe calculations to produce the spi index is relatively complex. A\ndistribution is fitted to the data and then the equivalents from the\nnormal distribution are found. For the annual totals, the distribution\nis already close to normal, as is shown by the density plot in Fig.\n18.2g. Then the normal distribution is used, as in Fig. 18.2h, where the\nvalue for 1928 is indicated. The results are then standardised, which\njust changes the x-axis in Fig. 18.2h to go from roughly -2 to + 2. In\nfig 18.2h -2 corresponds to a value of 1068 -- 2 \\* 178.5 = 711mm. A\nvalue of 711mm has a probability of 1 year in 40 (probability of about\n0.025) of occurring and represents a severe drought. (Most readers will\nremember the value of ± 1.96, i.e. about ± 2 that gives the 5% points\nfrom the standard normal distribution.)\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 18.2g Density graph of | ***Fig. 18.2h Normal plot showing |\n| annual totals*** | 1928 total*** |\n| | |\n| ***Describe \\> Specific \\> | ***Model \\> Probability |\n| Histogram with density*** | Distributions \\> Show Model*** |\n+==================================+===================================+\n| ![](media/image323.p | ![](media/image335. |\n| ng){width=\"2.9731157042869643in\" | png){width=\"3.0730129046369203in\" |\n| height=\"3.222425634295713in\"} | height=\"3.253115704286964in\"} |\n+----------------------------------+-----------------------------------+\n\nThe indices from Fig. 18.2e can be plotted in a variety of ways. The\n\"standard\" time series graphs look cluttered, as they include the\nseasonality within the graph. Fig. 18.2i presents graphs of spi1 and\nspi12 separately for each of the months. It shows that spi1 is\nmeaningless in the dry months (November to February). Lines at 0 and -2\nhave been added and show largely that any problem is towards the later\nyears.\n\n -----------------------------------------------------------------------\n ***Fig. 18.2i***\n -----------------------------------------------------------------------\n ![](media/image331.png){width=\"6.113659230096238in\"\n height=\"3.0128029308836397in\"}\n\n -----------------------------------------------------------------------\n\n## The SPEI index\n\n[Need to add this section. It works \"trivially\" by giving a\nwater-ba;ance variable instead of the rainfall. So, it could be within\nR-Instat that we just use the Climatic \\> Prepare \\> Transform dialogue\nfirst, to get the water balance, and then return to the SPI\ndialogue.]{.mark}\n\n## Palmer Drought Severity Index\n\n[Check first whether we add it to the dialogue, add another dialogue, or\ntry to give it as a command.]{.mark}","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_19_Drought_Indices__SPI.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_19_Drought_Indices__SPI.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_1_About_this_guide.qmd.json b/.quarto/idx/Chapter_1_About_this_guide.qmd.json new file mode 100644 index 0000000..c9f1384 --- /dev/null +++ b/.quarto/idx/Chapter_1_About_this_guide.qmd.json @@ -0,0 +1 @@ +{"title":"About this guide","markdown":{"headingText":"About this guide","containsRefs":false,"markdown":"## Who is this guide for?\n\nThis guide is concerned with the analysis of climatic data. It is for\nfour types of reader: The first is those concerned with the collection\nand subsequent use of their climatic data. This includes staff of\nnational meteorological services, (NMSs) who are often the custodians of\nthe historical climatic data for their country. There are many others\nwho collect climatic data, for example schools and colleges, farms,\nagricultural institutes and many individuals.\n\nSecond is the users who need results from an analysis of historical\nclimatic data. They may undertake analyses themselves, or, at least,\nneed to know what is possible from the data. They are in many walks of\nlife, including agriculture, health, flood prevention, water supply,\nrenewable energy, building, tourism and insurance.\n\nThe other two groups are concerned more with teaching and learning\nstatistics. Looking at climatic data is an application of interest to\nmany people; partly because of the effects that climate has on many\nareas. Also because of the many issues of climate change.\n\nSo, the third group is those who teach statistics. This guide shows how\nsimple statistical ideas are used in solving practical problems in one\napplication area. The key concepts of sensible data handling are the\nsame whatever the area of application.\n\nThe final group consists of those who have to learn statistics. Many\npeople recognize that they need statistics skills for their work but\nsometimes find their statistics courses are difficult to relate to\nreal-life applications. The materials here are complementary, by\nstarting with the application and considering the statistical ideas that\nare needed to process the data.\n\nThese groups overlap. For example, many users of climatic data are also\nconscious of their need for further training in statistics.\n\n## Why is it needed?\n\nMany organizations have devoted more effort to collecting climatic data\nthan to their subsequent analysis. This is like other areas where\nmonitoring data are collected routinely. One way that climatic data is\nperhaps different is that much of the data has an important immediate\nuse. It is an input for the short-term forecasts and for other immediate\nmonitoring of the current season. This might be termed a \"spatial need\"\nin that these applications benefit from lots of data from different\nplaces at the same time. These data are then stored, and this guide is\nfor a \"time series need\". Most of the analyses in this guide are for\nlong records in time. They may be for one, or more, points in space.\n\nSometimes the excuse for the lack of analysis is that the quality of the\ndata is suspect. This is not a good reason, because one way to improve\ndata quality is to analyze the existing data to demonstrate their\nimportance and shortcomings.\n\nIt is also useful if those who collect data can do their own analysis,\nor at least be involved in the analysis. This is highly motivating for\nstaff and an excellent way to encourage good data quality.\n\nSome familiarity with the use of software (under Windows) is assumed.\nKnowledge of statistics is useful, but not essential for most chapters.\nIndeed, though this guide cannot substitute for a conventional\nstatistics book, users can learn many general ideas through seeing where\ndifferent techniques are useful.\n\n## What software is used?\n\nThis guide uses the R Statistical system (R Core Team, 2018). It mainly\nuses R through a graphical user interface, called R-Instat. An earlier\nversion of this guide (Stern, Rijks, Dale, & Knock, 2006) was for a\nsimple statistics package, called Instat. Like the original Instat,\nR-Instat combines a general statistics package with a special additional\nmenu to simplify the analysis of climatic data.\n\nR-Instat is designed to support improved learning of statistics in\ngeneral as well as providing a wide range of special dialogues to\nsimplify, and hence facilitate, the analysis of climatic data.\n\n## What is in this guide?\n\nIllustrations and 'route maps' are provided in all chapters for those\nwho just wish to study particular topics. We hope that some users will\nenjoy the way the ideas unfold in successive chapters but do not assume\nthat readers will wish to look at every chapter. Most chapters are in a\n\"tutorial\" style, so readers can follow, and practice at the same time.\nThere is considerable repetition, to support users to \"dip into\" the\nchapters they need.\n\nHow much practice is needed, depends on the user's current experience in\nstatistical computing. Those who are relatively inexperienced, or have\nnever used a statistics package, may be surprised at how easy the ideas\nand the software are. However, beginners need practice, so just reading\nthe guide will not be so effective.\n\nThose with experience of a statistics package should find that R-Instat\nis like many other statistics packages. Then practice is not so\nimportant, because they should be able to visualize the results from\njust reading the text.\n\nWe assume R-Instat has already been installed, see\n[[http://r-instat.org/index.html]{.underline}](http://r-instat.org/index.html).\n\nChapters 2 and 3 provide practice of using R-Instat in general. Climatic\ndata are used, but not the special climatic menu. They assume initial\nknowledge of R-Instat that could be from the two initial tutorials.\nBeginners should go through these tutorials, while others may just need\nto see the corresponding videos.\n\nChapters 4 to 7 show the use of the R-Instat climatic menu. The\nstructure of the climatic menu mirrors the main menus. It has items in\nthe order that is usually needed in an analysis. First is ***File***, to\ninput the data, then ***Prepare***, to organise them for analysis, then\n***Describe***, to analyse the data without assuming a particular\n(statistical) model. Lastly, the menu includes some special modelling\nitems.\n\nIf your need is to analyze your own climatic data as quickly as\npossible, then you may choose to omit Chapters 2 and 3 initially.\nChapter 4 describes the R-Instat \"climatic system\". This is then assumed\nin later chapters. Chapter 5 is on initial exploration of the data and\non quality control. Chapter 6 produces and analyses \"standard\"\nsummaries, such as rainfall totals, while Chapter 7 examines \"tailored\nproducts\" such as the start of the rains.\n\nChapter 8 examines further features of R-Instat, particularly for users\nof climatic data who may wish to migrate from R-Instat to using R\nitself. There are inevitable limits to the efficient processing of data\nwith a menu-driven package. This idea is already introduced in Chapter 3\nwhere Section 3.5 is titled \"Don't let the computer laugh at you\".\nHence, for example, Chapter 8 considers how particular climatic analyses\ncan be done, using tools in R that are currently absent from R-Instat.\n\nThe remaining chapters examine more specialised topics. Chapter 9 is on\nthe input and analysis of gridded satellite and reanalysis data. Chapter\n10 is on mapping and 11 introduces the important area of extremes.\n\nThe PICSA (Participatory Integrated Climate Services for Agriculture)\nproject is described briefly in Section 1.6 and in more detail in\nChapter 12.\n\nThe remaining chapters are on a range of further topics including the\n(statistical approach to) the seasonal forecast, the use of stochastic\nmodels, the processing of within-day data (e.g. from automatic stations)\nand the analysis of circular data, particularly for wind direction.\n\nAll the data sets used for illustration are supplied in the R-Instat\n\"library\". Chapter 3 describes how the data are organized, so readers\ncan substitute their own data for the examples in later chapters.\n\nThe analysis of the climatic records is often a two-stage process. The\nfirst stage reduces the raw, often daily, data to a semi-processed form\nwith key summaries that correspond to users\\' needs. The second stage\ninvolves processing these summaries.\n\nThis two-stage process is typical of the processing of many types of\ndata and is one reason why users often find their statistics training\ndid not seem relevant to real-world problems. Many courses use only\nsmall sets of semi-processed data that are tailored to the topic being\ntaught. However, the real world starts with primary data, and these are\noften quite large.\n\n## Climatology, statistics, and computing?\n\nReaders who are not confident in statistics should recognize the three\ndifferent subjects that are in this guide, namely climatology,\nstatistics, and computing. The material becomes easier if you separate\nthese subjects as far as possible.\n\nR is a programming language and those who are already adept in R may\nfind they do not need the R-Instat menus and dialogues but can use\nRStudio more efficiently for the same analyses. In contrast, beginners\nin R, sometimes find it difficult to use in their statistics courses.\nThey are still trying to master the computing ideas, and this becomes\nmixed with the statistical objectives.\n\nComputing ideas are raised at various points in this guide, because\nusers sometimes limit the analyses they conduct, by not exploiting the\nsoftware fully. So, we show how R-Instat can be used in different ways,\nto solve problems raised by users in their needs for data analysis.\nThese sections should be recognized as largely computing topics and\nperhaps omitted initially by those who have less interest in using R\nitself.\n\nStatistics and climatology have two features in common. Both are\nrelevant to a wide range of applications and many specialists in those\napplication areas treat both statisticians and climatologists as an\nunwelcome nuisance! Perhaps by working together, they can be welcomed\nmore.\n\n## Climate Services for Agriculture\n\nMany countries have projects on climate and agriculture. These projects\noften concentrate on sharing the information on the short-term and\nseasonal forecasts with producers. We outline one such project, called\nPICSA (Participatory Integrated Climate Services for Agriculture). More\ninformation on PICSA is here:\n[[https://research.reading.ac.uk/picsa/]{.underline}](https://research.reading.ac.uk/picsa/).\n\nThe different component of PICSA are shown in Fig. 1.6a\n\n -----------------------------------------------------------------------\n ***Fig. 1.6a The PICSA project***\n -----------------------------------------------------------------------\n ![](media/image1407.png){width=\"5.643466754155731in\"\n height=\"4.150380577427821in\"}\n\n -----------------------------------------------------------------------\n\nA distinguishing feature of PICSA is the first panel in Fig. 1.6 and\nthis is in addition to the forecasting activities. The first panel is on\naspects that are based on an analysis of the historical climatic\nrecords, that are shared with small-scale farmers, before the seasonal\nforecast is available. The National Met Service (NMS) is a key partner\nin each country and provides analyses of the historical data. These\nanalyses use the methods described in Chapters 6 and 7 of this guide and\nare from the climatic stations that are as close as possible to\ndifferent groups of farmers. PICSA is described in Chapter 12.\n\n## The Climsoft Climate Data Management System\n\nClimsoft is a free and open source system for the entry and management\nof primary climatic data. The initial screen is shown in Fig. 1.7a. It\nhas facilities for the entry and checking of data from paper records,\nand for the transfer of data from previous systems, and from automatic\nstations. The data, and metadata are currently held in a mysql database.\n\nClimsoft is designed particularly for National Met Services (NMSs), but\ncan be used by any other organisation that has to manage historical\nclimatic or other related data. A wide range of elements are\npre-defined, but others can be added for hydrology, pollution or other\naspects. Data can be at any scale, e.g. daily, 10-minute.\n\nClimsoft includes some products, but not many. Instead, R-Instat can\nread data directly from Climsoft, or exported from Climsoft, and is\ndesigned as the products' partner to Climsoft. In later versions of\nClimsoft the plan is for some of the R-routines in R-Instat to become\npart of Climsoft.\n\n -----------------------------------------------------------------------\n ***Fig. 1.7a The main Climsoft menu***\n -----------------------------------------------------------------------\n ![](media/image1396.png){width=\"5.75634842519685in\"\n height=\"3.9693667979002623in\"}\n\n -----------------------------------------------------------------------","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_1_About_this_guide.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_1_About_this_guide.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_20_Climate_Normals.qmd.json b/.quarto/idx/Chapter_20_Climate_Normals.qmd.json new file mode 100644 index 0000000..6f8539c --- /dev/null +++ b/.quarto/idx/Chapter_20_Climate_Normals.qmd.json @@ -0,0 +1 @@ +{"title":"Climate Normals","markdown":{"headingText":"Climate Normals","containsRefs":false,"markdown":"## Introduction\n\nThe calculation of climate normals in this chapter is based largely on\n(World Meteorological Organization (WMO), 2017). We also consider the\nadaptation of the guidelines to the calculations of the normals in the\nUS, as described in (Arguez, et al., 2012).\n\nA climatological standard normal now refers to the most recent 30-year\nperiod finishing in a zero, i.e. currently 1981-2010, and soon to be\n1991-2020. In addition, the 1961-1990 period is retained as a standard\nreference period for assessing long-term climate change.\n\nA distinction is made in (World Meteorological Organization (WMO),\n2017), between \"Principal Climatological Parameters\" and \"Secondary\nParameters\". There are 8 primary parameters including monthly total\nrainfall (precipitation) and the total number of rain days, Table 19.1a.\n\n -----------------------------------------------------------------------\n ***Table 19.1a WMO Principal Climatological \n Parameters*** \n ------------------------------------------------------- ---------------\n **Parameter** **Units**\n\n Precipitation total mm\n\n Precipitation days (Precip ≥ 1mm) days\n\n Mean Tmax °C\n\n Mean Tmin °C\n\n Mean Tavg °C\n\n Mean sea-level pressure hPa\n\n Mean vapour pressure hPa\n\n Total hours of sunshine hours\n -----------------------------------------------------------------------\n\nThe quintile boundaries for rainfall (mm) and the mean number of days\nwith more than 5, 10, 50, 100 and 150mm are secondary parameters.\nTemperature thresholds and extremes are also included.\n\nThese are intended as guidelines and are adapted by individual\ncountries. Examples from the US are shown in Table 19.1b. This table is\nadapted from Table 5 in (Arguez, et al., 2012). The units have been\nchanged to millimetres for rainfall and °C for temperatures (US uses\ninches and Fahrenheit.)\n\n --------------------------------------------------------------------------------------------------------\n Table 19.1b \n Monthly and \n annual \n normals for \n a station in \n Chicago, \n from \n (Arguez, et \n al., 2012) \n ------------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ -------\n Variable J F M A M J J A S O N D Ann\n\n Tmax (°C) -0.3 2.1 8.2 15.1 21.2 26.6 29.0 27.8 24.1 17.1 9.2 1.8 15.2\n\n Tavg (°C) -4.0 -1.8 3.8 10.2 16.1 21.7 24.4 23.4 19.1 12.3 5.3 -1.7 10.8\n\n Tmin (°C) -7.7 -5.7 -0.6 5.4 10.9 16.7 19.7 19.0 14.2 7.6 1.4 -5.2 6.4\n\n DTR (°C) 7.4 7.8 8.8 9.7 10.3 9.9 9.3 8.8 9.9 9.5 7.8 7.0 8.8\n\n Precip(mm) 52 49 69 92 105 103 102 101 84 82 87 65 993\n\n HDD 692 564 451 249 104 17 1 2 43 194 391 620 3327\n\n CDD 0 0 1 7 34 117 188 160 66 9 0 0 581\n\n Days Tmax \\> 0 0 0 0 0.6 3.1 6.3 3.8 1.2 0 0 0 15.1\n 32.2 \n\n Days with 1.4 2.9 10.6 23.5 30.5 30 31 31 30 28.1 13.1 2.9 235\n Tmin \\< 10 \n\n Precip 25% 29 26 41 54 63 70 53 57 40 49 48 38 \n\n Precip 75% 75 66 90 119 141 124 115 143 117 93 133 80 \n\n Precip \\> 10.7 8.8 11.2 11.1 11.4 10.3 9.9 9 8.2 10.2 11.2 11.1 123.1\n 0.2mm[^59] \n\n Precip \\> 0.2 0.2 0.3 0.9 1 1.3 1 1.3 0.7 0.8 0.8 0.5 9\n 25mm \n --------------------------------------------------------------------------------------------------------\n\nOne differences is for rainfall, where WMO suggests quintiles, i.e. 20%,\nto 80%, while the US uses quartiles (25% and 75%). Heating (HDD) and\ncooling degree days are also including. A heating degree day is defined\nas a value of Tavg above 18°C (65 degrees Fahrenheit), while CDDs are\ntemperatures below that level.\n\nThe WMO lower threshold for rainfall is proposed as ≥ 1mm. We have\nlargely used 0.85mm as a practical lower limit in this guide. We claim\nthis is consistent with the WMO value of ≥1mm. For practical purposes,\nas data are recorded to 0.1mm the WMO value is effectively \\> 0.95mm.\nFor consistency between stations (which is important for climate\nnormals) the value of 0.85mm is about the same. But it allows for\ndifferences in rounding at different stations. This can occur in 2 ways.\nIf data were originally in inches, then 0.01inch = 0.3mm. The value of\n0.9mm is not possible, because 0.03inches = 0.8mm, while 0.04inches =\n1mm.\n\nIn addition, some observers round data more than others. An observer who\nrounds 0.9mm to 1mm would have that day counted as rain, while the more\nprecise observer, recording the same value as 0.9mm would have it\nomitted as dry.\n\nFor these reasons, we claim the proposed threshold value of 0.85mm is a\npractical was of implementing the WMO ≥1mm threshold.\n\n+-----------------------------------+-----------------------------------+\n| ***Fig. 19.1a Inventory for | ***Fig. 19.1b Subset with 30 |\n| Dodoma*** | years*** |\n| | |\n| ***Climatic \\> Check Data \\> | Right-click \\> Filter (to year |\n| Inventory*** | from 1981 to 2010) |\n+===================================+===================================+\n| ![](media/image320. | ![](media/image326. |\n| png){width=\"2.9576673228346455in\" | png){width=\"2.8694127296587926in\" |\n| height=\"2.9941371391076115in\"} | height=\"3.0189227909011374in\"} |\n+-----------------------------------+-----------------------------------+\n\nIn principle, producing normals is straightforward as is shown in\nSection 19.2 with examples using rainfall data. Complications relate\nlargely to the presence of missing values in the reference period and\nthis is discussed in Section 19.3.\n\nThe Dodoma data are used as an example. ***File \\> Open from Library \\>\nInstat \\> Browse \\> Climatic \\> Tanzania \\> Dodoma.rds***.\n\nThe data are already defined as climatic. An inventory is shown in Fig.\n19.1a. IT shows there are virtually no missing values in the rainfall,\neither in the 30 years from 1961 or in the most recent period, from 1981\nto2010. A subset of the data is produced as shown in Fig. 19.1b, and\nrainfall normals from 1981-2010 are shown in Section 19.2.\n\nThere are also relatively few missing values in the temperatures. They\nare considered in Section 19.3, where we also explain the WMO\nrecommendations for coping with missing values.\n\nThe sunshine records only started in 1973, and so could not be used for\n1961-90 normals. And there are far too many missing values for them to\nbe used in 1981-2010, unless they can be merged with satellite data.\nThis is considered in Section 19.4.\n\nThe examples here are for a single station. Usually they would be done\nfor a whole set of stations in a single file, and that is no more work.\nThe process, in R-Instat, currently involves three successive steps.\nThere seems to be no R-package for this task. We expect to construct one\nfor R and hence R-Instat, in the future.\n\n## Precipitation normals \n\nFrom Fig. 19.1b the Dodoma data are now from 1981 to 2010. We have\nchosen to keep the year from January to December, though there could be\na case for July to June, as that would mean each \"year\" would be a\ncomplete season. The rains in Dodoma are from November to April. In\n(World Meteorological Organization (WMO), 2017), mention is made of\nclimate normals being for seasons rather than annual, but no details are\ngiven, In Tanzania part of the country is unimodal and part is bimodal,\nso comparisons of the normals between stations would be easier with a\nconsistent definition and January to December therefore seems justified.\n\nThe first 2 normals in Table 19.1a are the precipitation totals and the\nnumber of rain days. As preparation, calculate the rain days as shown in\nFig. 19.2a. In Fig. 19.2a the 0.85mm threshold has been used, which we\nclaimed above, is consistent with the WMO definition of rain ≥ 1mm. (Use\n0.95mm is you don't agree!)\n\n+--------------------------------+-------------------------------------+\n| ***Fig. 19.2a Add a variable | ***Fig. 19.2b*** |\n| for raindays*** | |\n| | |\n| ***Climatic \\> Prepare \\> | |\n| Transform*** | |\n+================================+=====================================+\n| ![](media/image343.png | ![](media/image32 |\n| ){width=\"2.7958967629046367in\" | 2.png){width=\"3.2288713910761153in\" |\n| height=\"3.432683727034121in\"} | height=\"3.409433508311461in\"} |\n+--------------------------------+-------------------------------------+\n\nThe resulting daily data are in Fig. 19.2b. The rainday variable can be\nseen to be 1 on rain days, and 0 otherwise.\n\nGetting the monthly normals is a 2-step process and the annual normals\nadds a 3rd step.\n\nThe first step uses the ***Climatic \\> Prepare \\> Climatic Summaries***,\nas shown in Fig. 19.2c, to give the monthly rainfall totals for each\nyear.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 19.2c*** | ***Fig. 19.2d*** |\n| | |\n| ***Climatic \\> Prepare \\> | |\n| Climatic Summaries*** | |\n+===================================+==================================+\n| ![](media/image325. | ![](media/image298.p |\n| png){width=\"2.9981966316710413in\" | ng){width=\"2.8774507874015747in\" |\n| height=\"3.774873140857393in\"} | height=\"2.998788276465442in\"} |\n+-----------------------------------+----------------------------------+\n\nComplete the dialogue as shown in Fig. 19.2c and choose just the 3\nsummaries from the sub-dialogue, as shown in Fig. 19.2d. This generates\na new data frame with 30 (years) by 12 (months), i.e. 360 rows of data.\nIt will be multiples of 360 rows if there is more than one station.\n\nReturn to the dialogue, change the variable, in Fig. 19.2c, to\n***raindays*** and omit the ***Maximum*** and also the ***N Non\nMissing*** summary -- it isn't needed, because it is just the same as\nfor the rain column.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 19.2e The resulting monthly data*** ***Fig. 9.2f***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image280.png){width=\"2.6224245406824145in\" ![](media/image294.png){width=\"3.398500656167979in\"\n height=\"3.3829286964129484in\"} height=\"3.334045275590551in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nCheck the resulting data frame, shown in Fig. 19.2e. For example, the\nfirst row shows there was a total of 26.4mm from 5 rain days in\n1981[^60]. The maximum daily value was 14.4mm in January 1981. In Fig.\n19.2e, check there are no missing months. With the setting for missing\nvalues unchecked in Fig. 19.2c, a month will be set to missing if there\nis even a single missing day in that month. We consider this issue at\nthe start of Section 19.3.\n\nThe (World Meteorological Organization (WMO), 2017) describes four\ndifferent parameters that can become monthly normals. From the daily\ndata it may be a mean, or a sum, or a count or an extreme. In Fig. 19.2e\nthere are 3 of these types. Thus, the rainfall totals are an example of\na sum, the number of rain days is a count, and the maximum rainfall is\nan example of an extreme. Once temperature data are considered, there\nwill also be examples of means.\n\nThe second step is to produce the climate normals from these monthly\ndata. This uses the \"ordinary\" summary dialogue in R-Instat, from\n***Prepare \\> Column: Reshape \\> Column Summaries***, Fig 19.2f, rather\nthan the special climatic summary. This time the only summary needed is\nthe mean, Fig. 19.2g.\n\nThe results are a new data frame with just 12 rows, giving the monthly\nclimate normals, Fig. 19.2h. With multiple stations this would be a data\nframe with 12 rows for each station. These can now be copied to a table\nor presented graphically. With multiple stations this would be in a\nfacetted graph.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 19.2g*** ***Fig. 19.2h The climate normals***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image282.png){width=\"2.8663834208223973in\" ![](media/image306.png){width=\"2.805609142607174in\"\n height=\"3.124615048118985in\"} height=\"3.1915343394575677in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nFig. 19.2i gives a simple graph of the mean monthly totals with the data\nfrom Fig. 19.2h as labels. Fig. 19.2j shows the rain days, where the\nmonths have been changed into the more natural seasonal order.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 19.2i*** ***Fig. 19.2j***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image275.png){width=\"3.008005249343832in\" ![](media/image281.png){width=\"3.0185575240594926in\"\n height=\"2.9874726596675414in\"} height=\"2.9944094488188977in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nSecondary parameters for the rainfall, suggested by (World\nMeteorological Organization (WMO), 2017) are the extremes, the quintile\nboundaries and the number of rain days above defined thresholds.\n\nThe quintile boundaries are the 0%, 20%, 40%, 60%, 80%, 100% points,\nwhere the 0% and 100% are the monthly extremes. Countries are unlikely\nto need them all and this is where the US has chosen quartiles, i.e. 25%\nand 75% instead of quintiles.\n\nIn R-Instat either can be found from adapting the second stage of the\ncalculations. If you would like the extremes and quartiles then use\nPrepare \\> Column: Reshape \\> Column Summaries again, Fig. 19.2f, but\njust for the sum_rain variable. In the summaries, Fig. 19.2g use the\nMinimum and Maximum for the extremes and the Lower and Upper Quartiles\nif they are what you wish.\n\nIf you prefer the quintiles (say 20% and 80% points), use the ***More***\ntab, in Fig. 19.2g, to provide further summaries, Fig. 19.2k, where the\n0.2 gives the 20% point. Currently only a single value is allowed, so\nuse the dialogue a second time to add the 80% point.\n\nSection 4.5 in (World Meteorological Organization (WMO), 2017) proposes\na definition for the quintile boundaries. R, and hence R-Instat, have 9\nalternative methods for the calculation of quantiles (including\ntherefore quintiles). The default in R is method 7 and this,\nfortunately, coincides with the method proposed in (World Meteorological\nOrganization (WMO), 2017).\n\nFig. 19.2l shows the normals for the mean, as in Fig. 19.2i, as a line\nplot. It is together with the minimum, 20%, 80% and maximums for the\n1981-2010 period. Note that the minimums and maximums are for the\nmonthly data, i.e. the maximum of the monthly totals. For the rainfall\ndata it is also useful to have the daily maximums.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 19.2k*** ***Fig. 19.2l***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image279.png){width=\"2.3519149168853892in\" ![](media/image277.png){width=\"3.1489687226596677in\"\n height=\"2.540067804024497in\"} height=\"3.1894805336832897in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nIt is important to be clear on the differences between the two maximums.\nIn January in Fig. 19.2m shows the largest monthly total was 331mm.\n\n -----------------------------------------------------------------------\n ***Fig. 19.2m***\n -----------------------------------------------------------------------\n ![](media/image260.png){width=\"5.713489720034995in\"\n height=\"3.0282895888013996in\"}\n\n -----------------------------------------------------------------------\n\nAlso, in January, the maximum daily rainfall in the 30 years was 113mm.\n\nThe quartile or quintile boundaries are calculated from the monthly\nsummaries, (i.e. the second stage in the calculations). The mean number\nof days above different thresholds needs the daily data.\n\nIn ***Climatic \\> Prepare \\> Transform***, Fig. 19.2a change the\nthreshold from 0.85mm to 5mm, 10mm, etc and then summarise the resulting\ncolumn(s) as described above.\n\nIn practice, decide on the thresholds at the start, and then produce the\nsummaries together with the 1mm threshold.\n\nThe resulting normals are in Fig. 19.2m for 5mm, 10mm and 25mm.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 19.2n*** ***Fig. 19.2o***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image314.png){width=\"2.9886920384951883in\" ![](media/image304.png){width=\"2.9118350831146107in\"\n height=\"2.7532655293088366in\"} height=\"2.8491032370953633in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nFig. 19.2n presents the normals of the number of rain days at\nDodoma[^61]. It shows that there was an average of 10 rain days in\nJanuary. Of these, just under half were between 1mm and 5mm and there\nwere about 2 days per month, on average, with more than 25mm.\n\nSo far, we have considered monthly normals for the 1981-2010 rainfall\ndata. The third stage is to produce annual normals. The (World\nMeteorological Organization (WMO), 2017) recommend producing them from\nthe monthly normals, i.e. from the data in Fig. 19.2m, rather than from\nthe monthly data, e.g. Fig 19.2e. If there are no missing values the\nresults are essentially the same.\n\nFrom the monthly normals in Fig. 19.2m use ***Prepare \\> Column: Reshape\n\\> Column Summaries*** again, Fig. 19.2o, with the five variables\n***meanrain, rainday, rainday5, rainday10*** and ***rainday25***. In\nFig. 19.2o press the ***Summaries*** sub-dialogue and just get the\n***Sum***. Also, in Fig. 19.2o, the results could be stored in another\ndata frame if the calculations were for multiple stations. We choose\nhere to give the results in the ***output window*** instead, Fig. 19.2p.\n\nNow return to the dialogue in Fig. 19.2o. Use the variable ***maxrain***\ninstead and change the summary to just produce the ***maximum***.\n\nThe annual results, in Fig. 19.2p show the mean annual rainfall was\n595mm from 43 rain days, of which, on average 7 days has 25mm or more.\nSo, the mean rain per rain day was on average 14mm and about one rain\nday in six had 25mm or more. The largest ever daily rainfall was 113mm.\n\n+--------------------------------------+-------------------------------+\n| ***Fig. 19.2p*** | ***Fig. 19.2q*** |\n| | |\n| | ***Prepare \\> Column: Reshape |\n| | \\> Column Summaries (after |\n| | making year a factor)*** |\n+======================================+===============================+\n| ![](media/image | ![](media/image293.png |\n| 297.png){width=\"3.388011811023622in\" | ){width=\"2.658290682414698in\" |\n| height=\"1.6162992125984252in\"} | height=\"2.639235564304462in\"} |\n+--------------------------------------+-------------------------------+\n\nThe (World Meteorological Organization (WMO), 2017) recommendation of\ncalculating the annual normals from the monthly values does not work for\nthe quintiles. In the calculations above we have used the nice property\nthat \"the sum of the means is the same as the mean of the sums\". So, in\nthe figures above, totalling the monthly values in Fig. 19.2e to give\nthe 30 annual values and then taking the mean over the years, still\ngives the value of 595mm that we found doing it \"the other way round\".\n\nOne limitation with this recommendation is that it is not possible to\ncalculate the annual normal quintiles, i.e. the variables minrain, 20%\n(q20) , q80 and maxrain, see Fig. 19.2m, from their monthly\ncounterparts. The same applies to the quartiles, see Table 19.1b above,\nfrom (Arguez, et al., 2012) where the annual quartiles have been\nomitted.\n\nThese quintiles, including the annual extremes, are useful. As there are\nno missing values in the data, they are calculated from the individual\nmonthly values, shown in Fig. 19.2e.\n\nWith the monthly data frame, Fig. 19.2e, right-click in the year name\nand make the year into a factor column. Then use ***Prepare \\> Column:\nReshape \\> Column Summaries*** again as shown in Fig. 19.2q, for the\nsumrain variable.\n\nIn the summaries sub-dialogue just get the ***Sum***. The resulting data\nframe is shown in Fig. 19.2r.\n\nUse the ***Prepare \\> Column: Reshape \\> Column Summaries*** in this new\ndata frame. With the ***Summaries*** sub-dialogue give the ***Mean,\nMinimum,*** ***Maximum*** and the ***0.2 percentile*** (on the More\ntab). Use the same dialogue again, and change 0.2 to 0.8 to give the 80%\npoint.\n\nThe results are in Fig. 19.2s. The first value simply confirms that the\nmean is the same, whichever way it is calculated. The lowest year had a\ntotal of 330mm and the highest was 864mm. The 20% point for the annual\nrainfall total was 487mm and the 80% point was 717mm.\n\n+---------------------------+------------------------------------------+\n| ***Fig. 19.2r*** | ***Fig. 19.2s Annual results*** |\n| | |\n| | ***From Prepare \\> Column: Reshape \\> |\n| | Column Summaries*** |\n+===========================+==========================================+\n| ![ | ![](media/im |\n| ](media/image307.png){wid | age303.png){width=\"3.7290562117235346in\" |\n| th=\"2.3395986439195102in\" | height=\"1.6612860892388452in\"} |\n| heig | |\n| ht=\"2.445317147856518in\"} | |\n+---------------------------+------------------------------------------+\n\n## Missing values \n\nMake a copy of the rainfall column, to illustrate how to cope with\nmissing values.\n\n***Right-click*** in the ***rain variable***, Fig. 19.3a and choose\n***Duplicate Column***. Call the resulting variable ***rainm***, Fig.\n19.3b.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 19.3a*** ***Fig. 19.3b***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image291.png){width=\"3.0459667541557307in\" ![](media/image296.png){width=\"2.8682020997375326in\"\n height=\"3.0348293963254593in\"} height=\"2.8682020997375326in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nIn the resulting column, double-click on 7^th^, 8^th^ and 9^th^ January\nand make the values into NA. Scroll down and make 1^st^ to 5^th^\nFebruary 1981 into NA.\n\nThen use Climatic \\> Prepare \\> Transform, Fig. 19.3c, to make a column\ncalled raindaym. The resulting data are shown in Fig. 19.3d.\n\n ----------------------------------------------------------------------------------------------------------\n ***Fig. 19.3c*** ***Fig. 19.3d***\n ----------------------------------------------------- ----------------------------------------------------\n ![](media/image310.png){width=\"2.964792213473316in\" ![](media/image289.png){width=\"2.98044728783902in\"\n height=\"4.0111898512685915in\"} height=\"2.9964720034995627in\"}\n\n ----------------------------------------------------------------------------------------------------------\n\nThe guidelines in (World Meteorological Organization (WMO), 2017) depend\non what type of parameter you are calculating, i.e. sum, mean, count or\nextreme.\n\n+--------------------------------+-------------------------------------+\n| ***Fig. 19.3e*** | ***Fig. 19.3f*** |\n| | |\n| | ***[Redo when new option |\n| | available]{.mark}*** |\n+================================+=====================================+\n| ![](media/image593.pn | ![](media/image58 |\n| g){width=\"2.739374453193351in\" | 2.png){width=\"3.2279877515310584in\" |\n| height=\"3.505337926509186in\"} | height=\"2.816849300087489in\"} |\n+--------------------------------+-------------------------------------+\n\nIt is strict for a sum parameter, so here for the total monthly\nrainfall. If there are ***any*** missing values, it proposes the monthly\nsum be set to missing.\n\nThis is also one of the default settings in R, and hence in R-Instat.\nSo, repeat the ***Climatic \\> Prepare \\> Climatic Summaries*** dialogue,\nfrom Fig. 19.2b, also shown in Fig. 19.3e, for the new ***rainm***\nvariable. Just get the ***sum***.\n\nThe maximum daily rainfall is an extreme. When there are missing values\nin the month, the extreme is found for those that remain present. So,\nreturn to the ***Prepare \\> Column: Reshape \\> Column Summaries***\ndialogue, tick the ***Omit Missing Values*** checkbox in the dialogue\nshown in Fig. 19.3e. Click the ***Summaries button*** and change the\nsummary to give just the ***Maximum***.\n\nWhen the parameter is a count, like the number of rain days, (or a\nmean), there is an intermediate recommendation, shown in Fig. 19.3f. The\nmonthly summary is set to missing if there are 11 or more missing days\nin the month, or if 5, or more, consecutive days are missing[^62].\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 19.3g*** ***Fig. 19.3h***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image581.png){width=\"2.6387160979877518in\" ![](media/image577.png){width=\"3.3559295713035873in\"\n height=\"2.633252405949256in\"} height=\"2.6931856955380575in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nReturn to the ***Prepare \\> Column: Reshape \\> Column Summaries***\ndialogue, Fig. 19.3e, yet again and use the ***raindaym*** variable.\nClick on the Summaries and choose ***N Non Missing*** and ***Sum***. On\nthe main dialogue also tick the Add Date Column[^63] checkbox.\n\nThe results are shown in Fig. 19.3h. With the missing values, the first\n2 months in 1981 are set to missing for the rainfall total and neither\nmonth is missing for the maximum. For the number of rain days, the first\nmonth is summarised, because just 3 days were missing. The second has\nbeen set to NA, because 5 consecutive days were missing.\n\nWith missing values (World Meteorological Organization (WMO), 2017)\npropose one further adjustment for the count-type normals, that are here\nrepresented by the number of rain days. The first row of data in Fig.\n19.3h shows there were 4 rain days in the 28 non-missing days in January\n1981. There are 31 days in January and hence the value is multiplied by\n31/28, which gives an estimate of 4.4 rain days in the full month.\n\nTo handle this adjustment, use ***Climatic \\> Date \\> Use Date*** as\nshown in Fig. 19.3i. Just choose the check-box for ***Days in Month***.\nThe resulting column is also shown in Fig. 19.3h. Now use ***Prepare \\>\nColumn: Calculate \\> Calculations*** and complete it as shown in Fig.\n19.3j. The resulting variable is also shown in Fig. 19.3h.\n\n+--------------------------------+-------------------------------------+\n| ***Fig. 19.3i Number of days | ***Fig. 19.3j*** |\n| in each month*** | |\n| | |\n| ***Climatic \\> Date \\> Use | |\n| Date*** | |\n+================================+=====================================+\n| ![](media/image580.pn | ![](media/image57 |\n| g){width=\"2.790554461942257in\" | 8.png){width=\"3.1834765966754155in\" |\n| height=\"2.93128937007874in\"} | height=\"2.9771905074365703in\"} |\n+--------------------------------+-------------------------------------+\n\nThe second stage in the calculations is the summary of the normal for\neach month, as shown in Section 19.2. The recommendation is that the\nmonthly normals should only be calculated where there are at least 80%,\ni.e. 24 of the 30 years that are not missing. In the example here, there\nis missing in only a single year. Hence the second and third stages can\nproceed as described in Section 19.2.\n\nThis same rule of needing 80% of the years also applies to the\ncalculations of the monthly quintiles. The annual quintiles, unlike the\nother normal, can not be calculated from the monthly normal. Hence\nannual quintiles should not be calculated if there are missing months in\nthe data.\n\n## Temperature normals \n\nIn (World Meteorological Organization (WMO), 2017) the monthly (and\nannual) mean values of the (daily) Tmax, Tmin and Tmean are in the list\nof Principal normals, [[Table 19.1a]{.underline}](#bookmark=id.4anzqyu),\nwhile the monthly extremes and the count of the number of days that Tmax\nexceeds 25˚C, 30˚C, 35˚C and 40˚C are listed as secondary. The only\nequivalent threshold for Tmin is the count less than 0˚C, which is\nrarely useful in Africa. In (Arguez, et al., 2012) the count less than\n10˚C is used, see [[Table 19.1b]{.underline}](#bookmark=id.2pta16n) and\nthat may be more relevant.\n\nThere are missing values in the temperature record. The inventory in\nFig. 19.1a indicated that there are not many missing values, but a more\naccurate check may be useful. One way again uses ***Climatic \\> Check\nData \\> Inventory***, as shown in Fig. 19.4a, but with a different\nlayout of the data. The result is in Fig. 19.4b.\n\n+---------------------------+------------------------------------------+\n| ***Fig. 19.4a Detailed | ***Fig. 19.4b Results for Tmax and Tmin |\n| inventory*** | 1981-2010*** |\n| | |\n| ***Climatic \\> Check Data | |\n| \\> Inventory*** | |\n+===========================+==========================================+\n| ! | ![](media/im |\n| [](media/image576.png){wi | age579.png){width=\"3.6292169728783903in\" |\n| dth=\"2.362328302712161in\" | height=\"3.4070188101487315in\"} |\n| heig | |\n| ht=\"2.666806649168854in\"} | |\n+---------------------------+------------------------------------------+\n\nThis confirms that there are only a few missing values. A more precise\nresult would be through a table. This is not currently an automatic\noption in R-Instat. However, it can easily be given as was shown in\nChapter 8, giving the results in Fig. 19.4c. They show the thin red\nlines in Fig. 19.4b refer to isolated single missing days. There are\njust 2 years with at least a missing month for Tmax and one year for\nTmin. The analysis can continue.\n\n -----------------------------------------------------------------------\n ***Fig. 19.4c Count of missing values in Tmax, Dodoma 1981-2010***\n -----------------------------------------------------------------------\n ![](media/image569.png){width=\"6.268055555555556in\" height=\"4.25625in\"}\n\n -----------------------------------------------------------------------\n\nTmin is used for illustration. The main dialogue is ***Climatic \\>\nPrepare \\> Climatic Summaries***, Fig. 19.4d.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 19.4d*** ***Fig. 19.4e***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image588.png){width=\"2.9493580489938758in\" ![](media/image596.png){width=\"2.993937007874016in\"\n height=\"3.6728904199475068in\"} height=\"3.0913003062117235in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 19.4f*** ***Fig. 19.4g***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image587.png){width=\"2.798834208223972in\" ![](media/image613.png){width=\"3.347797462817148in\"\n height=\"1.2322878390201224in\"} height=\"2.8662959317585304in\"}\n\n ![](media/image598.png){width=\"2.7431364829396325in\" \n height=\"1.68996719160105in\"} \n ------------------------------------------------------------------------------------------------------------\n\nThe results are shown in Fig. 19.4g. For example, in July 1984 the\nminimum of Tmin was 12.3˚C, the mean was 14.0˚C and the maximum was 15.8\n˚C. These were from 30 days, because one day was missing. 25 out of the\n30 days were less than 15 ˚C. This count is adjusted as described in\nFig. 19.3i, i.e. use Climatic \\> Dates \\> Use Date to add a variable\ngiving the number of days in each month and then adjust the count of\ndays less than 15 ˚C by:\n\nCountlt15/count_non_missing \\* days_in month.\n\nThis gives the last variable shown in Fig. 19.4g.\n\nThe second stage is to average over the years. This uses ***Prepare \\>\nColumn: Reshape \\> Column Summaries*** as for the rainfall normals, Fig.\n19.4h.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 19.4h*** ***Fig. 19.4i***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image601.png){width=\"2.648307086614173in\" ![](media/image594.png){width=\"3.4425153105861765in\"\n height=\"2.638747812773403in\"} height=\"2.5276388888888888in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 19.4j*** ***Fig. 19.4k***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image586.png){width=\"3.2818733595800524in\" ![](media/image590.png){width=\"2.493397856517935in\"\n height=\"3.1984864391951007in\"} height=\"3.3734208223972004in\"}\n\n ------------------------------------------------------------------------------------------------------------","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_20_Climate_Normals.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_20_Climate_Normals.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_21_Various.qmd.json b/.quarto/idx/Chapter_21_Various.qmd.json new file mode 100644 index 0000000..77f726d --- /dev/null +++ b/.quarto/idx/Chapter_21_Various.qmd.json @@ -0,0 +1 @@ +{"title":"Various","markdown":{"headingText":"Various","containsRefs":false,"markdown":"## Evapotranspiration\n\n## Filling and homogenising data\n\n## Markov chains\n\nWill refer to (Stern, Dennett, & Dale, The Analysis of Daily Rainfall\nMeasurements to Give Agronomically Useful Results 2 - A Modelling\nApproach, 1982)","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_21_Various.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_21_Various.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_22_References.qmd.json b/.quarto/idx/Chapter_22_References.qmd.json new file mode 100644 index 0000000..c038644 --- /dev/null +++ b/.quarto/idx/Chapter_22_References.qmd.json @@ -0,0 +1 @@ +{"title":"References","markdown":{"headingText":"References","containsRefs":false,"markdown":"Agostinelli, C., & Lund, U. (n.d.). *R package \\'circular\\': Circular\nStatistics*, 0.4-93. Retrieved 2017, from\nhttps://r-forge.r-project.org/projects/circular/\n\nBeguería, S., & Vicente-Serrano, S. M. (2017). *SPEI: Calculation of the\nStandardised Precipitation-Evapotranspiration Index. R package version\n1.7.* Retrieved from https://CRAN.R-project.org/package=SPEI\n\nCooper, P. M., Dimes, J., Rao, K. P., Shapiro, B., Shiferaw, B., &\nSwomlow, S. (2008). Coping better with current climatic variability in\nthe rain-fed farming systems of sub-Saharan Africa: An essential first\nstep in adapting to future climate change? *Agriculture, Ecosystems and\nEnvironment*, 24-35.\n\nGADM. (2019, 6 12). *GADM*. Retrieved from https://gadm.org/data.html\n\nHansen, J. W., Mason, S. J., Sun, L., & Tall, A. (2011). Review of\nSeasonal Climate Forecasting. *Experimental Agriculture*, 201-240.\n\nKeyantash, J., & (Eds), N. C. (2018, August 7). *The Climate Data Guide:\nStandardized Precipitation Index (SPI)*. Retrieved June 10, 2019, from\nNCAR/UCAR Climate Data Guide:\nhttps://climatedataguide.ucar.edu/climate-data/standardized-precipitation-index-spi\n\nMardia, K. V. (1972). *Statistics of Directional Data.* London: Academic\nPress.\n\nMupamgwa, W., Walker, S., & Twomlow, S. (2011). Start, end and dry\nspells of the growing season in semi-arid southern Zimbabwe. *Journal of\nArid Environments*, 1097-1104.\n\nOtieno Sango, B., & Anderson-Cook, C. M. (2003). A More Efficient Way Of\nObtaining A Unique Median Estimate For Circular Data. *Journal of Modern\nApplied Statistical Methods*.\n\nPalmer, W. C. (1965). *Meteorological Drought.* US Weather Bureau.\n\nPewsey, A. N., & D., R. G. (2013). *Circular Statistics in R.* Oxford:\nOxford University Press.\n\nR Core Team. (2018). *R: A language and environment for statistical\ncomputing.* Retrieved from https://www.R-project.org/.\n\nSiebert, A., Dinku, T., Vuguziga, F., Twahirwa, A., Kagabo, D. M.,\ndelCorral, J., & Robertson, A. W. (2019). Evaluation of ENACTS‐Rwanda: A\nnew multi‐decade, high‐resolution rainfall and temperature data\nset---Climatology. *International Journal of Climatology*, 3104-3120.\n\nStern, R. D., Dennett, M. D., & Dale, I. C. (1982). The Analysis of\nDaily Rainfall Measurements to Give Agronomically Useful Results 1 -\nDirect Methods. *Experimental Agriculture*, 223-236.\n\nStern, R. D., Dennett, M. D., & Dale, I. C. (1982). The Analysis of\nDaily Rainfall Measurements to Give Agronomically Useful Results 2 - A\nModelling Approach. *Experimental Agriculture*, 237-253.\n\nStern, R. D., Rijks, D., Dale, I. C., & Knock, J. (2006). *Instat\nClimatic Guide.*\n\nSvoboda, M., Hayes, M., & Wood, D. A. (2012). *Standardized\nPrecipitation Index User Guide.* Geneva: WMO. Retrieved from\nhttp://library.wmo.int/pmb_ged/wmo_1090_en.pdf\n\nVicente-Serrano, S. M., Beguería, S., & López-Moreno, J. I. (2010). A\nMultiscalar Drought Index Sensitive to Global Warming: The Standardized\nPrecipitation Evapotranspiration Index. *Journal of Climate*, 1696-1718.\nRetrieved from https://doi.org/10.1175/2009JCLI2909.1\n\nWells, N., Goddard, S., & Hayes, M. J. (2004). . A Self-Calibrating\nPalmer Drought Severity Index. *Journal of Climate*, 2335-2351.\n\nWikipedia contributors. (2019). *R (programming language)*. Retrieved\nfrom Wikipedia, The Free Encyclopedia:\nhttps://en.wikipedia.org/w/index.php?title=R\\_(programming_language)&oldid=887219468\n\nWikipedia contributors. (n.d.). *Mean of circular quantities.* Retrieved\nMay 14 , 2019, from\nhttps://en.wikipedia.org/w/index.php?title=Mean_of_circular_quantities&oldid=885307281\n\nWorld Meteorological Organization (WMO). (2017). *WMO guidelines on the\ncalculation of climate normals.* WMO. Retrieved from\nhttps://library.wmo.int/doc_num.php?explnum_id=4166\n\nWorld Meteorological Organization, (., Zwiers, F. W., & Zhang, X.\n(2009). *Guidelines on Analysis of extremes in a changing climate in\nsupport of informed decisions for adaptation.* WMO. Retrieved from\nhttp://library.wmo.int/pmb_ged/wmo-td_1500_en.pdf\n\nZhang, X., Hegerl, G., Zwiers, F. W., & Kenyon, J. (2005). Avoiding\nInhomogeneity in Percentile-Based Indices of Temperature Extremes.\n*Journal of Climate*, 1641-1651.\n\nZhong, R., Chen, X., Wang, Z., & Chengguang, L. (2018). scPDSI:\nCalculation of the Conventional and Self-Calibrating Palmer Drought\nSeverity Index. Retrieved from https://CRAN.R-project.org/package=scPDSI","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_22_References.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_22_References.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_23_Index.qmd.json b/.quarto/idx/Chapter_23_Index.qmd.json new file mode 100644 index 0000000..74afcf6 --- /dev/null +++ b/.quarto/idx/Chapter_23_Index.qmd.json @@ -0,0 +1 @@ +{"title":"Index","markdown":{"headingText":"Index","containsRefs":false,"markdown":"Zimbabwe, 123\n\n[^1]: This threshold is like the value of 1mm sometimes suggested by\n WMO. The smallest value usually recorded is 0.1mm, but we find\n stations are not equally conscientious in recording very small\n amounts. So, if 0.1mm is used, then it is harder to compare the\n pattern of rainfall at different stations. Records also differ in\n their attitudes on rounding. So, some records have far fewer values\n of 0.9 or 1.1mm than others. There is also an old issue that some\n stations used to measure in inches and the smallest value was then\n 0.01 inches. This translates to 0.3mm and higher values are 0.5, 0.8\n and 1mm. So 0.9mm is not possible in data that used to be in inches.\n Hence the threshold of 0.85mm is a practical way of implementing\n \"1mm and above\".\n\n[^2]: The body of the boxplot is not blue by default. For this, choose\n ***Boxplot Options*** in Fig. 2.2e, then choose the ***Geom\n Parameters*** tab and change the ***Fill colour*** to your choice.\n\n[^3]: This is partly because the \"Omit Missing Values\" checkbox in Fig.\n 2.3c was left unchecked. Coping with missing values in the data,\n when summaries are calculated, is a complex issue. It is discussed\n in detail in Chapter 6.\n\n[^4]: The graph in Fig. 2.4k also starts from 0. This used the Yaxis tab\n in Fig. 2.3j.\n\n[^5]: R is case sensitive. So Date and date are different variable\n names. Hence make sure you use Date as the new name.\n\n[^6]: If the names of your date columns are not the same, then use the\n Options sub-dialogue to tell R-Instat which columns to match.\n\n[^7]: The missing values are because a full join was used in the merging\n process. The satellite data are up to 2015, while the observed data\n are to 2013. One way of avoiding the problem is to use a Left Join\n instead.\n\n[^8]: Use Tools \\> Options \\> Data View to change these values. However,\n this may have a speed effect on R-Instat.\n\n[^9]: This is the Dodoma data used in Chapter 2. Use ***File \\> Open\n from Library \\> Instat \\> Climatic \\> Original Climate Guide Data***\n and choose ***Dodoma*** to open these data.\n\n[^10]: An R data book is special to R-Instat. Hence these RDS files\n cannot be opened directly in R, for example in RStudio. We describe,\n in Section 3.3 how you can transfer your R-Instat work to RStudio.\n\n[^11]: Changing the number of significant figures does not change any of\n the data in R at all. It just changes how it is presented in the\n grid. If you do want to change the number, then use the R-Instat\n Calculator with Prepare \\> Column: Calculate \\> Calculations, where\n the maths keyboard has round and various other functions that can be\n applied.\n\n[^12]: This can be changed if not appropriate.\n\n[^13]: Sometimes the graph in the R viewer does not seem to appear, or\n it appears and then disappears again. This is because it is on a\n totally separate window. In this case look in the R-Instat icon in\n the taskbar at the bottom of the screen.\n\n[^14]: The extra feature in Fig. 3.4 is the date of each outlier, which\n helps in the quality control. This is provided by the label argument\n in the ***Describe \\> Specific \\> Scatter Plot*** dialogue in Fig.\n 3.4h.\n\n[^15]: Though a \"list\" is something different in R.\n\n[^16]: We could alternatively have used Climatic \\> Tidy and Examine \\>\n Replace Values in R-Instat and then changed the columns to be\n numeric. But it is simpler to do a Find and Replace in Excel.\n\n[^17]: Use Climatic \\> Tidy and Examine \\> Replace Values.\n\n[^18]: This issue was with Climsoft Version 3.2. The problem has been\n resolved in later versions.\n\n[^19]: They use ***Describe \\> Specific \\> Line Plot*** dialogue, with\n the ***Date*** column as the x-variable.\n\n[^20]: To filter, one way is to return to the data, and right-click to\n set up the filter. Alternatively press the Data Options button in\n any dialogue, here Fig. 5.2h. Then filter to select just the first\n station.\n\n[^21]: The Climatic \\> dates \\> Use Date dialogue is used to generate\n the quarters.\n\n[^22]: In Section 3.3 we show how a skew boxplot may be constructed as a\n preferred graph for rainfall data.\n\n[^23]: From the main ***Climatic \\> Check Data \\> Boxplot*** dialogue,\n with ***Tmin*** as the variable, use ***Plot Options \\> Layer \\>\n Add*** to give Fig. 5.3j. Include ***Tmax*** as the y, Fig. 5.3j,\n then use the ***Layer Parameters*** tab, Fig. 5.3j, and set the\n ***Outlier colour*** to ***red***. Then ***Return*** to the main\n dialogue and ***Ok***.\n\n[^24]: This feature is common and is largely due to the possibility of\n lower values of Tmax on some rainy days. One way to check this\n feature is the filter the data and just consider the Tmax data on\n dry days.\n\n[^25]: An outlier is when a point is further from the respective\n quartile than 1.5 times the interquartile range.\n\n[^26]: This threshold is like the value of 1mm sometimes suggested by\n WMO. The smallest value usually recorded is 0.1mm, but we find that\n stations are not equally conscientious in recording very small\n amounts. So, if 0.1mm is used, then it is harder to compare the\n pattern of rainfall at different stations. Records also differ in\n their attitudes on rounding. So some records have far fewer values\n of 0.9 or 1.1mm than others. There is also an old issue that some\n stations used to measure in inches and the smallest value was then\n 0.01 inches. This translates to 0.3mm and higher values are 0.5, 0.8\n and 1mm. So, 0.9mm is not possible in data that used to be in\n inches. Hence the threshold of 0.85mm is a practical way of\n implementing \"1mm and above\".\n\n[^27]: And, of course, if it is not possible with the ordinary R-Instat\n menus it may still be possible using R directly.\n\n[^28]: To find the equation and level of significance of this result you\n could then use the ***Model \\> Two Variable*** dialogue\n\n[^29]: To add the colour, we also used the ***Boxplot Options*** in Fig.\n 6.4d and specified the ***Fill Colour*** as green.\n\n[^30]: We also used the Data Options and filtered on the Months to use\n just March to October.\n\n[^31]: It uses the 2 factors month and station for the facets.\n\n[^32]: ***Filter to 1962 at Saltpond*** and use ***Climatic \\> Check\n Data \\> Display Daily***.\n\n[^33]: In the current version of R-Instat the Plot Options are disabled\n for multiple variables. Hence set the facets before setting the\n variables to Multiple. Set them back to Single Variable if you wish\n to edit the Plot Options. This limitation will be removed in a\n future version.\n\n[^34]: Monthly means are calculated using ***Climatic \\> Prepare \\>\n Climatic Summaries*** as shown in Fig. 6.6k. The data are then\n filtered to just 1971 to 1980 for Saltpond. Then the results could\n be shown in the output window, but we chose to unstack the data, by\n Month to give the display shown in Fig. 6.6h.\n\n[^35]: Use ***Prepare \\> Column: Calculate \\> Calculation*** with the\n formula ***round(max_temperature\\*9/5+32)***.\n\n[^36]: An alternative to renaming the variables is to change the names\n of the new variables in the ***Climatic \\> Prepare \\> Start of the\n Rains*** dialogue, Fig. 7.3a.\n\n[^37]: The file called Moorings 7.4.rds from ***File \\> Open from\n Library,*** contains the data including the variables from Section\n 7.3.\n\n[^38]: To plot as shown in Fig. 7.6h, use ***Climatic \\> Tidy and\n Examine \\> Stack*** with the 3 totals, carrying the ***s_year***\n variable. Then, on the ***Climatic \\> PICSA \\> Rainfall Graph***,\n choose Plot Options and Facets and make the layout vertical.\n\n[^39]: Include the checkbox to display the zero values as \"---\".\n\n[^40]: Plotting exceedance graphs is one way to examine these data. Our\n use\n\n[^41]: The default gives the x-axis as numeric. The presentation shown,\n as dates within the year, will soon be easy, but currently it needs\n a little coding as described in Chapter 8.\n\n[^42]: They are higher because they include years where a dry spell may\n have started before the given dates and continued into the flowering\n period. The earlier calculation (following planting) assumed the\n previous day had rain -- as it was a potential planting date.)\n\n[^43]: If we move the dekad column \"down one row\", , that's the\n ***lead*** function (lag is the opposite) then these are the rows\n when the two columns are different, (i.e. !=). So, with the\n ***dekad_abbr*** variable the function: ***dekad_abbr !=\n lead(dekad_abbr)*** is used. We need to specify the R package for\n the ***lead*** function, so give the command as ***dekad_abbr !=\n dplyr::lead(dekad_abbr)***\n\n[^44]: In Fig. 7.8ad we have also filtered to omit the very dry months\n of the year.\n\n[^45]: This adds two ***layers*** to the boxplot with the data from the\n current year. One layer is for the line and the other for the\n points. This is explained n=in more detail in Chapter 8.\n\n[^46]: This might have been corrected by the time you read this section.\n\n[^47]: The resulting column is slightly incorrect, because of the\n multiple stations. The last 2 rows (hours) at each station should be\n missing, but they continue with the values from the next station.\n This will have a negligible effect on subsequent calculations. If\n you wish to be strictly correct, then filter for these last 2 days\n and set the values as missing.\n\n[^48]: The calculation of the baseline values is more complex in two\n ways. First is that each day uses the data from the 5 surrounding\n days, e.g. for 10^th^ January, the data are used from 8^th^ to\n 12^th^ January. There are therefore 150 values for each day, from\n which to calculate the 10% and 90% points. Second is that a\n bootstrapping methods is used, following (Zhang, Hegerl, Zwiers, &\n Kenyon, 2005) where each year in turn is omitted and replaced by one\n of the other 29 years.\n\n[^49]: If you have multiple data frames open, and you just want to close\n this one, then use ***Right-Click*** on the data frame tab (at the\n bottom of the data) and choose ***Delete***.\n\n[^50]: With the default of more than 9 days, there is no planting date\n in 2 of the years. This is possible, and the issue us discussed in\n Section 7.4. Here we avoid the discussion!\n\n[^51]: A caption can be split over multiple lines if \\\\n is used as a\n line feed.\n\n[^52]: You may wonder why they are not always the same. They are within\n a day of each other and we consider that is \"good enough\" for the\n uses of the results. They sometimes differ by a day for one (or\n both) of 2 reasons. First the length =End -- Start. So, if the Start\n was 14 Nov, and the End was 16^th^, then Length = 2 days. But 3 days\n are used in the calculation of the sum, from the start day to the\n end day. Second -- and the other way -- is that February 29 is an\n extra day in non-leap years for calculating the length, but not for\n the number of days in calculating the sum. So, in Fig. 12.4s the\n results are the same in non-leap years, and different, by one day,\n in leap years.\n\n[^53]: From the dates, use ***Prepare \\> Column: Calculate\n \\>Calculation*** to find the month of the maximum. ***Label*** the\n month and ***reorder***, so December is first. Then, in the\n ***Climatic \\> PICSA \\> Rainfall Graph***, use ***Plot Options***\n and edit the points layer to include the month in the graph.\n\n[^54]: Changed geom_line, to geom_col, colour to black, and size=0.8 to\n width=0.05 in PICSA line chart.\n\n[^55]: You could simply count the number of years in Fig. 12.4i when\n planting is on or before each day number. Or count from a graphical\n display, such as Fig. 12.4j. This is simpler from a cumulative\n display of the starting dates, using the ***Climatic \\> PICSA \\>\n Cumulative/Exceedance Graph***. Numerically you could give a logical\n expression using the calculator, ***Prepare \\> Column: Calculate \\>\n Calculation***, or using the proportion summary in ***Prepare \\>\n Column Calculate \\> Column Summaries***.\n\n[^56]: The order of the factor levels is changed to go from South to\n North (i.e. in latitude order). A Date column has been added (with\n Climatic \\> Dates \\> Make Date, and just use the Year column. Then\n the data frame is defined as climatic, as described in Chapter 8.\n\n[^57]: It isn't difficult. First use ***Climatic \\> Dates \\> Make\n Date*** for the daily data, (possibly change the year and doy to be\n numeric) then, ***Use Date*** to get the monthly variable. Then\n repeat the plot with the ***month as a facet***.\n\n[^58]: The scale option was used to make the width proportional to the\n count of observations at each direction.\n\n[^59]: This is Precip ≥ 0.01 inches as the US uses inches rather than\n mm. (1 inch = 25.4mm).\n\n[^60]: Here the total rainfall is calculated from ***all*** the rain\n days -- i.e. even those with less than 0.85mm. This slightly higher\n than the totals ignoring those days completely, i.e. setting those\n values to zero. If you wish to set those values to zero, then, with\n the daily data, generate a new variable, say rain0 using ***Prepare\n \\> Column: Calculate \\> Calculation*** with the formula\n ***(rain\\>0.85) \\* rain*** or equivalently ***ifelse(rain\\>0.85,\n rain, 0)***.\n\n[^61]: There were some simple steps to produce the graph in Fig. 19.2n,\n from the data in Fig. 19.2m, as follows. First subtract successive\n columns to give the number of days between 1mm and 5mm, etc. Then\n use Climatic \\> Tidy and Examine \\> Stack on these four variables,\n carrying the Month factor. Then produce the stacked bar chart. It is\n good if the chart is in the \"right order\", both for the bars and the\n legend, and this may involve the Prepare \\> Column: Factor \\>\n Reorder Levels.\n\n[^62]: Some countries continue to use a tighter rule where 5 is the\n maximum number of missing days permitted in a month, or 3\n consecutive days.\n\n[^63]: If the checkbox is not (yet) enabled, then press Ok for the\n existing summary. Use the dialogue again, make date the element and\n choose Minimum. This has given the column called min_date in Fig.\n 19.3h.","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_23_Index.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_23_Index.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_2_More_Practice_with_RInstat.qmd.json b/.quarto/idx/Chapter_2_More_Practice_with_RInstat.qmd.json new file mode 100644 index 0000000..4aed16f --- /dev/null +++ b/.quarto/idx/Chapter_2_More_Practice_with_RInstat.qmd.json @@ -0,0 +1 @@ +{"title":"More Practice with R-Instat","markdown":{"headingText":"More Practice with R-Instat","containsRefs":false,"markdown":"## Introduction\n\nTo use climatic data fully it is important to be able to deliver\nproducts. The two examples in this chapter describe the steps and the\nendpoint in this process. Data are supplied in the right form for the\nanalysis. The objectives are specified, and your task is to prepare the\ntables and graphs for a report and a presentation.\n\nSome familiarity with R-Instat is assumed. There are two initial\ntutorials and following those is enough preparation. If you have already\nused a statistics package before, then the examples below may be\nsufficient for you, even without the tutorials. This chapter is also\ndesigned to provide practice with R-Instat.\n\nThe first problem builds on a study in Southern Zambia. This is the most\ndrought-prone area of the country. Everyone knew that there is \\'climate\nchange\\'! Some farmers were emigrating North, citing climate change as\ntheir reason. However, a local non-governmental organization (NGO)\ncalled the Conservation Farming Unit, questioned this reasoning for the\nrainfall data. They are not convinced that any climate change has\nnecessarily affected the farming practices. They, therefore,\ncommissioned a study that used daily climatic data from several stations\nin Southern Zambia. The results were supplied as a report, and\npresentations of the results were also made to the NGO and to the local\nFAO Officers. The results confirmed evidence of climate change in the\ntemperature data, but not in the rainfall. The key conclusions were\nlater made into short plays that were broadcast on local radio and\nplayed at village meetings.\n\nHere we use data from Moorings, a site in Southern Zambia. The daily\ndata, on rainfall, are from 1922 to 2009. Here, partly for simplicity,\nwe largely use the monthly summaries.\n\nFor the work, we draw an analogy with the preparation of a meal. The\nfirst key requirement is that you have the food, which here is the\nclimatic data. In a real meal, the food may be supplied in a form that\nis ready for cooking, or it may need preparation prior to cooking. Here\nthe data are in pre-packed form, so the analysis can proceed quickly.\n\nYou also need the right tools. In a kitchen, they are the saucepans,\netc, while here they are just the computer, together with the required\nsoftware.\n\nYou need some general cooking skills. These are the basic computing\nskills, plus initial skills of R-Instat, at least from the tutorial.\n\nFinally, your objectives must be clear. This corresponds to having a\nspecific meal in mind so that a recipe can be used. Of course, you may\nhave to adapt slightly as you go along. You might find some oddities in\nthe data, just as cooks must improvise if they suddenly find that one of\nthe ingredients is not available.\n\nIf everything is well organized, the cook can prepare the meal very\nquickly. This is just what is done in the products in this chapter. This\nleaves time to make sure the dishes, for us the results, are presented\nattractively. Then users will enjoy consuming what is presented.\n\nSection 2.2 describes the data for this first task. Trends in the\nrainfall are examined in Section 2.3. A second problem, in Section 2.4,\nexamines whether satellite data on sunshine hours resembles\ncorresponding station data. Daily data from Dodoma, Tanzania, are used.\n\nThe data for each of these case studies are in the R-Instat library. The\npresentation is designed so users can repeat the analyses on their\nlaptops.\n\nGraphs are produced in each of these sections and the general methods\nfor graphics in R-Instat is outlined in Section 2.5. Section 3.5 then\nadds a warning. R-Instat provides an easy-to-use click and point way of\nusing the R programming language. It should help users to solve may\nproblems. But a click-and-point system is not the right tool for all\nproblems. We describe a problem that may require more programming\nskills, at least if you wish to prevent your computer from laughing at\nyou!\n\nThis chapter demonstrates R-Instat as a simple general statistics\npackage and the File, Prepare and Describe menus are used. It\nillustrates that a general statistics package is an appropriate tool for\nmany climatic problems. It is also designed to consolidate your\nexperience in using R-Instat. The special climatic menu is introduced in\nchapter 4.\n\n## The Moorings data\n\nMonthly data are used in this part of the chapter. Daily data are the\nstarting point in most of this guide because many of the objectives\nrequire daily data. But here the emphasis is on objectives for which the\nmonthly data are suitable.\n\nThe data are already in an R-Instat file. Hence, they can be opened from\nthe library in R-Instat library.\n\nFrom the opening screen in R-Instat, select ***File \\> Open From\nLibrary*** as shown in Fig. 2.2a. Choose ***Load From Instat\nCollection***, Then ***Browse*** to the ***Climatic*** directory then to\n***Zambia***. ***Select*** the file called ***Moorings_July.rds*** to\ngive the screen shown in Fig. 2.2b. Press ***Ok***.\n\n+----------------------------------------+-----------------------------+\n| ***Fig. 2.2a File \\> Open from | ***Fig. 2.2b Ready to |\n| Library*** | import Moorings.RDS*** |\n| | |\n| ***(Climatic \\> Zambia \\> | |\n| Moorings.RDS)*** | |\n+========================================+=============================+\n| ![](media/image | ![](media/image1409.png){ |\n| 1404.png){width=\"3.3584514435695536in\" | width=\"2.430002187226597in\" |\n| height=\"3.0461209536307963in\"} | hei |\n| | ght=\"2.7552777777777777in\"} |\n+----------------------------------------+-----------------------------+\n\nThe resulting data are shown in Fig. 2.2c. There are 2 data frames. The\none called Moorings has daily data.\n\n***Move to the second data frame*** as shown in Fig. 2.2c which shows\nthe monthly totals. They are the total rainfall in mm and the total\nnumber of rain days. A rain day was defined as a day with more than\n0.85mm[^1].\n\n+---------------------------------+------------------------------------+\n| ***Fig. 2.2c The Moorings | ***Fig. 2.2d Boxplot dialogue on |\n| monthly data*** | the Describe menu*** |\n| | |\n| | ***Describe \\> Specific \\> |\n| | Boxplot*** |\n+=================================+====================================+\n| ![](media/image1423.pn | ![](media/image141 |\n| g){width=\"1.8441360454943132in\" | 6.png){width=\"3.095645231846019in\" |\n| height=\"3.4743996062992126in\"} | height=\"2.329336176727909in\"} |\n+---------------------------------+------------------------------------+\n\nRainfall in Southern Zambia is from November to April. Hence, we analyze\nthe data by season, rather than by year. There are 88 seasons from 1922\nto 2009 and 1056 monthly values, as indicated in Fig. 2.2c.\n\nThe task is to write a short report that describes the patterns of\nrainfall. One aim is to assess whether there is obvious evidence of\nchange in the pattern of rainfall. This evidence might justify\nrequesting the data from multiple stations, to undertake a more detailed\nstudy. The first step is to explore the data, and then consider how\nappropriate results could be presented. To explore we start with a\nboxplot to show the seasonal pattern of the rainfall totals.\n\nChoose the Boxplot dialogue from the Describe menu, with ***Describe \\>\nSpecific \\> Boxplot***, as shown in Fog. 2.2d. Complete the dialogue as\nshown in Fig. 2.2e. The resulting graph is shown in Fig. 2.2f[^2]. This\nshows the total rainfall was typically 200mm in each of December to\nFebruary. There was always some rain in each of these months, and the\nrecords were over 500mm.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 2.2e Completed boxplot | ***Fig. 2.2f Boxplot of monthly |\n| dialogue*** | rainfall totals*** |\n| | |\n| ***Describe \\> Specific \\> | |\n| Boxplot*** | |\n+===================================+==================================+\n| ![](media/image1413 | ![](media/image1424.p |\n| .png){width=\"3.101418416447944in\" | ng){width=\"2.9661537620297462in\" |\n| height=\"3.5402176290463694in\"} | height=\"3.0952646544181976in\"} |\n+-----------------------------------+----------------------------------+\n\nChange the variable from rain to ***raindays*** in Fig. 2.2e to give the\ncorresponding boxplots for the number of raindays in the month, Fig.\n2.2g. This shows that typically one day in two are rainy in December to\nFebruary. Occasionally most of the days are rainy.\n\nBoxplots are essentially a 5-number summary of the data, (with potential\noutliers also shown). The ***Prepare \\> Column: Reshape \\> Column\nSummaries, Fig. 2.2h,*** dialogue can provide the same summaries\nnumerically.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 2.2g The number of rain days*** ***Fig. 2.2h Summary dialogue on the Prepare menu***\n ------------------------------------------------------- ------------------------------------------------------\n ![](media/image1408.png){width=\"3.2808048993875767in\" ![](media/image1421.png){width=\"2.724430227471566in\"\n height=\"3.43955271216098in\"} height=\"2.6912051618547683in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nSummarise both the monthly totals and the number of raindays, with the\nmonth as the factor, as shown in Fig. 2.2i. Then choose the Summaries\nbutton and complete the sub-dialogue as shown in Fig. 2.2j.\n\n+-------------------------------------+--------------------------------+\n| ***Fig. 2.2i The Summary | ***Fig. 2.2j Summaries |\n| dialogue*** | sub-dialogue*** |\n| | |\n| ***Prepare \\> Column: Reshape \\> | |\n| Column Summaries*** | |\n+=====================================+================================+\n| ![](media/image107 | ![](media/image1065.png |\n| 9.png){width=\"3.2056266404199474in\" | ){width=\"2.7337193788276464in\" |\n| height=\"3.343377077865267in\"} | height=\"3.6745319335083115in\"} |\n+-------------------------------------+--------------------------------+\n\nThe results are in a third data frame. It just has 12 rows as shown in\nFig. 2.2k. The summaries are clearer if they are in order (which we did\nalready for Fig. 2.2k).\n\n***Right-click in the name field*** of this data frame and choose the\noption to ***Reorder columns***, Fig. 2.2l.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 2.2k Resulting summary data*** ***Fig 2.2l Right-click menu to reorder columns***\n ------------------------------------------------------- ------------------------------------------------------\n ![](media/image1078.png){width=\"3.5167333770778653in\" ![](media/image1074.png){width=\"2.419306649168854in\"\n height=\"2.4429199475065615in\"} height=\"2.4641087051618547in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nIn the Reorder dialogue, use the ***arrow keys*** to change the position\nof the columns in the data frame.\n\nWith the summaries in a sensible order, they are now transferred to the\nresults (output) window.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 2.2m Reorder the | ***Fig. 2.2n Simplify column |\n| resulting columns*** | names*** |\n| | |\n| ***Right-Click \\> Reorder | ***Right-click \\> Rename |\n| Column(s)*** | Column*** |\n+===================================+==================================+\n| ![](media/image1080. | ![](media/image1077.p |\n| png){width=\"3.0982819335083116in\" | ng){width=\"3.0263024934383203in\" |\n| height=\"2.21875in\"} | height=\"2.083488626421697in\"} |\n+-----------------------------------+----------------------------------+\n\nBefore this, we renamed some of the columns to give shorter names. This\nagain used the ***right-click*** menu, Fig 2.2l. The rename dialogue is\nshown in Fig. 2.2n.\n\n+-------------------------------+--------------------------------------+\n| ***Fig. 2.2o View Data | ***Fig. 2.2n The Monthly number of |\n| dialogue*** | rain days*** |\n| | |\n| ***Prepare \\> Data Frame \\> | |\n| View Data*** | |\n+===============================+======================================+\n| ![](media/image1091.png) | ![](media/image1 |\n| {width=\"2.7121620734908136in\" | 075.jpg){width=\"3.378299431321085in\" |\n| height=\"2.720417760279965in\"} | height=\"2.301573709536308in\"} |\n+-------------------------------+--------------------------------------+\n\nNow use the ***Prepare \\> Data Frame \\> View Data*** dialogue, Fig.\n2.2o, to transfer the rainfall totals and then the number of rain days\nto the results window. The results for the number of rain days are shown\nin Fig. 2.2p.\n\n## The objectives\n\nSection 2.2 explored the data and examined the seasonal pattern of the\nrainfall at Moorings. It also made use of the three menus, File, Prepare\nand Describe and well as the right-click menu. The main objective,\nhowever, was to see if there is evidence of rainfall change rather than\nto investigate the seasonal pattern.\n\nWe first examine the annual totals and the total number of rain days.\nThese are the totals from July to June, so they cover each season.\n\nSome \"housekeeping\" is a preliminary. The 3^rd^ data-frame is no longer\nneeded. Right-click on the bottom tab a and choose the option to delete,\nFig. 2.3a. The dialogue shown in Fig. 2.3b opens. Just press ok.\n\n -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 2.3a Right-click on the bottom tab*** ***Fig. 2.3b Delete a data frame***\n ----------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------\n ![](media/image1086.png){width=\"2.15288823272091in\" ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTML1e674805.PNG](media/image1081.png){width=\"3.8076443569553806in\"\n height=\"1.6875863954505688in\"} height=\"2.3232436570428696in\"}\n\n -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nUse ***Prepare \\> Column: Reshape \\> Column Summaries*** and complete\nthe dialogue and sub-dialogue as shown in Fig. 2.3c and Fig. 2.3d to\nproduce the seasonal totals.\n\n+------------------------------------+---------------------------------+\n| ***Fig. 2.3c Produce the annual | ***Fig. 2.3d The Summaries |\n| totals*** | sub-dialogue*** |\n| | |\n| ***Prepare \\> Column: Reshape \\> | |\n| Column Summaries*** | |\n+====================================+=================================+\n| ![C:\\\\Users\\\\R | ![](media/image1048.pn |\n| OGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SN | g){width=\"2.8312390638670166in\" |\n| AGHTML1b0bb1d.PNG](media/image1057 | height=\"3.8056135170603675in\"} |\n| .png){width=\"3.1936745406824145in\" | |\n| height=\"3.340392607174103in\"} | |\n+------------------------------------+---------------------------------+\n\nThe results are shown in Fig. 2.3 e after the steps explained below.\nFirst, notice in Fig. 2.3e that there were only 4 months in the first\nseason, and the annual summary was therefore set to missing[^3].\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 2.3e Resulting annual data*** ***Fig. 2.3f Menu for a text substring***\n ------------------------------------------------------- ------------------------------------------------------\n ![](media/image1092.png){width=\"2.9407163167104113in\" ![](media/image1053.png){width=\"3.027933070866142in\"\n height=\"3.521816491688539in\"} height=\"2.8126443569553805in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nA numeric column for the year (season) is needed for the time series\ngraphs. Hence, as shown below, we produce the second column, called\ns_yr, also shown in Fig. 2.3e.\n\nUse ***Prepare \\> Column: Text \\> Transform***, Fig. 2.3f. Complete the\nresulting dialogue, as shown in Fig. 2.3g, to give just the starting\nyear of the season. The resulting variable is shown in Fig. 2.3e.\n\n+----------------------------------------+-----------------------------+\n| ***Fig. 2.3g The Substring Option*** | ***Fig. 2.3h Convert Column |\n| | to Numeric*** |\n| ***Prepare \\> Column:Text \\> | |\n| Transform*** | |\n+========================================+=============================+\n| ![](media/imag | ![](media/image1076.png){ |\n| e1056.png){width=\"3.459864391951006in\" | width=\"2.003675634295713in\" |\n| height=\"3.0012171916010497in\"} | hei |\n| | ght=\"2.8906255468066493in\"} |\n+----------------------------------------+-----------------------------+\n\nUse the ***right-click*** menu, Fig. 2.3h to convert the resulting s_yr\ncolumn to numeric.\n\nAfter a little further housekeeping from the right-click menu, to\n***rename***, ***re-orde***r and ***delete*** columns, the annual data\nare as shown in Fig. 2.3e above.\n\nNow for the time-series graphs. They can be produced using the\n***Describe \\> Specific \\> Line Plot*** dialogue, but this type of graph\nis just what is needed for the PICSA-style rainfall graphs, so we use\nthe special climatic menu for the first time.\n\nUse ***Climatic \\> PICSA \\> Rainfall Graph***. Complete as shown in Fig.\n2.3i. Press the **PICSA Options** button and complete the Lines ab as\nshown in Fig. 2.3j to add (and label) a horizontal line for the mean.\n\n+--------------------------------+-------------------------------------+\n| ***Fig. 2.3i PICSA Rainfall | ***Fig. 2.3j Add a line showing the |\n| graph dialogue*** | mean*** |\n| | |\n| ***Climatic \\> PICSA \\> | |\n| Rainfall Graph*** | |\n+================================+=====================================+\n| ![](media/image1059.png | ![](media/image10 |\n| ){width=\"2.7957239720034996in\" | 55.png){width=\"3.263653762029746in\" |\n| height=\"2.519543963254593in\"} | height=\"2.31790135608049in\"} |\n+--------------------------------+-------------------------------------+\n\nThe resulting graph is shown in Fig 2.3k[^4]. ***Return to the\ndialogue*** and put ***raindays*** as the y-variable to give the results\nin Fig. 2.3l.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 2.3k Seasonal rainfall totals*** ***Fig. 2.3l Number of rain days***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image1058.png){width=\"3.017334864391951in\" ![](media/image1064.png){width=\"2.871992563429571in\"\n height=\"1.5016458880139982in\"} height=\"1.4293143044619423in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nThese graphs indicate large inter-annual variability, but they don't\nseem to show a trend. That is important because, if you can attribute\nyour farming problems to climate change, then there may be nothing you\ncan do. But coping with the variability is what farmers have always had\nto do.\n\nWith results such as shown in Fig. 2.3k and 2.3l you can start comparing\nrisks for different options in your farming and in other enterprises.\nThat sort of idea is discussed in PICSA workshops.\n\nSome may find the graph shown above to be convincing evidence that, with\nrainfall, the pressing problem is variability, rather than change. We\nstress that there IS climate change, and similar graphs with temperature\ndata show a trend. If the temperatures have changed, then the \"system\"\nhas changed, and it follows that other elements including rainfall will\nbe affected. Currently, however, with this sort of analysis, it is\nusually not yet possible to determine which way the pattern of rainfall\nmay change. It is difficult to detect a small change when the\ninter-annual variability is so large. And, even if a change is detected,\ncoping as well as possible with the variability must be a good thing to\ndo.\n\nSome people are not convinced by graphs such as are shown above. A\ncommon statement is that the annual totals that might still be similar,\nbut the season is shorter, because planting is delayed, etc. We examine\nthis in more detail in Chapter 7. There the daily data are used to\ndefine the start, end and length of the season as well as to examine dry\nspells and extremes during the season. With the monthly total, the\nexamination can start by repeating the analysis above, but just for\nNovember and December, when the season starts.\n\n***Return to the monthly data frame*** and ***filter*** to examine just\nthose months. So, make sure you are on the monthly data. ***Right\nclick*** as usual and choose ***Filter***, Fig. 2.3m\n\n --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 2.3m Right-click for Filter*** ***Fig. 2.3n The filter dialogue***\n ------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------\n ![](media/image1104.png){width=\"2.8858759842519683in\" ![](media/image1106.png){width=\"6.944444444444444e-3in\" height=\"6.250328083989501e-2in\"}![](media/image1106.png){width=\"6.944444444444444e-3in\"\n height=\"3.6586843832021in\"} height=\"6.250328083989501e-2in\"}![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTML1993cb5.PNG](media/image1107.png){width=\"3.2437456255468065in\"\n height=\"3.2540988626421696in\"}\n\n --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nIn Fig. 2.3n, click to ***Define new Filter***. Complete the\nsub-dialogue as shown in Fig. 2.3o. The steps are as follows:\n\n1) ***Choose the month*** column\n\n2) ***Select Nov and Dec*** as shown in Fig. 2.3p\n\n3) Click to ***Add Condition***\n\n4) Press ***Return***\n\n ---------------------------------------------------------------------------------------------------------------\n ***Fig. 2.3o Defining the filter*** ***Fig. 2.3p The filtered data***\n ------------------------------------------------------- -------------------------------------------------------\n ![](media/image1135.png){width=\"3.9919324146981627in\" ![](media/image1131.png){width=\"2.0555741469816273in\"\n height=\"2.857508748906387in\"} height=\"2.975057961504812in\"}\n\n ---------------------------------------------------------------------------------------------------------------\n\nBack on the main filter dialogue, just ***press Ok***. The data are now\nas shown in Fig. 2.3p. The first column is in red and this shows a\nfilter is in operation. Also, at the bottom of the data frame, you see\nthere are now 176 rows (months) of data to analyse, out of the original\n1062 rows.\n\nThe other data have not gone away. If ever you wish to return, then just\npress right-click as before, Fig. 2.3m and choose the last option to\n***Remove Current Filter***.\n\nNow it is quick to repeat the steps above for this analysis. It is\nsimpler to recall the last dialogues as shown in Fig. 2.3q.\n\n ---------------------------------------------------------------------------------------------------------------\n ***Fig. 2.3q Recall the last dialogues*** ***Fig. 2.3r The Column Statistics dialogue***\n ------------------------------------------------------- -------------------------------------------------------\n ![](media/image1112.png){width=\"2.6035640857392828in\" ![](media/image1130.png){width=\"3.3151476377952758in\"\n height=\"2.746363735783027in\"} height=\"3.457603893263342in\"}\n\n ---------------------------------------------------------------------------------------------------------------\n\nThe Column Statistics dialogue and sub-dialogue remain completed from\nbefore, Fig. 2.3r. So just ***press Ok***.\n\nThe new columns have added to the existing annual sheet. So, go straight\nto the PICSA Rainfall Graphs dialogue again. ***Choose the new\nvariable*** for the November-December totals and press OK. The mean is\nnow 286mm for the 2 months. Repeat for the number of rain days to give\nthe graphs for the filtered data, see Fig. 2.3s and 2.3t.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 2.3s Rainfall totals Nov-Dec*** ***Fig. 2.3t Number of rain days Nov-Dec***\n ----------------------------------------------------- -------------------------------------------------------\n ![](media/image1136.png){width=\"2.96668416447944in\" ![](media/image1120.png){width=\"3.0319685039370077in\"\n height=\"1.4764413823272091in\"} height=\"1.5089304461942257in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nOne feature of the data in Fig. 2.3s is that had the record started in\n1981, then it might have given an impression of an upward trend in the\nrainfall total. The longer record shows that this sort of conclusion\nshould be treated with considerable caution!\n\nThese graphs start to satisfy the objective of examining the rainfall\ndata in Southern Zambia for trends. The results should be considered as\nprovisional if only because they are from just a single station and only\nuse the monthly data. We suggest they make a case for a more complete\nanalysis with multiple stations.\n\n## Comparing satellite and station data\n\nOur proposed objective is to report on the feasibility of using\nsatellite estimates of sunshine hours to supplement the information from\nstation data. The station network for sunshine or radiation is sparse in\nmany countries. Where it exists the records often have many missing\nvalues.\n\nEstimates of daily hours of sunshine are also available from the\nEUMETSAT CMSAF (Climate Monitoring Satellite Application Facility) for\nabout 5km square pixels. The data are available from 1983 and may be\ndownloaded free of charge. These data are in NetCDF files and examples\nfrom a few locations have been downloaded and are the R-Instat library.\n\nData from Dodoma, Tanzania was analysed in the second tutorial and the\nsame dataset is used here. In this exercise, these data are merged with\nthe corresponding satellite data and the two variables are then\ncompared.\n\nAs in the tutorial use ***File \\> Open From Library***. Choose the\n***Instat collection***. Browse to the ***Climatic directory*** and\nchoose the ***Original Climatic Guide datasets***. Choose just the\n***Dodoma*** sheet, Fig. 2.4a.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 2.4a Importing the Dodoma data*** ***Fig. 2.4b Add a Date column***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image1083.png){width=\"3.179580052493438in\" ![](media/image1101.png){width=\"2.830372922134733in\"\n height=\"2.681396544181977in\"} height=\"2.695404636920385in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nOnce imported use ***Prepare \\> Column: Date \\> Make Date***, Fig. 2.4b\nto construct a date column from the Year, Month, Day columns. Name the\nresulting column as ***Date***, see Fig. 2.4b.\n\nNow use ***File \\> Import and Tidy NetCDF File***, Fig. 2.4c. Choose the\noption ***From Library*** and the file that starts ***CMSAF_SDU*** (for\nsunshine duration). This file contains just the data from the nearest\npixel to the Dodoma station data.\n\n ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 2.4c Import the CMSAF satellite data*** ***Fig. 2.4d Change the name to Date***\n ---------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------\n ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTML2bdf480.PNG](media/image1088.png){width=\"2.9877384076990374in\" ![](media/image1085.png){width=\"3.0399321959755032in\"\n height=\"1.7811504811898513in\"} height=\"1.7735804899387577in\"}\n\n ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nOnce imported, ***right-click*** to change the name of the last column\nfrom ***time_date*** to ***Date***, i.e. to the same name as in the\nstation data, Fig. 2.4d[^5].\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 2.4e The Merge dialogue*** ***Fig. 2.4f Sub-dialogue to add just SDU***\n ------------------------------------------------------ -------------------------------------------------------\n ![](media/image1111.png){width=\"3.111791338582677in\" ![](media/image1093.png){width=\"3.2452384076990377in\"\n height=\"2.5076716972878392in\"} height=\"2.2773534558180226in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nUse ***Prepare \\> Column: Reshape \\> Merge*** and complete the dialogue\nas shown in Fig. 2.4e. It chooses to match on the Date columns, which is\nwhat we want. That is why we gave them the same name in the two data\nframes[^6].\n\nThe SDU column is all we need from the satellite data. So, press the\n***Merge Options*** button in Fig. 2.4e. Use the ***Columns to\nInclude*** tab and complete as shown in Fig. 2.4f. Press ***Return***\nand then Ok.\n\nNow check, using ***Describe \\> One Variable \\> Summarise*** on the\nmerged data. Choose all the columns and press Ok. The results are in\nFig. 2.4g.\n\n+-------------------------------------+--------------------------------+\n| ***Fig. 2.4g Results from One | ***Fig. 2.4h Generate columns |\n| Variable Summarise*** | from the Date*** |\n| | |\n| ***From Describe \\> One Variable \\> | ***Prepare \\> Column: Date \\> |\n| Summarise*** | Make Date*** |\n+=====================================+================================+\n| ![](media/image10 | ![](media/image1096.pn |\n| 97.png){width=\"3.249407261592301in\" | g){width=\"2.799818460192476in\" |\n| height=\"2.516402012248469in\"} | height=\"3.594505686789151in\"} |\n+-------------------------------------+--------------------------------+\n\nAn encouraging sign in Fig. 2.4g is that summary statistics for the Sunh\n(from the station) and SDU (from the satellite) are almost identical.\nThe maximum of 16 hours for SDU is a little concerning, because that is\nprobably longer than the maximum day length at Dodoma.\n\nSome \"housekeeping\" is useful, because the results in Fig. 2.4g also\nshow there are some missing values in the year and day of month\ncolumn[^7].\n\n***Right-click*** and ***delete the first 3 columns***. Then generate\nthem again (without missing values) using ***Prepare \\> Column: Date \\>\nUse Date*** dialogue, Fig. 2.4h. Then use Describe \\> One Variable \\>\nSummarise again to confirm the new columns do not have missing values.\n\n ---------------------------------------------------------------------------------------------------------------\n ***Fig. 2.4i Resulting merged data*** ***Fig. 2.4j Correlations dialogue***\n ------------------------------------------------------- -------------------------------------------------------\n ![](media/image1095.png){width=\"3.2849989063867016in\" ![](media/image1108.png){width=\"2.7924835958005247in\"\n height=\"2.7602055993000874in\"} height=\"2.8119094488188976in\"}\n\n ---------------------------------------------------------------------------------------------------------------\n\n***Right-Click*** and choose ***Reorder Column(s)***. The resulting data\nshould be like that shown in Fig. 2.4i.\n\nWe are now ready to compare the satellite data (SDU) with the station\nvalues (sunh).\n\n ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 2.4k Correlations sub-dialogue*** ***Fig. 2.4l Results***\n ---------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------\n ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTML3dae776.PNG](media/image1162.png){width=\"2.9056058617672793in\" ![](media/image1186.png){width=\"3.0944444444444446in\"\n height=\"3.124498031496063in\"} height=\"3.0944444444444446in\"}\n\n ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nUse ***Describe \\> Multivariate \\> Correlations***. and enter SDU and\nsunh, Fig. 2.4j. Click on ***Options*** and choose ***Scatter Matrix***.\nFig. 2.4k. The results are in Fig. 2.4l.\n\nThe results in Fig. 2.4l look promising. The shape of the satellite\n(bottom right) and station data (top left) look similar and the\ncorrelation is a reasonably satisfactory 0.87.\n\nWhat is next? These data (both sunh and SDU) are time series. Time\nseries have seasonality, and this should usually be reflected in the\nanalysis.\n\nSo, return to the ***correlations dialogue*** and sub-dialogue, Fig.\n2.4k and ***add the month factor***.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 2.4m Including months in the analysis*** ***Fig. 2.4n The Histogram dialogue***\n ------------------------------------------------------- ------------------------------------------------------\n ![](media/image1164.png){width=\"2.9305555555555554in\" ![](media/image1177.png){width=\"3.064351487314086in\"\n height=\"2.9305555555555554in\"} height=\"2.493587051618548in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nThe results in Fig. 2.4m show that the shape of both variables depends\non the month. In particular (as expected) there is often less sun in the\nrainy season (November to April) and the correlations are then higher.\nThe display, in Fig. 2.4m, is also confusing as there are now too many\ngroups to see clearly what is happening.\n\nIt is time to split up the components of the results in Fig. 2.4m to\ncompare the satellite and station data in more detail.\n\nUse ***Describe \\> Specific \\> Histogram***, Fig. 2.4n.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 2.4o A set of density graphs*** ***Fig. 2.4p Include facets in the graph***\n ------------------------------------------------------- ------------------------------------------------------\n ![](media/image1176.png){width=\"2.8561548556430445in\" ![](media/image1178.png){width=\"3.222419072615923in\"\n height=\"2.821793525809274in\"} height=\"2.8333595800524933in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nChange the button at the top of Fig. 2.4o to Density and click on Plot\nOptions.\n\nIn the sub-dialogue, Fig. 2.4p tick the checkbox to include facets and\ninclude the month factor.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 2.4q Multiple variables*** ***Fig. 2.4r Resulting graphs***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image1169.png){width=\"1.83832895888014in\" ![](media/image1182.png){width=\"4.200391513560805in\"\n height=\"1.875511811023622in\"} height=\"2.0904232283464568in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nReturn to the main dialogue, and click to include multiple variables,\nFig. 2.4q. Include Sunh and SDU and press Ok. The graphs from Fig. 2.4m\nare now overlaid, so they can easily be compared, and displayed\nseparately for each month. Fig. 2.4r shows the pattern is similar in\neach month. We also see the sharp peaks in the dry months, particularly\nfrom June to October, when most days have about 10 hours of sunshine per\nday.\n\nFig. 2.4r shows the pattern of sunshine is similar from the satellite\nand station data. It does not, however, show whether a day in any month\nwith more sunshine at the station (sunh), also had more sunshine from\nthe satellite data (SDU). For this, we look at the scatterplot from Fig.\n2.4m again broken into the monthly facets.\n\nUse ***Describe \\> Specific \\> Scatterplot*** and complete the dialogue\nas shown in Fig. 2.4s. Press on ***Plot Options*** and include the\nmonths as facets, Fig. 2.4t, just as earlier in Fig. 2.4p.\n\n ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 2.4s Scatterplot dialogue*** ***Fig. 2.4t Plotting sub-dialogue***\n --------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------\n ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTML6ce7e6e.PNG](media/image1181.png){width=\"3.050495406824147in\" ![](media/image1187.png){width=\"2.944646762904637in\"\n height=\"2.892821522309711in\"} height=\"2.4655577427821522in\"}\n\n ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nThe resulting set of graphs is shown in Fig. 2.4u.\n\n -----------------------------------------------------------------------\n ***Fig. 2.4u Scatterplots for each month***\n -----------------------------------------------------------------------\n ![](media/image1163.png){width=\"6.131447944006999in\"\n height=\"3.0514577865266843in\"}\n\n -----------------------------------------------------------------------\n\nOur initial objective was to examine whether the satellite estimates may\nbe useful in Tanzania to supplement the station data. The results are\npromising, but this just the start. There are many possible next steps,\nincluding an examination of the occasions when the two variables differ\nsubstantially. The analysis should also be extended to multiple\nstations. We also need more numerical summaries to measure how close the\ntwo variables are. Chapter 10 considers this subject in more detail.\n\n## In conclusion\n\n[To be added]{.mark}","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_2_More_Practice_with_RInstat.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_2_More_Practice_with_RInstat.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_3_Using_RInstat_effectively.qmd.json b/.quarto/idx/Chapter_3_Using_RInstat_effectively.qmd.json new file mode 100644 index 0000000..612f0b0 --- /dev/null +++ b/.quarto/idx/Chapter_3_Using_RInstat_effectively.qmd.json @@ -0,0 +1 @@ +{"title":"Using R-Instat effectively","markdown":{"headingText":"Using R-Instat effectively","containsRefs":false,"markdown":"## Introduction\n\nR-Instat is simply a front end to the R programming language, Wikipedia\n(2019). R started in the 1990s and consists of a relatively small core,\nthat is maintained by the R development core team. There are then also\nover 12 thousand packages that extend R's capabilities. About 200 of\nthese packages are included (behind the scenes) in R-Instat.\n\nThe front end in R-Instat is written in Visual Basic.Net. This front end\nprovides the menus and dialogues that are used to run R-Instat. The\ndefault view of R-Instat is shown in Fig. 3.1a. It has 2 windows, one\nshowing part of the data and the other is for the results or output.\n\n ---------------------------------------------------------------------------------------------------------------------\n ***Fig. 3.1a***\n ---------------------------------------------------------------------------------------------------------------------\n ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTMLc875082.PNG](media/image1134.png){width=\"6.158751093613298in\"\n height=\"3.271836176727909in\"}\n\n ---------------------------------------------------------------------------------------------------------------------\n\nR-Instat looks a little like a spreadsheet package, but there are\ndifferences. One, shown in Fig. 3.1, is that the results are in a\nseparate window, rather than on successive sheets. Also, the data shown\nin Fig. 3.1a are stored in an R data frame (behind the scenes) and what\nyou see is often only a small part of these data.\n\nCurrent spreadsheets have a limit of about 1million rows. This not a\nlimit in R, (or therefore in R-Instat) where your machine's memory\nimposes a limit that is usually larger. However, the effort of\ncontinually copying all the data to the front end would slow R-Instat\nand hence (by default) we just show the first 1000 rows of data and the\nfirst 30 columns[^8].\n\nOne way to see all the data in the current data frame[^9] is shown in\nFig. 3.1b. Just ***right-click*** on the tab at the bottom and choose\n***View Data Frame,*** Fig. 3.1c.\n\n ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 3.1b*** ***Fig. 3.1c***\n ------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------\n ![](media/image1149.png){width=\"2.1374267279090113in\" ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTMLc9d2c55.PNG](media/image1146.png){width=\"3.9064785651793525in\"\n height=\"2.0438856080489938in\"} height=\"2.8405096237970255in\"}\n\n ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nThe same result could alternatively be done through ***Prepare \\> Data\nFrame \\> View data*** as shown in Fig. 3.1d. This gives a dialogue. From\nhere, as shown in Fig. 3.1e, you can choose any of the open Data Frames.\nThen click Ok to again show the data in R, Fig. 3.1c.\n\n ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 3.1d*** ***Fig. 3.1e***\n ------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------\n ![](media/image1148.png){width=\"2.9987478127734035in\" ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTMLc9b3538.PNG](media/image1160.png){width=\"2.9707206911636046in\"\n height=\"2.4772265966754157in\"} height=\"2.9802416885389325in\"}\n\n ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nThe menu and dialogue in Fig. 3.1d and 3.1e are all part of the\n\"front-end\" of R-Instat. When you click Ok, R-Instat constructs an R\ncommand and sends it to R. The results are then returned to the\nfront-end.\n\nThe output (results) window shows the R command that has been sent, as\nwell as the output, if any. ***Right-click*** in the ***Output\nWindow***, Fig. 3.1f, if you wish to turn this off for future commands.\n\nIn the data window ***right-click in the name field*** to provide some\ncommon options, Fig. 3.1g. Alternatively, each of these options is\navailable from the ***Prepare Menu***.\n\n ---------------------------------------------------------------------------------------------------------------\n ***Fig. 3.1f*** ***Fig. 3.1g***\n ------------------------------------------------------- -------------------------------------------------------\n ![](media/image1174.png){width=\"3.0241666666666664in\" ![](media/image1151.png){width=\"2.9767508748906386in\"\n height=\"2.0632163167104114in\"} height=\"2.69in\"}\n\n ---------------------------------------------------------------------------------------------------------------\n\nThe data and output windows are the most important in R-Instat. There\nare four more windows. The use of the two metadata windows is described\nin Section 3.2 and the Log plus Script Windows are described in Section\n3.3.\n\n## Column and data frame metadata\n\nThe R data frames used through R-Instat contain data together with some\nmetadata. The name of each variable is part of the metadata as is a\nlabel for each variable. R-Instat has data in a set of\n***data-sheets***. An R-Instat ***data sheet*** is an R data frame with\nadded metadata. The added information includes information on key\ncolumns together with links to other sheets. This helps R-Instat keep\ntrack of multiple data frames that are connected, such as the monthly\nsummaries calculated from the daily data. A data sheet also keeps\ninformation on objects that have been produced and saved, such as graphs\nand models.\n\n -----------------------------------------------------------------------\n ***Fig. 3.2aThe toolbar and View menu***\n -----------------------------------------------------------------------\n ![](media/image1179.png){width=\"5.884278215223097in\"\n height=\"2.321505905511811in\"}\n\n -----------------------------------------------------------------------\n\nUse the ![](media/image1147.png){width=\"0.32342629046369203in\"\nheight=\"0.29291447944007in\"} icon on the toolbar, (Fig. 3.2a) or ***View\n\\> Column Metadata*** to see the metadata currently associated with each\nopen data frame. An example is in the top left in Fig. 3.2b.\n\n ---------------------------------------------------------------------------------------------------------------------\n ***Fig. 3.2b***\n ---------------------------------------------------------------------------------------------------------------------\n ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTML5265ebf.PNG](media/image1152.png){width=\"6.193180227471566in\"\n height=\"3.7589031058617675in\"}\n\n ---------------------------------------------------------------------------------------------------------------------\n\nAs with Excel you can open multiple data frames when using R-Instat. The\ncolumn metadata shown in Fig. 3.2b has tabs at the bottom, just like the\ndata (also shown in Fig. 3.2b), so you can check on the metadata for any\ndata frame. An R-Instat ***data book*** is the set of open ***data\nsheets.***\n\nUsing ***View \\> Data Frame Metadata***, Fig. 3.2b (top right) opens\nanother window in which each row shows the metadata on a data sheet. The\ninformation in Fig. 3.2b includes the name of the sheet, an optional\ndescriptive label, and the number of columns currently in the sheet.\n\nIf you use ***File \\> Save As \\> File Data As,*** Fig. 3.2c, at any\nstage, then R-Instat saves the whole data book, i.e. all the data\nframes, together with all the associated meta data, into a single file.\nThis file has the extension RDS and this data book can later be\nre-opened in R-Instat[^10]. Good practice is usually to work on a single\ntopic in each data book, i.e. the different data sheets are usually\ninterconnected. As with Excel, there is nothing stopping you having all\nsorts of unconnected data sheets in the same book, but this usually\ncomplicates your work.\n\nSome tasks are made simpler through the Column Metadata window, Fig.\n3.2d. You can double-click in the name field of any column to change the\nname. You can add or change the label in the same way, Fig. 3.2. For\nnumeric columns R chooses the number of significant figures to display.\nThat is also shown in the metadata and can be changed[^11]. In addition,\nas shown in Fig. 3.2c, right clicking on the left-hand side gives the\nsame popup menu of common tasks as is available from the data view.\n\n ---------------------------------------------------------------------------------------------------------------\n ***Fig. 3.2c*** ***Fig. 3.2d***\n ------------------------------------------------------- -------------------------------------------------------\n ![](media/image1137.png){width=\"2.7479910323709538in\" ![](media/image1226.png){width=\"3.1687871828521437in\"\n height=\"2.1073818897637797in\"} height=\"3.7432458442694663in\"}\n\n ---------------------------------------------------------------------------------------------------------------\n\nEach Window button in the toolbar, Fig. 3.2e and the Options in the View\nMenu, Fig. 3.2f act like an on-off switch. So now use the curly arrow to\nreset to the default of the data and output windows side by side.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 3.2e*** ***Fig. 3.2f***\n ------------------------------------------------------- ------------------------------------------------------\n ![](media/image1225.png){width=\"2.7795439632545933in\" ![](media/image1219.png){width=\"2.180667104111986in\"\n height=\"2.5554516622922137in\"} height=\"2.7015277777777778in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nIn this section we have added more of the 6 Windows available in\nR-Instat. The opposite is also useful. Once in the default layout,\nswitching off the Data Window gives just the Output (Results) Window. Or\nswitch off the Output Window to look at more columns of data. However,\nin that case remember to switch on the Output window to see any further\nresults.\n\n## Graphs\n\nBase R has a comprehensive graphics system, and this is used by many R\npackages. The grammar of graphics, Wilkinson (2005) is an influential\nbook and has led to the exciting ggplot package (gg for grammar of\ngraphics) and graphics system in R. One challenge we had in constructing\nR-Instat was to make the ggplot system easy to use. Almost all the\ngraphs in this guide use this system. One example that does not, is the\nadjusted boxplot shown in Fig. 3.5i.\n\nIn this section we describe key concepts of the ggplot system and of our\nimplementation.\n\nOne concept is \"facets\". Fig. 2.4u is an example of a facetted graph,\nwhere there is one facet for each month. The default is for the x and y\nscales to be the same for each graph[^12], so the months can be compared\neasily. Also, you are not diverted by lots of axis scales for each\nmonth.\n\nSome multiple graphs show different information in each pane, as was\nseen in Fig. 2.4m.\n\nWithin a graph you can have multiple layers. So, there are 2 layers in\nFig. 2.4r, one for the station and the other for the satellite data. In\nChapter 10 one layer in a map shows the districts in a country and\nanother shows the position of each climatic station.\n\nIn each layer there is a geometric shape, or geom. A geom may be a\npoint, a line, a boxplot etc.\n\nIn R-Instat the common geoms have their own dialogue as shown in Fig.\n3.3a. We choose a boxplot in Fig. 3.3b for Tmax at Dodoma by month.\n\n -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 3.3a*** ***Fig. 3.3b***\n ------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------\n ![](media/image1224.png){width=\"2.7233081802274715in\" ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTMLa085dd4.PNG](media/image1222.png){width=\"2.960900043744532in\"\n height=\"2.9685115923009624in\"} height=\"3.381676509186352in\"}\n\n -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nEvery graphics dialogue includes the option to save the resulting graph,\nby giving it a name. In Fig. 3.3b we called the graph Tmax_boxplot. This\nggplot graph is now saved as part of the metadata associated with the\nDodoma data frame.\n\nIf you don't give a name, then the default name of last_graph is given\nautomatically. But, of course, that name is overwritten when you do the\nnext graph.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 3.3c*** ***Fig. 3.3d***\n ------------------------------------------------------ -------------------------------------------------------\n ![](media/image1230.png){width=\"3.014453193350831in\" ![](media/image1239.png){width=\"3.0348807961504813in\"\n height=\"2.811914916885389in\"} height=\"2.83132217847769in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nDouble-click in the graph, Fig, 3.3d to turn it blue. This also produces\nthe popup menu and the graph can be copied to the clipboard.\n\nAn alternative is shown in Fig. 3.3e. ***Click*** on graph icon\n![](media/image1236.png){width=\"0.315670384951881in\"\nheight=\"0.25253608923884513in\"} in the toolbar to show the last graph in\nR's viewer. This only shows a single graph, but the Window can be\nresized and, as shown in Fig. 3.3e, there are now many options to save\nthe graph, or to copy it to the clipboard.\n\nThis toolbar option is only for the most recent graph. The ***Describe\n\\> View Graph*** dialogue, Fig. 3.3f provides the option to view any of\nthe saved graphs in this way[^13].\n\n --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 3.3e The R graph viewer*** ***Fig. 3.3f Options for viewing graphs***\n --------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------\n ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTMLa31a91e.PNG](media/image1213.png){width=\"2.933834208223972in\" ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTMLa3be5f8.PNG](media/image1235.png){width=\"3.0407852143482064in\"\n height=\"3.179398512685914in\"} height=\"2.081327646544182in\"}\n\n --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nWe use the dialogue in Fig. 3.3f to show a third way to examine graphs;\none that makes use of the excellent plotly package. This is called the\nInteractive Viewer in Fig. 3.3f. This opens the graph in a browser\n(though you don't need to be online) as shown in Fig. 3.3g.\n\n -----------------------------------------------------------------------\n ***Fig.3.3g The (plotly) interactive viewer for ggplot graphs***\n -----------------------------------------------------------------------\n ![](media/image1218.png){width=\"6.0783005249343836in\"\n height=\"3.5125656167979002in\"}\n\n -----------------------------------------------------------------------\n\nIn Fig. 3.3g the data for October are shown. This demonstrates that the\nboxplot shows the median (30.6°C), the quartiles, etc. In addition, you\ncan hover over any point to find its value and zoom if a part of the\nplot is of special interest. This is a system worth exploring, so we add\na second example. This also shows the value of facets in a graph.\n\nUse ***Describe \\> Specific \\> Scatterplot*** to examine Tmax as the Y\nvariable against Tmin as the X, Fig. 3.3h.\n\n+------------------------------------+---------------------------------+\n| ***Fig. 3.3h Initial use of | ***Fig. 3.3i Resulting graph*** |\n| scatterplot (geom point)*** | |\n| | |\n| ***Describe \\> Specific \\> Scatter | |\n| Plot*** | |\n+====================================+=================================+\n| ![](media/image1192 | ![](media/image1202.p |\n| .png){width=\"3.1297145669291337in\" | ng){width=\"2.701648075240595in\" |\n| height=\"2.9541699475065615in\"} | height=\"2.9195220909886266in\"} |\n+------------------------------------+---------------------------------+\n\nThe resulting graph is relatively uninformative, except to demonstrate\nthere is a lot of data. And you don't need a special graphics system for\na single graph like this. It does show there are a few outlying points\nthat require closer investigation.\n\nMore concerning, as a principle, is that these are time series data. One\nproperty of time series is the seasonality and we could allow for this\nby looking separately at each month.\n\nReturn to the dialogue in Fig. 3.3h. Click on ***Plot Options*** and add\nthe ***month*** factor as a facet, Fig. 3.3j. Press Return on the\nsub-dialogue. Then make the ***By Variable*** also the ***month***\nfactor and the L***abel Variable*** the ***Date***. Click OK to produce\nthe result shown in Fig. 3.3k.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 3.3j Plot options sub-dialogue*** ***Fig. 3.3kTmax v Tmin by month***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image1201.png){width=\"2.646576990376203in\" ![](media/image1209.png){width=\"3.072049431321085in\"\n height=\"2.242176290463692in\"} height=\"3.263601268591426in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nOne feature of the graph in Fig. 3.3k is that there is the same x and y\nscales for each graph. This is appropriate here and has then the big\nadvantage that the graph is not cluttered with many axes, so the data\nare more easily compared.\n\nAs with the overall graph in Fig 3.3i, one aspect to be investigated,\nfrom Fig. 3.3k, is the outliers. This is easily done via the interactive\nviewer. So, return to ***Describe \\> View Graph*** and choose the last\ngraph, possibly called scatter_Tmax.Tmin from Fig. 3.3h (or just\nlast_graph if no name was given).\n\n -----------------------------------------------------------------------\n ***Fig 3.3l Interactive view***\n -----------------------------------------------------------------------\n ![](media/image1210.png){width=\"6.161750874890639in\"\n height=\"2.648064304461942in\"}\n\n -----------------------------------------------------------------------\n\nThe new feature in Fig. 3.3l is that you can now hover over any point\nand see the values in more detail. The example shown in Fig. 3.3l is\nthat on 9 October 1989 both Tmax and Tmin were 15.6°C. Worth checking!\nFrom the graph 15.6°C is very sensible for Tmin but not for Tmax[^14].\n\nOther dialogues also provide useful graphs. As an example, use\n***Describe \\> Multivariate \\> Correlations***, Fig. 3.3m as in Chapter\n2.\n\n ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 3.3m*** ***Fig. 3.3n***\n ------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------\n ![](media/image1216.png){width=\"2.706126421697288in\" ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTMLaa5e48d.PNG](media/image1200.png){width=\"3.306842738407699in\"\n height=\"1.9848436132983378in\"} height=\"3.208082895888014in\"}\n\n ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nComplete the dialogue as shown in Fig. 3.3n. Click on the Options button\nand complete the sub-dialogue as shown in Fig. 3.3o. The resulting\ndisplay is in Fig. 3.3p.\n\nFor the data this indicates that both Tmax and Tmin have roughly normal\ndistributions each month. The correlations are quite low. As with the\nother graphs more detail can be found from the plotly interactive\ndisplay.\n\n -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 3.3o Correlations sub-dialogue*** ***Fig. 3.3p Distributions, scatterplot and\n correlations***\n ---------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------\n ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTMLaa7a41f.PNG](media/image1184.png){width=\"2.6294061679790026in\" ![](media/image1189.png){width=\"3.326188757655293in\"\n height=\"2.8274879702537183in\"} height=\"3.118300524934383in\"}\n\n -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nThis is an example of a graphical display where the different panes show\ndifferent types of display. Indeed, one pane is numeric. We used to\nthink that a display in a graph was distinct from displaying tables of\nresults. But Fig. 3.3p is like a 2 by 2 table, one cell of which\ncontains numbers, while the others contain graphs.\n\nFinish this section with a little \"housekeeping\". Several objects\n(graphs) have been produced and perhaps are now no longer needed. Use\n***Prepare \\> R Objects \\> Delete***, Fig. 3.3q.\n\n ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 3.3q Menu to manage R objects*** ***Fig. 3.3r Delete objects no longer needed***\n ------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------\n ![](media/image1197.png){width=\"2.2876793525809274in\" ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTMLb0219a7.PNG](media/image1203.png){width=\"3.70708552055993in\"\n height=\"2.877690288713911in\"} height=\"2.5941666666666667in\"}\n\n ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nWe choose to delete all the objects, Fig. 3.3r.\n\n## The log and script windows\n\nThe final two Windows in R-Instat are for the Log Window and the Script\nWindow.\n\nThe R programming language is very powerful, but with a relatively steep\nlearning curve. R-Instat gives easy access to a subset of R. However, a\nclick-and-point system always has limitations. We consider here some\noptions if these limitations are ever a constraint.\n\nThe log file keeps a record of all the R-commands that have been issued\nduring a session of R-Instat. Use the toolbar option\n![](media/image1276.png){width=\"0.288507217847769in\"\nheight=\"0.2764862204724409in\"}, Fig. 3.2e, or ***View \\> Log Window***\nto open the log file.\n\nIn the Log file, the ***right-click menu*** gives various options, Fig.\n3.4a, including saving the log file. That action is the same as using\n***File \\> Save As \\> Save Log As***, shown earlier in Fig. 3.2c.\n\n -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 3.4a The Log Window*** ***Fig. 3.4b The Filter Dialogue***\n ------------------------------------------------------ ----------------------------------------------------------------------------------------------------------------------\n ![](media/image1293.png){width=\"3.025767716535433in\" ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTML6b171e8.PNG](media/image1280.png){width=\"2.9556944444444446in\"\n height=\"1.6994028871391076in\"} height=\"2.965126859142607in\"}\n\n -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nThe Log file keeps an exact record of what you have done so far in your\nR-Instat work. That is useful. If, later, you ever had to justify how\nyou produced results, then this is your record of what was done.\n\nIf you need to ask for help, then we will usually want to relate\nanything extra to the best you have been able to do so far. A skilled R\nuser can see exactly what was done through the log file.\n\nIf R is used directly, then we suggest it be used through RStudio. The\nlog file can be run in RStudio and should produce the same results.\nHence, an analysis could start in R-Instat and then continue in RStudio\nif further results are needed that cannot be done through R-Instat.\n\nSometimes a dialogue can almost do an analysis, but not quite. If small\nchanges are needed to a command then they can be done, in R-Instat, with\nthe Script Window\n\nA guide called \"Reading, Tweaking and Using R Commands\",\n[reference]{.mark} allows users to adapt the commands behind any\ndialogue. This situation is illustrated with an example.\n\nWe show how to use adjusted boxplots (Hubert & Vandervieren, 2008) for\neach month with the rainfall data from Dodoma. This is first illustrated\nwith the ordinary boxplots that are available (and very useful).\nHowever, for the rainfall we would like to have adjusted boxplots\nbecause of the skewness of the data. They are available in the R\npackage, called ***robustbase*** [reference]{.mark} that is already used\nby R-Instat. But adjusted boxplots are not yet available -- at least\nwhen this guide was first written.\n\nFirst the data are filtered for just the rain days. Then the boxplots\nare produced.\n\nWith the Dodoma data, as used in Chapter 2, use the ***right-click***\nmenu (or ***Prepare \\> Data Frame \\> Filter***) to give the Filter\ndialogue, Fig. 3.4b. Note, in Fig. 3.4b, that the Ok button is not yet\nenabled. There is also a Script button on the bottom right of the\ndialogue, and this is also disabled. Every dialogue has the same set of\nfive buttons at the bottom. Hence, every dialogue has a ***Script***\nbutton and here we show how it can be used. In Fig. 3.4b, press on the\n***Define New Filter*** button to open the Filter sub-dialogue. In the\nsub-dialogue, Fig. 3.4c.\n\n -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 3.4c The filter sub-dialogue*** ***Fig. 3.4d The filter dialogue completed***\n ------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------\n ![](media/image1305.png){width=\"3.1675339020122486in\" ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTML6c2cda1.PNG](media/image1283.png){width=\"2.766781496062992in\"\n height=\"2.7031200787401577in\"} height=\"2.775612423447069in\"}\n\n -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nIn the sub-dialogue, choose the ***Rain*** variable and make the\ncondition as ***Rain \\> 0.85***. Then click the ***Add Condition***\nbutton, then press the ***Return*** button. A filter has now been\nselected and hence the Ok button is now enabled. We don't need the To\nScript button at this stage, but note that it has also been enabled.\n\nNow use the ***Describe \\> Specific \\> Boxplot*** dialogue and complete\nit as shown in Fig. 3.4e.\n\n -----------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 3.4e The boxplot dialogue*** ***Fig. 3.4f Boxplots with width\n proportional to the number of rain days***\n ---------------------------------------------------------------------------------------------------------------------- ------------------------------------------\n ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTML6cfc546.PNG](media/image1273.png){width=\"2.8051170166229222in\" ![](media/image1330.png){width=\"3.125in\"\n height=\"3.203753280839895in\"} height=\"3.125in\"}\n\n -----------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nThe results are in Fig. 3.4f. They are useful, and pleasantly colourful,\nbut the number of outliers shows that the ordinary boxplot is not ideal\nfor data that are as skew as daily rainfall.\n\nSo, return to the boxplot dialogue in Fig. 3.4e and press the ***To\nScript*** button. The commands are as shown in Fig. 3.4g\n\n+-----------------------------------------------------------------------+\n| ***Fig. 3.4g Script window for the boxplot commands*** |\n+=======================================================================+\n| 1. Dodoma \\<- data_book\\$get_data_frame(data_name=\\\"Dodoma_merge\\\") |\n| |\n| 2. last_graph \\<- ggplot2::ggplot(data=Dodoma_merge, |\n| mapping=ggplot2::aes(y=Rain, x=month)) + |\n| ggplot2::geom_boxplot(varwidth=TRUE, outlier.colour=\\\"red\\\") + |\n| theme_grey() |\n| |\n| 3. data_book\\$add_graph(graph_name=\\\"last_graph\\\", graph=last_graph, |\n| data_name=\\\"Dodoma\\\") |\n| |\n| 4. data_book\\$get_graphs(data_name=\\\"Dodoma\\\", |\n| graph_name=\\\"last_graph\\\") |\n| |\n| 5. rm(list=c(\\\"last_graph\\\", \\\"Dodoma\\\")) |\n+-----------------------------------------------------------------------+\n\nThe second line -- that starts last_graph is the only line that needs to\nchange. The equivalent command, from the robustbase package, is as\nfollows:\n\nlast_graph \\<- robustbase::adjbox(Rain \\~ month, data =Dodoma_merge,\ncol=\\\"red\\\", varwidth=TRUE).\n\n -----------------------------------------------------------------------\n ***Fig. 3.4h***\n -----------------------------------------------------------------------\n ![](media/image1304.png){width=\"6.059426946631671in\"\n height=\"2.582607174103237in\"}\n\n -----------------------------------------------------------------------\n\nSo paste or type that command into the Script Window, which should then\nlook as shown in Fig. 3.4h. To run the commands from the Script Window\nclick on the Run All button at the top of Fig. 3.4h.\n\nIf there is an error, then correct the typing into Fig. 3.4h. Now, to be\ncautious, right-click, see Fig. 3.4h and this permits you to run the\ncommands one line at a time. It is highly likely that line 2 is the\nproblem so first go to line 1 and then run line 1, using Run Current\nLine, or pressing \\ + \\. Do the same for line 2. If that\nworks then continue with the rest of the lines and the graph, shown in\nFig. 3.4i should appear.\n\n -----------------------------------------------------------------------\n ***Fig. 3.4i Skew boxplot***\n -----------------------------------------------------------------------\n ![](media/image1323.png){width=\"3.0629844706911635in\"\n height=\"2.541402012248469in\"}\n\n -----------------------------------------------------------------------\n\nThis example has used the Script Window for a new command. More often\nthe script window is for more modest changes, where an option is added\nor changed for an existing command.\n\nIf the command above were in a new package, that was not currently\nloaded into R-Instat, then the code in line 2 would not be recognised.\nIn that case you would have add an extra line at the top of the script\nwindow to load the package, e.g. ***install.packages(\\\"robustbase\\\").***\nThis assumes you are connected to the internet. It also only need be\ndone once. This package is then installed in R and can be used on\nsubsequent occasions in R-Instat without that line being added.\n\n## Don't let the computer laugh at you!\n\nR-Instat is designed to facilitate the analysis of climatic data. This\nmay be through using the general facilities (File, Prepare, Describe and\nModel menus), or through using the special climatic menu that is\nintroduced in Chapter 4.\n\nR-Instat is simply a click and point front-end to the R programming\nlanguage. It is particularly for users who do not wish to spend time\nmastering the R language. There is also a special guide for those who\nwould wish to start with R-Instat and then consider migrating to using R\n\"properly\".\n\nAll software has limitations and it is important to recognise when using\nR-Instat, or perhaps your favourite spreadsheet package is not the\ncorrect solution for your work. We give an example below. Otherwise you\nmay fall into the \"copy-paste\" trap. This is where you do a very routine\njob repeatedly, e.g. copy \\> paste, copy \\> paste, .... Humans are not\ngood at boring and repetitive jobs and they make mistakes.\n\nComputers, on the other hand, can be programmed to handle repetitive\ntasks brilliantly and very quickly. That's why, if the computer watches\nyou doing copy \\>paste, copy \\> paste etc, while it has little to do --\nthen it is probably laughing at you!\n\nHere is an example. It is of a type we discuss in more detail in Chapter\n4. Here it is mainly designed to help you to recognise when your\nsoftware, and perhaps your skill set is insufficient for the task in\nhand.\n\nClimatic data from Garoua, Cameroon have been provided by the Cameroon\nMet Service and are now available in the R-Instat library, Fig. 3.5a.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 3.5a Garoua data in R-Instat*** ***Fig. 3.5b Maximum temperature data***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image1318.png){width=\"2.741365923009624in\" ![](media/image1309.png){width=\"3.353319116360455in\"\n height=\"2.056022528433946in\"} height=\"2.047866360454943in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nFig. 3.5a shows the \"standard\" layout of the data for R-Instat climatic\nanalyses. Spreadsheet packages like Excel, recognise this as a\n\"list\"[^15]. Each column in Fig. 3.5a is of a single \"type\" -- most are\nnumeric. The different elements each have their own column. In Fig. 3.5a\neach row has the data for a single day. In this file there 21915 rows\n(days) of data.\n\nThe starting point for these data looked very different. Some of the\ninitial data for Tmax are shown in Fig. 3.5b. In Fig. 3.5b each day of\nthe month has its own column, so there are 31 columns in the sheet. We\nfind this to be a common \"shape\". One additional problem in Fig. 3.5b is\nthat each sheet has only about 3 years of data, so they are split across\n16 different sheets.\n\nThe rainfall is in a different \"shape\" to the temperatures as shown in\nFig. 3.5c and Fig. 3.5d.\n\n ---------------------------------------------------------------------------------------------------------------\n ***Fig. 3.5c Rainfall data for Garoua*** ***Fig. 3.5d More of the year of rainfall data***\n ------------------------------------------------------- -------------------------------------------------------\n ![](media/image1296.png){width=\"3.0532458442694663in\" ![](media/image1302.png){width=\"3.1601771653543307in\"\n height=\"1.6980621172353456in\"} height=\"1.7202580927384077in\"}\n\n ---------------------------------------------------------------------------------------------------------------\n\nFor the rainfall, each year is in a separate sheet. At the bottom of\neach sheet there are some monthly and annual totals. Hence the rainfall\nis a mixture of data and summary values.\n\nThere are three obvious ways you can proceed to change the shape of the\ndata from Fig. 3.5b, c and d into the shape shown in Fig. 3.5a. The\nfirst is to use Excel (or another spreadsheet), the second is to use\nR-Instat and the third is to write a program, using R commands -- or\nanother language, such as Python.\n\nWhat might you do with a spreadsheet? Here is a possible way:\n\n1) It would be good to have all the years of data in a single sheet.\n Start with the first year, which is 1999 for the rainfall. Copy just\n the data -- not the monthly summaries -- into a new sheet.\n\n2) Now go to the next year, i.e. 2000 and copy the data below those of\n 1999.\n\n3) Now go to 2001 and copy and paste again. The computer is starting to\n laugh, and you have a long way to go.\n\n4) You persevere and have all the years in your new sheet.\n\n5) Now you want to paste the February data below January, etc. This is\n 11 more goes at copy \\> paste.\n\n6) You are bored, so you look briefly at the temperature data in Fig.\n 3.5d. You realise, in horror, that you will have 31 copy \\> paste to\n do there, with one column currently for each month.\n\n7) You give up, realising there must be a better way. That's partly\n because you realise the computer is laughing hysterically!\n\nWe took the third option and wrote a program in R. In Chapter 4 we\nexamine whether using R-Instat would be possible (without the computer\nlaughing at you too much).\n\nHowever, there is a general message. R-Instat is merely executing R\ncommands through a click-and-point environment. This approach will\nalways be limited, for some tasks, compared to using the command\nlanguage directly. So, should you find that an analysis requires a lot\nof repetition from you, then check whether it is time to use R directly.\n\nWhen you start using R-Instat it does not mean you need to abandon using\na spreadsheet. Similarly using R directly does not necessarily mean\nabandoning R-Instat. When you use R-Instat it automatically generates a\nlog file with the R commands. This file runs in RStudio. So, you could\nthen continue using R directly (through RStudio) for those tasks where\nR-Instat has been found to be limiting.","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_3_Using_RInstat_effectively.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_3_Using_RInstat_effectively.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_4_Getting_the_data_into_shape.qmd.json b/.quarto/idx/Chapter_4_Getting_the_data_into_shape.qmd.json new file mode 100644 index 0000000..0839dc6 --- /dev/null +++ b/.quarto/idx/Chapter_4_Getting_the_data_into_shape.qmd.json @@ -0,0 +1 @@ +{"title":"Getting the data into shape","markdown":{"headingText":"Getting the data into shape","containsRefs":false,"markdown":"## Introduction\n\nR-Instat provides a menu-driven front-end to R. It is designed to make\nit easy to analyse any sort of data, including climatic data. The\nclimatic menu is designed to make many analyses of the historical\nclimatic records even easier. Most of this guide uses the various menus\nand dialogues in this special climatic menu.\n\nIf your analysis is not practical using the special climatic menu it may\nstill be possible using the general menus in R-Instat. After all many\nclimatic analyses are done with other statistical software and they do\nnot have a special climatic menu.\n\n\"Click and point\" systems all have limitations, or they would lose the\nsimplicity of use that is a major driving force in their production. If\nyour analyses cannot be done using R-Instat, then one strategy would be\nto use R itself. The \"tweaking\" guide shows how R-Instat can be\nextended, but you may also find that using RStudio is not as hard as you\nfeared.\n\nThis Chapter introduce the climatic menu in R-Instat and shows how\nclimatic data is arranged for analysis.\n\n## Climatic data that is \"ready\"\n\nIn Chapters 2 and 3 we examined data from Moorings, Zambia and Dodoma in\nTanzania that were both in the right \"shape\" for an immediate analysis.\nHere we illustrate with more examples that are \"ready\". In the following\nsections of this chapter we show how the Climatic menu, or the general\nPrepare menu can help to organise data into the same shape.\n\nIf your data are already in the same shape as the examples below then\nmuch of the content from Section 4.4 can be omitted.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 4.2a Importing a csv file*** ***Fig. 4.2b Data for 2 stations from Guinea***\n ------------------------------------------------------- ------------------------------------------------------\n ![](media/image1303.png){width=\"2.8748140857392825in\" ![](media/image1299.png){width=\"3.189455380577428in\"\n height=\"2.917489063867017in\"} height=\"2.27875in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nGo to ***File \\> Open from Library***. Choose ***Load From Instat\nCollection***, then ***Browse***. Go to the ***Climatic directory*** and\nthen ***Guinea***. The data we require are in 2 forms, both an R file\nwith the RDS extension and a csv file that can be read into Excel.\n\n***Use*** the file ***Guinea2.csv***.\n\nThe new feature, compared to the data in Chapter 2, is that there are\nmultiple stations. Right-click in the first Column, Fig. 4.2c, and\nchoose the Levels/Labels dialogue. The result, in Fig 4.2d shows there\nare 2 stations, Kankan with about 24 thousand rows (days) and Koundara\nwith about 16 thousand days.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 4.2c Choose Levels/Labels*** ***Fig. 4.2d The Levels/Labels dialogue confirms 2\n stations***\n ------------------------------------------------------- ------------------------------------------------------\n ![](media/image1306.png){width=\"2.1535017497812774in\" ![](media/image1275.png){width=\"3.772503280839895in\"\n height=\"3.25292104111986in\"} height=\"2.585647419072616in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nA second data file is from Western Kenya. Go back to the ***File \\> Open\nFrom Library*** dialogue. ***Browse*** again to the ***climatic***\ndirectory. Choose ***Kenya*** and then the file ***WesternKenya.RDS***.\n\nThis opens 3 data frames in R-Instat, 2 of which are shown in Fig. 4.2e\nand Fig. 4.2f.\n\n ---------------------------------------------------------------------------------------------------------------\n ***Fig. 4.2e Name and location of each station*** ***Fig. 4.2f Rainfall data***\n ------------------------------------------------------- -------------------------------------------------------\n ![](media/image1281.png){width=\"3.9066469816272966in\" ![](media/image1271.png){width=\"2.2107206911636044in\"\n height=\"2.779728783902012in\"} height=\"2.814510061242345in\"}\n\n ---------------------------------------------------------------------------------------------------------------\n\nFig. 4.2e gives details of each station. The locations are included,\nwhich will be useful, in Chapter xxx when we draw maps. Fig. 4.2f gives\nthe rainfall data for just over 50 stations. There are over 600 thousand\nrows (days) of data in total.\n\nThe third example is again from the ***Instat files*** in the\n***Climatic directory***. Choose ***Original Climatic Guide Datasets***,\nwhich is an Excel file. R-Instat can import multiple sheets together,\nbut here we just need the single sheet called ***Bulmonth***, Fig. 4.2g.\nThe data are monthly from Bulawayo in Zimbabwe from 1951.\n\n ---------------------------------------------------------------------------------------------------------------\n ***Fig. 4.2g Importing monthly data from Bulawayo*** ***Fig. 4.2h Monthly data***\n ------------------------------------------------------- -------------------------------------------------------\n ![](media/image1254.png){width=\"3.0052121609798776in\" ![](media/image1246.png){width=\"3.0768536745406823in\"\n height=\"2.779524278215223in\"} height=\"2.6771259842519686in\"}\n\n ---------------------------------------------------------------------------------------------------------------\n\nThe final example is from an R package. From ***File \\> Open From\nLibrary*** use the ***Open from R*** option, Fig. 4.2i. This gives\naccess to all the datasets provided with the R packages that are in\nR-Instat. Scroll down the ***From Package*** list to the ***OpenAir***\npackage. There is only one data set. Open it to give the data shown in\nFig. 4.2j\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 4.2i Choosing the openair package*** ***Fig. 4.2j Hourly data***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image1238.png){width=\"3.040103893263342in\" ![](media/image1240.png){width=\"2.886120953630796in\"\n height=\"2.7375568678915134in\"} height=\"2.9988998250218724in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nThese examples show what is assumed in R-Instat to analyse the data.\nData for multiple elements and from multiple sites can be in a single\ndata frame. The multiple elements are in successive variables, i.e. they\n\"go across\", while the multiple stations \"go down\". The station name or\nID is a factor column.\n\nThe dates are also needed, either in a single variable, Fig. 4.2j or in\nmultiple variables as in Fig. 4.2h and Fig. 4.2f.\n\n## The R-Instat Climatic System\n\nAnalyses usually proceed using the following general menus:\n\n1. The ***File menu*** is used to read the data\n\n2. The ***Prepare menu*** is to organise the data ready for analysis\n\n3. The ***Describe menu*** is for descriptive statistics, i.e. graphs\n and tables.\n\n4. The ***Model menu*** fits and examines statistical models for the\n data\n\nThis is shown by the structure of the R-Instat menus shown in Fig. 4.3a.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 4.3a The R-Instat menus*** ***Fig. 4.3b The Climatic menu***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image237.png){width=\"2.932736220472441in\" ![](media/image230.png){width=\"2.949284776902887in\"\n height=\"1.6180610236220472in\"} height=\"3.438086176727909in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nThe same applies to climatic data and hence the special climatic menu is\narranged in the same order, Fig. 4.3b. We now examine some of the\ninitial menu items in turn.\n\n ---------------------------------------------------------------------------------------------------------------\n ***Fig. 4.3c The Climatic \\> File menu*** ***Fig. 4.3d The Climatic \\> Tidy and Examine menu***\n ------------------------------------------------------- -------------------------------------------------------\n ![](media/image1234.png){width=\"2.9021456692913388in\" ![](media/image1288.png){width=\"3.1925765529308836in\"\n height=\"1.3064479440069992in\"} height=\"2.466251093613298in\"}\n\n ---------------------------------------------------------------------------------------------------------------\n\nFig. 4.3c shows the ***Climatic \\> File*** menu. Often the data will be\nloaded using the main File menu as for all the examples in Section 4.2\nabove. This used the ***File \\> Open from Library*** dialogue, but the\n***File \\> Open*** dialogue is often used for the data files.\n\nSome options in Fig. 4.3c, such as the importing of NetCDF files are in\nboth menus. Others, like Climsoft are just in this menu. Climsoft is a\ndata management system specially to manage climatic data. It was\ndescribed in general in Section 1.7 and importing from Climsoft is\ndescribed in Section 4.5.\n\nFig. 4.3d shows the ***Tidy and Examine*** menu. The first dialogue is\nused to \"tidy\" climatic data that are not yet in the shape of those in\nthe examples shown in Section 4.2. The idea of Tidy data is useful and\nis described well by [Wickham 2014.]{.mark} He gives a variety of\nexamples, with the most complex being climatic data. The remaining items\nin the menu in Fig. 4.2b are all also in the main Prepare menu. They may\nbe needed if the tidying is too tricky for the special ***Tidy Daily\nData*** dialogue. They are also for further checks. For example, for\ndaily data there should be no duplicate days in the record for the same\nstation. Section 4.8 gives an example where this is not the case.\n\n ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 4.3e The Climatic \\> dates menu*** ***Fig. 4.3f The dialogue to define a data frame as climatic***\n ------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------\n ![](media/image1287.png){width=\"2.4016754155730533in\" ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTMLf1001c1.PNG](media/image1300.png){width=\"3.6607972440944883in\"\n height=\"1.3685028433945756in\"} height=\"4.270929571303587in\"}\n\n ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nNext in the preparation is to check that the file has date columns that\nare ready for the subsequent analyses, Fig. 4.3e. This menu is a copy of\nthe ***Prepare \\> Column: Date*** menu which can be used instead.\n\nThis leads to the ***Define Climatic Data*** dialogue shown in Fig.\n4.3f. The example in Fig. 4.3f is for the 2 stations in Guinee, but\nusing the second copy of the file, called Guinee2.rds. This was prepared\nearlier and saved as an RDS file. The fact it is ready for analysis is\nsaved as part of the metadata for this data frame.\n\nThe subsequent dialogues in the climatic menu all assume the data have\nbeen defined as climatic, i.e. have used the dialogue in Fig. 4.3f.\nThat's the \"climatic system\" in R-Instat.\n\nSome readers may be concerned that they are in a rush to analyse their\ndata and were not prepared for these initial steps. However, if your\ndata are in \"good shape\" then they take only a few minutes. If not, then\nin many analyses these \"organising of data\" steps do take the time. Once\nthis has been done the analyses can proceed quickly.\n\nThese organising steps are only done the first time you use the data.\nThen save the data using ***File \\> Save As \\> Save Data As*** so the\nclimatic information is remembered. You can therefore continue later,\nwith these data, going straight to the subsequent items in the climatic\nmenu.\n\nIf you choose, instead, to save the data frame using ***File \\> Export\n\\> Export Dataset*** this has the advantage that you can view and use\nthe data in other software. The only problem is that the special\nclimatic information from Fig. 4.3f isn't saved. So, when you resume,\nthen start with the ***Define Climatic Data*** dialogue.\n\n## Tidying the Data\n\nYou can ignore this section if your data are already in the shape\ndiscussed in Section 4.2. Often this is not the case.\n\nThe first example was previously prepared for the original Instat. It is\n56 years of daily data from Samaru in Northern Nigeria. Use ***File \\>\nOpen from Library***. Choose ***Instat data***, B***rowse*** to the\n***Climatic directory,*** choose ***Original Climatic Guide Datasets***.\nThere untick the first option and choose the sheet called\n***Samaru56***, Fig. 4.4a.\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 4.4a Open Samaru56*** | ***Fig. 4.4b The \"shape\" of the |\n| | Samaru56 data*** |\n| ***File \\> Open from Library \\> | |\n| Instat \\> Browse \\> Climatic*** | |\n+==================================+===================================+\n| ![](media/image1262.p | ![](media/image1278. |\n| ng){width=\"2.9889523184601923in\" | png){width=\"3.0898140857392824in\" |\n| height=\"2.9002613735783025in\"} | height=\"2.9266207349081363in\"} |\n+----------------------------------+-----------------------------------+\n\nThe data are shown in Fig. 4.4b. They are from 1928 and each year is in\na separate column. All columns are of length 366, in Fig. 4.4b, and\nthere is a special code for February 29^th^ in non-leap years.\n\n+-------------------------------------+--------------------------------+\n| ***Fig. 4.4c Tidying the Samaru | ***Fig. 4.4d Issues in the |\n| data*** | data -- no surprises*** |\n| | |\n| ***Climatic \\> Tidy and Examine \\> | |\n| Tidy Daily Data*** | |\n+=====================================+================================+\n| ![](media/image1 | ![](media/image1270.p |\n| 279.png){width=\"3.17121719160105in\" | ng){width=\"2.49872375328084in\" |\n| height=\"3.300761154855643in\"} | height=\"2.5170286526684165in\"} |\n+-------------------------------------+--------------------------------+\n\nUse ***Climatic \\> Tidy and Examine \\> Tidy Daily Data*** and complete\nthe dialogue as shown in Fig. 4.4c. This will not work, because we know,\nfrom Fig. 4.4b, that there are values on invalid dates, i.e. on Feb 29\nin non-leap years. The results are in Fig. 4.4d. We see that day 60\n(which we knew about) is the only problem. So we can proceed.\n\nReturn to the dialogue in Fig. 4.4c, ***tick the option above to ignore\ndata on invalid dates***. Press ***Ok*** again.\n\n+------------------------------+---------------------------------------+\n| ***Fig. 4.4e Samaru data | ***Fig. 4.4f Using the date |\n| reshaped*** | variable*** |\n| | |\n| | ***Climatic \\> Dates \\> Use Date*** |\n+==============================+=======================================+\n| ![](media/image1269.png) | ![](media/image |\n| {width=\"2.555686789151356in\" | 1260.png){width=\"3.007804024496938in\" |\n| he | height=\"3.889673009623797in\"} |\n| ight=\"3.7988068678915137in\"} | |\n+------------------------------+---------------------------------------+\n\nThe results are in Fig. 4.4e. The tidy data now has 20454 rows (days).\nAlso, as shown in Fig. 4.4e is that there is no longer any need for a\nspecial code for February 29^th^ in non-leap years.\n\nThe date column has been included in the data in Fig. 4.4e. The next\nstep is the ***Climatic \\> Dates \\> Use Date*** dialogue, completed as\nin Fig. 4.4f. This adds 4 new columns to the data file. We then do some\nhousekeeping, with ***Right-Click*** and ***Reorder Columns*** to give\nthe data as shown in Fig. 4.4g.\n\n+-------------------------------+--------------------------------------+\n| ***Fig. 4.4g Data ready to be | ***Fig. 4.4h Defining the data as |\n| defined as climatic*** | climatic*** |\n| | |\n| | ***Climatic \\> Define Climatic |\n| | Data*** |\n+===============================+======================================+\n| ![](media/image1277.png | ![](media/image12 |\n| ){width=\"2.641606517935258in\" | 08.png){width=\"3.0199562554680663in\" |\n| h | height=\"3.5843416447944008in\"} |\n| eight=\"2.5361253280839895in\"} | |\n+-------------------------------+--------------------------------------+\n\nNow use ***Climatic \\> Define Climatic Data***. The dialogue fills\nautomatically which is a good sign. The Check Unique also indicates the\nDate column can be a key field. Press Ok and the data are now ready for\nthe analysis in R-Instat. They can be saved as an RDS file and/or\nexported as a csv file.\n\nThese steps should not have taken long. But this was a single element\n(rain) from a single station.\n\nA second example is data from Garoua, Cameroon. The rainfall first, and\ninitially in Excel, Fig. 4.4i.\n\n -----------------------------------------------------------------------\n ***Fig. 4.4i Rainfall data from Garoua***\n -----------------------------------------------------------------------\n ![](media/image1211.png){width=\"5.617016622922135in\"\n height=\"2.673465660542432in\"}\n\n -----------------------------------------------------------------------\n\nThere are (at least 4 complications with these data, compared to the\nshape we would like.\n\n1. There are some trace values, given as TR in the data, Fig. 4.4i\n\n2. Each year is on a separate Excel sheet.\n\n3. There are summary values, i.e. there are daily data and analysed\n data together in Fig. 4.4i.\n\n4. The months \"go across\".\n\nWe change the trace issue in Excel. They are rare and only up to 2005.\nR-Instat does not (yet) cope with trace[^16]. We choose to replace the\nTR by 0 in each sheet. This is easily done in Excel. The data are saved\nas \"Garoua Daily Rainfall data 1999-July2013NOTR.xlxs\".\n\nIn R-Instat save any files you wish, then use ***File \\> Close Data\nFile*** to clear your data.\n\nThen use ***File \\> Open from Library \\> Instat file, Browse, Climatic,\nCameroon***. ***Open the Garoua rainfall file with the TR removed***,\nFig. 4.4j***.***\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 4.4j Importing the Garoua rainfall*** ***Fig. 4.4k Complete the importing dialogue***\n ------------------------------------------------------ -------------------------------------------------------\n ![](media/image1199.png){width=\"3.012716535433071in\" ![](media/image1212.png){width=\"3.0955194663167105in\"\n height=\"3.050082020997375in\"} height=\"3.032146762904637in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\n***Click to select all the sheets***, and to import only the first ***31\ndata rows***, Fig. 4.4k. Press ***Ok***.\n\nThe 15 Excel sheets have imported into 15 R data frames, Fig. 4.4l and\nwe check quickly that each has the 31 rows and 13 columns. Also, that\nall the columns are numeric. All seems alright. The next step is to\nappend the years together.\n\n+--------------------------------+-------------------------------------+\n| ***Fig. 4.4l The Garoua | ***Fig. 4.4m Appending the years*** |\n| rainfall data imported*** | |\n| | ***Climatic \\> Tidy and Examine \\> |\n| | Append*** |\n+================================+=====================================+\n| ![](media/image1206.png | ![](media/image1 |\n| ){width=\"2.7554286964129484in\" | 204.png){width=\"3.26417760279965in\" |\n| height=\"2.5474726596675414in\"} | height=\"2.4939785651793525in\"} |\n+--------------------------------+-------------------------------------+\n\nUse ***Climatic \\> Tidy and Examine \\> Append*** and use ***all the\nsheets***, Fig. 4.4m. Press ***Ok***.\n\nThe 15 years of data are now in a single data frame, Fig. 4.4n, and the\nAppend dialogue has added an extra variable that contains the Year. We\nneed the year, but it is \"hidden\" inside X2013.Stats\", etc. The next\ndialogue is in Prepare, rather than Climatic.\n\nUse ***Prepare \\> Column: Text \\> Transform*** and complete the dialogue\nas shown in Fig. 4.4o\n\n+--------------------------------+-------------------------------------+\n| ***Fig. 4.4n Data in a single | ***Fig. 4.4o Extract the Year |\n| data frame*** | number*** |\n| | |\n| | ***Prepare \\> Column: Text \\> |\n| | Transform*** |\n+================================+=====================================+\n| ![](media/image1221.png | ![C:\\\\Users\\ |\n| ){width=\"2.7817443132108486in\" | \\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\S |\n| height=\"2.539852362204724in\"} | NAGHTML109fd672.PNG](media/image119 |\n| | 8.png){width=\"3.1949234470691166in\" |\n| | height=\"2.772106299212598in\"} |\n+--------------------------------+-------------------------------------+\n\nThis adds a new column called yr, Fig. 4.4p.\n\n+---------------------------------+------------------------------------+\n| ***Fig. 4.4p The year is now | ***Fig. 4.4q Sort the data using |\n| available*** | the year column*** |\n| | |\n| | ***Right-click \\> Sort or Prepare |\n| | \\> Data Frame \\> Sort*** |\n+=================================+====================================+\n| ![](media/image1188.pn | ![C:\\\\Users\\\\R |\n| g){width=\"2.9009897200349957in\" | OGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SN |\n| height=\"2.3619094488188974in\"} | AGHTML10a74ad5.PNG](media/image119 |\n| | 3.png){width=\"3.099902668416448in\" |\n| | height=\"3.013610017497813in\"} |\n+---------------------------------+------------------------------------+\n\nNearly there. Use ***Climatic \\> Tidy and Examine \\> Tidy Daily Data***\nas shown in Fig. 4.4r. Earlier, in Fig. 4.4c, each year was in a column.\nNow each month is in its own column. Complete Fig. 4.4r as shown. As\nwith the first run earlier (Fig. 4.4c) we first check on any errors,\nrather than simply ignoring them.\n\n+----------------------------------------+-----------------------------+\n| ***Fig. 4.4r Tidy the daily data*** | ***Fig. 4.4s An error is |\n| | reported. The yr column |\n| ***Climatic \\> Tidy and Examine \\> | should be numeric*** |\n| Tidy Daily Data*** | |\n+========================================+=============================+\n| ![](media/image | ![](media/image1229.png) |\n| 1233.png){width=\"3.4139971566054244in\" | {width=\"2.59626968503937in\" |\n| height=\"3.800272309711286in\"} | hei |\n| | ght=\"0.6789588801399825in\"} |\n+----------------------------------------+-----------------------------+\n\nThere is an error! This can happen. Reading the message is says the\n\"year column must be numeric\".\n\nLooking back to Fig. 4.4p we see the year column is given as yr (c), so\nit is a character, or text column. So ***right-click*** and ***change it\nto numeric.*** Then ***return to the dialogue*** in Fig. 4.4r and press\n***Ok*** again.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 4.4t Some issues with the data*** ***Fig. 4.4u The tidy Garoua data -- at last!***\n ------------------------------------------------------- -----------------------------------------------------\n ![](media/image1237.png){width=\"2.9636832895888015in\" ![](media/image1228.png){width=\"2.65291447944007in\"\n height=\"2.599909230096238in\"} height=\"3.4515660542432194in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nThe results are in Fig. 4.4t. Our troubles are not over, because we\nlearn there are 8 non-existent days with rainfall. Fortunately, most\nhave zero and this was probably just a simple error. But the data shows\nthere was 13.7mm on 31 September 2006, and this is a puzzle.\nUnfortunately, we have no way of checking this value now. So, we return\nto the dialogue in Fig. 4.4r and change the options to ignore these\ndays. The result is in Fig. 4.4u.\n\nIf you now wish to proceed with the analysis of the rainfall data, then\nthe next steps are just the same as for the Samaru data, i.e. first the\n***Climatic \\> Dates \\> Use Date*** dialogue, Fig. 4.4f and then the\n***Climatic \\> Define Climatic Data***, Fig. 4.4h. However, we may first\nwant to reorganise the Tmax and Tmin data, and then merge the 3\nelements, before defining the climatic data. We leave this largely as an\nexercise but provide a few hints below.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 4.4v Garoua Tmax data*** ***Fig. 4.4w A problem with the data***\n ------------------------------------------------------- ------------------------------------------------------\n ![](media/image1223.png){width=\"3.0163976377952757in\" ![](media/image1183.png){width=\"2.942357830271216in\"\n height=\"2.7246872265966755in\"} height=\"2.448571741032371in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nPart of the Tmax data are shown in Excel in Fig. 4.4v. There are again\nmultiple sheets and this time each column is a day of the month. So,\nthere are now 31 columns of data. This is the third option, when using\nthe ***Climatic \\> Tidy and Examine \\> Tidy Daily Data*** dialogue. For\nthe Samaru data, the years were in separate columns in Fig. 4.4c, and\nthe months in Fig. 4.4r. This time it is the day of the month. That is\nquite a common layout.\n\nOn importing all the data for Tmax there is a common problem on the\nsheet called Page 10. The immediate indication is that some values in\nX25 (25^th^ of the month) have many decimals. This is because the column\nname is X25 (c), so it is a character or text column and not numeric.\nThis is because one value is given as 35.B. Perhaps it should be 35.8?\n\nHence note all the columns in Page 10 that are text columns. These are\neasily corrected in Excel. Then the tidying of the data follows similar\nsteps to that for the rainfall.\n\nOnce the Tmax and Tmin data have been tidied, the ***Climatic \\> Tidy\nand Examine \\> Merge*** dialogue is used to merge the elements into a\nsingle data frame.\n\n## Transferring data from Climsoft\n\nClimsoft is a comprehensive system for the entry and management of\nclimatic data. The main menu is shown in Fig. 4.5a. It is designed for\nthe entry (or transfer) of climatic data of any sort. It is also\nparticularly useful for capturing and managing data from automatic\nstations.\n\nIt also includes facilities for the scanned paper records and hence\nfacilitates the checking of the computerised data against the originals.\n\nCLIMSOFT has its own products but is also designed to work smoothly with\nR-Instat. Hence R-Instat can produce products and applications for\nCLIMSOFT.\n\n -----------------------------------------------------------------------\n ***Fig. 4.5a The main CLIMSOFT menu***\n -----------------------------------------------------------------------\n ![](media/image1227.png){width=\"4.769510061242345in\"\n height=\"3.358102580927384in\"}\n\n -----------------------------------------------------------------------\n\nThere are two ways to transfer data from Climsoft into R-Instat. If\nClimsoft is on your machine, or is available from your machine, then\nR-Instat can read the Climsoft database directly. Otherwise Climsoft can\nexport tidy data that is in the form that is easily used by R-Instat.\nBoth methods are shown here.\n\nUse ***Climatic \\> File \\> Climsoft*** to transfer data directly from a\nClimsoft database, Fig. 4.5b.\n\n+-------------------------------------+--------------------------------+\n| ***Fig. 4.5b Import data from | ***Fig. 4.5c Connect to the |\n| Climsoft*** | database*** |\n| | |\n| ***Climatic \\> File \\> Climsoft*** | |\n+=====================================+================================+\n| ![C:\\\\Users\\ | ![C:\\\\Users\\\\ROGERS\\~1\\\\App |\n| \\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\S | Data\\\\Local\\\\Temp\\\\SNAGHTML117 |\n| NAGHTML117998d8.PNG](media/image123 | f6eae.PNG](media/image1217.png |\n| 2.png){width=\"3.1856747594050745in\" | ){width=\"2.3774759405074364in\" |\n| height=\"3.1720319335083116in\"} | height=\"2.4924475065616796in\"} |\n| | |\n| | ![C:\\\\Users\\\\ROGERS\\~1\\\\App |\n| | Data\\\\Local\\\\Temp\\\\SNAGHTML118 |\n| | 11950.PNG](media/image1207.png |\n| | ){width=\"2.7705063429571304in\" |\n| | height=\"0.6207775590551181in\"} |\n+-------------------------------------+--------------------------------+\n\nIn Fig. 4.5b ***Click*** on the ***Establish Connection*** button to\ngive the screen shown in Fig. 4.5c. This is already set to the main\ndatabase, so you probably do not need to change that name. We chose to\nadd \\_test\\_, Fig. 4.5c to use the tutorial database. Then click on\n***Enter Password*** and enter your Climsoft password shown at the\nbottom of Fig. 4.5c.\n\nThe sub-dialogue now says ***Connected***, Fig. 4.5d and you can press\n***Return***.\n\n ---------------------------------------------------------------------------------------------------------------\n ***Fig. 4.5d Connected*** ***Fig. 4.5e Transfer just the station data***\n ------------------------------------------------------- -------------------------------------------------------\n ![](media/image1167.png){width=\"2.6251345144356955in\" ![](media/image1157.png){width=\"3.3453958880139982in\"\n height=\"2.7640310586176726in\"} height=\"3.291350612423447in\"}\n\n ---------------------------------------------------------------------------------------------------------------\n\nThe main dialogue, in Fig. 4.5e now has all the station identifiers. We\nchoose them all and press Ok.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 4.5f Station data imported from Climsoft*** ***Fig. 4.5g Add observation data***\n ------------------------------------------------------ -------------------------------------------------------\n ![](media/image1145.png){width=\"2.707234251968504in\" ![](media/image1156.png){width=\"3.2457753718285214in\"\n height=\"2.139587707786527in\"} height=\"3.18499343832021in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nThis gives the station information in Fig. 4.5f for all 122 stations in\nthe tutorial database.\n\nNow return to the Climsoft dialogue and tick the box for the observation\ndata. Now the Elements are chosen, and we have selected Tmax, Tmin and\nrainfall in Fig. 4.5g. The Start Date and End Date are left blank so all\nthe data is transferred.\n\n+-------------------------------------+--------------------------------+\n| ***Fig. 4.5h The data are | ***Fig. 4.5i Add a Date |\n| imported*** | column*** |\n| | |\n| | ***Climatic \\> Dates \\> Make |\n| | Date*** |\n+=====================================+================================+\n| ![](media/image115 | ![](media/image1166.png |\n| 5.png){width=\"3.1908967629046368in\" | ){width=\"2.8087740594925634in\" |\n| height=\"2.257316272965879in\"} | height=\"2.605239501312336in\"} |\n+-------------------------------------+--------------------------------+\n\nThe data in R-Instat are in Fig. 4.5h. There are 6 columns, first the\nstation, then the element given in 3 different ways, then the date and\nfinally the data.\n\nThe date column is a date-time variable, because the data may be\nsub-daily. Use the ***Climatic \\> Dates \\> Make Date*** dialogue as\nshown in Fig. 4.5i. This adds an R date column.\n\nHad we exported just a single element then the data would now be almost\nready. As in Section 4.4, just use ***Climatic \\> Dates \\> Use Date***\nand then ***Climatic \\> Define Climatic Data***.\n\nHowever, as we imported 3 elements (Tmax, Tmin and Rain) we have one\nfurther step, because they are currently all in a single column. They\nneed to be in separate columns.\n\nFirst use Right-click on one of the element columns, Fig. 4.5j, and\nconvert it to a factor column.\n\n+-------------------------------+--------------------------------------+\n| ***Fig. 4.5j Make the Element | ***Fig. 4.5k Unstack the data on the |\n| column a factor*** | 3 elements*** |\n| | |\n| | ***Climatic \\> Tidy and Examine \\> |\n| | Unstack*** |\n+===============================+======================================+\n| ![](media/image1153.png) | ![C:\\\\Use |\n| {width=\"2.6682010061242343in\" | rs\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\ |\n| h | \\SNAGHTML120afa21.PNG](media/image11 |\n| eight=\"2.0810804899387576in\"} | 43.png){width=\"3.2150010936132984in\" |\n| | height=\"3.11830927384077in\"} |\n+-------------------------------+--------------------------------------+\n\nUse ***Climatic \\> Tidy and Examine \\> Unstack*** and complete the\ndialogue as shown in Fig 4.5k. The data are in Fig. 4.5m and are in just\nthe right \"shape\" for R-Instat.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 4.5l The data ready for R-Instat*** ***Fig. 4.5m Climsoft dialogue to export data***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image1154.png){width=\"3.026971784776903in\" ![](media/image1129.png){width=\"2.93706583552056in\"\n height=\"2.7565004374453195in\"} height=\"2.774326334208224in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nThe second way is for data to be exported from Climsoft that can then be\nimported into R-Instat.\n\nFor this option the CLIMSOFT user starts with the ***Products option***\nin Fig. 4.5a. The products menu is shown in Fig 4.5m. Select ***Data***\nas the Product category and ***Daily***, as shown in Fig. 4.5m.\n\n -----------------------------------------------------------------------------------------------------------------------\n ***Fig. 4.5n Screen to export daily data from Climsoft***\n -----------------------------------------------------------------------------------------------------------------------\n ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTML15618e97.PNG](media/image1180.png){width=\"6.1309044181977255in\"\n height=\"3.1893930446194227in\"}\n\n -----------------------------------------------------------------------------------------------------------------------\n\nThe resulting screen in Climsoft is shown in Fig. 4.5n. Complete it as\nshown and then press to ***Start Extraction,*** Fig. 4.5n. The resulting\ndata are shown in Fig. 4.5o.\n\n -----------------------------------------------------------------------------------------\n ***Fig. 4.5o Ooops!*** \n ------------------------------------------------------- ---------------------------------\n ![](media/image1190.png){width=\"3.1422430008748905in\" \n height=\"2.184351487314086in\"} \n\n -----------------------------------------------------------------------------------------\n\n## Satellite data\n\n## What can go wrong?\n\nNothing may go wrong in organising your data ready for analysis. Even\nso, it is often frustrating, particularly to those who are relatively\ninexperienced in these tasks, that the organising stage takes so long,\nand is also often quite difficult. What can we say except perhaps\n\"Welcome to the real world\"!\n\nBut it is annoying that these steps come first and may be more difficult\nand time-consuming that the subsequent analyses. These problems are\ngeneral and are not limited to climatic data, but that may be small\ncomfort as you hoped to proceed quickly and then have more time for\nother activities!\n\nIn addition, things may take longer, because of additional problems in\nthe data. We look at some examples in this section. You need to become a\nsuper-critical data detective. Here we show how and why.\n\nThe first problem is very common. It was earlier shown in Fig. 4.4w and\nwe repeat it in Fig. 4.7a. A column that should be numeric has a (c)\nafter it, in R-Instat.\n\n --------------------------------------------------------------------------------------------------------------\n ***Fig. 4.7a Numeric data imports as character ***Fig. 4.7b Filter in Excel to see the problem***\n (text)*** \n ------------------------------------------------------ -------------------------------------------------------\n ![](media/image1183.png){width=\"2.942357830271216in\" ![](media/image1165.png){width=\"2.2510772090988627in\"\n height=\"2.448571741032371in\"} height=\"3.288844050743657in\"}\n\n --------------------------------------------------------------------------------------------------------------\n\nThis indicates it is a character, or text, column. The \"cure\" is usually\nto return to Excel and correct the error there. In Excel, once you know\nwhere to look, then one way is to set up a filter and then check on the\ncolumn that R-Instat has shown has the problem. In Fig. 4.7b we filter\non column Z for the 25^th^ and find the bottom entries are not in order.\nA more careful look shows the bottom value to be 38.B when it possibly\nshould have been 38.8. Other character columns on this same sheet were\nwhen a number was typed with a space and no decimal, e.g. 38 6 instead\nof 38.6 on the 10^th^ of the month.\n\nA check that is often useful is Climatic \\> Tidy and Examine \\> One\nVariable Summaries. This is the Examining part of this menu. To show its\nuse, look again at the Dodoma data that was introduced in Chapter 2. So,\n***File \\> Open from Library \\> Instat Data \\> Browse \\> Climatic\nDirectory \\> Instat Guide datasets \\> Dodoma***.\n\nThe data are shown in Fig. 4.7c. On ***row 120 make a deliberate\nmistake***, i.e. double click on April 30 and change the ***30 into\n31***. That's not a possible day!\n\n+-----------------------------+----------------------------------------+\n| ***Fig. 4.7c Dodoma with an | ***Fig. 4.7d Add a date column*** |\n| error added*** | |\n| | ***Climatic \\> Dates \\> Make Date*** |\n+=============================+========================================+\n| ![](media/image1175.png){w | ![](media/image |\n| idth=\"2.5625590551181103in\" | 1170.png){width=\"3.4776574803149605in\" |\n| he | height=\"2.7455194663167104in\"} |\n| ight=\"2.680066710411199in\"} | |\n+-----------------------------+----------------------------------------+\n\nAdd a date column using ***Climatic \\> Dates \\> Make Date*** and\ncomplete the dialogue as shown in Fig. 4.7d.\n\n+--------------------------------+-------------------------------------+\n| ***Fig 4.7e Examine the | ***Fig. 4.7f Resulting summaries*** |\n| data*** | |\n| | |\n| ***Climatic \\> Tidy and | |\n| Examine \\> One Variable | |\n| Summarise*** | |\n+================================+=====================================+\n| ![](media/image1161.pn | ![](media/image11 |\n| g){width=\"2.727936351706037in\" | 72.png){width=\"3.288003062117235in\" |\n| height=\"2.4675043744531933in\"} | height=\"1.9241557305336834in\"} |\n+--------------------------------+-------------------------------------+\n\nUse ***Climatic \\> Tidy and Examine \\> One Variable Summarise*** as\nshown in Fig. 4.7e. The results are in Fig. 4.7f.\n\nExamine these results for each column in turn. The results are\nencouraging. The Year goes from 1935 to 2013. The day of the month is\nfrom 1 to 31 -- which is fine.\n\nThe rainfall is from 0 (zero) to 119.8. Sometimes it is from -9999 in\nwhich case the missing values need to be recoded[^17]. Here they seem\nfine, and it is encouraging tht there are less than 100 missing values\noverall. Similarly, the limits for Tmax, Tmin and Sunh all seem\nreasonable.\n\nThe last column is the Date and there is one missing value -- as we\nknow, because this time we caused it! There should not be missing values\nin the date column. You need to do something about it.\n\nThe first step in solving the problem (assuming we don't know it) is to\nfilter the data, choosing just the days when Date1 == NA. To do this,\nright-click in any column and choose Filter, Fig, 4.7g.\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 4.7g Filter to locate | ***Fig. 4.7h The Filter |\n| the problem*** | sub-dialogue*** |\n| | |\n| ***Right-click \\> Filter*** | |\n+==================================+===================================+\n| ![](media/image1173. | ![](media/image1194. |\n| png){width=\"2.901389982502187in\" | png){width=\"3.0803193350831144in\" |\n| height=\"3.3789851268591424in\"} | height=\"2.3552165354330707in\"} |\n+----------------------------------+-----------------------------------+\n\nIn the Filter dialogue, choose the button to Define New Filter, and\ncomplete the sub-dialogue as shown in Fig. 4.7h. Click to Add Condition\nthen ***Return*** and ***Ok***.\n\nThe filtered data, Fig.\n\n -----------------------------------------------------------------------\n ***Fig. 4.7i The filtered data***\n -----------------------------------------------------------------------\n ![](media/image1098.png){width=\"5.618597987751531in\"\n height=\"1.294780183727034in\"}\n\n -----------------------------------------------------------------------\n\nThis shows it is row 120 that is causing the problem. The correction can\nbe made immediately, or you may like to remove the filter first and then\ncheck that there was no value on April 30 in that year.\n\nData from Thaba Tseka in Lesotho initially seemed easy to process. Use\n***File \\> Open from Library \\> Instat \\> Browse \\> Climatic \\>\nLesotho*** and the file ***Thaba_Tseka_Original***.\n\n -----------------------------------------------------------------------\n ***Fig. 4.7j The Thaba-Tseka rainfall data***\n -----------------------------------------------------------------------\n ![](media/image1109.png){width=\"5.528430664916885in\"\n height=\"2.338526902887139in\"}\n\n -----------------------------------------------------------------------\n\nThe data have been exported from a previous version of Climsoft (see\nSections 1.6 and 4.5). They include a lot of station details but seem in\nexactly the right shape to make quick progress.\n\n+------------------------------+---------------------------------------+\n| ***Fig. 4.7k Add a date | ***Fig. 4.7l Define Climatic Data*** |\n| column*** | |\n| | ***Climatic \\> Define Climatic |\n| ***Climatic \\> Dates \\> Make | Data*** |\n| Date*** | |\n+==============================+=======================================+\n| ![](media/image1102.png){ | ![](media/image1 |\n| width=\"2.5451115485564304in\" | 087.png){width=\"2.6707239720034996in\" |\n| h | height=\"3.1690671478565178in\"} |\n| eight=\"3.125343394575678in\"} | |\n+------------------------------+---------------------------------------+\n\nDefine a date column from ***Climatic \\> Dates \\> Make Date, Fig.\n4.7k,*** and then check, with ***Climatic \\> Tidy and Examine \\> One\nVariable Summarise***, as in Fig. 4.7e. All seems fine so far.\n\nSo, the last step. Use ***Climatic \\> Define Climatic Data*** as in Fig.\n4.7l. Complete the year, month, day fields, as the names are not\nrecognised automatically. Also, obs is the rain column.\n\nFinally check for uniqueness, Fig. 3.7m.\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 4.7m A problem - | ***Fig. 4.7n Check on the |\n| duplicates*** | Duplicates*** |\n| | |\n| | ***Climatic \\> Tidy and Examine |\n| | \\> Duplicates*** |\n+==================================+===================================+\n| ![](media/image1094. | ![C:\\\\Users\\\\ROGE |\n| png){width=\"2.859336176727909in\" | RS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAG |\n| height=\"2.021839457567804in\"} | HTML199cd2c0.PNG](media/image1103 |\n| | .png){width=\"3.061738845144357in\" |\n| | height=\"3.214241032370954in\"} |\n+----------------------------------+-----------------------------------+\n\nThe message in Fig. 4.7m indicates a problem. There are apparently\nduplicate values in the data.\n\nAs suggested in Fig. 4.7m use ***Climatic \\> Tidy and Examine \\>\nDuplicates*** and complete as shown in Fig. 4.7n. This produces a new\nlogical column, that is first examined through ***Climatic \\> Tidy and\nExplore \\> One Variable Summarise***, Fig. 4.7o.\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 4.7o Find how often | ***Fig. 4.7p The results*** |\n| there are duplicates*** | |\n| | |\n| ***Climatic \\> Tidy and Examine | |\n| \\> One Variable Summarise*** | |\n+==================================+===================================+\n| ![](media/image1099. | ![](media/image1082. |\n| png){width=\"2.949659886264217in\" | png){width=\"3.0340715223097114in\" |\n| height=\"2.6671434820647417in\"} | height=\"1.0911526684164479in\"} |\n+----------------------------------+-----------------------------------+\n\nIf there were no duplicates, then this column would be FALSE all the\ntime. We learn, from the result in Fig. 4.7p that it is TRUE on 364\nrows. There are then at least 2 values for each day, so up to 182 days\nhave duplicate values.\n\n+--------------------------------+-------------------------------------+\n| ***Fig. 4.7r Filter | ***Fig. 4.7s The filtered data*** |\n| sub-dialogue*** | |\n| | |\n| ***Right Click \\> Filter \\> | |\n| Define New Filter*** | |\n+================================+=====================================+\n| ![](media/image1089.p | ![](media/image109 |\n| ng){width=\"2.78961832895888in\" | 0.png){width=\"3.2141513560804897in\" |\n| height=\"1.4765748031496062in\"} | height=\"3.3251870078740158in\"} |\n+--------------------------------+-------------------------------------+\n\nUse the ***right-click and Filter*** dialogue. Then Define new Filter\nand complete the sub-dialogue as shown in Fig. 4.7r. Then ***Return***,\nand ***Ok*** to show the filtered data in Fig. 4.7s.\n\nThe possible problem becomes clearer from an examination of the data\nfrom the first 4 days. They are consecutive, from 18^th^ to 21^st^\nJanuary 1987. It looks as though a value might have been put on one day,\nand then corrected to the previous day. But both versions of the data\nhave been exported from Climsoft, and without any indication of which\nversion is the more recent.\n\nNow, having been a data detective -- it is probably time to go back to\nthe source of the data. This could be to check against the paper copy,\nor to see whether the data could be exported without the\nduplicates[^18].\n\n## What's next?\n\n[I would like to describe some of the sets of software to be used in\nlater chapters -- in addition to those so far. In particular I am\nlooking for examples from countries (in addition to Kenya) where there\ncould be quite a number of stations. One possibility is Rwanda, where we\nhave permission to use 4 stations. I wonder about Germany -- partly\nbecause of its potential for comparing satellite and station data.\nLesotho -- I could ask, and Guyana. Later possibly Haiti, but the data\naren't quite ready yet. Maybe Ghana, we currently have permission to use\n2 stations.]{.mark}","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_4_Getting_the_data_into_shape.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_4_Getting_the_data_into_shape.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_5_Quantity_and_quality.qmd.json b/.quarto/idx/Chapter_5_Quantity_and_quality.qmd.json new file mode 100644 index 0000000..e601bb7 --- /dev/null +++ b/.quarto/idx/Chapter_5_Quantity_and_quality.qmd.json @@ -0,0 +1 @@ +{"title":"Quantity and quality?","markdown":{"headingText":"Quantity and quality?","containsRefs":false,"markdown":"## Introduction\n\nStarting from this Chapter, we assume the data for analysis are \"tidy\"\nand are defined as a climatic data frame in R-Instat.\n\n -----------------------------------------------------------------------------------------\n ***Fig. 5.1a The Check Data menu*** \n ------------------------------------------------------ ----------------------------------\n ![](media/image1116.png){width=\"3.071272965879265in\" \n height=\"2.6721817585301837in\"} \n\n -----------------------------------------------------------------------------------------\n\nThis chapter shows different ways to now look at the data. For many\napplications this stage can be done quickly, and the work then proceeds\nwith the analyses described in the following chapters. But omit this\nstare at your peril. We often find users have gone immediately to the\nanalyses they need, only to have to return later to look more critically\nat their data.\n\nFrom now on, in this guide, we will also assume that you are reasonably\ncomfortable in your use of R-Instat. In Section 5.2 we outline what that\nmeans.\n\nSection 5.3 shows how to get a quick inventory of the data. We also\nconsider how to tabulate and graph the primary, usually daily, data.\nThen Section 5.3 examines the data via boxplots. Boxplots are primarily\nan exploratory tool, but can also be used for presentation graphs.\n\nFinally, we consider some formal quality control checks on the data.\nWhat oddities might be in the data and what can be done about them.\n\n## An inventory -- what data do I have?\n\nOpen the Rwanda workshop data, Fig. 5.2a. This is from 4 stations and\nhas already been defined as climatic data as described in Chapter 4.\n\nUse the first menu item in the ***Climatic \\> Check Data*** menu, Fig.\n5.1a to choose an ***Inventory*** plot, Fig. 5.2b.\n\nIn Fig. 5.2b the Data and the Station receivers are completed\nautomatically. This is because the data frame was defined as Climatic\nwith these components. If not, then usually:\n\na. The data frame was not yet defined as climatic.\n\nb. You are in the wrong data frame -- change it in the data selector in\n the dialogue in Fig. 5.2b.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 5.2a Rwanda workshop | ***Fig. 5.2b Inventory |\n| data*** | Dialogue*** |\n| | |\n| ***File \\> Open from Library \\> | ***Climatic \\> Check Data \\> |\n| Instat \\> Climatic \\> Rwanda \\> | Inventory*** |\n| Rwanda Workshop Data.RDS*** | |\n+===================================+==================================+\n| ![](media/image1139. | ![](media/image1150. |\n| png){width=\"3.0161132983377077in\" | png){width=\"2.973377077865267in\" |\n| height=\"3.0676706036745407in\"} | height=\"2.575567585301837in\"} |\n+-----------------------------------+----------------------------------+\n\nIn Fig. 5.2b, add the 3 data columns for TMAX, TMIN and PRECIP and press\nOk. The resulting inventory is in Fig. 5.2c.\n\n ---------------------------------------------------------------------------------------------------------------\n ***Fig. 5.2c Default inventory plot*** ***Fig. 5.2d Facet by element***\n ------------------------------------------------------- -------------------------------------------------------\n ![](media/image1144.png){width=\"2.9092760279965004in\" ![](media/image1110.png){width=\"3.0269050743657044in\"\n height=\"2.830469160104987in\"} height=\"2.839443350831146in\"}\n\n ---------------------------------------------------------------------------------------------------------------\n\nExperiment with the display. For example, in Fig. 5.2d the ***Facet\nBy***, in Fig. 5.2b has been set to be the ***Element***, rather than\nthe ***Station***.\n\nOne oddity in the data in Fig. 5.2c and 5.2d was the gap in the rainfall\nrecords in the 1980s at 2 of the stations. It is quite common to have\nrainfall records in the database without the corresponding temperature\nrecords, but the reverse is odd. The data were exported from the\nClinsoft database and it was not clear why these data were absent. That\nis the idea of being able to produce an inventory.\n\nThe value of the inventory presentation is that the information on many\nstations and elements can be shown together. However, the graphs show\njust when data was present or absent. They do not show the actual\nvalues.\n\nThey can be supplemented by simple time series plots[^19].\n\n -----------------------------------------------------------------------\n ***Fig. 5.2e Rwanda temperature data***\n -----------------------------------------------------------------------\n ![](media/image1128.png){width=\"6.066142825896763in\"\n height=\"3.02500656167979in\"}\n\n -----------------------------------------------------------------------\n\nThese plots give a useful indication of the data for analysis. One\nperiod in Kamembe Airport is marked in Fig. 5.2e as a cause for concern.\nIn Fig. 5.2f the interactive plotting, using ***Describe \\> View\nGraph*** is used to examine this part of the graph in more detail.\n\n -------------------------------------------------------------------------------------------\n ***Fig. 5.2f Examine the temperature data in more \n detail*** \n ------------------------------------------------------- -----------------------------------\n ![](media/image1138.png){width=\"2.9750185914260716in\" \n height=\"3.30957895888014in\"} \n\n -------------------------------------------------------------------------------------------\n\nFig 5.2g shows the same time series graph for the rainfall data at each\nsite. There is a dry period in the year and hence the different years\nare clearly visible in these graphs.\n\n -----------------------------------------------------------------------\n ***Fig. 5.2g Rainfall data at the four stations***\n -----------------------------------------------------------------------\n ![](media/image1126.png){width=\"6.052942913385826in\"\n height=\"2.9319149168853893in\"}\n\n -----------------------------------------------------------------------\n\nThe next dialogue is ***Climatic \\> Check Data \\> Display Daily***, Fig.\n5.2h. This produces a lot of output, so we first choose the filter the\ndata to just the first station, Gisenyi[^20].\n\nWhen using this dialogue the items on the right (from Station down to\nYear) are completed automatically. If not, then you are probably in the\nwrong data frame\n\n+-------------------------------+--------------------------------------+\n| ***Fig. 5.2h Examining daily | ***Fig. 5.2i One year of the data*** |\n| values*** | |\n| | |\n| ***Climatic \\> Check Data \\> | |\n| Display Daily*** | |\n+===============================+======================================+\n| ![](media/image1105.png) | ![](media/image1 |\n| {width=\"2.6560739282589676in\" | 100.png){width=\"3.337146762904637in\" |\n| height=\"3.423170384951881in\"} | height=\"3.400753499562555in\"} |\n+-------------------------------+--------------------------------------+\n\n. Complete the dialogue in Fig. 5.2h as shown. We have chosen to recode\nzero rainfalls to \"---\". This is an option so the rainy days are\ndisplayed more clearly in Fig. 5.2i. It indicates the dry period in the\nyear is usually June and July. The dry period was a feature of Fig.\n5.2g.\n\nWe have now almost come \"full circle\". In Fig. 4.4i the rainfall data\nfrom Garoua, Cameroon, were supplied for analysis arranged in a similar\nway to the data now shown in Fig. 5.2i. This is a very clear and\nsensible layout for the data, but to examine, not to analyse.\n\nThe second tab in the same ***Climatic \\> Check Data \\> Display Daily***\ndialogue gives a simple graphical display of the data \"by year\". An\nexample of the resulting display is in Fig. 5.2j. The results show both\nthe missing periods as well as the dry parts of the year.\n\n -----------------------------------------------------------------------\n ***Fig. 5.2j. Daily rainfall for one station***\n -----------------------------------------------------------------------\n ![](media/image698.png){width=\"6.105915354330708in\"\n height=\"2.9670450568678914in\"}\n\n -----------------------------------------------------------------------\n\n## Using boxplots to check and present data\n\nOpen the Dodoma data, using the RDS file from the Climatic \\> Tanzania\ndirectory. This is already set as a climatic data frame as described in\nChapter 4. It shows data from a single site, with multiple elements.\n\nMost of the examples in this Section use the special ***Climatic \\>\nCheck Data \\> Boxplot*** dialogue. Boxplots are also available through\nthe main Describe menu (Describe \\> Specific \\> Boxplot). The results\nare the same, but the Climatic Boxplot dialogue is usually simpler to\ncomplete.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 5.3a Climatic boxplot | ***Fig. 5.3b Seasonal pattern of |\n| dialogue*** | sunshine hours*** |\n| | |\n| ***Climatic \\> Check Data \\> | |\n| Boxplot*** | |\n+===================================+==================================+\n| ![](media/image700 | ![](media/image695.p |\n| .png){width=\"3.146314523184602in\" | ng){width=\"2.9883934820647418in\" |\n| height=\"3.020275590551181in\"} | height=\"3.016061898512686in\"} |\n+-----------------------------------+----------------------------------+\n\nThe results, in Fig. 5.3b Show only one value, in September, is odd in\nbeing longer than the day length. Most days in the year have many\nsunshine hours, and the median is more than 10 hrs in the data for 6\nmonths, from June to November.\n\nFinding just a single obvious oddity in Fig. 5.3b out of the 20,450\nobservations is a measure of the high quality of these data. We look in\nmore detail at how to check for outliers in Sections 5.4 and 5.5. As a\npractical measure, setting the value to missing, would hardly affect the\nresults and may be sensible if the non-computerised records are not\neasily available.\n\nAs well as being a very useful exploratory method, boxplots are also\noften used in the methods section of reports and papers, to present the\ndata being analysed. Thus they can be presentation as well as\nexploratory graphs.\n\nFig. 5.2b shows the seasonal pattern for the sunshine data. Two simple\nchanges to the dialogue in Fig. 5.3c show the time series, and hence a\npossible trend, is shown in Fig. 5.3d. The second change in Fig. 5.3c is\nto use the ***Variable Width*** option, to see which years have many\nmissing values.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 5.3c Change to show the time series*** ***Fig. 5.3d***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image707.png){width=\"3.0568897637795276in\" ![](media/image697.png){width=\"2.9790977690288716in\"\n height=\"3.0768055555555556in\"} height=\"3.0134984689413824in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nIt is possible to show both the seasonality and the time-series\ntogether, as shown in Fig. 5.3e. The resulting figure is a bit crowded\nif months are used, so the graph is displayed for each of 4\nquarters[^21].\n\n -----------------------------------------------------------------------\n ***Fig. 5.3e***\n -----------------------------------------------------------------------\n ![](media/image694.png){width=\"6.056246719160105in\"\n height=\"2.9328455818022747in\"}\n\n -----------------------------------------------------------------------\n\nAn example in Chapter 2, Section 2.4, compared the Dodoma station data\non sunshine hours with the estimated values from the satellite data. It\nis important to check the quality of the data, whatever the source.\nHence Fig. 5.3f shows the seasonal pattern of the satellite estimates of\nsunshine hours.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 5.3f Satellite estimates of sunshine at ***Fig. 5.3g Suspect values mainly in early years***\n Dodoma*** \n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image693.png){width=\"2.9552602799650045in\" ![](media/image692.png){width=\"2.954428040244969in\"\n height=\"2.915323709536308in\"} height=\"2.9476049868766405in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nComparing Fig. 5.3f with Fig. 5.3b (the station data) shows\nencouragingly that the distributions seem very similar. However, there\nare also a number of values that are clearly longer than the day length\nat Dodoma. From discussion with the providers of the data (EUMETSAT) we\nlearned that the early years may have radiation values (and hence\nsunshine hours) that are less reliable. This is confirmed through the\ntime series plot for the satellite data, in Fig. 5.3g.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 5.3hBoxplots for the rainfall*** ***Fig. 5.3i Rainfall on rain days***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image696.png){width=\"3.0212062554680665in\" ![](media/image691.png){width=\"2.9721916010498686in\"\n height=\"3.0562204724409447in\"} height=\"2.9926902887139106in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nBoxplots can be used for the rainfall data, as shown in Fig. 5.3i. The\ndata plotted are just for rain days, with the variable width of each box\nindicating the number of rain days. The plot shows the unimodal pattern\nof the rainfall from November to April[^22].\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 5.3j Adding a second | ***Fig. 5.3k Tmax and Tmin |\n| layer to the plot*** | plotted together*** |\n| | |\n| Plot Options \\> Layers \\> Add | |\n+==================================+===================================+\n| ![](media/image894. | ![](media/image891 |\n| png){width=\"2.992442038495188in\" | .png){width=\"2.970890201224847in\" |\n| height=\"2.7443383639545056in\"} | height=\"3.033581583552056in\"} |\n+----------------------------------+-----------------------------------+\n\nThe Dodoma data includes Tmax and Tmin and these can, if required, be\nshown together on the same graph. An example is in Fig. 5.3k and one of\nthe sub-dialogues to facilitate this graph is shown in Fig. 5.3j[^23]\nOne feature in Fig. 5.3k is the larger variability of the Tmax data in\nthe rainy season, i.e. from November to April.\n\nGraphs, once saved, can be also combined, using Describe \\> Combine\nGraphs, as shown in Fig. 5.3l, with all 4 elements shown in Fig. 5.3m\n\n+--------------------------------+-------------------------------------+\n| ***Fig. 5.3l Combining | ***Fig. 5.3m The 4 elements in |\n| graphs*** | Dodoma*** |\n| | |\n| ***Describe \\> Combine Graphs | |\n| \\> Options*** | |\n+================================+=====================================+\n| ![](media/image918.pn | ![](media/image129 |\n| g){width=\"2.758496281714786in\" | 0.png){width=\"3.1666666666666665in\" |\n| height=\"2.707830271216098in\"} | height=\"3.1666666666666665in\"} |\n+--------------------------------+-------------------------------------+\n\nOther displays of these data are also possible. In Fig. 5.3k we observed\nthe larger variation of the Tmax data in the rainy months (compared to\nboth Tmin, and to Tmax in the dry months). This feature is shown more\nclearly through density plots as seen in Fig. 5.3p. This uses a dialogue\nfrom the ordinary Describe menu. The results in Fig. 5.3p indicate a\nroughly normal-type shape for the data, though with a slightly longer\ntail for Tmax in the rainy season[^24].\n\n+-------------------------------+--------------------------------------+\n| ***Fig. 5.3o Producing | ***Fig. 5.3p Density plots for Tmax |\n| density plots*** | and Tmin by month*** |\n| | |\n| ***Describe \\> Specific \\> | |\n| Histogram*** | |\n+===============================+======================================+\n| ![C:\\\\Users\\\\ROGERS\\~1\\\\A | ![](media/image8 |\n| ppData\\\\Local\\\\Temp\\\\SNAGHTML | 96.png){width=\"3.3430457130358704in\" |\n| 98d61a3.PNG](media/image880.p | height=\"3.8018930446194226in\"} |\n| ng){width=\"2.7408552055993in\" | |\n| h | |\n| eight=\"2.7116983814523183in\"} | |\n+-------------------------------+--------------------------------------+\n\nOften the data frame will include data from more than one station. This\nis illustrated briefly with the Rwanda data, from the library, that is\nfrom 4 stations. An example is shown in Fig. 5.3q. It shows relatively\nlittle seasonality, because Rwanda is close to the equator. One feature\nof the data is the higher variability and lower temperatures at the\n4^th^ stations, which is at a higher altitude compared to the other 3.\nFor this presentation, in the ***Climatic \\> Check Data \\> Boxplot***\ndialogue, the option is then used to facet by the Station.\n\n -----------------------------------------------------------------------\n ***Fig. 5.3q Example for multiple stations, Tmin for 4 stations in\n Rwanda***\n -----------------------------------------------------------------------\n ![](media/image887.png){width=\"6.1667082239720035in\"\n height=\"3.0204975940507435in\"}\n\n -----------------------------------------------------------------------\n\n## Quality control of temperature (and other) data\n\nThe graphical displays in the previous 2 sections have indicated\nobservations that need checking. The dialogue Climatic \\> Check Data \\>\nTemperatures, Fig. 5.4a, is designed to facilitate this checking. It has\nbeen designed specifically for temperature records, but with a\nflexibility to permit it to be used also for other elements.\n\nFig. 5.4 has been completed for the Dodoma data. Initially with a single\nelement (Tmax).\n\n+------------------------------------+---------------------------------+\n| ***Fig. 5.4a*** | ***Fig. 5.4b*** |\n| | |\n| ***Climatic \\> Check Data \\> QC | |\n| Temperatures*** | |\n+====================================+=================================+\n| ![C:\\\\Users\\\\ | ![](media/image881.pn |\n| ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\S | g){width=\"2.8671358267716536in\" |\n| NAGHTML13ef1d27.PNG](media/image88 | height=\"2.7212642169728785in\"} |\n| 4.png){width=\"3.123163823272091in\" | |\n| height=\"3.504679571303587in\"} | |\n+------------------------------------+---------------------------------+\n\nFrom the previous Section, Fig. 5.3k, Tmax at Dodoma is rarely less than\n20°C, and could usefully be checked each time. So, the first\nillustration of the dialogue uses the limits 20 and 40 for Tmax.\n\nThe results are in Fig. 5.4b. R-Instat has filtered the Dodoma data and\ncopied the \"problem\" rows into a new data frame. It shows there were\njust 13 occasions with Tmax \\<=20 in the record. As shown in Fig. 5.4b,\nthey include 9^th^ October 1989, when Tmax was equal to Tmin at 15.6°C.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 5.4c The available checks*** ***Fig. 5.4d Checking for consecutive values***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image893.png){width=\"2.7496237970253716in\" ![](media/image834.png){width=\"3.316666666666667in\"\n height=\"1.6854516622922135in\"} height=\"2.6708147419072614in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nMore checks on the data are available, as shown in Fig. 5.4c. They are\nconsidered in turn:\n\n- ***Acceptable range*** for each element, as shown in Fig. 5.4a\n and b. This is very simplistic, because it does not allow for\n seasonality in the data.\n\n- ***Same*** examines consecutive days and, with the default setting,\n indicates whenever 4 days or more have the same value. The idea is\n that when many consecutive values are identical, it is possible they\n were simply copied in, and not measured on each day. An example of\n the results is in Fig. 5.4e.\n\n- ***Jump*** notes whenever 2 consecutive days are different by more\n that the threshold amount. The default is that any difference (jump)\n of more than 10°C deserves further examination.\n\n- ***Difference*** is only available when 2 elements have been\n included, usually Tmax and Tmin. The default is to note whenever\n Tmax \\<= Tmin, but the difference could be altered.\n\n- ***Outlier*** is the most complex and relates the value to the\n boxplot outliers. A boxplot is conceptually fitted for each month at\n each station and the outliers are then noted. The traditional limit\n for boxplots has a coefficient of 1.5[^25], as used in all the\n figures in Section 5.3. We find, with the large samples in climatic\n data, this gives too many outliers, many of which are not\n particularly surprising. We therefore usually use 2.5 or 3 (instead\n of 1.5) as the multiplying value.\n\nYou may choose to do multiple checks at the same time. We consider them\nin turn. Each time the dialogue is used, it produces a new data frame.\n\nIn Fig. 5.4d we specify the ***Same*** check, for both Tmax and Tmin\ntogether.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 5.4e Results from the Same check*** ***Fig. 5.4f Jump of more than 10°C***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image846.png){width=\"2.9792082239720035in\" ![](media/image860.png){width=\"3.028753280839895in\"\n height=\"2.8092530621172354in\"} height=\"2.7992268153980753in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nThe results are in Fig. 5.4e. The first occurrence was in July 1965 when\nTmax was 26.0°C on 4 consecutive days, while in October 1969 Tmin was\nconsecutively 17.4°C. The results, in Fig. 5.4e also include further\ncolumns to note how many consecutive days and whether they were for Tmax\nor Tmin. In this case there were only 7 occurrences of the event, giving\n28 rows in total, so these extra columns are not so important.\n\nFig. 5.4f shows the results from the test for jumps of more than 10°C.\nHere the logical column was always TRUE for Tmax, i.e. this event did\nnot occur for Tmin. Sometimes Tmax drops because of rainfall, and this\ncolumn is automatically included in the filtered data. The results in\nFig. 5.4f include the size of the jump.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 5.4g Tmax within 1°C of Tmin*** ***Fig. 5.4h Outiers from corresponding boxplots***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image845.png){width=\"2.6875459317585304in\" ![](media/image832.png){width=\"3.334831583552056in\"\n height=\"1.1320406824146982in\"} height=\"2.499064960629921in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nIn the next check, the limit is set to 1°C. There are then, Fig. 5.4g,\njust 4 days when Tmax is within 1 degree of Tmin.\n\nThe final check is equivalent to the boxplot outliers. The threshold in\nproducing Fig. 5.4h was set to 2.5 and there were still 150 outliers to\ninvestigate. There are effectively 4 tests here, i.e. whether either\nTmax or Tmin are too low, or too high. These correspond to the settings\nof the logical columns in Fig. 5.4h. Thus the first 3 rows all indicate\na low value of Tmax, while the 4^th^ row is a low value for Tmin.\n\nReaders may be concerned in having to check 150 values. Our view is that\nthese data are of high quality. This is 150 values out of more than\n40,000 (i.e. over 20,000 days for each of Tmin and Tmax), so less than\n0.5% of the values to be checked! Not bad.\n\n## Quality control for rainfall records\n\nThe system for checking rainfall data is similar to that for the\ntemperatures, described in Section 5.4.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 5.5a*** ***Fig. 5.5b***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image833.png){width=\"3.053068678915136in\" ![](media/image836.png){width=\"2.846933508311461in\"\n height=\"2.969220253718285in\"} height=\"3.6387970253718285in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nWe continue with the Dodoma data. Two checks are undertaken in the\ndialogue in Fig. 5.5a. First is to note all values more than 100mm and\nsecond is to note when any 2 consecutive non-zero values are the same.\n\nSome of the results (after reordering columns for clarity) are in Fig.\n5.5b. There are 83 rows of data, from 6 occasions with more than 100mm\n(all look plausible) and 38 occasions when 2 consecutive days had the\nsame rainfall. Looking at the results in Fig. 5.5b, perhaps the low\nvalues e.g. 0.3mm on 2 consecutive days is not so surprising, but 19.2mm\non both the 5^th^ and 6^th^ January 1967 deserves further investigation.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 5.5c Same values after a filter*** ***Fig. 5.5d Checking for dry months***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image831.png){width=\"2.9309733158355207in\" ![](media/image842.png){width=\"3.0435115923009626in\"\n height=\"3.479775809273841in\"} height=\"3.0732534995625547in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nThe data in Fig. 5.5b are just in an ordinary data frame, so we check\nmore closely by filtering out the values of 1mm or less. The results are\nin Fig. 5.5c. There are just 16 occasions, most of which are shown in\nFig. 5.5b with exactly the same amount on 2 days. One way this arises is\nwhen the data are computerised initially on the wrong day. They are then\ntransferred to the previous day, but the original is not deleted. A\ncheck with the paper records is all that is needed.\n\nThe next option in Fig. 5.5a is called \"Consecutive\". This checks on the\nnumber of consecutive rain days. In some places a large number is rare.\nBut sometimes temperature columns may be entered mistakenly. This then\nappears as many consecutive \"rain\" days, with relatively similar amounts\non the successive days.\n\nThe next option is called Dry Month and is shown in Fig. 5.5d. The\nexplanation is given for Dodoma, where the rainy season is from November\nto April. The other months may be totally dry. If January (in the middle\nof the rainy season) is totally dry, then probably it was missing and\nrecorded mistakenly as zero each day. What is more complicated is\nNovember (the usual start of the season) and April (the usual end). If\nNovember is totally dry, then it could be true and a late start to the\nseason. Or the data are missing. The same goes for April.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 5.5e*** ***Fgi. 5.5f***\n ---------------------------------------------------- ------------------------------------------------------\n ![](media/image835.png){width=\"3.11877624671916in\" ![](media/image874.png){width=\"2.7583595800524936in\"\n height=\"3.303284120734908in\"} height=\"3.0145352143482063in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nThe results are in Fig. 5.5e. Right-click on the month column and use\nthe Levels/Labels dialogue, Fig. 5.5f to give the results in Fig. 5.5g.\nThis shows the zeros are primarily in November, but December is zero in\n2 years. There are no zero months in January to April.\n\nOne way to find which years to investigate, is the make the year column\nin Fig. 5.5e into a Factor and then use the same Levels/Labels dialogue.\nThe results are in Fig. 5.5h, showing the first years are 1935. 1936,\n1943, while the frequency of 31 in 1952 idicates that was one of the\nyears when December was zero.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 5.5g It is a November/December problem*** ***Fig. 5.5hThese are the years***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image865.png){width=\"2.5220581802274715in\" ![](media/image869.png){width=\"2.729306649168854in\"\n height=\"3.516259842519685in\"} height=\"3.521013779527559in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nThe final option is the outliers, using the limits from the skew\nboxplot. In Fig. 5.5i we omit the zero values and set the skewness\nweight to 3. This has identified just 3 possible outliers, and each is\nonly just above the corresponding limit, see Fig 5.5j.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 5.5i Settings for the rainfall outliers*** ***Fig. 5.5j Possible outliers from skew boxplot***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image859.png){width=\"2.978626421697288in\" ![](media/image890.png){width=\"3.272315179352581in\"\n height=\"1.497422353455818in\"} height=\"0.9956594488188977in\"}\n\n -----------------------------------------------------------------------------------------------------------","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_5_Quantity_and_quality.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_5_Quantity_and_quality.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_6_Preparing_summaries.qmd.json b/.quarto/idx/Chapter_6_Preparing_summaries.qmd.json new file mode 100644 index 0000000..78f793e --- /dev/null +++ b/.quarto/idx/Chapter_6_Preparing_summaries.qmd.json @@ -0,0 +1 @@ +{"title":"Preparing summaries","markdown":{"headingText":"Preparing summaries","containsRefs":false,"markdown":"## Introduction\n\nIn this chapter and the next, we use the ***Climatic \\> Prepare*** menu\nto summarise data into a form ready for analysis and then present the\nresults as graphs and tables. Here we consider monthly and annual\nsummaries of rainfall, temperature and other elements. The next chapter\nuses similar ideas for more specialised summaries of the rainfall data,\nsuch as the start and length of the season.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 6.1aThe main climatic summary menu*** ***Fig. 6.1b Presenting the summary***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image868.png){width=\"2.9830041557305336in\" ![](media/image850.png){width=\"3.092963692038495in\"\n height=\"2.510556649168854in\"} height=\"2.541311242344707in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nIn Section 6.2 data from Ghana are used to illustrate the summary of\nrainfall data.\n\n[To be continued]{.mark}\n\n## Preparing the data\n\nIn the second tutorial (reference/link) we showed how to plot annual\ntemperature data, after starting from the daily records. That was\nwithout making use of the special climatic menu. These ideas are\nrepeated here and extended for rainfall. The climatic menu is used, and\nthe example is with data from 2 stations. The first step is to prepare\nthe data.\n\nUse ***File \\> Open from Library \\> Instat \\> Browse \\> Climatic \\>\nGhana*** and open the file called ***ghana_two_stations.rds***, Fig.\n6.2a. The data are from Saltpond, which is on the coast, with a bimodal\npattern of rainfall, and Tamale, which is further North, and with\nunimodal rainfall. The rainfall starts in 1944 for each station. Other\nelements, Fig. 6.2a, start later.\n\n+-------------------------------------+--------------------------------+\n| ***Fig. 6.2a Data from 2 | ***Fig. 6.2b*** |\n| stations*** | |\n| | |\n| ***File\\>Open from | |\n| Library\\ | |\n| >Instat\\>Browse\\>Climatic\\>Ghana*** | |\n+=====================================+================================+\n| ![](media/image8 | ![](media/image864.pn |\n| 63.png){width=\"3.290274496937883in\" | g){width=\"2.968218503937008in\" |\n| height=\"3.2845319335083114in\"} | height=\"1.3167279090113735in\"} |\n+-------------------------------------+--------------------------------+\n\nThe data is in the right shape and already has a date column.\n\nFirst use ***Climatic \\> Dates \\> Infill***, Fig. 6.2b, to check there\nare no missing dates. Some files simply omit the days when all data are\nmissing.\n\n+-----------------------------------+-----------------------------------+\n| ***Fig. 6.2c Infill missing | ***Fig. 6.2d Results from |\n| dates*** | infilling*** |\n| | |\n| ***Climatic \\> Date \\> Infill*** | |\n+===================================+===================================+\n| ![](media/image852 | ![](media/image800. |\n| .png){width=\"3.011919291338583in\" | png){width=\"3.0440813648293963in\" |\n| height=\"2.6333103674540683in\"} | height=\"0.746661198600175in\"} |\n+-----------------------------------+-----------------------------------+\n\nComplete the dialogue as shown in Fig. 6.2c and press Ok. The number of\nrows in the data increases slightly to 53297 and the output window\nstates that just under 300 rows have been added.\n\nUse ***Climatic \\> Tidy and Examine \\> One Variable Summarise*** and\ncomplete the dialogue as shown in Fig. 6.2e. The results are in Fig.\n6.2f. They show no missing values for the date column (which is good and\na relief), and very few missing rainfall days. Most of those were\ninfilled. The other variables have reasonable values. Hence we proceed.\n\n+------------------------------+---------------------------------------+\n| ***Fig. 6.2e Checking the | ***Fig. 6.2f Results*** |\n| data*** | |\n| | |\n| ***Climatic \\> Tidy and | |\n| Examine \\> One Variable | |\n| Summarise*** | |\n+==============================+=======================================+\n| ![](media/image803.png){ | ![](media/image |\n| width=\"2.6116010498687663in\" | 812.png){width=\"3.4144444444444444in\" |\n| h | height=\"1.937435476815398in\"} |\n| eight=\"2.139025590551181in\"} | |\n+------------------------------+---------------------------------------+\n\nUse ***Climatic \\> Date \\> Use Date***, Fig. 6.2g. Then it is convenient\nto reorder the columns to put the date variables before the climatic\ndata, Fig. 6.2h.\n\n+------------------------------+---------------------------------------+\n| ***Fig. 6.2g Generate | ***Fig. 6.2h Data*** |\n| further date variables*** | |\n| | ***After Right-click \\> Reorder |\n| ***Climatic \\> Date \\> Use | columns*** |\n| Date*** | |\n+==============================+=======================================+\n| ![](media/image796.png) | ![](media/image |\n| {width=\"2.626457786526684in\" | 806.png){width=\"3.3682863079615046in\" |\n| he | height=\"2.546360454943132in\"} |\n| ight=\"4.1896883202099735in\"} | |\n+------------------------------+---------------------------------------+\n\nFinally, in this preparation, use ***Climatic \\> Define Climatic\nData***. The dialogue should fill automatically as shown in Fig. 6.2i.\nCheck that the data are unique and press Ok.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 6.2*** | ***Fig. 6.2j A count column*** |\n| | |\n| ***Climatic \\> Define Climatic | ***Climatic \\> Prepare \\> |\n| Datai*** | Transform*** |\n+===================================+==================================+\n| ![](media/image802. | ![](media/image810.p |\n| png){width=\"3.0969564741907263in\" | ng){width=\"2.9782939632545933in\" |\n| height=\"3.6375339020122484in\"} | height=\"4.019535214348206in\"} |\n+-----------------------------------+----------------------------------+\n\nFinally, a new step, because we would like to analyse the number of rain\ndays as well as the rainfall totals. A new column, giving whether a day\nwas rainy-or-not, is generated. We show two ways this new column can be\ngenerated.\n\nThe first way is simple, but it generates a complicated R command,\nbecause it is a special case of a more general function. Use ***Climatic\n\\> Prepare \\> Transform***, and complete the dialogue as shown in Fig.\n6.2j. This produces a new column, which takes the value 1 for each rain\nday, and 0 otherwise. We have explained in Chapter 2 why we use the\nseemingly odd value of 0.85mm as a threshold for rain[^26].\n\nNow try the second method, which generates a very simple R command. It\nuses R-Instat's powerful calculator, from ***Prepare \\> Column:\nCalculate \\> Calculations***, Fig. 6.2k\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 6.2k Using the | ***Fig. 6.2l Using the |\n| calculator*** | additional logical keyboard*** |\n| | |\n| ***Prepare \\> Column: Calculate | |\n| \\> Calculations*** | |\n+===================================+==================================+\n| ![](media/image807. | ![](media/image798. |\n| png){width=\"3.0777515310586177in\" | png){width=\"2.968632983377078in\" |\n| height=\"2.546943350831146in\"} | height=\"1.8799464129483814in\"} |\n+-----------------------------------+----------------------------------+\n\nThe resulting data are shown in Fig. 6.2m. The calculator has produced a\nlogical column, while the transformation using Prepare \\> Transform has\na column of 0 for dry and 1 for rain. There are the same in R as it\ninterprets TRUE as a 1 and False as a zero.\n\nThey are now not both needed, so delete one of them. We have kept the\nlogical column.\n\n+-----------------------------------------------------------------------+\n| ***Fig. 6.2m Data*** |\n| |\n| ***After Right-click \\> Reorder columns*** |\n+=======================================================================+\n| ![](media/image817.png){width=\"3.800120297462817in\" |\n| height=\"2.891173447069116in\"} |\n+-----------------------------------------------------------------------+\n\n## Annual summaries\n\nThe data are now ready to produce annual (or other) summaries. So, use\n***Climatic \\> Prepare \\> Climatic Summaries***. It should initially be\nas shown in Fig. 6.3a. (If not, then you might be in a different data\nframe, or you may not have followed the steps in the section above.)\n\nWe are going to produce the annual totals. Fig. 6.3a also indicates it\nis equally easy to produce the totals for any subset of the year.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 6.3a The climatic summary | ***Fig. 6.3b The summaries |\n| dialogue*** | sub-dialogue*** |\n| | |\n| ***Climatic \\> Prepare \\> | |\n| Climatic Summaries*** | |\n+===================================+==================================+\n| ![](media/image821 | ![](media/image826.p |\n| .png){width=\"3.101706036745407in\" | ng){width=\"2.9698425196850393in\" |\n| height=\"3.6587226596675415in\"} | height=\"3.166195319335083in\"} |\n+-----------------------------------+----------------------------------+\n\nIn Fig. 6.3a add the rainfall column and then press the Summaries\nbutton. In the sub-dialogue ***untick the N Total***, and keep the ***N\nNon Missing*** and the ***Sum*** as shown in Fig. 6.3b. Then press\n***Return*** and ***Ok***.\n\nNow return to the dialogue and use the Rainday column instead of\nrainfall.\n\nAlso Press on the Summaries button again and untick the N Non Missing\ncheckbox from Fig. 6.3b. Press Return and Ok again.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 6.3c*** ***Fig. 6.3d***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image814.png){width=\"2.6389851268591427in\" ![](media/image815.png){width=\"3.254145888013998in\"\n height=\"2.938444881889764in\"} height=\"3.783175853018373in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nThe results are in Fig. 6.3d. These data are now at the \"year\" levels\nand there are 146 rows, i.e. years, from the 2 sites together. We see\nthat at Saltpond in 1944 the total rainfall was 724mm from 69 rain days.\nSo, the mean rain per rain day is over 10mm and sometimes considerably\nso. For example, again from Fig. 6.3d in 1951 there was a total of\n1428mm from 85 rain days.\n\nThere were some missing values in the data, but we defer a discussion of\nthis topic to the next section. Here we have been conservative in that\nthe annual totals have been set to missing if there were any days\nmissing in that year.\n\nGraphs of the data can now be produced. The PICSA project includes\ndiscussing time-series graphs with farmers. They must be simple to\nproduce, but also very clear. The special dialogue for this is\n***Climatic \\> PICSA \\> Rainfall Graph***, Fig. 6.3e.\n\nIn Fig. 6.3e, check you are using the correct (yearly) data frame and\ncomplete it as shown. In the sub-dialogue, opt to add the mean line, but\n(at this stage) without a label.\n\nIn the sub-dialogue, click also on the Y-axis tab and set the lower\nlimit to 0 (zero).\n\n+-------------------------------------+--------------------------------+\n| ***Fig. 6.3e PICSA-style rainfall | ***Fig. 6.3f Sub-dialogue to |\n| graphs*** | add lines*** |\n| | |\n| ***Climatic \\> PICSA \\> Rainfall | |\n| Graph*** | |\n+=====================================+================================+\n| ![](media/image81 | ![](media/image813.png |\n| 9.png){width=\"3.3122484689413825in\" | ){width=\"2.7570866141732284in\" |\n| height=\"3.08748687664042in\"} | height=\"2.6320800524934382in\"} |\n+-------------------------------------+--------------------------------+\n\n -----------------------------------------------------------------------\n ***Fig. 6.3g PICSA-style graph for 2 stations***\n -----------------------------------------------------------------------\n ![](media/image816.png){width=\"6.065343394575678in\"\n height=\"2.9547211286089237in\"}\n\n -----------------------------------------------------------------------\n\nIt can be very useful for researchers and also intermediaries, to see\nresults from multiple stations. This is easy with R-Instat, where they\ncan be in the same data frame. Fig. 6.3h therefore shows another\nexample, with a facetted graph for 12 stations from xxx.\n\n -----------------------------------------------------------------------\n ***Fig. 6.3hPICSA-style rainfall graph for 12 stations from xxx***\n -----------------------------------------------------------------------\n\n -----------------------------------------------------------------------\n\n[Graph to add]{.mark}\n\nHowever, most farmers are particularly interested in the results from a\nsingle station that is as close as possible to their location. Hence\nonce you have the appropriate graph for multiple stations, you can then\nfilter the data to look at each station in turn. Filtering is either\ndone from the right-click menu or from within each dialogue.\n\nReturn to the ***previous PICSA dialogue*** and choose ***Data\nOptions*** to give the sub-dialogue shown in Fig. 6.3i\n\n+------------------------+---------------------------------------------+\n| ***Fig. 6.3i Define a | ***Fig. 6.3j Choose a single station*** |\n| filter*** | |\n| | |\n| ***Climatic \\> PICSA | |\n| \\> Rainfall Graph \\> | |\n| Data Options*** | |\n+========================+=============================================+\n| ![](medi | ![](media |\n| a/image818.png){width= | /image808.png){width=\"3.9102220034995625in\" |\n| \"2.0657567804024497in\" | height=\"2.5876093613298337in\"} |\n| height=\" | |\n| 2.5604385389326336in\"} | |\n+------------------------+---------------------------------------------+\n\nChoose to define a new Filter and complete the resulting sub-dialogue as\nshown in Fig. 6.3j. As shown in Fig. 6.3j, give the filter the same name\nas the station. That will make it easy later.\n\nNow return to the PICSA dialogue. Choose the ***sub-dialogue*** and\nchange the lines to give ***terciles with labels.*** The resulting graph\nfor just Saltpond is in Fig. 6.3k.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 6.3k Single station with terciles*** ***Fig. 6.3l Graph for the second station***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image809.png){width=\"2.961254374453193in\" ![](media/image788.png){width=\"2.897379702537183in\"\n height=\"2.9208737970253718in\"} height=\"2.897379702537183in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nRepeat the filtering exercise above to ***set a filter for Tamale***.\nThe resulting graph with the line for the mean is in Fig. 6.3l.\n\nSimilar graphs for the number of rain days is also sometimes needed for\nPICSA. They are now very easy to produce.\n\nReturn to the Climatic \\> PICSA \\> Rainfall Graph dialogue, and simply\nchange the Y-variable,\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 6.3m*** ***Fig. 6.3n***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image783.png){width=\"2.777380796150481in\" ![](media/image779.png){width=\"3.2896248906386703in\"\n height=\"2.7827416885389327in\"} height=\"3.2821511373578303in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\n***Return to the dialogue*** again, press ***Data Option*** and choose\nthe filter you called ***Saltpond***, Fig. 6.3o. You don't need to\ndefine the filter as that was done earlier. You can just keep using it.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 6.3o*** ***Fig. 6.3p***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image770.png){width=\"2.454096675415573in\" ![](media/image789.png){width=\"3.489805336832896in\"\n height=\"2.736826334208224in\"} height=\"3.489805336832896in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nFinally, in this section, we stress that the idea of the climatic menu\nis simply to make it even easier to do common climatic analyses. By\n\"even easier\" we mean easier than using the main dialogues in R-instat.\nIf what you would like to do is not (yet) possible with the climatic\nmenu it may still be possible with the ordinary use of R-Instat[^27]. It\nis important that you remain in charge and are not limited by the\nparticular dialogues. As an example, suppose you would like to fit a\ntrend line to the rainfall data. The PICSA graphs permit horizontal\nlines, but not trend lines. Perhaps the last graph, Fig. 6.3p has a\ndownward slope?\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 6.3q Graph with | ***Fig. 6.3r Saltpond annual |\n| \"ordinary\" dialogue*** | rainfall with trend line*** |\n| | |\n| ***Describe \\> Specific \\> Line | |\n| Plot*** | |\n+==================================+===================================+\n| ![](media/image768.p | ![](media/image775 |\n| ng){width=\"2.9803674540682414in\" | .png){width=\"3.053941382327209in\" |\n| height=\"2.744633639545057in\"} | height=\"3.1782305336832897in\"} |\n+----------------------------------+-----------------------------------+\n\nOne way to check this possibility is through the \"ordinary\" graphics\ndialogues in R-Instat. So, use ***Describe \\> Specific \\> Line Plot***\nand complete the dialogue as shown in Fig. 6.3q. The results are in Fig.\n6.3t. They perhaps hint at a possible trend[^28]. If there is a trend\n\n+---------------------------------+------------------------------------+\n| ***Fig. 6.3s Analysis for | ***Fig. 6.3t Cumulative or |\n| rainfall totals*** | Exceedance Graph*** |\n| | |\n| ***(Change Variable to | ***Climatic \\> PICSA \\> |\n| sum_rainfall in Fig. 6.3q)*** | Cumulative/Exceedance Graph*** |\n+=================================+====================================+\n| ![](media/image767.pn | ![](media/image764 |\n| g){width=\"2.8972101924759404in\" | .png){width=\"3.1671128608923884in\" |\n| height=\"3.0358169291338584in\"} | height=\"3.575345581802275in\"} |\n+---------------------------------+------------------------------------+\n\nIf there is a trend at Saltpond, perhaps it should also be evident in an\nanalysis of the annual totals. Fig. 6.3s shows this is not the case.\n\nOur aim in the above discussion is primarily to discuss the value of the\n\"ordinary\" R-Instat dialogues, so users do not restrict all their\nanalysis to the climatic menu. We return to trend analysis in Section\n6.6, when we process the temperature data.\n\nTime series are not the only way to display the annual summaries. Use\n***Climatic \\> PICSA \\> Cumulative/Exceedance Graph***, and complete the\ndialogue as shown in Fig. 6.3t. If the filter is still operating, then\nremove it by including ***Data Options*** and choosing ***no_filter***\nin the resulting subdialogue, Fig. 6.3u. The resulting graph is in Fig.\n6.3v.\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 6.3u Removing a | ***Fig. 6.3v Cumulative |\n| filter*** | distributions*** |\n| | |\n| ***(Data Options from | |\n| dialogue)*** | |\n+==================================+===================================+\n| ![](media/image769.p | ![](media/image797. |\n| ng){width=\"2.9515409011373577in\" | png){width=\"3.0426082677165356in\" |\n| height=\"3.9029779090113736in\"} | height=\"3.2070734908136482in\"} |\n+----------------------------------+-----------------------------------+\n\nStatisticians like cumulative distributions, but many users prefer\nexceedance graphs. If that is your wish, then return to the dialogue in\nFig. 6.3t and tick the box for an ***Exceedance Graph***. The result is\nin Fig. 6.3w.\n\nThese are just the inverse of each other. Starting with an amount -- on\nthe x-axis, you can read the probability of the total rainfall being\nless than this amount (cumulative graph) or greater than this amount\n(exceedance graph). So, if you need 800mm for a particular crop, then\nthe exceedance graph informs you there is about a 75% chance of getting\nthis amount, or more, at Saltpond and about a 90% chance at Tamale. The\ncumulate graph would show a 25% or 10% chance of failure, i.e. of\ngetting less than this amount.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 6.3w Exceedance graph*** ***Fig. 6.3x Exceedance graph for rain days***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image824.png){width=\"2.8365912073490813in\" ![](media/image799.png){width=\"2.862159886264217in\"\n height=\"2.9799201662292214in\"} height=\"3.0429265091863518in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nFinally change the variable in the dialogue in Fig. 6.3t to the number\nof rain days, to give the graph in Fig. 6.3x. The shapes are the same.\nThe steeper the graphs the smaller the variability and Fig. 6.3v, w and\nx all show the totals are slightly more variable at Saltpond, compared\nto Tamale. This can be confirmed numerically using Describe \\> Specific\n\\> Summary Tables. Results are in Fig. 6.3y.\n\n -----------------------------------------------------------------------\n Fig. 6.3y Numerical results\n -----------------------------------------------------------------------\n ![](media/image804.png){width=\"3.020988626421697in\"\n height=\"3.3265594925634296in\"}\n\n -----------------------------------------------------------------------\n\nThe standard deviation of the annual totals is 273mm at Saltpond\ncompared to 193mm at Tamale, while the means are relatively close.\nSimilarly the standard deviation for the number of rain days is 13 days\nat Saltpond compared to 9 days at Tamale.\n\nThis points to looking at the data in more detail. Hence monthly\nsummaries are examined in the next section.\n\n## More detailed summaries - rainfall\n\nFor many applications it is important to know about the seasonality of\nthe data. In this section we therefore consider monthly (rather than\nannual) totals.\n\nIn Fig. 6.2g [(link)]{.mark} we used the Climatic \\> Dates \\> Use Date\ndialogue to add the months to the daily data and these are used in this\nsection. Other possibilities with this dialogue are to produce quarters,\ndekads (10-day periods), pentades or weeks. Any of these periods can be\nused instead.\n\nUse ***Climatic \\> Prepare \\> Climatic Summaries***. It was used\ninitially in Fig. 6.3a to produce the annual summaries.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig.6.4a*** ***Fig. 6.4b***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image801.png){width=\"3.604351487314086in\" ![](media/image780.png){width=\"2.3751224846894137in\"\n height=\"4.090487751531058in\"} height=\"3.6876891951006123in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nIn Fig. 6.4a change the tab at the top to Annual + Within and complete\nas shown. Click on Summaries and choose just the 2 statistics shown in\nFig. 6.4b. Then press Return and Ok.\n\nNow change from rainfall to Rainday in Fig. 6.4a and use the Summaries\nto just get the Sum, i.e. untick the N Non Missing.\n\nThe resulting data frame is shown in Fig. 6.4c. There are 1751 rows of\ndata, i.e. the 141 years for the 2 stations, times 12, because the data\nare now monthly. For example, at Saltpond, January 1944 had a total of\n41mm from 2 rain days, whie June of the same year had 22 rain days and a\ntotal of 256mm.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 6.4c*** ***Fig. 6.4d***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image793.png){width=\"3.071080489938758in\" ![](media/image792.png){width=\"2.824102143482065in\"\n height=\"3.2467333770778652in\"} height=\"3.2376738845144355in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nOne way to show the seasonal pattern is through boxplots. Use\n***Describe \\> Specific \\> Boxplot*** and complete the dialogue as shown\nin Fig. 6.4d. Use the ***Plot Options***, Fig. 6.4e, to include the\nstations as facets and give the results as in Fig 6.4f[^29].\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 6.4e*** ***Fig. 6.4f***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image781.png){width=\"2.658153980752406in\" ![](media/image774.png){width=\"3.3286668853893264in\"\n height=\"2.7355227471566055in\"} height=\"3.287153324584427in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nIn Fig. 6.4d, change the variable to ***sum_Rainday*** to also give the\ngraph in Fig.6.4g.\n\nBoth graphs show the different seasonal pattern at the 2 sites. June is\nthe peak month of the rainy season at Saltpond and there is one year\nwhere the monthly total exceeded 800mm. In June, Fig. 6.4g also shows on\naverage about half the days are rainy at Saltpond and that is similar to\nthe number of rain days in Tamale in September.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 6.4g*** ***Fig. 6.4h***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image776.png){width=\"3.1435793963254595in\" ![](media/image751.png){width=\"2.916351706036745in\"\n height=\"3.0935706474190727in\"} height=\"2.7955577427821523in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nLine plots can show the seasonal and time-series nature of the data\ntogether. As an example, use ***Describe \\> Specific \\> Line*** and\ncomplete as shown in Fig. 6.4h. In the Plot Options, use the Month as\nthe factor for the facets, to give the graph as shown in Fig. 6.4i[^30]\n\n -----------------------------------------------------------------------\n ***Fig. 6.4i***\n -----------------------------------------------------------------------\n ![](media/image759.png){width=\"6.0539687226596675in\"\n height=\"2.929728783902012in\"}\n\n -----------------------------------------------------------------------\n\nThe results in Fig. 6.4i show the interesting nature of the June\nrainfall totals at Saltpond and that the extreme monthly total was in\n1962. It also shows the way Tamale consistently has more rainfall than\nSaltpond in July to September.\n\nThe same type of graph can also be produced for the number of raindays,\nsee Fig. 6.4j for a different layout[^31]. It also shows that the\ninitial analysis of rainfall trends using the annual rainfall totals may\nhave been over-simplistic. If trends do exist, then the next step could\nbe to examine whether they are consistent, or not, during the year, i.e.\nfor the different months. Thus, if rainfall seems to be decreasing, then\nis that in all months/seasons, or just in a part of the year. This issue\nis examined further in Section 6.6 when analysing the temperature\nrecords.\n\n -----------------------------------------------------------------------\n ***Fig. 6.4j Time series graphs for the 2 stations by month***\n -----------------------------------------------------------------------\n ![](media/image757.png){width=\"6.067823709536308in\"\n height=\"2.9034930008748905in\"}\n\n -----------------------------------------------------------------------\n\nIn reports it can be useful to include the daily data for a sample of\nthe years. Fig. 6.2k shows the daily data for Saltpond in 1962[^32],\nwhen June had exceptionally high rainfall.\n\n -----------------------------------------------------------------------\n ***Fig. 6.2k Daily data for Saltpond for 1962***\n -----------------------------------------------------------------------\n ![](media/image790.png){width=\"2.9407699037620296in\"\n height=\"4.576652449693788in\"}\n\n -----------------------------------------------------------------------\n\nThere is nothing obviously wrong with the June data, but they look\nsufficiently curious, that a check back to the paper records and perhaps\nwith nearby stations would seem sensible.\n\n## Options for Missing values\n\nAnalyses need to be able to take account of missing values in the data.\nStatistical packages are usually \"sensible\" in their handling of missing\nvalues and R is no exception. However, defining how they are to be\nhandled in each circumstance is the responsibility of the user and we\nconsider here the options in R and R-Instat.\n\nTo illustrate the problem Fig. 6.5a gives an inventory plot for the\nGhana data. It shows there is hardly a problem for the rainfall data.\nThe measurement of the other elements started later and there is a\nslightly greater proportion of missing values.\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 6.5a*** | ***Fig. 6.5b Default annual |\n| | summaries of rainfall*** |\n| ***Climatic \\> Check Data | |\n| Inventory*** | ***From \\> Climatic \\> Prepare \\> |\n| | Climatic Summaries*** |\n+==================================+===================================+\n| ![](media/image744.p | ![](media/image708. |\n| ng){width=\"3.0282392825896762in\" | png){width=\"3.0918077427821524in\" |\n| height=\"3.141479658792651in\"} | height=\"3.154325240594926in\"} |\n+----------------------------------+-----------------------------------+\n\nFig. 6.5b shows some of the annual totals that were used for analysis in\nSection 6.3. A column in Fig. 6.3b shows also the number of missing\nvalues each year. It shows there were missing values in the last 2 years\nand the annual summary has therefore been set to missing. This is \"safe\"\nbut it may be disappointing as the last 2 years totals have therefore\nbeen set to missing, and have therefore been excluded from the analysis.\n\nRepeating this point, the default in R, and hence in R-Instat, is that\nwhen there are any missing values (even just one day in the year) then\nthe summary is set to missing.\n\nThe opposite approach is also simple to undertake. This is where all the\nmissing days are omitted, and the summary is then calculated using the\nremaining data. This uses the same ***Climatic \\> Prepare \\> Climatic\nSummaries*** dialogue, but check the box labelled ***Omit Missing\nValues***.\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 6.5c Data with both | ***Fig. 6.5d Years with missing |\n| summaries*** | values*** |\n| | |\n| | ***Use Right-click \\> Filter with |\n| | (Total == NA)*** |\n+==================================+===================================+\n| ![](media/image748. | ![](media/image746 |\n| png){width=\"2.973963254593176in\" | .png){width=\"3.130285433070866in\" |\n| height=\"3.0356014873140857in\"} | height=\"1.9515627734033245in\"} |\n+----------------------------------+-----------------------------------+\n\nThe results are in the last 2 columns of Fig. 6.5c. They show the total\nrainfall to be 665mm in Tamale in 2015 from 53 rain days -- quite low\ncompared with other years. In 2016 the values are 998mm with 67 rain\ndays.\n\nR-Instat has added intermediate options described below. Before that, we\nconsider what more can be done with just these 2 extremes.\n\nFig. 6.5d shows the annual data for those years where there are missing\nvalues. There are just 9 years overall, 5 at Saltpond and 4 at Tamale.\nHence, with data from 1944 to 2016, this leaves over 60 years of data at\neach site. Hence, one option is to accept the omission of those years\nand proceed, which is what was done in Section 6.3.\n\nA second possibility results from the observation, Fig. 6.5d, that in 3\nof the 9 years there was just a single day missing in the year. Perhaps\nit is reasonable to accept the totals in those years and then just have\n6 missing years overall.\n\nTo go further we now look in more detail at the daily data. One\ncoincidence is that both sites have missing data in 1949 and an\nexamination is that this is for the same 3 months, i.e. from October to\nDecember. We don't like coincidences and wonder why.\n\nMore generally, the other years have just one or two months missing. If\nthat were between November and February -- when there is usually little\nrain, then perhaps the total could be accepted. In this case that is not\nthe case. For example August 2015 is missing in Tamale, and this perhaps\nexplains why the total and number of rain days was low in that year.\nOmitting it, as we did, in Section 6.3, was sensible.\n\nA more major possibility is that Saltpond collects data every 3 hours\nand Tamale collects hourly data. So perhaps the Met service has more\ndetailed records that could help to infill the missing daily values.\n\nTo see further options for missing values, return to the ***Climatic \\>\nPrepare \\> Climatic Summaries*** dialogue. Choose the ***Summaries***\nbutton and the ***Missing Options*** tab, Fig. 6.5e. The setting we\nchose of 27 means that any year with a month or more missing, gives a\nmissing summary. In this case, as shown in Fig. 6.5f, it has just given\nthe annual totals for the 3 years with just a single missing day.\n\nIn some examples the third option in Fig. 6.5e becomes important.\nSometimes the data, as supplied, starts, or ends during a year. In this\ninstance the first and/or the last year may be incomplete. For example\nthe Tamale data in 1944 start in February, rather than January. This was\nnot an issue, because January is relatively dry, but had they started in\nJuly 1944 that would have been different and should have been allowed\nfor.\n\nIn Fig. 6.5e this corresponds to setting the Option Not Missing to about\n340 (days) rather than the Missing Days to 27.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 6.5e*** ***Fig. 6.5f***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image773.png){width=\"2.6578444881889762in\" ![](media/image772.png){width=\"3.4301706036745405in\"\n height=\"2.0866196412948383in\"} height=\"2.027972440944882in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nA different, and more major, operation is to try to \"infill\" or complete\nthe data, where there are missing values. There is a wide variety of\nmethods, ranging from input of the mean value from that day of the year\nto using estimates from a neighbouring station, or from satellite\nobservations. They are considered in [Chapter xxx]{.mark}.\n\n## Processing temperature data\n\nThe ***Climatic \\> Prepare \\> Climatic Summaries*** dialogue applies to\nany element. With the Ghana data the annual temperature summaries can\ntherefore be added to those of the rainfall calculated in Section 6.3.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 6.6a*** | ***Fig. 6.6bInclude temperature |\n| | extremes*** |\n| ***Climatic \\> Prepare \\> | |\n| Climatic Summaries*** | |\n+===================================+==================================+\n| ![](media/image778. | ![](media/image782. |\n| png){width=\"3.0125404636920385in\" | png){width=\"2.936470909886264in\" |\n| height=\"3.210363079615048in\"} | height=\"2.6364774715660544in\"} |\n+-----------------------------------+----------------------------------+\n\nComplete the dialogue as shown in Fig. 6.6a and then the Summaries\nsub-dialogue as shown in Fig. 6.6b. This produces the annual mean and\nthe annual extremes of the daily minimum temperatures.\n\nThen use the Missing Options tab, shown in Fig. 6.6b and complete it as\nshown earlier in Fig. 6.5e. This will give the annual summaries if there\nare a few missing days, but not if a month or more is missing.\n\nOnce you have these summaries, return to the dialogue in Fig. 6.6a and\nreplace the minimum by the maximum temperatures.\n\nThe measurement of temperatures started in 1960, hence the summary data\nare now filtered, prior to producing graphs.\n\n+------------------------------------+---------------------------------+\n| ***Fig. 6.6c Annual temperature | ***Fig. 6.6d*** |\n| data*** | |\n| | ***Describe \\> Specific \\> Line |\n| ***Following Right-click \\> Filter | Plot*** |\n| \\> (Year \\> 1959)*** | |\n+====================================+=================================+\n| ![](media/image752 | ![](media/image760.pn |\n| .png){width=\"3.1401574803149606in\" | g){width=\"2.8428937007874016in\" |\n| height=\"2.157737314085739in\"} | height=\"2.385305118110236in\"} |\n+------------------------------------+---------------------------------+\n\nUse the ***Describe \\> Specific \\> Line Plot*** dialogue, and complete\nas shown in Fig. 6.6d. In the plot options, choose to ***Facet by the\nstation***[^33].\n\n -----------------------------------------------------------------------\n ***Fig. 6.6e***\n -----------------------------------------------------------------------\n ![](media/image765.png){width=\"5.985853018372703in\"\n height=\"3.079802055993001in\"}\n\n -----------------------------------------------------------------------\n\nIn Fig. 6.6e the data on the extremes must be treated with caution,\nbecause they are the values on a single day each year. There does appear\nto be a trend in the mean for Tmax, particularly at Tamale. This can be\nconfirmed using the ***Model \\> Three Variables \\> Fit Model***\ndialogue, which is described in more detail in Chapter xxx. The results\nshow an estimated increase of 2.3°C for Tamale. The estimated increase\nfor Saltpond was just 0.4°C and that was not statistically significant.\n\nThe graph can be repeated for the minimum temperatures (not shown).\nInstead, Fig. 6.6 shows Tmax and Tmin together. The estimated trend in\nTmin is an increase of 2.0°C per 100 years and is almost the same at the\ntwo sites. Fig. 6.6f also shows clearly the much greater diurnal range\nat Tamale, compared to Saltpond.\n\n -----------------------------------------------------------------------\n ***Fig. 6.6f***\n -----------------------------------------------------------------------\n ![](media/image753.png){width=\"6.064581146106737in\"\n height=\"3.0027263779527558in\"}\n\n -----------------------------------------------------------------------\n\nIn Fig. 6.6f (and earlier in Fig. 6.6e) the mean line for Saltpond looks\nodd. In this Chapter the quality control steps, discussed in Chapter 5,\nhave been omitted and, as usual, that was not a good idea! Fortunately,\nthe daily data are available, so we return to these and do a simple time\nseries plot of the daily records, Fig. 6.6g. This indicates an oddity in\nthe data in about 1974.\n\n+-------------------------------------+--------------------------------+\n| ***Fig. 6.6g Tmax for Saltpond | ***Fig. 6.6h Monthly means for |\n| daily data by Date*** | Tmax*** |\n| | |\n| ***From Describe \\> Specific \\> | |\n| Line Plot*** | |\n+=====================================+================================+\n| ![](media/image7 | ![](media/image777.png |\n| 50.png){width=\"3.320465879265092in\" | ){width=\"2.7201159230096237in\" |\n| height=\"2.6814621609798777in\"} | height=\"1.5in\"} |\n+-------------------------------------+--------------------------------+\n\nThis is confirmed in Fig. 6.6h, where the monthly means for Tmax at\nSaltpond are displayed for the 1970s[^34]. They show a drop of about 2\ndegrees from May 1974.\n\nThe next step in this small investigation is to display the daily\nrecords, as shown in Fig. 6.6i. Looking at the daily data it became\nclear they were originally recorded in degrees Fahrenheit and (at least\nusually) just to the nearest degree. Hence, for clarity, the Tmax data\nwere transformed back into Fahrenheit[^35] and then displayed, as shown\nin Fig. 6.6i.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 6.6i*** ***Fig. 6.6j***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image771.png){width=\"2.698963254593176in\" ![](media/image749.png){width=\"3.2956649168853893in\"\n height=\"4.114812992125985in\"} height=\"3.85672353455818in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nFig. 6.6i confirms the change was in May 1974, or possibly 30 April. In\nmost years temperatures in May are about 0.5°C lower than April, or\nabout 1°F. In the 1974 record it is 4 or 5 degrees Fahrenheit lower.\n\nFig. 6.6j therefore repeats the analysis, shown earlier in Fig. 6.6e,\nbut just from 1975. The results are now consistent with the data from\nTmin at Saltpond and with the Tamale data. The trend for the mean is\nslightly higher at 3.2°C per 100 years.\n\nAnalyses of the temperature records, like the above, are common. There\nis an immediate follow-up question that is often omitted, namely is the\ntrend in the temperatures consistent through the year, or is it perhaps\ndifferent in the rainy and dry seasons?\n\nAs in Section 6.4 for the rainfall, we therefore extend the analysis and\nexamine the monthly data.\n\n## More detailed summaries - temperatures\n\nWe examine the possible trends in Tmin and Tmax, at the two stations,\nmonthly. A specific question is whether there is evidence for a\ndifferent trend in some months, compared to others.\n\nFor simplicity, given the inhomogeneity of Tmax at Saltpond, the daily\ndata are first filtered so only the data from 1975 are analysed, Fig.\n6.7a.\n\n+--------------------------------+-------------------------------------+\n| ***Fig. 6.7a Filter the data | ***Fig. 6.7bMonthly summaries*** |\n| (optional)*** | |\n| | ***Climatic \\> Prepare \\> Climatic |\n| ***Right-click \\> Filter \\> | Summaries*** |\n| Define new*** | |\n| | ***Only summary is the mean*** |\n+================================+=====================================+\n| ![](media/image701.png | ![](media/image70 |\n| ){width=\"2.7416404199475064in\" | 6.png){width=\"3.1761122047244092in\" |\n| height=\"2.041117672790901in\"} | height=\"3.4447670603674543in\"} |\n+--------------------------------+-------------------------------------+\n\nThen use ***Climatic \\> Prepare \\> Climatic Summaries***, Fig. 9.7b. In\nFig. 9.7b click on ***Summaries*** and just choose the ***mean***.\n\nThen repeat for Tmax, to give the data as in Fig. 6.7c.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 6.7c Monthly means for | ***Fig. 6.7d*** |\n| Tmin and Tmax*** | |\n| | ***Describe \\> Specific \\> Line |\n| | Plot*** |\n| | |\n| | ***(Also use Plot Options with |\n| | Month a Facet)*** |\n+===================================+==================================+\n| ![](media/image747. | ![](media/image704. |\n| png){width=\"3.0479516622922134in\" | png){width=\"2.974469597550306in\" |\n| height=\"3.2115999562554682in\"} | height=\"2.6106496062992126in\"} |\n+-----------------------------------+----------------------------------+\n\nThen ***Describe \\> Specific \\> Line Plot***, as shown in Fig. 6.7d\nindicates a reasonably consistent slope at both sites, for each of the\nmonths, Fig. 6.7e.\n\n -----------------------------------------------------------------------\n ***Fig. 6.7e Trends by month for the two stations***\n -----------------------------------------------------------------------\n ![](media/image705.png){width=\"6.119820647419073in\"\n height=\"2.979225721784777in\"}\n\n -----------------------------------------------------------------------\n\nHowever, this does not quite answer the question posed, namely that the\ntrend is independent of the month, i.e. it is the same in each month.\n\nThe modelling dialogues are needed to address this hypothesis. The menu\nis shown in Fig. 6.7f.\n\n+-------------------------+--------------------------------------------+\n| ***Fig. 6.7f The Model | ***Fig. 6.7g Filter by Station*** |\n| menu*** | |\n| | ***Right-click \\> Filter \\> Define New*** |\n+=========================+============================================+\n| ![](m | ![](media/ |\n| edia/image745.png){widt | image703.png){width=\"3.8126957567804025in\" |\n| h=\"2.062606080489939in\" | height=\"2.2848392388451444in\"} |\n| height= | |\n| \"2.4237357830271216in\"} | |\n+-------------------------+--------------------------------------------+\n\nIn the modelling menu, Fig. 6.7f, the ***One Variable*** sub-menu\npermits a wide variety of distributions to be fitted to a single\nvariable, i.e. a single column of data.\n\nMoving down in Fig. 6.7f the Two Variables sub-menu is designed to model\na single y (dependent) variable against one x (independent) variable. An\nexample would be Tmax against the year. That would be ok if we had\nannual data, as in Section 6.6, but we have the monthly data.\n\nIn our case we need at least three variables. The dependent is initially\nTmax and this is modelled as a function of both the year and month, i.e.\nwe have a total of 3 variables.\n\nOnce you use the modelling dialogues as a routine, then the General\ndialogues are usually used, or (below the line in Fig. 6.7f) the even\nmore general Model dialogue, where you just give an R command.\n\nTo simplify the modelling, first filter for a single station, Fig. 6.7g.\nCall the filter ***Saltpond*** (rather than Filter1).\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 6.7h Make a new data | ***Fig. 6.7i*** |\n| frame*** | |\n| | ***Model \\> Three Variables \\> |\n| | Fit Model*** |\n+==================================+===================================+\n| ![](media/image702.p | ![](media/image699 |\n| ng){width=\"2.9819280402449695in\" | .png){width=\"3.089155730533683in\" |\n| height=\"2.9965923009623796in\"} | height=\"2.7298272090988625in\"} |\n+----------------------------------+-----------------------------------+\n\nReturn. to the main dialogue and opt to ***Apply as Subset***, Fig.\n6.7h.\n\nNow, for the first model. Use ***Model \\> Three Variables \\> Fit\nModel*** with the new Saltpond data frame and complete it as shown in\nFig. 6.7i. Initially you have a '\\*' between the year and month\nvariables. This fits a different slope for each month, as shown earlier,\nfor Saltpond, in Fig. 6.7e.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 6.7j*** ***Fig. 6.7k***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image564.png){width=\"3.3083158355205597in\" ![](media/image572.png){width=\"2.707610454943132in\"\n height=\"1.2852865266841644in\"} height=\"1.6346784776902887in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nA lot of results are produced. Key information is the ANOVA table shown\nin Fig. 6.7j. This shows that there is a clear ***trend (year***) and\n***seasonality (month_abbr)***. It also shows that there is no evidence\nof the interaction, i.e. the ***year:month_abbr*** explains very little\nvariation in the data, and what it explains is not statistically\nsignificant.\n\nHence, the separate slopes each month are not needed. A parallel line\nmodel is adequate.\n\nSo, return to the dialogue in Fig. 6.7i and change the '\\*' into a '+'.\nAt the same time, click on the Display Options and choose to Save the\nFitted Values, Fig. 6.7k.\n\nBefore examining the results there is one small (optional) change that\nsometimes simplifies the interpretation. With the year as given, i.e.\nstarting in 1975, the origin is almost 2000 years ago. Instead you could\nmake 1975 as the origin, using ***Prepare \\> Column: Calculations \\>\nCalculate*** and making a new column, say ***yr \\<- year -1975***. Then\nuse ***yr*** instead of year in the model.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 6.7l*** ***Fig. 6.7m***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image563.png){width=\"2.4777220034995624in\" ![](media/image570.png){width=\"3.5530839895013124in\"\n height=\"2.535048118985127in\"} height=\"2.508620953630796in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nInterpreting the model in Fig. 6.7l the trend (yr coefficient) is a\npossibly disturbing 3.4 degrees per 100 years. For the seasonality, the\nmean temperature in January 1975 was estimated as 29.9°C. February and\nMarch were each estimated to be an average of 0.6°C higher, i.e. about\n30.5 degrees, while August had the lowest average temperatures.\n\nIn some stations there is \"local warming\" where the station surroundings\nare more built up. Hence this should be checked, before assuming the\nlarge trend per year is a feature of global warming.\n\nA similar analysis for Tmin, again shows no evidence that a different\ntrend is needed each month. Saving those fitted values also, as shown in\nFig. 6.7m permits the parallel lines to be plotted, using ***Describe \\>\nSpecific \\> Line Plot***, as shown in Fig. 6.7n\n\n -----------------------------------------------------------------------\n ***Fig. 6.7n Observed and fitted temperatures at Saltpond***\n -----------------------------------------------------------------------\n ![](media/image565.png){width=\"6.061395450568679in\"\n height=\"2.9729440069991253in\"}\n\n -----------------------------------------------------------------------","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_6_Preparing_summaries.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_6_Preparing_summaries.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_7_Tailored_Products.qmd.json b/.quarto/idx/Chapter_7_Tailored_Products.qmd.json new file mode 100644 index 0000000..1f5a43c --- /dev/null +++ b/.quarto/idx/Chapter_7_Tailored_Products.qmd.json @@ -0,0 +1 @@ +{"title":"Tailored Products","markdown":{"headingText":"Tailored Products","containsRefs":false,"markdown":"## Introduction\n\nProducts by NMSs include regular reports, such as climate normal and\n10-day bulletins through the rainy season. It is useful if they also\nproduce \"tailored products\" that correspond to the specific demands of\nusers.\n\nIn many countries, one such product is the \"start of the rains\". This is\nusually not a single fixed definition but may depend on factors such as\nthe crop being planted and the type of soil. The results in this chapter\nare mainly based on an analysis of the daily rainfall data.\n\nIn early years on this type of work, e.g. (Stern, Dennett, & Dale, 1982)\nsome researchers questioned the need for the daily (rainfall) data. This\nwas often because sufficient results could be obtained through an\nanalysis of monthly totals supplemented, when needed, with 10-day\n(dekads) or weekly totals.\n\nThis was partly due to a mis-understanding that the analysis would use\nthe daily values directly. Instead, the daily values are simply used in\nan initial step to calculate appropriate summaries and these are on a\nyearly basis. The results are then presented in the same ways as the\nrainfall totals and total number of rain days in Chapter 6.\n\n## Getting ready\n\nOne of the examples used in this Chapter is from Moorings in Southern\nZambia. This has rainfall data from early 1922. Use ***Open From Library\n\\> Instat \\> Browse \\> Climatic \\> Zambia*** and open the file called\n***Moorings.rds***.\n\n+-----------------------------+----------------------------------------+\n| ***Fig. 7.2a*** | ***Fig. 7.2b*** |\n| | |\n| ***Climatic \\> Dates \\> Use | |\n| Date*** | |\n+=============================+========================================+\n| ![](media/image562.png){w | ![](media/imag |\n| idth=\"2.5082042869641294in\" | e561.png){width=\"3.4951345144356956in\" |\n| he | height=\"3.6876377952755908in\"} |\n| ight=\"3.754517716535433in\"} | |\n+-----------------------------+----------------------------------------+\n\nA feature of Moorings, like many stations in Southern Africa, is that\nthe rainy season is from November to April. (This is roughly the mirror\nimage of the Sahel, where the rains are from May to October.) Hence the\nyear is \"shifted\" and we choose to start from August, Fig. 7.2a.\n\nUse the ***Climatic \\> Dates \\> Use Date*** dialogue, Fig. 7.2a, and\ncomplete as shown in Fig. 7.2b. Set the starting month to August.\n\nThe resulting data, after reordering the columns, is shown in Fig. 7.2b.\n\nIn Fig. 7.2b 1^st^ March 1922 is given as the season starting in 1921.\nThe year variable has also been given as a factor, to emphasise it is\nthe 1921-1922 season. The variable s_doy (shifted day of year) is 214 on\n1^st^ March. It is the day number in the season starting from 1^st^\nAugust as day 1.\n\nFinally, in Fig. 7.2b, there seems nothing different about the\n***month*** variable. But ***right-click*** on the column and choose\n***Levels/Labels***, Fig. 7.2c. This shows, Fig. 7.2d, that the months\nare now labelled from August, so all tables and graphs will now appear\nfrom August to July, rather than from January to December. ***Close***\nthe ***Levels/Labels*** dialogue.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 7.2c Choose Levels/Labels*** ***Fig. 7.2d Factor levels start from August***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image556.png){width=\"2.129636920384952in\" ![](media/image560.png){width=\"3.157333770778653in\"\n height=\"2.9701476377952756in\"} height=\"2.952107392825897in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nNow use the ***Climatic \\> Define Climatic Data*** dialogue.\n\n+---------------------------------+------------------------------------+\n| ***Fig. 7.2e Define Moorings as | ***Fig. 7.2f The Climatic \\> |\n| climatic*** | Prepare menu*** |\n| | |\n| ***Climatic \\> Define Climatic | |\n| Data*** | |\n+=================================+====================================+\n| ![](media/image557.p | ![](media/image54 |\n| ng){width=\"2.620744750656168in\" | 5.png){width=\"3.168616579177603in\" |\n| height=\"3.44834864391951in\"} | height=\"2.981884295713036in\"} |\n+---------------------------------+------------------------------------+\n\nThis dialogue should fill automatically, as shown in Fig. 7.2e. Check\nthat the dates define ***unique rows,*** Fig. 7.2e, and press ***Ok***.\n\nWe now assume use of the ***Climatic \\> Check Data*** dialogues,\ndescribed in Chapter 5, and go straight to the ***Climatic \\> Prepare***\nmenu, Fig. 7.2f***.*** Start with the ***Climatic \\> Prepare \\>\nTransform*** dialogue, Fig. 7.2g. Complete it as shown to produce a new\nvariable, called rainday, see Fig. 7.2h, that facilitates the analysis\nof the number of rain days. A rain day is defined as one with more than\n0.85mm. You can choose a different threshold if you wish.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 7.2g*** ***Fig. 7.2h***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image539.png){width=\"2.4147583114610676in\" ![](media/image531.png){width=\"3.542851049868766in\"\n height=\"3.2575568678915134in\"} height=\"3.2051870078740157in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nNow use the ***Climatic \\> Prepare \\>*** ***Climatic Summaries***\ndialogue, Fig. 7.i\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 7.2i Getting annual | ***Fig. 7.2j Annual level data |\n| summaries*** | frame*** |\n| | |\n| ***Climatic \\> Prepare \\> | ***(Then also just sum for |\n| Climatic Summaries*** | variable raindays)*** |\n| | |\n| ***Summaries: N not missing and | |\n| sum*** | |\n+===================================+==================================+\n| ![](media/image523. | ![](media/image553. |\n| png){width=\"2.9917727471566056in\" | png){width=\"2.510919728783902in\" |\n| height=\"3.5300656167979003in\"} | height=\"3.577926509186352in\"} |\n+-----------------------------------+----------------------------------+\n\nMost of the dialogue, in Fig. 7.2i, should have completed automatically.\nIf not, then either the data frame was not defined as climatic, or you\nare on the wrong data frame.\n\nIn Fig. 7.2i, include the ***rain*** variable. Press the ***Summaries***\nbutton and choose just the ***Number not Missing*** and the ***Sum***.\nThe result should be a new annual data frame with 3 columns.\n\nIn Fig. 7.2i, change the variable to ***rainday*** and this time, just\nget the ***sum*** as the only summary.\n\nThe resulting annual data frame is shown in Fig. 7.2j. The results show,\nfor example, that the 1922/23 season had a total of 853mm from 75 rain\ndays. Further columns will now be added, that give the start of the\nrains each year, etc.\n\n## **Start of the rains**\n\nReturn to the daily data and use ***Climatic \\> Prepare \\> Start of the\nRains***, see Fig. 7.2f.\n\nThe dialogue is shown in Fig. 7.3a. If it is not automatically completed\nas in Fig. 7.2i, then either you did not define the data as climatic\n(Fig. 7.2e), or you are on the wrong data frame.\n\n+-----------------------------------------------------------------------+\n| ***Fig. 7.3a Start of the rains dialogue*** |\n| |\n| ***Climatic \\> Prepare \\> Start of the Rains*** |\n+=======================================================================+\n| ![](media/image537.png){width=\"5.065784120734908in\" |\n| height=\"4.630577427821522in\"} |\n+-----------------------------------------------------------------------+\n\nThis is the first \"tailored\" product, i.e. there is no fixed definition.\nWhat is needed is a definition that corresponds as closely as possible\nto something used by farmers -- perhaps for a specified crop.\n\nThe first decision is the earliest possible planting date. If there were\nrain in Moorings on 1^st^ October it would almost certainly be ignored,\nbecause it would probably be followed by a long dry spell.\n\nAs an example, we suggest 15^th^ November as the earliest date. Then\nalso 15^th^ January as the latest date, i.e. after then it would not be\nworth planting.\n\nIn Fig. 7.3a, press the Day Range button and complete the sub-dialogue\nas shown in Fig. 7.3b.\n\nAfter returning to Fig. 7.3a change the ***2 days to 3 days*** and\nchoose to also ***save the Date*** column. Then press ***Ok***. The full\ndefinition is then:\n\n***Event 1:*** \"The first occasion from 15^th^ November with more than\n20mm within a 3-day period.\"\n\nThe resulting data are in Fig. 7.3c. The Start of the rains dialogue has\nadded 2 more columns to the yearly data frame, one giving the day number\n(from 1 August) and the other giving the date. In the 1922/23 season the\nday was 119 or 27 November, while it was also in late November for the\nfollowing two seasons.\n\nThe start_doy column is used in the further analysis. The start_date\ncolumn is just to assist interpretation.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 7.3b*** ***Fig. 7.3c***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image526.png){width=\"3.0814129483814523in\" ![](media/image521.png){width=\"3.0145188101487315in\"\n height=\"2.829251968503937in\"} height=\"3.4613035870516184in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nWith the start date, or even with the totals from Section 7.2, you could\nproceed straight to a PICSA-type graph.\n\nUse ***Climatic \\> PICSA \\> Rainfall Graph***. Include the\n***start_doy*** variable, and then the ***PICSA options*** Fig. 7.3d.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 7.3d*** ***Fig. 7.3e Sub-dialogue***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image541.png){width=\"3.0023589238845143in\" ![](media/image522.png){width=\"3.0185444006999127in\"\n height=\"2.9970253718285216in\"} height=\"2.2601170166229223in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nThe sub-dialogue in Fig. 7.3e is used to display the ***Y-axis*** as\ndates, rather than day numbers. Use also the ***Lines*** tab to add a\nline for the mean, and possibly also the ***X-Axis*** to untick the\nangle for the labels. The resulting graph is in Fig. 7.3f.\n\nThe graph shows the mean starting day was 28^th^ November. There was\njust one year with a starting date in January. There were also 10 years\nwhere the starting date was on the lower limit of 15^th^ November.\nPerhaps the earliest date should have been even earlier?\n\nAs a small investigation, change the names of the two columns\n(***right-click, Rename***). Then use the ***Climatic \\> Prepare \\>\nStart of the Rains*** dialogue again, changing the earliest start date\nto 1^st^ November[^36]. The definition is now:\n\n***Event 2:*** \"The first occasion from 1^st^ November with more than\n20mm within a 3-day period.\"\n\nThen the PICSA rainfall graph is run again (unaltered) giving the graph\nin Fig. 7.3g. The mean is now 9 days earlier.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 7.3f Start of the rains from 15 November*** ***Fig. 7.3g Start from 1^st^ November***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image546.png){width=\"2.985117016622922in\" ![](media/image547.png){width=\"3.0534448818897637in\"\n height=\"2.325653980752406in\"} height=\"2.330170603674541in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nThere are other components of the Start of the Rains dialogue that can\noptionally be used. For example, in India a definition (for the Summer\nmonsoon) is of the form:\n\n***Event 3:*** First occasion from 1 June with more than 25mm in 5 days,\nor which at least 3 days are rainy.\n\nThis uses the Number of Rainy Days checkbox in Fig. 7.3a.\n\nThe third checkbox in Fig. 7.3a is called Dry Spell. Events 1 and 2 can\nbe considered as defining planting opportunities, while if a dry spell\ncondition is added, this might define a successful planting.\n\n***Rename*** the last columns that were produced -- so they are not\noverwritten.\n\nThen return to the ***Climatic \\> Prepare \\> Start of the Rains***\ndialogue and check the ***Dry Spells*** checkbox, Fig. 7.3h. The\ndefinition is now:\n\n***Event 4:*** First occasion from 1^st^ November with more than 20mm in\n3 days, and no dry spell of more than 9-days in the next 3 weeks (21\ndays).\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 7.3h*** ***Fig. 7.3i***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image600.png){width=\"2.9236253280839897in\" ![](media/image548.png){width=\"3.1584995625546806in\"\n height=\"1.2810498687664043in\"} height=\"3.1205599300087488in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nThe data resulting from Events 1, 2 and 4 are shown in Fig. 7.3i. They\nshow that in 1965, with Event 2, there was a planting opportunity on 13\nNovember, but that was not successful. The date of the successful\nplanting was 20^th^ December.\n\nThere was just one year, namely 1972, where there was no successful\nplanting by the imposed limit of 15 January.\n\nEvent 2 and Event 4 can be compared. Use ***Prepare \\> Column: Calculate\n\\> Calculations*** and subtract the date of Event 2 from Event 4, Fig.\n7.3j.\n\n+---------------------------------+------------------------------------+\n| ***Fig. 7.3j Difference from | ***Fig. 7.3k Exceedance graph for |\n| including a dry spell*** | 3 definitions*** |\n| | |\n| ***Prepare \\> Column: Calculate | ***Climatic \\> PICSA \\> |\n| \\> Calculation*** | Cumulative/Exceedance graph*** |\n+=================================+====================================+\n| ![](media/image542.p | ![](media/image536 |\n| ng){width=\"2.807392825896763in\" | .png){width=\"3.1474496937882765in\" |\n| height=\"3.2033048993875766in\"} | height=\"3.2067639982502185in\"} |\n+---------------------------------+------------------------------------+\n\nThe results are also shown in the last column in Fig. 7.3i. Where the\nvalue in this last column is zero the first planting was successful.\nOtherwise the value shows the delay, before the date of the successful\nstart. Looking down this column, or ***filtering***, or using ***Prepare\n\\> Column: Reshape \\> Column Summaries*** shows there were 22 non-zero\nvalues, a risk of 1 year in 4.\n\nIf this risk is too high, then one way to reduce it, might be to omit\nthe early planting dates and start later. Changing Event4 to start on\n15^th^ November, and comparing those results with Event 1, changes the\nrisk to 12 years or about 14%.\n\nConservation farming is encouraged in Southern Zambia and one component\nis water conservation, using planting in small hollows. The promoters\nestimate this gives an extra 3 days, that seedlings could withstand\ndrought. So, keeping to 1 November in Event 4, and changing the 9 days\nto 12 days could also be considered. This halves the risk, as there are\nthen just 10 years when replanting was needed.\n\nThe data may also be plotted as exceedance graphs, as is shown in Fig.\n7.3k for the Events 1, 2 and 4.\n\n## The end and length\n\nA common definition for the end of the rainy season is based on a simple\nwater balance model. This has been adequate in the unimodal stations in\nWest Africa, but has problems with stations, like Moorings in the\nSouthern hemisphere.\n\nHence, we first look quickly at a site in Northern Nigeria, before\nreturning to discuss the end and length of the season at Moorings.\n\nUse ***File \\> Open from Library \\> Instat \\> Browse \\> Climatic \\>\nNigeria*** and open the file called ***Samaru.rds***. The data frame\ncalled Samaru56t has 56 years of daily data from 1928, Fig. 7.4a.\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 7.4a Samaru daily | ***Fig. 7.4b Start of rains for |\n| data*** | Samaru*** |\n| | |\n| ***File \\> Open from Library \\> | ***Climatic \\> Prepare \\> Start |\n| Instat \\> Browse \\> Climatic \\> | of the Rains*** |\n| Nigeria \\> Samaru.rds*** | |\n| | ***(Day range from 1 April to 30 |\n| | June)*** |\n+==================================+===================================+\n| ![](media/image554.p | ![](media/image54 |\n| ng){width=\"2.9693438320209973in\" | 3.png){width=\"2.98371719160105in\" |\n| height=\"3.036609798775153in\"} | height=\"2.003601268591426in\"} |\n+----------------------------------+-----------------------------------+\n\nThis data frame is already defined as climatic, so proceed directly to\nthe ***Climatic \\> Prepare \\> Start of the Rains*** dialogue.\n\nThese data are from January. In this dialogue, set the earliest date as\n***1st April*** and the latest as ***30 June***. Use ***Event 5*** as\nshown in Fig. 7.4b:\n\n***Event 5***: First occasion from ***1st April*** with more than\n***20mm in 3 days*** and no dry spell longer than ***9 days*** in the\nnext ***21 days***.\n\nAs in the previous section, get the starting day of year and the\ncorresponding date.\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 7.4c End of rains/Season | ***Fig. 7.4d The season length*** |\n| dialogue*** | |\n| | ***Climatic \\> Prepare \\> |\n| ***Climatic \\> Prepare \\> End of | Length*** |\n| the Rains*** | |\n| | |\n| ***(Day Range from 15 August to | |\n| 15 December)*** | |\n+==================================+===================================+\n| ![](media/image549.p | ![](media/image540 |\n| ng){width=\"2.7529779090113737in\" | .png){width=\"3.010003280839895in\" |\n| height=\"3.6972845581802276in\"} | height=\"2.409067147856518in\"} |\n+----------------------------------+-----------------------------------+\n\nNow use ***Climatic \\> Prepare \\> End of the Rains*** and complete the\ndialogue as shown in Fig. 7.4c\n\nThe water balance \"model\" is like a simple \"bucket\". It is empty in the\ndry season. It is then filled by the rainfall and loses a constant\namount of 5mm per day, due to evaporation. The capacity of the bucket,\nin Fig. 7.4c, is 100mm. Any excess, when the bucket is full, is assumed\nlost to runoff.\n\nIn the middle of the season (August), the bucket is usually quite full.\nThe end of the season is defined, in Fig. 7.4c, as the first time, after\n15^th^ August, that the bucket is effectively empty.\n\n+---------------------------------+------------------------------------+\n| ***Fig. 7.4e Samaru summary | ***Fig. 7.4f Time-series graphs*** |\n| data*** | |\n| | ***Describe \\> Specific \\> Line*** |\n+=================================+====================================+\n| ![](media/image544.p | ![](media/image5 |\n| ng){width=\"2.875333552055993in\" | 03.png){width=\"3.27461176727909in\" |\n| height=\"2.702120516185477in\"} | height=\"2.7685083114610674in\"} |\n+---------------------------------+------------------------------------+\n\nThe length of the season is then, from ***Climatic \\> Prepare \\>\nLength,*** simply the difference between the end and the start dates,\nFig. 7.4d.\n\nThe resulting annual data are shown in Fig. 7.4e. Various graphs are\npossible. The time series graph in Fig. 7.4f indicates clearly the\nsmaller inter-annual variability of the end of the season, compared to\nthe start. This graph was produced using ***Describe \\> Specific \\> Line\nPlot***. An alternative would have been the ***Climatic \\> PICSA \\>\nRainfall Graph***.\n\n+-------------------------------+--------------------------------------+\n| ***Fig. 7.4g Exceedance | ***Fig. 7.4h Length of the season at |\n| plots*** | Samaru*** |\n| | |\n| ***Climatic \\> PICSA \\> | |\n| Cumulative/Exceedance*** | |\n+===============================+======================================+\n| ![](media/image505.png) | ![](media/image5 |\n| {width=\"2.5142836832895887in\" | 08.png){width=\"3.2541535433070865in\" |\n| height=\"3.160087489063867in\"} | height=\"3.2136154855643047in\"} |\n+-------------------------------+--------------------------------------+\n\nAn alternative display is with exceedance graphs, Fig. 7.4g. Here the\ngreater steepness of the line for the end of the season, corresponds to\nthe lower variability. The ***Prepare \\> Column: Calculate \\>\nCalculations*** can be used to show the standard deviation of the start\nis about 17 days (over 2 weeks), while it is about 9 days (just over 1\nweek) for the end of the season.\n\nFig. 7.4h shows the length of the season, using the ***Climatic \\> PICSA\n\\> Rainfall Graphs*** dialogue. Terciles have been added to show that\nabout 1/3 of the years had a season length of less than 152 days, i.e. 5\nmonths, and 1/3 had more than 172 days -- almost 6 months.\n\nNow return to the Moorings data in the Southern hemisphere[^37]. The\nstart was considered in Section 7.3 and we choose the definition 4, i.e.\nfrom 1 November, but with no dry spell of more than 12 days. In\nprinciple it simply remains to get the end of the season, and then the\nlength, as above.\n\n+----------------------------+-----------------------------------------+\n| ***Fig. 7.4i End of the | ***Fig. 7.4j*** |\n| season dialogue*** | |\n| | |\n| ***Climatic \\> Prepare \\> | |\n| End of the Rains*** | |\n+============================+=========================================+\n| ![](media/image509.png){wi | ![](media/ima |\n| dth=\"2.5004582239720037in\" | ge501.png){width=\"3.6275896762904636in\" |\n| heig | height=\"2.6182830271216098in\"} |\n| ht=\"2.9221620734908136in\"} | |\n+----------------------------+-----------------------------------------+\n\nTo illustrate the problem first try the same analysis as for Samaru,\nFig. 7.4i. Make the day range 15^th^ February to 15^th^ June, as the\nequivalent of 15^th^ August to 15^th^ December for Samaru. The results\nare in Fig. 7.4j and a few of the problems are highlighted.\n\nIn some years the season appears to end in February, and sometimes on\nthe precise day (15^th^ February) that is the lower limit. This never\nhappened at Samaru as the water balance was always full (or close to\nfull) throughout August. So, August, in the Sahel, has reliable rain.\nThis isn't the case at Moorings, where there can be a long dry spell at\nany time in the season.\n\nWe would still prefer to consider issues in February as a problem during\nthe season -- which is covered in Section 7.6, - rather than necessarily\na very early end of the season.\n\nIn an analysis of 5 stations in Zimbabwe, (Mupamgwa, Walker, & Twomlow,\n2011) proposed a different type of definition for the end of the season.\nThis was the ***last day with more than 10mm*** between 1 January and 30\nJune. This type of definition has been added to the ***Climatic \\>\nPrepare \\> End of the Rains*** dialogue, Fig. 7.4k.\n\nFor Moorings we have used the last day with more than 10mm up to the end\nof April, Fig. 4.7k.\n\nIn using this definition some meteorology staff complained that this was\nclearly the end of the rains and they would prefer the end of the\nseason.\n\nWhat is therefore also available in R-Instat is to use the above\ndefinition for the end of the rains and then to start the water-balance\ndefinition from that date -- which is a different date each year. Return\nto ***Climatic \\> Prepare \\> End of Rains***, select the ***End of\nSeason*** and then the ***Day Range*** again, Fig. 7.4l.\n\nIn Fig. 7.4l choose ***Variable Day*** and select the ***end_rains***\nvariable from the summary data. Keep the end date as ***Fixed Day***,\nand choose 30 June.\n\n+---------------------------------+------------------------------------+\n| ***Fig. 7.4k*** | ***Fig. 7.4l Day Range on End of |\n| | Rains*** |\n| ***Climatic \\> Prepare \\> End | |\n| of Rains*** | |\n+=================================+====================================+\n| ![](media/image484.pn | ![](media/image50 |\n| g){width=\"2.8328587051618546in\" | 2.png){width=\"3.160076552930884in\" |\n| height=\"3.822027559055118in\"} | height=\"2.9263724846894137in\"} |\n+---------------------------------+------------------------------------+\n\nReturn to the main dialogue, Fig. 7.4m and set as shown. The results are\nshown in Fig. 7.4n and are more reasonable.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 7.4m*** ***Fig. 7.4n***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image512.png){width=\"2.603765310586177in\" ![](media/image511.png){width=\"3.490068897637795in\"\n height=\"2.949931102362205in\"} height=\"2.434850174978128in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nNow use ***Climatic \\> Prepare \\> Length of Season***, as shown for\nSamaru in Fig. 7.4d, to give the length.\n\nThe start and end of the season are plotted in Fig. 7.4o. Unlike Samaru,\nthey are approximately equally variable, and each has a standard\ndeviation of just over 2 weeks. The cumulative frequency graph\nillustrates the same point, with each of the start, end_rains and\nend_season having roughly equal slopes and with each having a range of\nabout 2 months (i.e. roughly 4 times the standard deviation).\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 7.4o*** ***Fig. 7.4p***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image515.png){width=\"3.1805818022747157in\" ![](media/image516.png){width=\"2.9403291776027998in\"\n height=\"3.0530741469816274in\"} height=\"3.0423261154855643in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nFig. 7.4q plots the season lengths. Here about 1/3 have a length less\nthan 4 months, while the longest third has a duration of five months or\nmore.\n\n -----------------------------------------------------------------------\n ***Fig. 7.4q***\n -----------------------------------------------------------------------\n ![](media/image442.png){width=\"5.721399825021872in\"\n height=\"4.006120953630796in\"}\n\n -----------------------------------------------------------------------\n\n## Coping with censored and missing data\n\nCensoring occurs in many areas of application of statistics. The topic\nis particularly important in the analysis of medical data. There the\nsurvival times of patients may be recorded for a study up to 3 years.\nThose who survive longer are the censored observations. We know the\nsurvival is more than 3 years, but don't know exactly how long.\n\nIn hydrology the height of a river may be measured. At times of flooding\nthe height may be more than the measuring instrument, but the exact\nvalue isn't known.\n\nIn climatology a heavy wind may destroy the measuring equipment. In that\ncase the exact censoring point is unknown, but we do know that a large\nvalue occurred.\n\nThere is also possible censoring with the start and end of the season in\nSections 7.3 and 7.4.\n\nTo illustrate, use the ***Climatic \\> Prepare \\> Start of the Rains***\ndialogue again, Fig. 7.5a. This time we deliberately choose a small\nplanting window, Fig. 7.5b. The latest planting date is designed to be\nthe date beyond which a farmer would not think it would be sensible to\nplant for that season. That is not likely to be 30 November, but we\nchoose that early date to illustrate the issue of censoring.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 7.5a*** ***Fig. 7.5b***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image510.png){width=\"3.6063549868766405in\" ![](media/image513.png){width=\"2.412521872265967in\"\n height=\"3.5927974628171477in\"} height=\"1.9594477252843394in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nIn Fig. 7.5a the variable names for the results are also changed, to\navoid overwriting the previous variables. The results are in Fig. 7.5c,\ntogether with the previous ones. In the 1925/26 season the earliest\nplanting opportunity was 3^rd^ January. This is now too late and hence\nis now given as a missing value. The same is done in the following\nseason when the earliest date was 8^th^ December.\n\nIn the subsequent analysis we should examine the number of occasions\nthat planting was not possible. One way is to use the ***Climatic \\>\nTidy and Examine \\> One Variable Summarise*** dialogue, Fig. 7.5d.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 7.5c*** ***Fig. 7.5d***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image518.png){width=\"3.2000076552930885in\" ![](media/image519.png){width=\"2.7899529746281715in\"\n height=\"3.4125951443569553in\"} height=\"2.5082305336832897in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nThe results, in Fig. 7.5e, indicates there were 17 seasons in which the\nnew starting date was censored. However, the problem is that there was\nalready one season for which the original definition was missing. That\nwas not due to censoring, but because there were also missing values in\nthe first season.\n\n -------------------------------------------------------------------------------------\n ***Fig. 7.5e*** ***Fig. 7.5f***\n ---------------------------------------------------- --------------------------------\n ![](media/image517.png){width=\"3.32001968503937in\" \n height=\"1.4180129046369203in\"} \n\n -------------------------------------------------------------------------------------\n\nSo, there were, 16 years when no planting was possible in November. That\nis interesting information itself. But the main problem is that the\nsummaries are missing for 2 different reasons, namely either because\nthere were days with missing data, or because planting was not possible,\ni.e. there was censoring.\n\nTo proceed we fist explain how R-Instat handles missing values, i.e.\ndays when the rainfall was not recorded. There are various options when\nproducing (say) monthly summaries that were discussed earlier. But what\nhappens with the start and end of the rains.\n\nFor the start of the rains the summary is set to missing if any day is\nmissing in the period calculated. For example in Fig. 7.5c the start in\n1922/23 was on 27^th^ November.\n\n- Had any value been missing between 1^st^ and 27^th^ November 1922,\n then the result would have been set to missing.\n\n- If there were a missing day on 1^st^ December 1922 the result would\n be given, i.e. it would not be set to missing, because the rains had\n already started.\n\n- One detail is that the result would also be set to missing if either\n 30^th^ or 31^st^ October 1922 were missing, because then the 3-day\n total on 1^st^ November cannot be calculated.\n\nThe same idea is true for the end of the rains, i.e. if a missing value\nis encountered in the period when it calculates the end of the rains,\nthen the result is set to missing. Otherwise it is given.\n\nFor the Moorings data there is only one missing day in the record, once\nit has started in early 1922. This was on 10^th^ March 2004. The end of\nthe rains was defined to be last occasion with more than 10mm between 1\nJanuary and 30 June. This missing value is within the period, but the\ncalculation has \"worked backwards\" and found the last day on 23^rd^\nMarch 2004. The missing value did not affect this calculation and hence\nthe value is given.\n\nThe calculation is more complicated for the water balance definition. If\nthere are missing water-balance values in the period of calculation,\nthen the summary is set to missing. If the rainfall is ever missing,\nthen the water balance is set to missing. Once the rainfall is no longer\nmissing the water balance may still be missing, because it does not know\nwhat the state was, just after the rainfall data resumed. Hence, the\nanalysis is doubled, starting with both a full and an empty balance\n(i.e. the two extremes). While these are different, the water balance is\nstill set to missing. Once they are the same, the water balance\ncalculation resumes.\n\nThese decisions on missing values are strict and some users may feel\nthat a single missing day should not set the summary for that year, or\nseason, to be missing. In that case consider infilling the data,\ndiscussed in chapter [xxx]{.mark}.\n\nWe now return to the censoring problem. Return to the ***Climatic \\>\nPrepare \\> Start of the Rains*** dialogue in Fig. 7.5a and tick the\nthird option for saving columns, called ***Occurrence***. This adds a\nlogical column to the summaries that can be used to distinguish between\nmissing and censored seasons.\n\n -----------------------------------------------------------------------\n ***Fig.7.5g*** ***Fig. 7.5h***\n ----------------------------------- -----------------------------------\n \n\n -----------------------------------------------------------------------\n\n[To be continued once status variable sorted.]{.mark}\n\n## During the season\n\nThis section considers examples of risks during the rainy season.\n\nChapter 6 examined rainfall totals and rain days throughout the year.\nNow they are examined for the season.\n\nThe simplest is to consider fixed periods. At Moorings the rainy season\nis from November to April. Use ***Climatic \\> Prepare \\> Climatic\nSummaries***, as shown in Fig. 7.6a.\n\nIn Fig. 7.6a press ***Summaries*** and choose just the ***N\nnon-missing*** and the ***Sum***. Click on ***Day Range*** and choose\n***1 November to 30 April***.\n\n+---------------------------------+------------------------------------+\n| ***Fig. 7.6a Summaries for | ***Fig. 7.6b Rename the resulting |\n| Moorings*** | columns*** |\n| | |\n| ***Climatic \\> Prepare \\> | ***Right-click \\> Rename Column*** |\n| Climatic Summaries*** | |\n+=================================+====================================+\n| ![](media/image514.p | ![C:\\\\Users\\\\ |\n| ng){width=\"2.830631014873141in\" | ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\S |\n| height=\"3.031419510061242in\"} | NAGHTML59463e8.PNG](media/image520 |\n| | .png){width=\"3.1565660542432195in\" |\n| | height=\"2.169508967629046in\"} |\n+---------------------------------+------------------------------------+\n\nOnce run, change the ***rain*** variable in Fig. 7.6a, to\n***raindays,*** and this time just get the ***Sum***. You may have found\nthat the variables overwrote the ones produced earlier for the full\nyear. To ensure this does not happen in the future, rename the 3\ncolumns, Fig. 7.6b. It is also useful to add an explanatory label as\nshown in Fig. 7.6b.\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 7.6c Day Range | ***Fig. 7.6d Main climatic |\n| sub-dialogue*** | summaries dialogue*** |\n| | |\n| ***From Climatic \\> Prepare \\> | |\n| Climatic Summaries*** | |\n+==================================+===================================+\n| ![](media/image476.p | ![](media/image474. |\n| ng){width=\"2.8821183289588803in\" | png){width=\"2.9964971566054244in\" |\n| height=\"2.308405511811024in\"} | height=\"2.283847331583552in\"} |\n+----------------------------------+-----------------------------------+\n\nThe totals can also be calculated for the rainy season each year. Return\nto the ***Climatic \\> Prepare \\> Climatic Summaries*** dialogue. Use the\n***rain*** variable and then press ***Day Range***. Complete as shown in\nFig. 7.6c, where the total is now from the ***start doy*** to the\n***end-season***. This is confirmed on the ***return*** to the main\ndialogue, Fig. 7.6d.\n\nIn Fig. 7.6d click on Summaries and choose the Count Non Missing and the\nSum. Once produced, ***right-click*** and ***rename*** the Sum variable\nas ***rainSeason***. The ***Count Non Missing*** column is now the\nseason length. This is another way to get the length!\n\nA third possibility is to produce the total (or the number of rain days)\nfor a fixed period following the start. Return once more to the\n***Climatic \\> Prepare \\> Climatic Summaries*** and change the ***Day\nRange*** as indicated in Fig. 7.6e, i.e. for ***120 days from the\nstart***.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 7.6e*** ***Fig. 7.6f***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image472.png){width=\"3.0676574803149608in\" ![](media/image469.png){width=\"2.9292443132108485in\"\n height=\"2.317785433070866in\"} height=\"2.886791338582677in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nThis would be for a 120-day crop. The approximate water requirement of\nmany crops is known, so the results are the first step in calculating\nthe risks of not having enough water for a specified (20 day) crop in\nthe period following planting.\n\nThe summary columns produced are shown in Fig. 7.6f.\n\nThe results are presented as exceedance probabilities in Fig. 7.6g and\nas time series in Fig. 7.6h.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 7.6g Exceedance graphs of rainfall totals*** ***Fig. 7.6hTime-series graphs***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image468.png){width=\"2.965719597550306in\" ![](media/image470.png){width=\"2.9133048993875765in\"\n height=\"2.869301181102362in\"} height=\"2.893001968503937in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nThe three totals are sufficiently similar that plotting the 3 lines on a\nsingle time-series graph in Fig. 7.6h would be confusing, so they are\nplotted as facets[^38]....\n\nThe same ideas are now considered for spell lengths. In the tropics,\ndrought is a problem and hence we consider the occurrence of long dry\nspells. The same dialogue could equally be used for hot, or cold, spells\nin temperature data, etc.\n\nThe simplest is to find the longest spell length within the main months\nof the rainy season. Continuing with the Moorings data, use ***Climatic\n\\> Prepare \\> Spells***, Fig. 7.6i.\n\nUse the Day Range sub-dialogue to specify ***January 1 to March 31*** as\nthe range of days. The results, shown in Fig. 7.6j give the longest\ndry-spell length within this 3-month period. It shows the longest number\nof consecutive days with rain less than 0.85mm on any day.\n\n+-------------------------------------+--------------------------------+\n| ***Fig. 7.6i Spells dialogue*** | ***Fig. 7.6j Spell lengths |\n| | Jan-Mar & Apr*** |\n| ***Climatic \\> Prepare \\> Spells*** | |\n| | - |\n| ***(Day range from January 1 to | |\n| March 31)*** | |\n+=====================================+================================+\n| ![C:\\\\User | ![](media/image460.png |\n| s\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\ | ){width=\"2.8059109798775155in\" |\n| \\SNAGHTMLac9f3a1.PNG](media/image46 | height=\"3.2692727471566054in\"} |\n| 4.png){width=\"3.3136023622047244in\" | |\n| height=\"3.7084175415573055in\"} | |\n+-------------------------------------+--------------------------------+\n\nTo clarify the results, use ***Climatic \\> Check Data \\> Display\nDaily***[^39]. Data for 4 early years are in Fig. 7.6k to be compared\nwith the results in Fig. 7.6j.\n\nIn Fig. 7.6j the longest spell in 1924 is 19 days. Fig. 7.6k shows that\nthis is a spell from 13^th^ February to 2^nd^ March. In 1925 the longest\nspell was just 6 days and was at the end of March. This included days\nwith small rainfalls, but each was lower than the 0.85mm threshold.\n\nThe 7-day spell in 1926 was also at the end of March. In 1927 there was\nalso a long dry spell (14 days) at the end of March, and this also shows\nthat just the longest spell is given. That year also had 13 consecutive\ndry days in January. If more detail is needed, then the three months\ncould be considered individually.\n\nIt sometimes causes confusion that the longest spell in a month can be\nlonger than the month itself. We illustrate by calculating the longest\nspell length in April. The results are also given in the last column in\nFig. 7.6j. They show that the longest dry spell in April 2024 was 43\ndays. This is confirmed from Fig. 7.6k, because 1^st^ April 2024\n\"inherited\" a dry spell from March, of 13 days, i.e. from 19^th^ March.\nSo, 1^st^ April was already the 14^th^ consecutive dry day and this had\nbecome 43 days by the ned of April. There is an option in the dialogue\nif you only wish to consider April itself. This option is used in\nSection 7.7.\n\n ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 7.6k Data for January to April for 4 years*** \n ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------\n ![](media/image467.png){width=\"1.4180938320209975in\" ![](media/image462.png){width=\"1.4605686789151355in\" ![](media/image504.png){width=\"1.5606780402449694in\" ![](media/image482.png){width=\"1.3485892388451444in\"\n height=\"3.531596675415573in\"} height=\"3.5555686789151357in\"} height=\"3.604420384951881in\"} height=\"3.430777559055118in\"}\n\n ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nAs with the rainfall totals, it is sometimes useful to find the longest\ndry spell in the rainy season, (i.e. between the day of the start and\nthe end) or in part of the season. As with the rainfall totals this uses\nthe start and end dates each year. In the ***Climatic \\> Prepare \\>\nSpells*** dialogue, change the day range as was shown for the rainfall\ntotals in Fig. 7.6c and Fig. 7.6e.\n\nFig. 7.6l shows the results for the season, i.e. between the date of the\nstart of the rains and the end of the season. The median value for the\nlongest spell length is 14 days (2 weeks). The terciles are also given,\nshowing that one year in 3 has a longest spell length of 12 days or\nless. But also a third of the years has a spell length of 18 days or\nmore.\n\nFig. 7.6m shows the longest spell lengths for the 120 days following\nplanting. The results are similar, but without the longest spells shown\nin Fig. 7.6l.\n\n ----------------------------------------------------------------------------------------------------------\n ***Fig. 7.6l Longest dry-spell in the season*** ***Fig. 7.6m Longest spell in the first 120 days***\n ---------------------------------------------------- -----------------------------------------------------\n ![](media/image480.png){width=\"3.01744750656168in\" ![](media/image478.png){width=\"3.041823053368329in\"\n height=\"3.0595516185476814in\"} height=\"3.041823053368329in\"}\n\n ----------------------------------------------------------------------------------------------------------\n\nMany crops are particularly sensitive to dry spells during the flowering\nperiod. This is typically about 20 days (3 weeks). Suppose a crop that\nreaches the start of flowering 50 days after planting. Calculating the\nrisk is currently a 2-stage process in R-Instat. First produce the new\ncolumn, for the start of flowering, Fig. 7.6n. This is an instance where\nyou can also transform the start_date as is shown in Fig. 7.6o.\n\n+----------------------------------+-----------------------------------+\n| ***Fig. 7.6n Calculate the start | ***Fig. 7.6o*** |\n| of flowering*** | |\n| | |\n| ***Prepare \\> Column: Calculate | |\n| \\> Calculation*** | |\n+==================================+===================================+\n| ![](media/image477. | ![](media/image475 |\n| png){width=\"2.945898950131234in\" | .png){width=\"2.898616579177603in\" |\n| height=\"3.30875656167979in\"} | height=\"3.2563954505686787in\"} |\n+----------------------------------+-----------------------------------+\n\nThe resulting data are in Fig. 7.6p. The ***flower_date*** variable\nshows that the flowering period often starts late in December or in\nearly January, but it is occasionally also in February.\n\nThe ***Climatic \\> Prepare \\> Spells*** dialogue is now used from the\n***start_flower*** day for ***20 days***. The resulting variable is also\nshown in Fig. 7.6p and is seen often to be quite short. For example, the\nlongest spell from early 2024 for the next few years is usually just 2\nor 3 consecutive dry days.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 7.6p*** ***Fig. 7.6q***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image481.png){width=\"2.9749759405074365in\" ![](media/image483.png){width=\"2.927165354330709in\"\n height=\"2.5203543307086615in\"} height=\"2.893520341207349in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nThe results are plotted in Fig. 7.6q using ***Climatic \\> PICSA \\>\nRainfall Graph*** again. Only in 1/3 of the years is there a dry spell\nof one week or more. However, in 13 of the 77 years, i.e. one year in\nsix, there was a dry spell of 10 days or more.\n\nThe graph in Fig. 7.6q is from a variable date. In a particular year,\nonce you know the planting date, or also from crops that are photoperiod\nsensitive, the dates are fixed. Once calculated, if the risk is high,\nthen perhaps remedial action can be taken, such as planning for some\nirrigated water to be available for this period.\n\nA third aspect that can cause a problem during the season is a climatic\nextreme. This may be drought, as considered in the dry spells above. It\ncould also be an extreme wind, or excessive rainfall causing flooding.\nExtremes are considered in detail in Chapter 11, hence only a single\nexample is given here.\n\nA question posed in relation to rainfall in Niger, was the risk of more\nthan 100m rain within a 3-day period. The argument was that while a\nsingle day with more than 100mm would be a problem, so would, say 40mm,\non each of 3 days.\n\nThree day running totals were already used \"behind the scenes\" in\ncalculating the start of the rains. Now these totals are needed\nexplicitly. Use ***Climatic \\> Prepare \\> Transform***, as shown in Fig.\n7.6r.\n\n+--------------------------------+-------------------------------------+\n| ***Fig. 7.6r Transform | ***Fig. 7.6s Resulting data |\n| dialogue*** | totalled over 3 days*** |\n| | |\n| ***Climatic \\> Prepare \\> | |\n| Transform*** | |\n+================================+=====================================+\n| ![](media/image479.pn | ![](media/image4 |\n| g){width=\"2.765544619422572in\" | 71.png){width=\"3.288202099737533in\" |\n| height=\"3.6314173228346456in\"} | height=\"3.0874376640419947in\"} |\n+--------------------------------+-------------------------------------+\n\nThe resulting daily data, in Fig. 7.6s, show an instance in February\n1923 where the total is more than 100mm.\n\nNow the ***Climatic \\> Prepare \\> Climatic Summaries*** dialogue may be\nused again, as shown in Fig. 7.6t. The summaries are from ***January to\nMarch*** and the only summary is the ***Maximum***, Fig. 7.6u.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 7.6t*** ***Fig. 7.6u Just get the maximum***\n ---------------------------------------------------- ------------------------------------------------------\n ![](media/image473.png){width=\"2.90619750656168in\" ![](media/image439.png){width=\"2.5900973315835523in\"\n height=\"3.158471128608924in\"} height=\"2.9131627296587927in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nThe resulting summary data can now be plotted as shown in Fig. 7.6v and\nFig. 7.6w. From Fig. 7.6w there is 100mm or more in about 4 years in 10.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 7.6v Time series of 3-day extremes*** ***Fig. 7.6w Cumulative distribution***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image441.png){width=\"3.2525470253718285in\" ![](media/image459.png){width=\"2.5978171478565177in\"\n height=\"3.2487839020122484in\"} height=\"3.46375656167979in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\n## It rained yesterday. Should I plant?\n\nFor Moorings, in Zambia, the definition for the start of the rains was\nthe first occasion from 1 November with more than 20mm in 3 days.\n\nFor successful planting the condition was added that there should not be\na dry spell of more than 9 (consecutive) dry days in the next 21 days.\nIn Section 7.3 the two columns (with and without the dry-spell\ncondition) were compared, showing that replanting would be needed in 1\nyear in 4.\n\nThat is an overall risk, because sometimes a planting opportunity was\nearly and in other years there was no opportunity until December. If the\ndata are examined more closely, they show that planting was possible by\n6^th^ November in 14 of the years. However, replanting was needed (i.e.\nthe dry spell condition wasn't satisfied) in 7 of these years. That is a\nrisk of 1 year in 2 when very early planting was possible. Perhaps 1^st^\nNovember is too early to consider planting, unless you are willing to\nentertain the high risk.\n\nThis question can be turned around. Suppose, in a particular year, there\nis a potential planting date on 7^th^ November. What is the risk from\nplanting then?\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 7.7aDry spell risk after planting*** ***Fig. 7.7b Result from 8 Nov and 8 Dec***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image454.png){width=\"2.881582458442695in\" ![](media/image434.png){width=\"2.830893482064742in\"\n height=\"3.3937401574803148in\"} height=\"3.4122856517935256in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nIn Fig. 7.7a the ***Day Range*** is from 8 November for 21 days. Another\nchange is that 7^th^ November is assumed to be rainy, i.e. not in a dry\nspell. So, the ***checkbox \"Assume condition not satisfied at the\nstart\"*** is ticked.\n\nThe results, in Fig. 7.7b indicate that planting early is quite risky.\nFour years have a dry spell of 10 days or more, even in the few years\nshown in Fig. 7.7b. If you change the dates in Fig. 7.7a by a month,\nthen the same analysis shows just a single year now gives a problem.\nInterestingly that year was not a problem with the early planting.\n\nSummarising the two columns[^40] shows 32 years, about 1 year in 3, had\na dry spell of more than 9 days with the early planting, compared with\njust 11 years, or 1 year in 8, from the later planting date\n\nWhat we lose on risk from early planting, we potentially gain by having\na longer season length. In Section 7.4 the season length was\n\n***Length = end_season -- start_doy.***\n\nThe results were shown in Fig. 7.4q and showed that about 1/3 of the\nyears had a season length of less than 4 months, etc. This figure is\nrepeated as Fig. 7.7c\n\nNow that we know the start is on day 100 (8^th^ November) and hence the\nlength is, instead, found from:\n\n***Length =*** ***end_season -- 100***\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 7.7c*** ***Fig. 7.7d***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image442.png){width=\"3.1445713035870515in\" ![](media/image455.png){width=\"2.862133639545057in\"\n height=\"2.201829615048119in\"} height=\"2.2399857830271217in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nComparing the information in Fig. 7.7c and 7.7d shows that with early\nplanting, on day 100, there are virtually no years with a season length\nof less than 4 months. This is compared to 1/3 of the years overall\n(Fig. 7.7c). The variability is also considerably reduced, because the\nstart is now fixed. The variability is now only because of the\nuncertainty of the end.\n\nWith this early planting we could therefore perhaps plan for 120-day\ncrop. That would have almost no risk in terms of season length. If the\nproposed crop needs (say) 600mm of water, we could now find the\nproportion of years with at least that total. That uses the ***Climatic\n\\> Prepare \\> Climatic Summaries*** dialogue, as shown in Fig. 7.7e.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 7.7e*** \n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image437.png){width=\"2.2509109798775153in\" ![](media/image435.png){width=\"3.585155293088364in\"\n height=\"2.7010925196850395in\"} height=\"2.7200470253718287in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nThe resulting totals can then be examined in various ways. The\ntime-series graph, Fig. 7.7f, is one option. This indicates quite a high\nrisk of less than 600mm. A crop needing only 500mm would have a much\nlower risk. There are only a few years with much less than 500mm.\n\nAn alternative, with this early planting, could be to aim for a\nshort-duration cereal crop, e.g. 90 days and then to try for a\nshort-season legume, that might be planted as the cereal is close to\nmaturity. Fig. 7.7d indicates that this would often have had enough time\nfor fodder, and occasionally would have long enough to mature.\n\n## Reduce risks\n\nIn the previous section risks were calculated relative to a proposed\nplanting date. In this section we examine the seasonal pattern of the\nrisks. This enables a study of the following types of problem.\n\n- For Moorings the risk of replanting was about one year in three if\n planting on 8^th^ November. (Assuming replanting is needed if there\n is a dry spell of 10 days or longer in the following 21 days.) How\n does this risk depend on the date of planting? Does the risk ever\n approach zero?\n\n- For the option of a 120-day crop that needs (say) at least 600mm of\n water, when would be the best days to plant?\n\nThe method is similar for these two -- and for other similar problems.\nFor simplicity the 120-day total is considered first. There is no\nspecial dialogue, so the analysis proceeds step-by-step.\n\nFirst use the ***Climatic \\> Prepare \\> Transform*** dialogue as shown\nin Fig. 7.8a. This transforms the rainfall data into 120-day moving\ntotals. The resulting data are shown in Fig. 7.8b after reordering the\ncolumns. They show that in the 1922/23 season there was more than 600mm\nif planting was before 11^th^ January.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 7.8a*** ***Fig. 7.8b***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image461.png){width=\"2.8864490376202974in\" ![](media/image463.png){width=\"2.631972878390201in\"\n height=\"3.535900043744532in\"} height=\"3.3305041557305337in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nThese data re now summarised over the years, this time to get a value\nfor each day of the year. This uses the ***Climatic \\> Prepare \\>\nClimatic Summaries*** dialogue, Fig. 7.8c. Use the ***Within Year***\noption in Fig. 7.8c and complete the dialogue as shown.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 7.8c*** ***Fig. 7.8d***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image456.png){width=\"3.071239063867017in\" ![](media/image453.png){width=\"2.854338363954506in\"\n height=\"3.2887182852143484in\"} height=\"2.9252132545931757in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nIn the Climatic Summaries sub-dialogue use the ***More*** tab as shown\nin Fig. 7.8d.\n\nThis produces a new data frame shown in Fig. 7.8e.\n\nRepeat the dialogue in Fig. 7.8c, changing the 600mm to 450mm\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 7.8e*** ***Fig. 7.8f***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image457.png){width=\"2.3958114610673666in\" ![](media/image466.png){width=\"3.147263779527559in\"\n height=\"3.309788932633421in\"} height=\"3.328632983377078in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nIt now just remains to graph the results. This uses the ***Describe \\>\nSpecific \\> Line Plot*** dialogue, Fig. 7.8f. The results are in Fig.\n7.8g[^41].\n\nIn Fig 7.8g the higher (red) line is for 600mm. It shows the minimum\nrisk corresponds to a planting on about 15^th^ November and is then\nabout 0.3 (30%). The lower line, for 450mm, is below 1 year in 10, for\nplantings from 1 November to about 10 December.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig.7.8g*** ***Fig. 7.8h***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image500.png){width=\"3.5475896762904635in\" ![](media/image440.png){width=\"2.5728630796150482in\"\n height=\"3.200142169728784in\"} height=\"3.1953313648293964in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nOne improvement in the presentation would be to smooth the lines given\nin Fig. 7.8g. They are quite smooth already, as there were 88 years of\ndata. With shorter records the need for smoothing becomes greater.\n\nMoving averages are the simplest way of smoothing. Use ***Climatic \\>\nPrepare \\> Transform*** as shown in Fig. 7.8h. This adds the 2 smoothed\ncolumns to the data frame.\n\nNote also that the risks are (of course) very high from March onwards.\nHence filter the data on the day of year. The 1^st^ March is s_doy =\n214.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 7.8i*** ***Fig. 7.8j***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image465.png){width=\"2.931535433070866in\" ![](media/image452.png){width=\"2.9926859142607176in\"\n height=\"2.9797069116360455in\"} height=\"3.023222878390201in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nFig. 7.8i shows plots of the data together with the smoothed lines. R\nand hence R-Instat has many other methods of smoothing data. One\nalternative method is shown below in Fig. 7.8q.\n\nThe same ideas can be used to examine the risks of a long dry spell at\ndifferent points in the season. We first consider the risk of a dry\nspell after a planting occasion, i.e. after a rain day. This uses the\nspecial ***Multiple Spells*** tab in the ***Climatic \\> Prepare \\>\nTransform*** dialogue. In Fig. 7.8j the maximum spell length is taken\nover 21 days, and that can, of course, be changed as required.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 7.8k*** ***Fig. 7.8l***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image438.png){width=\"3.018669072615923in\" ![](media/image430.png){width=\"2.9690758967629045in\"\n height=\"2.3882228783902013in\"} height=\"1.9140452755905513in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nThe next step, as before, uses the ***Climatic \\> Prepare \\> Climatic\nSummaries*** dialogue, Fig.7.8k to calculate the proportion of years\nwith a dry-spell ***longer than 9 days*** in the 21 days, following\nplanting, i.e. to correspond to the default values in the ***Start of\nthe Rains*** dialogue.\n\nOnce calculated, repeat the operation with 7 days (for a more sensitive\ncrop) and 12 days, perhaps to correspond to the extra days following a\nconservation farming strategy.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 7.8m*** ***Fig. 7.8n***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image432.png){width=\"2.5843143044619423in\" ![](media/image431.png){width=\"3.183617672790901in\"\n height=\"3.321859142607174in\"} height=\"3.687192694663167in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nThe data are shown in Fig. 7.8m where, for variety, we have used\npercentages rather than proportions.\n\nThe dry-spell risks are shown in Fig. 7.8n. They show that, in early\nNovember, it is quite advantageous, in terms of risk, to have the\n12-days, rather than the 9 days assurance for the dry spells. By early\nDecember all 3 curves have \"flattened out\", hence there is no point in\ndelaying planting -- the risks are not getting lower.\n\nThe messages would be clearer if the data in Fig. 7.8n are smoothed.\nThis can be done in the same way as for the rainfall totals, shown\nearlier in Fig. 7.8h.\n\nMany crops are sensitive to a long dry spell round flowering. The\ncalculation is slightly different to the one above, which assumed rain\nfor planting on day zero. This time we need the unconditional risks,\ni.e. a dry spell might have started before the flowering period and have\ncontinued.\n\nUse the ***Climatic \\> Prepare \\> Transform*** dialogue again, with the\n***Spell*** tab, as shown in Fig. 7.8o. Then, with the same dialogue,\nuse the ***Moving*** tab, Fig. 7.8p, to get the maximum over 20 days.\nThis assumes that the flowering period is of 20 day's duration.\n\n+-----------------------------------+----------------------------------+\n| ***Fig. 7.8o Ordinary spell | ***Fig. 7.8pMaximum over 20 |\n| lengths*** | days*** |\n| | |\n| ***Climatic \\> Prepare \\> | ***Climatic \\> Prepare \\> |\n| Transform*** | Transform (again!)*** |\n+===================================+==================================+\n| ![](media/image428. | ![](media/image433. |\n| png){width=\"3.0257491251093613in\" | png){width=\"2.630612423447069in\" |\n| height=\"2.940517279090114in\"} | height=\"2.998286307961505in\"} |\n+-----------------------------------+----------------------------------+\n\nThe next steps are just as before, i.e. in Fig. 7.8k to Fig. 7.8n. They\nuse the ***Climatic \\> Prepare \\> Climatic Summaries*** dialogue to get\nthe percentage of years each day, with a longer dry spell than 7 or 9\ndays. The resulting percentages are then plotted, as before, using the\n***Describe \\> Specific \\> Line Plot*** dialogue.\n\n ----------------------------------------------------------------------------------------------------------\n ***Fig. 7.8q Adding a loess smoother*** ***Fig. 7.8r***\n ----------------------------------------------------- ----------------------------------------------------\n ![](media/image427.png){width=\"2.816068460192476in\" ![](media/image429.png){width=\"2.97377624671916in\"\n height=\"3.2467618110236223in\"} height=\"3.6244203849518812in\"}\n\n ----------------------------------------------------------------------------------------------------------\n\nThis time, for illustration, the smoothing has been done \"on the fly\",\nas additional layers in the plot. Local smoothing has been used with\nloess, as explained in more detail in Chapter 8.\n\nThe percentages are (as would be expected[^42]) slightly higher in Fig.\n7.8r, compared with Fig. 7.8n. They show a minimum risk if the start of\nthe flowering period is towards the end of January.\n\n+----------------------------+-----------------------------------------+\n| ***Fig. 7.8s*** | ***Fig. 7.8t Plot the cumulative |\n| | data*** |\n| | |\n| | ***Describe \\> Specific \\> Line Plot*** |\n+============================+=========================================+\n| ![](media/image424.png){w | ![](media/ima |\n| idth=\"2.312619203849519in\" | ge436.png){width=\"3.2892607174103237in\" |\n| heig | height=\"2.838529090113736in\"} |\n| ht=\"3.1737740594925636in\"} | |\n+----------------------------+-----------------------------------------+\n\nThe final example examines the cumulative rainfall distribution each\nyear, or season. This starts, again, with the ***Climatic \\> Prepare \\>\nTransform*** dialogue, this time using the ***Cumulative*** button, Fig.\n7.8s.\n\nThis adds a column, called cumsum, Fig. 7.8s, giving the accumulated\nrainfall each year.\n\nNow use the ***Describe \\> Specific \\> Line Plot*** dialogue to graph\nthe cumulative data against the day of the year, Fig. 7.8t.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 7.8u Facet sub-dialogue -- by year*** ***Fig. 7.8v Filter to choose the first 20 complete\n years***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image261.png){width=\"2.5613046806649167in\" ![](media/image278.png){width=\"3.4806069553805776in\"\n height=\"2.625959098862642in\"} height=\"2.5952230971128607in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nIn Fig 7.8t, use ***Plot Options*** to put the different years each in\ntheir own graph (facet), Fig. 7.8u. Then use the ***Data Options***\nbutton, which is on each dialogue, and is another way to get to the\nfiltering system. Choose the first 20 years of data, Fig. 7.8u as 89\nyears are too many graphs to show together.\n\nThe resulting graph is in Fig. 7.8w. Each graph starts at zero and rises\nto the annual (seasonal) total. So, for example 1938-39 was a year with\nover 1000mm, while 1933-34 had only about half that total.\n\nVertical lines, in Fig. 7.8w, correspond to high rainfall and horizontal\nlines to dry spells. The 1932-33 season looked like a \"bumpy year\".\n\n -----------------------------------------------------------------------\n ***Fig. 7.8w Cumulative rainfall for 20 years at Moorings***\n -----------------------------------------------------------------------\n ![](media/image258.png){width=\"6.006608705161855in\"\n height=\"2.944076990376203in\"}\n\n -----------------------------------------------------------------------\n\nIf you remove the facets from the graphs specified in Fig. 7.8t and\ninstead put the year factor in the main dialogue in ***Factor\n(Optional)***, then the resulting graph is in Fig. 7.8x. This type of\ndisplay can be useful for monitoring, as you can super-impose the\ncurrent year. An example is shown below.\n\n ----------------------------------------------------------------------------------------------------------\n ***Fig. 7.8x Single graph of cumulative rainfall ***Fig. 7.8y***\n (mm).*** \n ----------------------------------------------------- ----------------------------------------------------\n ![](media/image259.png){width=\"1.863001968503937in\" ![](media/image270.png){width=\"4.23174978127734in\"\n height=\"2.067361111111111in\"} height=\"2.080711942257218in\"}\n\n ----------------------------------------------------------------------------------------------------------\n\nThese graphs can be taken further. As an example, in Fig. 7.8y the green\nlines indicate the start of the rains each year, while the red lines\nshow the date of the end of the season. The early and late starts, and\nends, are therefore indicated. A long season is one where the lines are\nfar apart, and so on. We explain, in Chapter 8, how these features can\nbe added.\n\nBoxplots can alternatively be used to display the cumulative data. A\nchallenge is to plot them at the end of each 10-day period. This is the\nfirst example of the use of the ***dekads*** in this guide, so return to\nthe ***Climatic \\> Dates \\> Use Date*** dialogue and complete it as\nshown in Fig. 7.8z. The year is shifted, so the dekads start in August.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 7.8z*** ***Fig. 7.8aa***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image255.png){width=\"2.3831791338582677in\" ![](media/image256.png){width=\"3.590676946631671in\"\n height=\"2.13535542432196in\"} height=\"2.3581496062992127in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nFirst get a logical column, which is TRUE on the last day of each dekad,\nand FALSE otherwise[^43]. This uses the calculator, ***Prepare \\>\nColumn: Calculate \\> Calculations.*** Complete it as shown in Fig.\n7.8aa.\n\nNow ***filter*** so just the rows when the ***dek_diff*** variable is\nTRUE are used. The data are shown in Fig. 7.8 ab.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 7.8ab Filtered for the last day of each ***Fig. 7.8ac***\n dekad*** \n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image292.png){width=\"3.213293963254593in\" ![](media/image257.png){width=\"2.8236472003499564in\"\n height=\"2.695550087489064in\"} height=\"2.6775962379702536in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nNow use ***Describe \\> Specific \\> Boxplot***, Fig. 7.8ac. The results\nare in Fig. 7.8ad[^44].\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 7.8ad Boxplots showing the cumulative rainfall ***Fig. 7.8ae A new year***\n at Moorings*** \n ------------------------------------------------------ ----------------------------------------------------\n ![](media/image265.png){width=\"4.3325426509186356in\" ![](media/image245.png){width=\"1.69586176727909in\"\n height=\"2.375553368328959in\"} height=\"2.4454811898512685in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nFig. 7.8ad shows the progression of the cumulative rainfall for the\nseason towards the final totals. These had a median of 800mm, with a\nminimum less than 500mm and a maximum of well over 1000mm.\n\nOne use of this type of plot is to monitor a new year. As an example,\nFig. 7.8ae provides data, where the total has now risen to 340mm by the\nend of February. This information can now be super-imposed on the\nboxplots, as shown in Fig. 7.8ae with the blue points[^45]. This example\nshows a great cause for concern. The totals are very low, compared to\nthe earlier 88 years of data.\n\n -----------------------------------------------------------------------\n ***Fig. 7.8ae Adding the current year to the boxplots***\n -----------------------------------------------------------------------\n ![](media/image250.png){width=\"4.862142388451444in\"\n height=\"2.726807742782152in\"}\n\n -----------------------------------------------------------------------","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_7_Tailored_Products.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_7_Tailored_Products.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_8_Efficient_use_of_RInstat_and_R.qmd.json b/.quarto/idx/Chapter_8_Efficient_use_of_RInstat_and_R.qmd.json new file mode 100644 index 0000000..18d7f6f --- /dev/null +++ b/.quarto/idx/Chapter_8_Efficient_use_of_RInstat_and_R.qmd.json @@ -0,0 +1 @@ +{"title":"Efficient use of R-Instat and R","markdown":{"headingText":"Efficient use of R-Instat and R","containsRefs":false,"markdown":"## Introduction\n\nIn this guide Chapters 2 and 3 largely made use of the general\nfacilities in R-Instat, shown in Fig. 8.1a. They were dialogues from the\nFile, Prepare and Describe menus. Chapters 4 to 7 used the climatic menu\nshown in Fig. 8.1b\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 8.1a The R-Instat menus*** ***Fig. 8.1b The Climatic menu***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image237.png){width=\"3.070092957130359in\" ![](media/image230.png){width=\"2.949284776902887in\"\n height=\"1.693844050743657in\"} height=\"3.438086176727909in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nThe Climatic menu, Fig. 8.1b, mirrors the general menus, Fig. 8.1a in\nthat parts of this menu correspond to the facilities in the File,\nPrepare, Describe and Model menus. Thus you start by getting the File\nwith the data. Then there is usually a Prepare stage, where the data are\norganised and checked, ready for analysis. This stage often includes a\n\"reshaping\" of the data, where daily records are summarised to a monthly\nor yearly basis.\n\nThen the initial analyses are usually descriptive, so use the Describe\nsection of the Climatic menu or the Describe menu itself. The materials\nin Chapters 4 to 7 were all devoted to descriptive analyses.\n\nWhen descriptive methods are not enough there is the Model menu to fit\nand examine statistical models.\n\nFor users who are starting their climatic analyses with R-Instat we\ndistinguish between four or five \"levels\". These different \"levels\" are\ndiscussed in this chapter.\n\n1. If your analyses are \"standard\", then you may find all you need is\n in the climatic menu. That is the idea of the special menu.\n\n2. If you need more, then the general R-Instat menus may be used. The\n Prepare menu is sometimes needed for more of the initial data\n manipulation than is in the climatic menu. The powerful ggplot2\n graphics system is also available through the Describe menu.\n\n3. R-Instat includes some \"halfway\" dialogues, that we discuss in\n Section 8.3. These are dialogues where you have essentially to write\n a single R command. That's quite easy and can be a stepping-stone to\n using R directly.\n\n4. Sometimes a dialogue does not do quite what is needed for an\n analysis. The ***To Script*** button, is on each dialogue and copies\n the relevant R command to a special script window. You can then\n \"tweak\" the resulting command(s) to produce the appropriate\n analysis. This is described in Section 8.4.\n\n5. Finally, you may be ready to use R \"properly\"! This is either\n because the analysis you need is not available in R-Instat, or\n because the click and point method is becoming tedious and you would\n like to work more efficiently. One option is then still to start in\n R-Instat. Then produce the log file, which has a record of all the\n commands you have used. This may be transferred and should run just\n the same in RStudio. Then you can continue the analyses using R\n directly. This process is described in Section 8.5.\n\nMost of the ideas in this chapter and also discussed in more detail in\nthe R-Instat guide called \"Reading, Tweaking and Using R Commands\".\n\n[Solving problems rather than learning to use R-Instat.]{.mark}\n\nPossibly discuss loops for successive analysis of data for multiple\nstations\n\n## Using the \"ordinary\" R-Instat\n\n[Could show smoothing with loess and splines]{.mark}, though a bit of\nthat in Chapter 7. Could refer back\n\n[Mention export of graphs for an editor: \\\"I\\'d suggest exporting the\nfigure from R as a vector graphic file (.svg) then adding your labels in\na vector graphic software. I use **Inkscape**\n[[software]{.underline}](https://inkscape.org/about/) because it can be\ndownloaded for free and its fairly intuitive to learn.\\\"]{.mark}\n\n[Also discuss data sheet and data book -- though also in Chapter\n3.]{.mark}\n\n[And the metadata windows, including changing names and also altering\nprecision.]{.mark}\n\n[Could perhaps be a good place to discuss the Tools \\> Options dialogue\n-- though maybe that deserves its own section?]{.mark}\n\nOn tasks in this section include summary of hourly to daily data\nprobably with the example from the openair package?\n\n## The halfway dialogues\n\n[Mention the risks that using these commands brings. Can make mistakes.\nGood to make some mistakes intentionally so that you are ready for\nthem.]{.mark}\n\n[Use an example of infilling data and the calculate dialogue -\ntransform. Could use infilling of temperatures to work towards a\ncomplete record.Could install chillR partly because they have an\ninteresting data set where they have introduced missing values. Also\nbecause their ideas on infilling will be generally useful for R-Instat\nin the future.]{.mark}\n\n[Then also the model and use model menu. This could include modelling\nextremes.]{.mark}\n\n## The script window\n\n[Add an R package:]{.mark}\n\n[install.packages('packagename')]{.mark}\n\n[Tried Install.packages(\"finalfit\") -- which gives an error? Wrong\nquotes! Use\nInstall.packages(]{.mark}***\\\"***[finalfit]{.mark}***\\\"***[)]{.mark}\n\n[To use data without needing to give the full name include\nattach(\"dataframename\")]{.mark}\n\nlibrary() lists all available packages\n\nlibrary(dplyr) makes the package available, so can give the commands\nwithout dplyr:: at the start.\n\nMove the example here from Chapter 3 of adding a skew boxplot.\n\n## The log window and R \n\n+-----------------------------------------------------------------------+\n| ***Code to add date to an x-variable*** |\n+=======================================================================+\n| \\# Code generated by the dialog, Line Plot |\n| |\n| Moorings_by_s_doy \\<- |\n| data_book\\$get_data_frame(data_name=\\\"Moorings_by_s_doy\\\", |\n| stack_data=TRUE, id.vars=\\\"s_doy\\\", |\n| measure.vars=c(\\\"prop120.lt.600\\\",\\\"prop120.lt.450\\\")) |\n| |\n| [Moorings_by_s_doy \\<- Moorings_by_s_doy %\\>% |\n| mutate(s_doy=as.Date(s_doy, origin = \\\"2015-07-31\\\"))]{.mark} |\n| |\n| last_graph \\<- ggplot2::ggplot(data=Moorings_by_s_doy, |\n| mapping=ggplot2::aes(x=s_doy, y=value, colour=variable)) + |\n| ggplot2::geom_line() + theme_grey() + |\n| ggplot2::theme(axis.text.x=ggplot2::element_text()) + |\n| ggplot2::scale_y_continuous(limits=c(0, 1))[+scale_x_date(date_labels |\n| = \\\"%d %b\\\", date_breaks=\\\"1 month\\\")]{.mark} |\n| |\n| data_book\\$add_graph(graph_name=\\\"last_graph\\\", graph=last_graph, |\n| data_name=\\\"Moorings_by_s_doy\\\") |\n| |\n| data_book\\$get_graphs(data_name=\\\"Moorings_by_s_doy\\\", |\n| graph_name=\\\"last_graph\\\") |\n| |\n| rm(list=c(\\\"last_graph\\\", \\\"Moorings_by_s_doy\\\")) |\n+-----------------------------------------------------------------------+","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_8_Efficient_use_of_RInstat_and_R.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_8_Efficient_use_of_RInstat_and_R.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/Chapter_9_Gridded_Data.qmd.json b/.quarto/idx/Chapter_9_Gridded_Data.qmd.json new file mode 100644 index 0000000..4f18968 --- /dev/null +++ b/.quarto/idx/Chapter_9_Gridded_Data.qmd.json @@ -0,0 +1 @@ +{"title":"Gridded Data","markdown":{"headingText":"Gridded Data","containsRefs":false,"markdown":"## Introduction\n\nThere are various sources of gridded data for climatic elements. Those\nconsidered here are from the European Organisation for the Exploitation\nof Meteorological Satellites, Satellite Application Facility on Climate\nMonitoring (EUMETSAT CM SAF), the Copernicus Climate Change Service\n(C3S) Climate Data Store and the International Research Institute for\nClimate and Society (IRI) Data Store.\n\nAll data are freely available. You need to register to access data from\nCM SAF, and also for the C3S Climate Data Store. The IRI Data Store does\nnot require registration. The CM SAF data considered here are from\nstationary satellites and are available for all of Europe and Africa and\npossibly more, e.g. Middle East and Caribbean. Sunshine and radiation\ndata are illustrated here. They are available daily (some hourly) on a\ngrid of about 4km and are from 1983. Other elements, e.g. ground\ntemperature are available hourly, from the early 1990s. They will later\nbecome available from the 1980s.\n\nWe consider the ERA5 reanalysis data from the C3S Climate Data Store.\nERA5 is global, from 1979 (soon to be 1950) with a large number of\nelements available hourly on a grid of 0.25 by 0.25 degrees (about\n30km). It is illustrated with precipitation (hourly) and with 2m\ntemperature (used to derive daily Tmax and Tmin).\n\nThe IRI Data Store is a repository of climate data from a wide variety\nof sources. We illustrate the IRI Data Store by accessing daily\nprecipitation estimates from CHIRPS and ENSO and sea-surface\ntemperatures, that are commonly used for seasonal forecasting.\n\nThere are many possible uses and applications of these data. [To be\ncontinued -- with examples of what can be done and is being\ndone.]{.mark}\n\n## Importing NetCDF files\n\nShow how to use the dialog first without changing options but still look\nat details to check what is being imported.\n\nThen show the options for sub-areas, an individual station, or for\nmultiple stations. Can use Rwanda station locations and CHIRPS data from\nIRI section.\n\n## EUMETSAT CM SAF\n\nThe CM SAF website is shown in Fig. 9.2a. You are invited to sign-in or\nregister, though you are welcome to explore what is available without\nthis. You need to register to download any data. You are then able to\nuse these data freely. EUMETSAT would very much welcome any feedback on\nhow the data have been used, particularly if, for example, you have\ncompared your station data with their data. They may sometimes be\nprepared to assist you with using the data. You can contact EUMETSAT\nthrough their User Help Desk\n[[https://www.cmsaf.eu/EN/Service/UHD/UHD_node.html]{.underline}](https://www.cmsaf.eu/EN/Service/UHD/UHD_node.html).\n\n -----------------------------------------------------------------------\n ***Fig. 9.2a***\n -----------------------------------------------------------------------\n ![](media/image234.png){width=\"6.268055555555556in\"\n height=\"2.9381944444444446in\"}\n\n -----------------------------------------------------------------------\n\nChoose Surface Radiation products from the Climate Data Records menu in\nFig. 9.2a. Choose daily sunshine duration, SDU, Fig. 9.2b.\n\nFrom Fig. 9.2c we see the data are available from 1 January 1983 to the\nend of December 2017 (when this guide was written). There are other\nproducts from EUMETSAT CM SAF if more recent data are required, but they\nhave not been through the homogenisation and quality control checks.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig 9.2b*** ***Fig. 9.2c***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image235.png){width=\"3.133465660542432in\" ![](media/image220.png){width=\"2.911786964129484in\"\n height=\"2.4349464129483813in\"} height=\"2.7217924321959757in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nAlso indicated in Fig. 9.2c is that there is documentation on each\nproduct. Consider downloading these guides if you decide to use the data\nas they are very detailed and informative.\n\nOn the same screen as Fig. 9.2c you see an ***Add to Order Cart***\ninvitation. Ignore this for now, unless you want a huge file, with data\nfrom about half the globe.\n\nInstead, scroll further down and click on the button that says ***Change\nProjection / spatial resolution / domain***.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 9.2d*** ***Fig. 9.2e***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image242.png){width=\"2.1938396762904637in\" ![](media/image227.png){width=\"3.9405238407699037in\"\n height=\"2.021411854768154in\"} height=\"1.5502766841644795in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nIf you are following this as an exercise, then change the coordinates in\nFig. 9.2e.\n\nClick, in Fig. 9.2e to proceed to the time range selection.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 9.2f*** ***Fig. 9.2g***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image244.png){width=\"3.1262707786526684in\" ![](media/image247.png){width=\"2.9971336395450567in\"\n height=\"2.611187664041995in\"} height=\"1.376020341207349in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nIn the following screen, scroll down to confirm that the sub-domain,\npart of Rwanda, has been included, Fig. 9.2f. Then press Add to Order\nCart, Fig. 9.2g.\n\nYou return to the screen in Fig. 9.2h. It is disconcerting that in Fig.\n9.2h it appears you are about to order a file of over 200 gigabytes, but\nit is the size ignoring the sub-domain[^46]. Keep your nerve and place\nthe order, Fig. 9.2h.\n\n -----------------------------------------------------------------------\n ***Fig.9.2h***\n -----------------------------------------------------------------------\n ![](media/image253.png){width=\"6.152322834645669in\"\n height=\"2.709448818897638in\"}\n\n -----------------------------------------------------------------------\n\nYou receive a confirmatory e-mail that the order has been placed on the\nEUMETSAT server. Shortly afterwards there is confirmation that the data\nhave been extracted and are waiting to be downloaded, Fig. 9.2i\n\n -----------------------------------------------------------------------\n ***Fig. 9.2i***\n -----------------------------------------------------------------------\n ![](media/image249.png){width=\"6.101929133858268in\"\n height=\"2.9671358267716537in\"}\n\n -----------------------------------------------------------------------\n\nFollow the instructions in your equivalent of the message in Fig. 9.2i\nto download the file. It is now, for the first time that you are made\naware of the file size, 341 Mbytes for this example.\n\nThis downloads a single tar file, containing 12 thousand individual\nNetCDF files, with one file for each day.\n\nThis is continued, in Section 9.5, through the CM SAF toolbox and in\nSection [xxx]{.mark} using R-Instat.\n\n## C3S Climate Data Store\n\nIf you are not online, then the first part of this section is again for\nreading only.\n\nThe website is . This takes you to\nthe screen partly shown in Fig. 9.3a. You are invited to login or\nregister your account. So, do this.\n\nOnce logged in you return to the screen in Fig. 9.3a.\n\n -----------------------------------------------------------------------\n ***Fig. 9.3a***\n -----------------------------------------------------------------------\n ![](media/image254.png){width=\"6.124782370953631in\"\n height=\"2.761784776902887in\"}\n\n -----------------------------------------------------------------------\n\nThen click on Datasets in Fig. 9.3a to give the screen starting in Fig.\n9.3b. There are many different datasets available. In the search bar\ntype \"ERA5 hourly\" and from the results select, \"ERA5 hourly data on\nsingle levels\".\n\nClick on this dataset to get further information, see Fig. 9.3c.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 9.3b*** ***Fig. 9.3c***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image252.png){width=\"3.026570428696413in\" ![](media/image251.png){width=\"3.0448775153105863in\"\n height=\"1.5810192475940508in\"} height=\"2.0040441819772528in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nThe data are currently from 1979 (soon to be from 1950). They are\navailable for many elements including precipitation, temperature,\nevaporation, radiation and wind speed and direction.\n\nThey are hourly data and at a 0.25 by 0.25-degree (about 25km)\nresolution.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 9.3d*** ***Fig. 9.3e***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image248.png){width=\"3.128680008748906in\" ![](media/image243.png){width=\"2.8662554680664916in\"\n height=\"2.0612062554680666in\"} height=\"2.2056594488188974in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nOn your first visit to the site, continue, and click on ***Download\ndata*** in Fig. 9.3c. You then choose one or more elements, Fig. 9.3d\nand decide on the years, months, days and hours to include. Finally,\nselect the sub-region to extract in the Geographical area section, Fig.\n9.3f. Once the items in Fig. 9.3d, Fig. 9.3e and Fig. 9.3f are complete\nyou can click ***Submit Form*** to start the request.\n\nThe running may take minutes (sometimes many) to complete. It also\nsometimes fails. You can view the current status of your requests by\nclicking ***Your requests*** from the menu bar shown in Fig. 9.3a.\nOccasionally there is a single error 500, in which case just run again.\nThe other common error is that you have asked for too much data. If you\nare requesting a complete time series i.e. for all hours, days, and\nmonths, then the current limit appears to be approximately 5 years. This\nlimit seems to be the same, irrespective of the area. Hence, for 30\nyears, make 6 separate requests, changing the years for each run. You do\nnot need to wait for a request to complete before starting another one.\nGo to ***Your requests*** to see the status of each and download the\ndata once complete.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 9.3g Generate a toolbox request*** ***Fig. 9.3h Names for each element***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image246.png){width=\"3.0120089676290465in\" ![](media/image241.png){width=\"3.0938626421697286in\"\n height=\"2.827140201224847in\"} height=\"1.705543525809274in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nAn alternative way to request data is through the Toolbox, shown in the\nmenu bar of the homepage in Fig. 9.3a. Previously, it was not possible\nto select a sub-region through the interface described above, hence it\nwas necessary to construct a Python script to run the Toolbox in order\nto do this. However, now that sub-region extraction is possible in the\ninterface, we suggest it is sufficient to use the interface if your main\ninterest is to download data for use in another software e.g. R or\nR-Instat.\n\nAn example Toolbox script to download hourly 2-metre temperature data\nfor sub-region covering in Rwanda for 5 years in shown Fig. 9.3i. The\nToolbox also includes functionality for processing, analysing and\ndisplaying data, however this is not covered here as we will demonstrate\nimporting ERA5 data into R-Instat.\n\n+-----------------------------------------------------------------------+\n| ***Fig. 9.3i Sample toolbox code*** |\n+=======================================================================+\n| **import cdstoolbox as ct** |\n| |\n| **\\@ct.application(title=\\'Retrieve Data\\')** |\n| |\n| **\\@ct.output.dataarray()** |\n| |\n| **def retrieve_sample_data():** |\n| |\n| **\\\"\\\"\\\"** |\n| |\n| **Application main steps:** |\n| |\n| **- retrieve 2m temperature of ERA5 from CDS Catalogue** |\n| |\n| **- specify the grid - year(s) - month(s) - day(s) - hour(s)** |\n| |\n| **- area is optional give N/W/S/E corners** |\n| |\n| **- recommended for local analysis** |\n| |\n| **- ask for netcdf format** |\n| |\n| **\\\"\\\"\\\"** |\n| |\n| **data = ct.catalogue.retrieve(** |\n| |\n| **\\'reanalysis-era5-single-levels\\',** |\n| |\n| **{** |\n| |\n| **\\'variable\\': \\'2m_temperature\\',** |\n| |\n| **\\'grid\\': \\[\\'0.25\\', \\'0.25\\'\\],** |\n| |\n| **\\'product_type\\': \\'reanalysis\\',** |\n| |\n| **\\'year\\': \\[** |\n| |\n| **\\'1981\\','1982','1983','1984','1985'** |\n| |\n| **\\],** |\n| |\n| **\\'month\\': \\[** |\n| |\n| **\\'01\\', \\'02\\', \\'03\\', \\'04\\', \\'05\\', \\'06\\',\\'07\\', \\'08\\', |\n| \\'09\\', \\'10\\', \\'11\\', \\'12\\',** |\n| |\n| **\\],** |\n| |\n| **\\'day\\': \\[** |\n| |\n| **\\'01\\', \\'02\\', \\'03\\', \\'04\\', \\'05\\', \\'06\\',\\'07\\', \\'08\\', |\n| \\'09\\', \\'10\\', \\'11\\', \\'12\\',** |\n| |\n| **\\'13\\', \\'14\\', \\'15\\', \\'16\\', \\'17\\', \\'18\\',\\'19\\', \\'20\\', |\n| \\'21\\', \\'22\\', \\'23\\', \\'24\\',** |\n| |\n| **\\'25\\', \\'26\\', \\'27\\', \\'28\\', \\'29\\', \\'30\\',\\'31\\'** |\n| |\n| **\\],** |\n| |\n| **\\'time\\': \\[** |\n| |\n| **\\'00:00\\',\\'01:00\\',\\'02:00\\',\\'03:00\\',\\'04:00\\',\\'05:00\\',** |\n| |\n| **\\'06:00\\',\\'07:00\\',\\'08:00\\',\\'09:00\\',\\'10:00\\',\\'11:00\\',** |\n| |\n| **\\'12:00\\',\\'13:00\\',\\'14:00\\',\\'15:00\\',\\'16:00\\',\\'17:00\\',** |\n| |\n| **\\'18:00\\',\\'19:00\\',\\'20:00\\',\\'21:00\\',\\'22:00\\',\\'23:00\\'** |\n| |\n| **\\],** |\n| |\n| **\\'area\\': \\[\\'-1.5/30/-2.0/30.54\\'\\],** |\n| |\n| **\\'format\\' : \\[\\'netcdf\\'\\]** |\n| |\n| **})** |\n| |\n| **return data** |\n+-----------------------------------------------------------------------+\n\nThe second stage is to read the resulting data into R-Instat. For those\nwho were not online, the six files have also been renamed and copied\ninto the R-Instat library.\n\n***Go into R-Instat*** and use ***File \\> Open and Tidy NetCDF File***\nFig. 9.3j.\n\n ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 9.3j Loading the data for 1981-5*** ***Fig. 9.3k Six files in R-Instat***\n ---------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------\n ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTML145541b7.PNG](media/image191.png){width=\"3.2002351268591425in\" ![](media/image197.png){width=\"2.920479002624672in\"\n height=\"1.9078324584426947in\"} height=\"2.9872025371828523in\"}\n\n ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nIn Fig. 9.3j, if you downloaded your own data, then choose ***Browse***,\notherwise choose ***From Library*** and ***use the file called\ncds.Rwanda_1981_5.nc***.\n\nThen recall the last dialogue and include the other five files, up to\ncds.Rwanda_2005_10. The resulting data are shown in Fig. 9.3k. There are\nabout 394,416 rows of data in each file (i.e. roughly 9 \\* 24 \\* 365 \\*\n5)\n\nThe next step is to append the files to give the 30-year record. Use\n***Climatic \\>Tidy and Examine \\> Append***, Fig. 9.3l. In Fig. 9.3l,\ninclude all 6 data frame, then the ID column isn't needed and the\nresulting data frame is named better than Append1.\n\n ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 9.3l Appending the 6 data frames*** ***Fig. 9.3m Temperatures into centigrade***\n --------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------\n ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTML14701350.PNG](media/image203.png){width=\"3.084857830271216in\" ![](media/image196.png){width=\"2.7211132983377078in\"\n height=\"2.3588156167979in\"} height=\"3.437498906386702in\"}\n\n ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nThe data column in Fig. 9.3k, called tas, is in degrees Kelvin. Use\n***Climatic \\> Prepare \\> Transform*** to change them into centigrade\nfor comparison with the station data, Fig. 9.3m.\n\nECMWF provides the time variable always in GMT (Greenwich Mean Time).\nRwanda is 2 hours ahead, so either, or both, the time variables in Fig.\n9.3k need to be moved forward by 2 hours. To make this change the data\nshould first be in \"station\" order. Hence first ***Right-Click*** and\nchoose ***Sort*** (or use Prepare \\> Data Frame \\> Sort) to produce the\ndialogue in Fig. 9.3n.\n\nNow use ***Prepare \\> Column: Calculate \\> Calculations*** as shown in\nFig. 9.3o. In the calculator the ***Transform*** keyboard includes the\n***lead*** function. The function, from the dplyr package is:\n\n***dplyr::lead(time_full,2)***, to move to Rwanda time. Pressing the\n***Try*** button in Fig. 9.3o shows the first value is now 2am GMT[^47].\n\n ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 9.3n*** ***Fig. 9.3o***\n ---------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------\n ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTML14c5504c.PNG](media/image199.png){width=\"3.1133234908136482in\" ![](media/image198.png){width=\"2.914620516185477in\"\n height=\"3.026656824146982in\"} height=\"3.134375546806649in\"}\n\n ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nNow use ***Climatic \\> Dates \\> Make Date*** to make a new Date column\nfrom the Rwanda hourly column, Fig. 9.3p.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 9.3p*** ***Fig. 9.3q***\n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image200.png){width=\"2.9332370953630797in\" ![](media/image195.png){width=\"3.1684503499562555in\"\n height=\"2.824397419072616in\"} height=\"2.5948917322834646in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nFinally generate Tmax and Tmin, on a daily basis, from the hourly\nvalues, ready to use, or to compare with station data. First\n***right-click*** and make the ***lon and lat columns into factors***.\nThe hourly data are now roughly as in Fig. 9.3q\n\nComplete the ***Prepare \\> Column: Reshape \\> Column Summaries***\ndialogue as shown in Fig. 9.3r. As these are temperatures the daily\nmaximum and minimum are calculated. The resulting worksheet, Fig. 9.3s,\nhas a more reasonable 100,000 rows of data at the 9 gridpoints.\n\n+------------------------------------+---------------------------------+\n| ***Fig. 9.3r*** | ***Fig. 9.3s Resulting daily |\n| | data*** |\n| ***Prepare \\> Column: Reshape \\> | |\n| Column Summaries*** | |\n| | |\n| ***(Make max and min the | |\n| summaries)*** | |\n+====================================+=================================+\n| ![](media/image184 | ![](media/image186.pn |\n| .png){width=\"3.1482884951881016in\" | g){width=\"2.9195363079615047in\" |\n| height=\"3.011654636920385in\"} | height=\"2.777613735783027in\"} |\n+------------------------------------+---------------------------------+\n\n## The IRI Data Store\n\nA third source of gridded data considered here is the IRI Data Library.\nIRI is the International Research Institute for Climate and Society\nbased in Colombia University, USA. The website for their data library is\n[[http://iridl.ldeo.columbia.edu/]{.underline}](http://iridl.ldeo.columbia.edu/)\n, Fig. 9.4a. The IRI Data Store is a large repository of climate data\nfrom a wide variety of sources. In many cases, the IRI Data Store is not\nthe only, or primary, source of the data, however the IRI Data Store\nprovides a simple consistent way of freely downloading from a large set\nof sources, and crucially allows for selecting sub-regions.\n\nAs well as downloading from the website, R-Instat includes a dialog to\ndirectly download and import some of the common data from the IRI Data\nStore. We demonstrate both methods here, using the R-Instat dialog to\ndownload CHIRPS daily rainfall estimates and the IRI Data Store website\nto download information on ENSO and sea surface temperatures.\n\n### Downloading directly from R-Instat\n\nClimate Hazards Group InfraRed Precipitation with Station data (CHIRPS),\nproduced by Climate Hazards Center UC Santa Barbara, USA, is a\nnear-global gridded rainfall data set, available from 1981 to\nnear-present with a spatial resolution of 0.05°. It is constructed by\ncombining satellite imagery and in-situ station data, and is available\non a daily, dekad and monthly basis. It's website is here\n[[https://www.chc.ucsb.edu/data/chirps]{.underline}](https://www.chc.ucsb.edu/data/chirps)\nbut the data is more easily available to download and subset from the\nIRI Data Store. It is an example of one of the datasets available to\ndownload directly from R-Instat.\n\nIn R-Instat go to ***Climatic \\> File \\> Import from IRI Data\nLibrary***, fig xxx. First select \"UCSB CHIRPS\" as the ***Source***. We\nwill download the daily data with the highest resolution available,\nhence choose \"Daily Precipitation 0.05 degree\" as the ***Data***, fig\nxxx. Source shows a limited set of data sources available in the IRI\nData Store which we think will be most commonly used by R-Instat users.\nIf there is a dataset from the IRI Data Store that you commonly use and\nthink we should add, please let us know and we can consider adding it to\nthe dialog.\n\nThe next two sections of the dialog allow for choosing a subset of time\nor location. By default, \"Entire Range\" is selected for the data range.\nFor CHIRPS, this means 1981 to near-present. We will use this option,\nbut if you want a shorter time period choose \"Custom Range\" and select\nthe \"From\" and \"To\" dates. The Location Range allows you to choose an\narea defined by longitude and latitude limits, or a single point, which\nwill extract the nearest grid point to the location you provide. Let's\nfirst choose a single point for Kigali, Rwanda at longitude 30.1 and\nlatitude -1.95, fig xxx.\n\nThe dialog will connect to the IRI Data Library and download the\nrequested data to your machine as a NetCDF file (.nc), a common format\nfor gridded data (CM SAF and C3S Climate Data Store data are also\nprovided in this format). Click ***Browse*** to choose where the\ndownload data will be saved to or accept the default of your Documents\nfolder. Choose an appropriate name for the new data frame. Now, click\n***Ok*** to download and import the data into R-Instat. It may take some\ntime for the request to be processed (up to 30 minutes), particularly\nfor requests that are for a long time period since data are usually\nstored in separate files for each time point. However, this does not\nmean the download will be a large file and the time can vary depending\non how busy the IRI Data Library servers are. While waiting, you will\nsee the R-Instat waiting dialog and the download progress bar. Do not\nworry if the progress bar does not move forward, this just means the\nrequest is still being processed. Once the request has been processed,\nthe download will usually be small and take very little time. For\nexample, this request should result in a download file of size \\~0.1MB.\n\nAfter finishing you will see the data imported into R-Instat, fig xxx.\nThe NetCDF file has been downloaded to the location chosen on the dialog\n(Documents by default) and the file has been imported into a data frame\nin R-Instat. The data frame has five columns. X and Y are the location\nand this should be constant since we requested a single point. Notice\nthat the value in Y is not exactly what we request. It is -1.97 and we\nrequest -1.95. This is because the closed grid point in the CHIRPS data\ngrid to the provided location is selected. .T is time as a number and\nT_date is a more useful column that is created by R-Instat when\nimporting as a Date column. prcp is precipitation. We can confirm this\nby looking at the column metadata: ***View \\> Column Metadata***. Scroll\nto the end to see the \"standard_name\" and \"units\" columns which confirm\nwhat each column represents and its units, fig xxx. Click ***View \\>\nColumn Metadata*** again to close the metadata. We can see that each row\nin the data represents a single day, starting on 1981-01-01. Use\n***Describe \\> One Variable \\> Summaries***, and select all columns to\nsee a summary of the data. The output is shown in fig xxx. We see that X\nand Y are constant, as expected. .T is numeric and not that useful, but\nT_date show the data ranges from 1981-01-01 to 2020-08-31 (as of October\n2020, usually 1 or 2 months behind the current date). prcp shows a\nsensible set of summaries for daily rainfall values. This is useful to\ndo to confirm that the request is as you expected. For example, if X and\nY are not constant but you wanted just a single point, then you may not\nhave done the request correctly.\n\nNotice that the data file is also stored on your machine in the folder\nyou chose. For example, in Documents my file is called\nucsb_chirps7f14482329.nc. If you need to import this data again, you can\nnow use the file directly, without requesting it again from the IRI Data\nStore. See section xxx on how to import NetCDF files.\n\nThis data is useful for comparison with a single station in Kigali. We\noften have data from multiple stations and would wish to extract gridded\ndata at each of the station locations. One way to do this would be to\nmake separate requests for each station location using the Import from\nIRI Data Library multiple times. However, this becomes time consuming\nfor many stations, particularly if the processing time is slow. Another\noption is to do a single request and download data for an area that\ncovers all the station locations and then afterwards extract the data\nfor the required locations.\n\nSo let's to this by download the same data for an area that covers\nRwanda instead of a single point. This will be a larger download file\n\\~280MB but should not take much longer to process. If you have an\ninternet connection able to download \\~300MB of data then try the next\nsteps below. If not, then this is just for reading.\n\nGo back to the ***Import from IRI Data Library*** dialog. The\n***Source***, ***Data*** and ***Date Range*** options remain the same.\nChange the ***Location Range*** option from \"Point\" to \"Area\" and enter\nthe values: longitude: min 28.5, max 30.5, latitude: min -2.5, max -1.4.\nThis area covers the four stations in Rwanda found in the R-Instat\nLibrary. Choose the location to save the download or use the same\nlocation. Now, the data request is for approximately a 2 degrees by 1\ndegree area, which will give approximately (2 / 0.05) x (1 / 0.05) = 40\nx 20 = 800 grid points, since the resolution is 0.05 degrees. We do not\nwant to directly import all 800 grid points into R-Instat as this would\nbe equivalent to 800 station records for 40 years. Instead, we want to\ndownload the data and then extract only a few grid points of interest\nafterwards. So we will check the option for \"Don't import data after\ndownloading\". This removes the new data frame name as it will not import\ninto R-Instat but will just download to your machine. Now click ***Ok***\nand it may take a similar amount of time to complete.\n\nAfter finishing you will not see any change in R-Instat but the file\nwill be downloaded to the chosen folder. We can now use the dialog at\n***Climatic \\> File \\> Import & Tidy NetCDF*** to import a subset of the\ngrid points based on station locations. This is shown in section xxx.\n\n### Download from the IRI Data Store\n\nAs examples, information on ENSO and sea surface temperatures are\naccessed. The maproom also contains instructional information, so typing\nENSO into the search, Fig. 9.4a, provides useful information, including\nthe areas of the Pacific ocean associated with the NINO situations, Fig.\n9.4b. Fig. 9.4b is accessed directly from\n[[https://iridl.ldeo.columbia.edu/maproom/ENSO/Diagnostics.html]{.underline}](https://iridl.ldeo.columbia.edu/maproom/ENSO/Diagnostics.html)\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig.9.4a IRI Data Library*** ***Fig. 9.4b NINO3.4***\n ------------------------------------------------------ -----------------------------------------------------\n ![](media/image211.png){width=\"3.8668733595800524in\" ![](media/image221.png){width=\"2.130990813648294in\"\n height=\"2.70544072615923in\"} height=\"2.7068285214348204in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nIn Fig. 9.4a click on Data by Category, then on Climate Indices, Fig.\n9.4c and choose Indices nino EXTENDED, Fig. 9.4d.\n\n -------------------------------------------------------------------------------------------------------------\n ***Fig. 9.4c*** \n ------------------------------------------------------ ------------------------------------------------------\n ![](media/image229.png){width=\"2.6998807961504814in\" ![](media/image228.png){width=\"3.4260433070866143in\"\n height=\"2.4705489938757657in\"} height=\"2.2284437882764654in\"}\n\n -------------------------------------------------------------------------------------------------------------\n\nChoose ***nino34***, in Fig. 9.4e and then go straight to ***data\nfiles***. The next screen shows a variety of output formats, including\nNetCDF, which you choose.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 9.4e*** ***Fig. 9.4f***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image223.png){width=\"3.075055774278215in\" ![](media/image201.png){width=\"2.899403980752406in\"\n height=\"3.0795778652668417in\"} height=\"3.59878280839895in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nNow, in R-Instat, use File \\> Open and Tidy NetCDF File. If you followed\nthe screens above, then browse for the file that was downloaded.\nOtherwise there is a copy in the R-Instat library to March 2019, Fig.\n9.4g.\n\n --------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n ***Fig. 9.4g*** ***Fig. 9.4h***\n --------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------\n ![C:\\\\Users\\\\ROGERS\\~1\\\\AppData\\\\Local\\\\Temp\\\\SNAGHTMLda15af6.PNG](media/image216.png){width=\"3.1782567804024495in\" ![](media/image222.png){width=\"2.99167760279965in\"\n height=\"1.8947287839020122in\"} height=\"2.0226049868766403in\"}\n\n --------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\nThe data are now imported into R-Instat, Fig. 9.4h. The time variable\nhas not been recognised as a date. You may wish to click on the I (for\ninformation -- the metadata) and this will confirm that the column,\ncalled T, is months since January 1960. If the fact that some values\nappear the same in this column, then change the number of significant\nfigures in that column, from 3 to 5.\n\nThe first value of T, in Fig. 9.4h is -1248. Dividing by 12 gives 104\nyears, so the data start in January 1856!\n\nUse Climatic \\> Dates \\> Generate Dates, Fig. 9.4i. In Fig. 9.4i, change\nthe starting date to January 1856, the end date to March 2019 (if using\nthe library dataset), and the step to 1 Month. The resulting date column\nis shown in Fig. 9.4j.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 9.4i*** ***Fig. 9.4j***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image217.png){width=\"2.841988188976378in\" ![](media/image210.png){width=\"2.6477077865266843in\"\n height=\"2.867364391951006in\"} height=\"3.06124343832021in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nCountries have their own definition of when the NINO3.4 implies a year,\nor season is El Niño, or La Niña, see\n[[https://en.wikipedia.org/wiki/El_Ni%C3%B1o]{.underline}](https://en.wikipedia.org/wiki/El_Ni%C3%B1o),\nsome use the NINO3.4 value and others use NINo3, or even NINO1 and 2.\nThe site\n[[http://www.bom.gov.au/climate/enso/enlist/index.shtml]{.underline}](http://www.bom.gov.au/climate/enso/enlist/index.shtml)\ngives a detailed description of El Niño events since 1900, Fig. 9.4k,\nwith a companion page for La Niña.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 9.4k*** ***Fig. 9.4l***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image127.png){width=\"3.470980971128609in\" ![](media/image128.png){width=\"2.5918022747156604in\"\n height=\"2.1808070866141733in\"} height=\"1.7213331146106736in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nThe SSTs themselves are often used for seasonal forecasting. This is\nillustrated with the SSTs for the Nino3.4 region.\n\n***Return to the main page***, Fig. 9.4a, then choose ***Data by\nCategory*** again, but this time, in Fig. 9.4c, choose ***Air-Sea\nInterface***. In the resulting screen, choose the ***NOAA NCDC ERSST\nversion5***, Fig. 9.4l.\n\nIn the resulting screen, Fig. 9.4m, choose ***anomalies*** and then\n***Data Selection***.\n\n ------------------------------------------------------------------------------------------------------------\n ***Fig. 9.4m*** ***Fig. 9.4n***\n ----------------------------------------------------- ------------------------------------------------------\n ![](media/image156.png){width=\"2.991107830271216in\" ![](media/image130.png){width=\"3.0622233158355208in\"\n height=\"2.34369750656168in\"} height=\"2.5905457130358704in\"}\n\n ------------------------------------------------------------------------------------------------------------\n\nSet the ***time, attitude and longitude*** as shown in Fig. 9.4n and\nthen ***Restrict Ranges***. The part at the top of Fig. 9.4n should\nchange accordingly and you now press ***Stop Selecting***.\n\nFig. 9.4m now has the three ranges added, in blue, Fig. 9.4o. Click on\nData Files to give the same as Fig. 9.4f, earlier. Choose the NetCDF\noption again to download the file.\n\n -----------------------------------------------------------------------------------------------------------\n ***Fig. 9.4o*** ***Fig. 9.4p***\n ----------------------------------------------------- -----------------------------------------------------\n ![](media/image141.png){width=\"2.780994094488189in\" ![](media/image183.png){width=\"3.290544619422572in\"\n height=\"1.8450831146106736in\"} height=\"2.7998042432195978in\"}\n\n -----------------------------------------------------------------------------------------------------------\n\nUse the File \\> Input and Tidy NetCDF File as in Fig. 9.4g. Then use the\nClimatic \\> Dates \\> Generate Dates dialogue as shown in Fig. 9.4p. In\nFig. 9.4p, remember to change to the new data frame. Then set the\nstarting date to January 1921 and there are now 130 values (26 E-W, by 5\nN-S) at each time point.\n\nIn Fig. 9.4p, if all is correct, the generated sequence should match the\nlength of the data frame. Once accepted, the resulting data frame is\nshown in Fig. 9.4q. Here each pixel is a 2 degree square, so the first\nrow is the temperature anomaly round 120°W and 4°S for January 1921.\n\n -----------------------------------------------------------------------\n ***Fig. 9.4q***\n -----------------------------------------------------------------------\n ![](media/image102.png){width=\"2.993989501312336in\"\n height=\"3.175609142607174in\"}\n\n -----------------------------------------------------------------------\n\n## Using the CM SAF toolbox for NetCDF files\n\nThe CM SAF toolbox is an R software package designed to process the\nNetCDF files downloaded from EUMETSAT, Section 9.3. It is used on the\ndownloaded files from EUMETSAT (or from other organisations who have\nNetCDF files). This may be all you need, if your interest is in some\nproducts from the EUMETSAT data. Or it may be before using R-Instat if\nyour interest is in comparing station and satellite data.\n\n## Defining ENSO\n\nSee\n[[https://www.ncdc.noaa.gov/teleconnections/enso/indicators/sst/]{.underline}](https://www.ncdc.noaa.gov/teleconnections/enso/indicators/sst/)\n\n[Warm and cold phases are defined as a minimum of five consecutive\n3-month running mean of SST anomalies\n([[ERSST.v5]{.underline}](http://origin.cpc.ncep.noaa.gov/products/analysis_monitoring/ensostuff/ONI_v5.php))\nin the Niño 3.4 region surpassing a threshold of +/- 0.5°C]{.mark}","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"Chapter_9_Gridded_Data.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"Chapter_9_Gridded_Data.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/idx/index.qmd.json b/.quarto/idx/index.qmd.json new file mode 100644 index 0000000..58add88 --- /dev/null +++ b/.quarto/idx/index.qmd.json @@ -0,0 +1 @@ +{"title":"Acknowledgments","markdown":{"headingText":"Acknowledgments","containsRefs":false,"markdown":"[To be added.]{.mark}","srcMarkdownNoYaml":""},"formats":{"html":{"identifier":{"display-name":"HTML","target-format":"html","base-format":"html"},"execute":{"fig-width":7,"fig-height":5,"fig-format":"retina","fig-dpi":96,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"html","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":"auto","merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[],"notebook-links":true},"pandoc":{"standalone":true,"wrap":"none","default-image-extension":"png","to":"html","output-file":"index.html"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"lang":"en","fig-responsive":true,"quarto-version":"1.5.45","bibliography":["references.bib"],"theme":"cosmo"},"extensions":{"book":{"multiFile":true}}},"pdf":{"identifier":{"display-name":"PDF","target-format":"pdf","base-format":"pdf"},"execute":{"fig-width":5.5,"fig-height":3.5,"fig-format":"pdf","fig-dpi":300,"df-print":"default","error":false,"eval":true,"cache":null,"freeze":false,"echo":true,"output":true,"warning":true,"include":true,"keep-md":false,"keep-ipynb":false,"ipynb":null,"enabled":null,"daemon":null,"daemon-restart":false,"debug":false,"ipynb-filters":[],"ipynb-shell-interactivity":null,"plotly-connected":true,"engine":"markdown"},"render":{"keep-tex":false,"keep-typ":false,"keep-source":false,"keep-hidden":false,"prefer-html":false,"output-divs":true,"output-ext":"pdf","fig-align":"default","fig-pos":null,"fig-env":null,"code-fold":"none","code-overflow":"scroll","code-link":false,"code-line-numbers":false,"code-tools":false,"tbl-colwidths":true,"merge-includes":true,"inline-includes":false,"preserve-yaml":false,"latex-auto-mk":true,"latex-auto-install":true,"latex-clean":true,"latex-min-runs":1,"latex-max-runs":10,"latex-makeindex":"makeindex","latex-makeindex-opts":[],"latex-tlmgr-opts":[],"latex-input-paths":[],"latex-output-dir":null,"link-external-icon":false,"link-external-newwindow":false,"self-contained-math":false,"format-resources":[]},"pandoc":{"pdf-engine":"xelatex","standalone":true,"variables":{"graphics":true,"tables":true},"default-image-extension":"pdf","to":"pdf","output-file":"index.pdf"},"language":{"toc-title-document":"Table of contents","toc-title-website":"On this page","related-formats-title":"Other Formats","related-notebooks-title":"Notebooks","source-notebooks-prefix":"Source","other-links-title":"Other Links","code-links-title":"Code Links","launch-dev-container-title":"Launch Dev Container","launch-binder-title":"Launch Binder","article-notebook-label":"Article Notebook","notebook-preview-download":"Download Notebook","notebook-preview-download-src":"Download Source","notebook-preview-back":"Back to Article","manuscript-meca-bundle":"MECA Bundle","section-title-abstract":"Abstract","section-title-appendices":"Appendices","section-title-footnotes":"Footnotes","section-title-references":"References","section-title-reuse":"Reuse","section-title-copyright":"Copyright","section-title-citation":"Citation","appendix-attribution-cite-as":"For attribution, please cite this work as:","appendix-attribution-bibtex":"BibTeX citation:","appendix-view-license":"View License","title-block-author-single":"Author","title-block-author-plural":"Authors","title-block-affiliation-single":"Affiliation","title-block-affiliation-plural":"Affiliations","title-block-published":"Published","title-block-modified":"Modified","title-block-keywords":"Keywords","callout-tip-title":"Tip","callout-note-title":"Note","callout-warning-title":"Warning","callout-important-title":"Important","callout-caution-title":"Caution","code-summary":"Code","code-tools-menu-caption":"Code","code-tools-show-all-code":"Show All Code","code-tools-hide-all-code":"Hide All Code","code-tools-view-source":"View Source","code-tools-source-code":"Source Code","tools-share":"Share","tools-download":"Download","code-line":"Line","code-lines":"Lines","copy-button-tooltip":"Copy to Clipboard","copy-button-tooltip-success":"Copied!","repo-action-links-edit":"Edit this page","repo-action-links-source":"View source","repo-action-links-issue":"Report an issue","back-to-top":"Back to top","search-no-results-text":"No results","search-matching-documents-text":"matching documents","search-copy-link-title":"Copy link to search","search-hide-matches-text":"Hide additional matches","search-more-match-text":"more match in this document","search-more-matches-text":"more matches in this document","search-clear-button-title":"Clear","search-text-placeholder":"","search-detached-cancel-button-title":"Cancel","search-submit-button-title":"Submit","search-label":"Search","toggle-section":"Toggle section","toggle-sidebar":"Toggle sidebar navigation","toggle-dark-mode":"Toggle dark mode","toggle-reader-mode":"Toggle reader mode","toggle-navigation":"Toggle navigation","crossref-fig-title":"Figure","crossref-tbl-title":"Table","crossref-lst-title":"Listing","crossref-thm-title":"Theorem","crossref-lem-title":"Lemma","crossref-cor-title":"Corollary","crossref-prp-title":"Proposition","crossref-cnj-title":"Conjecture","crossref-def-title":"Definition","crossref-exm-title":"Example","crossref-exr-title":"Exercise","crossref-ch-prefix":"Chapter","crossref-apx-prefix":"Appendix","crossref-sec-prefix":"Section","crossref-eq-prefix":"Equation","crossref-lof-title":"List of Figures","crossref-lot-title":"List of Tables","crossref-lol-title":"List of Listings","environment-proof-title":"Proof","environment-remark-title":"Remark","environment-solution-title":"Solution","listing-page-order-by":"Order By","listing-page-order-by-default":"Default","listing-page-order-by-date-asc":"Oldest","listing-page-order-by-date-desc":"Newest","listing-page-order-by-number-desc":"High to Low","listing-page-order-by-number-asc":"Low to High","listing-page-field-date":"Date","listing-page-field-title":"Title","listing-page-field-description":"Description","listing-page-field-author":"Author","listing-page-field-filename":"File Name","listing-page-field-filemodified":"Modified","listing-page-field-subtitle":"Subtitle","listing-page-field-readingtime":"Reading Time","listing-page-field-wordcount":"Word Count","listing-page-field-categories":"Categories","listing-page-minutes-compact":"{0} min","listing-page-category-all":"All","listing-page-no-matches":"No matching items","listing-page-words":"{0} words","listing-page-filter":"Filter","draft":"Draft"},"metadata":{"block-headings":true,"bibliography":["references.bib"],"documentclass":"scrreprt"},"extensions":{"book":{"selfContainedOutput":true}}}},"projectFormats":["html","pdf"]} \ No newline at end of file diff --git a/.quarto/xref/04bf8f47 b/.quarto/xref/04bf8f47 new file mode 100644 index 0000000..8965039 --- /dev/null +++ b/.quarto/xref/04bf8f47 @@ -0,0 +1 @@ +{"entries":[],"headings":["introduction","climatic-data-that-is-ready","the-r-instat-climatic-system","tidying-the-data","transferring-data-from-climsoft","satellite-data","what-can-go-wrong","whats-next"],"options":{"chapters":true}} \ No newline at end of file diff --git a/.quarto/xref/09d69ae9 b/.quarto/xref/09d69ae9 new file mode 100644 index 0000000..5129a29 --- /dev/null +++ b/.quarto/xref/09d69ae9 @@ -0,0 +1 @@ +{"entries":[],"headings":[],"options":{"chapters":true}} \ No newline at end of file diff --git a/.quarto/xref/0b9f6219 b/.quarto/xref/0b9f6219 new file mode 100644 index 0000000..bbe6518 --- /dev/null +++ b/.quarto/xref/0b9f6219 @@ -0,0 +1 @@ +{"entries":[],"headings":["who-is-this-guide-for","why-is-it-needed","what-software-is-used","what-is-in-this-guide","climatology-statistics-and-computing","climate-services-for-agriculture","the-climsoft-climate-data-management-system"],"options":{"chapters":true}} \ No newline at end of file diff --git a/.quarto/xref/0d0c6dbf b/.quarto/xref/0d0c6dbf new file mode 100644 index 0000000..0cd3d99 --- /dev/null +++ b/.quarto/xref/0d0c6dbf @@ -0,0 +1 @@ +{"entries":[],"headings":["introduction","using-a-shape-file","adding-station-data","information-about-the-stations","further-types-of-mapping"],"options":{"chapters":true}} \ No newline at end of file diff --git a/.quarto/xref/1e20ec21 b/.quarto/xref/1e20ec21 new file mode 100644 index 0000000..f485a76 --- /dev/null +++ b/.quarto/xref/1e20ec21 @@ -0,0 +1 @@ +{"headings":["introduction","using-the-spi-index","the-spei-index","palmer-drought-severity-index"],"entries":[],"options":{"chapters":true}} \ No newline at end of file diff --git a/.quarto/xref/2364b70b b/.quarto/xref/2364b70b new file mode 100644 index 0000000..51c4f16 --- /dev/null +++ b/.quarto/xref/2364b70b @@ -0,0 +1 @@ +{"options":{"chapters":true},"entries":[],"headings":["introduction","column-and-data-frame-metadata","graphs","the-log-and-script-windows","dont-let-the-computer-laugh-at-you"]} \ No newline at end of file diff --git a/.quarto/xref/245ad8c7 b/.quarto/xref/245ad8c7 new file mode 100644 index 0000000..42c82d3 --- /dev/null +++ b/.quarto/xref/245ad8c7 @@ -0,0 +1 @@ +{"headings":[],"options":{"chapters":true},"entries":[]} \ No newline at end of file diff --git a/.quarto/xref/27c0cb18 b/.quarto/xref/27c0cb18 new file mode 100644 index 0000000..0b1f317 --- /dev/null +++ b/.quarto/xref/27c0cb18 @@ -0,0 +1 @@ +{"headings":["introduction","getting-ready","start-of-the-rains","the-end-and-length","coping-with-censored-and-missing-data","during-the-season","it-rained-yesterday.-should-i-plant","reduce-risks"],"entries":[],"options":{"chapters":true}} \ No newline at end of file diff --git a/.quarto/xref/281ba8de b/.quarto/xref/281ba8de new file mode 100644 index 0000000..3522a83 --- /dev/null +++ b/.quarto/xref/281ba8de @@ -0,0 +1 @@ +{"headings":["introduction","using-the-ordinary-r-instat","the-halfway-dialogues","the-script-window","the-log-window-and-r"],"options":{"chapters":true},"entries":[]} \ No newline at end of file diff --git a/.quarto/xref/2b2e672d b/.quarto/xref/2b2e672d new file mode 100644 index 0000000..a89a513 --- /dev/null +++ b/.quarto/xref/2b2e672d @@ -0,0 +1 @@ +{"options":{"chapters":true},"entries":[],"headings":["introduction","climate-change-and-variability","producing-the-initial-graphs---no-data-issues","the-rainy-season","more-with-the-rainfall-and-temperature-data","coping-with-data-issues","combining-risks-for-different-crops"]} \ No newline at end of file diff --git a/.quarto/xref/34b90079 b/.quarto/xref/34b90079 new file mode 100644 index 0000000..a169dae --- /dev/null +++ b/.quarto/xref/34b90079 @@ -0,0 +1 @@ +{"headings":["introduction","the-moorings-data","the-objectives","comparing-satellite-and-station-data","in-conclusion"],"options":{"chapters":true},"entries":[]} \ No newline at end of file diff --git a/.quarto/xref/4cc833a0 b/.quarto/xref/4cc833a0 new file mode 100644 index 0000000..6883862 --- /dev/null +++ b/.quarto/xref/4cc833a0 @@ -0,0 +1 @@ +{"options":{"chapters":true},"entries":[],"headings":["examining-trends","comparing-gridded-and-station-data","degree-days"]} \ No newline at end of file diff --git a/.quarto/xref/53fe8b05 b/.quarto/xref/53fe8b05 new file mode 100644 index 0000000..77d6d51 --- /dev/null +++ b/.quarto/xref/53fe8b05 @@ -0,0 +1 @@ +{"headings":["introduction","preparing-the-data","annual-summaries","more-detailed-summaries---rainfall","options-for-missing-values","processing-temperature-data","more-detailed-summaries---temperatures"],"options":{"chapters":true},"entries":[]} \ No newline at end of file diff --git a/.quarto/xref/5eea7dbd b/.quarto/xref/5eea7dbd new file mode 100644 index 0000000..bf24d88 --- /dev/null +++ b/.quarto/xref/5eea7dbd @@ -0,0 +1 @@ +{"headings":["acknowledgments"],"options":{"chapters":true},"entries":[]} \ No newline at end of file diff --git a/.quarto/xref/665fb489 b/.quarto/xref/665fb489 new file mode 100644 index 0000000..b466b0b --- /dev/null +++ b/.quarto/xref/665fb489 @@ -0,0 +1 @@ +{"options":{"chapters":true},"headings":[],"entries":[]} \ No newline at end of file diff --git a/.quarto/xref/6c73654d b/.quarto/xref/6c73654d new file mode 100644 index 0000000..42c82d3 --- /dev/null +++ b/.quarto/xref/6c73654d @@ -0,0 +1 @@ +{"headings":[],"options":{"chapters":true},"entries":[]} \ No newline at end of file diff --git a/.quarto/xref/85b3c403 b/.quarto/xref/85b3c403 new file mode 100644 index 0000000..47a11f7 --- /dev/null +++ b/.quarto/xref/85b3c403 @@ -0,0 +1 @@ +{"options":{"chapters":true},"entries":[],"headings":["evapotranspiration","filling-and-homogenising-data","markov-chains"]} \ No newline at end of file diff --git a/.quarto/xref/86862ac5 b/.quarto/xref/86862ac5 new file mode 100644 index 0000000..cb55f2e --- /dev/null +++ b/.quarto/xref/86862ac5 @@ -0,0 +1 @@ +{"options":{"chapters":true},"headings":["introduction","getting-the-extremes","climdex-indices---precipitation","climdex-temperatures","using-the-climdex-indices","extreme-value-analysis"],"entries":[]} \ No newline at end of file diff --git a/.quarto/xref/8b8d3e9d b/.quarto/xref/8b8d3e9d new file mode 100644 index 0000000..5129a29 --- /dev/null +++ b/.quarto/xref/8b8d3e9d @@ -0,0 +1 @@ +{"entries":[],"headings":[],"options":{"chapters":true}} \ No newline at end of file diff --git a/.quarto/xref/8bd4f299 b/.quarto/xref/8bd4f299 new file mode 100644 index 0000000..3d68fe9 --- /dev/null +++ b/.quarto/xref/8bd4f299 @@ -0,0 +1 @@ +{"entries":[],"options":{"chapters":true},"headings":["who-is-this-guide-for","why-is-it-needed","what-software-is-used","what-is-in-this-guide","climatology-statistics-and-computing","climate-services-for-agriculture","the-climsoft-climate-data-management-system"]} \ No newline at end of file diff --git a/.quarto/xref/8eca05bc b/.quarto/xref/8eca05bc new file mode 100644 index 0000000..1acd42f --- /dev/null +++ b/.quarto/xref/8eca05bc @@ -0,0 +1 @@ +{"options":{"chapters":true},"entries":[],"headings":["introduction","importing-netcdf-files","eumetsat-cm-saf","c3s-climate-data-store","the-iri-data-store","downloading-directly-from-r-instat","download-from-the-iri-data-store","using-the-cm-saf-toolbox-for-netcdf-files","defining-enso"]} \ No newline at end of file diff --git a/.quarto/xref/9df82ecb b/.quarto/xref/9df82ecb new file mode 100644 index 0000000..b25df94 --- /dev/null +++ b/.quarto/xref/9df82ecb @@ -0,0 +1 @@ +{"options":{"chapters":true},"entries":[],"headings":[]} \ No newline at end of file diff --git a/.quarto/xref/INDEX b/.quarto/xref/INDEX new file mode 100644 index 0000000..6997211 --- /dev/null +++ b/.quarto/xref/INDEX @@ -0,0 +1,89 @@ +{ + "index.qmd": { + "index.html": "5eea7dbd" + }, + "intro.qmd": { + "intro.html": "6c73654d" + }, + "summary.qmd": { + "summary.html": "f25506fb" + }, + "references.qmd": { + "references.html": "665fb489" + }, + "Chapter_1__Acknowledgments.qmd": { + "Chapter_1__Acknowledgments.html": "245ad8c7" + }, + "Chapter_2__About_this_guide.qmd": { + "Chapter_2__About_this_guide.html": "8bd4f299" + }, + "Chapter_1_About_this_guide.qmd": { + "Chapter_1_About_this_guide.html": "0b9f6219" + }, + "Chapter_2_More_Practice_with_RInstat.qmd": { + "Chapter_2_More_Practice_with_RInstat.html": "34b90079" + }, + "Chapter_3_Using_RInstat_effectively.qmd": { + "Chapter_3_Using_RInstat_effectively.html": "2364b70b" + }, + "Chapter_4_Getting_the_data_into_shape.qmd": { + "Chapter_4_Getting_the_data_into_shape.html": "04bf8f47" + }, + "Chapter_5_Quantity_and_quality.qmd": { + "Chapter_5_Quantity_and_quality.html": "c2e5a108" + }, + "Chapter_6_Preparing_summaries.qmd": { + "Chapter_6_Preparing_summaries.html": "53fe8b05" + }, + "Chapter_7_Tailored_Products.qmd": { + "Chapter_7_Tailored_Products.html": "27c0cb18" + }, + "Chapter_8_Efficient_use_of_RInstat_and_R.qmd": { + "Chapter_8_Efficient_use_of_RInstat_and_R.html": "281ba8de" + }, + "Chapter_9_Gridded_Data.qmd": { + "Chapter_9_Gridded_Data.html": "8eca05bc" + }, + "Chapter_10_Comparing_Data_from_Different_Sources.qmd": { + "Chapter_10_Comparing_Data_from_Different_Sources.html": "bc681641" + }, + "Chapter_11_Drawing_Maps.qmd": { + "Chapter_11_Drawing_Maps.html": "0d0c6dbf" + }, + "Chapter_12_Extremes.qmd": { + "Chapter_12_Extremes.html": "86862ac5" + }, + "Chapter_13_PICSA__Long_Before_the_season.qmd": { + "Chapter_13_PICSA__Long_Before_the_season.html": "2b2e672d" + }, + "Chapter_14_The_Seasonal_forecast.qmd": { + "Chapter_14_The_Seasonal_forecast.html": "f0768d19" + }, + "Chapter_15_Fitting_and_using_stochastic_models.qmd": { + "Chapter_15_Fitting_and_using_stochastic_models.html": "8b8d3e9d" + }, + "Chapter_16_Withinday_data.qmd": { + "Chapter_16_Withinday_data.html": "b8e82ca6" + }, + "Chapter_17_Circular_data_and_wind_roses.qmd": { + "Chapter_17_Circular_data_and_wind_roses.html": "cc18ed16" + }, + "Chapter_18_Temperatures.qmd": { + "Chapter_18_Temperatures.html": "4cc833a0" + }, + "Chapter_19_Drought_Indices__SPI.qmd": { + "Chapter_19_Drought_Indices__SPI.html": "1e20ec21" + }, + "Chapter_20_Climate_Normals.qmd": { + "Chapter_20_Climate_Normals.html": "eb1f944e" + }, + "Chapter_21_Various.qmd": { + "Chapter_21_Various.html": "85b3c403" + }, + "Chapter_22_References.qmd": { + "Chapter_22_References.html": "09d69ae9" + }, + "Chapter_23_Index.qmd": { + "Chapter_23_Index.html": "9df82ecb" + } +} \ No newline at end of file diff --git a/.quarto/xref/b8e82ca6 b/.quarto/xref/b8e82ca6 new file mode 100644 index 0000000..7f7a477 --- /dev/null +++ b/.quarto/xref/b8e82ca6 @@ -0,0 +1 @@ +{"headings":[],"entries":[],"options":{"chapters":true}} \ No newline at end of file diff --git a/.quarto/xref/bc681641 b/.quarto/xref/bc681641 new file mode 100644 index 0000000..dbc32eb --- /dev/null +++ b/.quarto/xref/bc681641 @@ -0,0 +1 @@ +{"entries":[],"options":{"chapters":true},"headings":["introduction"]} \ No newline at end of file diff --git a/.quarto/xref/c2e5a108 b/.quarto/xref/c2e5a108 new file mode 100644 index 0000000..a90aa2a --- /dev/null +++ b/.quarto/xref/c2e5a108 @@ -0,0 +1 @@ +{"options":{"chapters":true},"headings":["introduction","an-inventory-what-data-do-i-have","using-boxplots-to-check-and-present-data","quality-control-of-temperature-and-other-data","quality-control-for-rainfall-records"],"entries":[]} \ No newline at end of file diff --git a/.quarto/xref/cc18ed16 b/.quarto/xref/cc18ed16 new file mode 100644 index 0000000..fd30c5d --- /dev/null +++ b/.quarto/xref/cc18ed16 @@ -0,0 +1 @@ +{"headings":["introduction","circular-data","graphs-for-wind-direction","wind-roses","more-displays-for-circular-data"],"entries":[],"options":{"chapters":true}} \ No newline at end of file diff --git a/.quarto/xref/eb1f944e b/.quarto/xref/eb1f944e new file mode 100644 index 0000000..315d5e3 --- /dev/null +++ b/.quarto/xref/eb1f944e @@ -0,0 +1 @@ +{"options":{"chapters":true},"entries":[],"headings":["introduction","precipitation-normals","missing-values","temperature-normals"]} \ No newline at end of file diff --git a/.quarto/xref/f0768d19 b/.quarto/xref/f0768d19 new file mode 100644 index 0000000..4ff01b2 --- /dev/null +++ b/.quarto/xref/f0768d19 @@ -0,0 +1 @@ +{"entries":[],"headings":["introduction","the-y-variables---examining-the-rainfall-data","rainfall-data-with-many-stations","the-x-variables-sea-surface-temperatures"],"options":{"chapters":true}} \ No newline at end of file diff --git a/.quarto/xref/f25506fb b/.quarto/xref/f25506fb new file mode 100644 index 0000000..42c82d3 --- /dev/null +++ b/.quarto/xref/f25506fb @@ -0,0 +1 @@ +{"headings":[],"options":{"chapters":true},"entries":[]} \ No newline at end of file diff --git a/Chapter_10_Comparing_Data_from_Different_Sources.qmd b/Chapter_10_Comparing_Data_from_Different_Sources.qmd new file mode 100644 index 0000000..2b64b7a --- /dev/null +++ b/Chapter_10_Comparing_Data_from_Different_Sources.qmd @@ -0,0 +1,90 @@ +# Comparing Data from Different Sources +## Introduction + +The satellite and reanalysis data, discussed in Chapter 9, provides a +wonderful resource that can supplement the historical station data that +is described in this guide. The satellite data is usually from the early +1980s, while some of the reanalysis data is from 1950. Table 10.1 +summarises some sources of rainfall data: + + ----------------------------------------------------------------------- + Table 10.1 + ----------------------------------------------------------------------- + ![](media/image115.png){width="6.268055555555556in" + height="1.9694444444444446in"} + + ----------------------------------------------------------------------- + +Some of these products also include other elements, including +temperatures and ERA5 is for many elements. + +These data are already used extensively. However, often users access +only one type, i.e. either station or satellite/reanalysis. This is +often either because that is what the researcher is comfortable with, or +only one type is easily available. We consider here how station and +satellite data can be compared and then perhaps used together. There are +a range of possible objectives from these comparisons including the +following: + +a) The satellite/reanalysis data, from the same location as a ground + station, can perhaps be considered as an additional station. As + such, perhaps the data can be used to complete, or infill missing + values in the station data. + +b) Similarly, perhaps this new (satellite) station could be used to + support the quality-control of the station data. + +These objectives may be more interesting for countries where there is a +relatively sparse station network. Where the network is dense, +neighbouring ground stations may be used for these objectives. + +c) The bonus is that the satellite data does provide a dense network. + For example, for CHIRPS the estimated daily rainfall data is on + roughly a 5km square, so the equivalent of about 400 (pseudo) + stations per square degree. Hence it provides estimated daily + rainfall data for the whole of Africa, and beyond with a pseudo + station that is always close to any given location. + +Comparisons between station and gridded data must recognise that they +have not measured the same thing. Station data are measured at a point, +while gridded data represent an area. The size of the area depends on +the method with an example shown in Fig. 10.1a. + +In Barbados, Fig. 10.1a the point shown is a station called Husbands, +the site of a regional climate centre. CIMH. The largest pixel is for +the ERA5 reanalysis data and the smallest is for CHIRPS. This figure +also shows that the pixel in coastal sites can sometimes be largely over +the ocean and hence a neighbouring pixel may be more relevant. + ++------------------------------------+---------------------------------+ +| ***Fig. 10.1a Pixel size for 3 | ***Fig. 10.1b Difference | +| methods in Barbados*** | between gridded and point data | +| | for rainfall*** | +| | | +| | (Figure with permission from H. | +| | Greatrex) | ++====================================+=================================+ +| ![Chart Description automatically | ![](media/image104.pn | +| generated](media/image11 | g){width="2.7712182852143483in" | +| 2.png){width="3.094673009623797in" | height="2.506793525809274in"} | +| height="2.188830927384077in"} | | ++------------------------------------+---------------------------------+ + +Fig 10.1b illustrates a reason for possible differences between area and +point data for rainfall. The sketch shows a cloud, and hence possibly +rain in part of the pixel, but not at the station in the top left. Hence +the station may be zero, while the gridded data notes some rain. Thus, +unless the satellite data are adjusted, we would expect more rain days +(and potentially less extreme values) than at a point. This feature is +particularly for rainfall, but may also be shown for other elements, +such as sunshine hours, where there may be zeros in the data. + +The problem that is addressed in this chapter is essentially just the +comparison of two variables, i.e. 2 columns of data, where the first is +the station and the second is the satellite, or reanalysis data. This is +essentially the same problem as in forecasting, where the forecast is +compared with the actual data. Many of the methods are from software +that was originally constructed for the forecasting problem. + +From a statistical point of view this problem is just the same as +comparing \ No newline at end of file diff --git a/Chapter_11_Drawing_Maps.qmd b/Chapter_11_Drawing_Maps.qmd new file mode 100644 index 0000000..392a467 --- /dev/null +++ b/Chapter_11_Drawing_Maps.qmd @@ -0,0 +1,240 @@ +# Drawing Maps +## Introduction + +Climatic data is often presented in map form. Common examples include +details of the stations in each country, plus further information about +each station. + +Preparing a map is usually a 2-stage process. The first stage, described +in Section 10.2, uses a shape file to provide an outline of the country, +and other general details. Then climatic details are added, as is +described in Section 10.3. + +## Using a shape file + +R-Instat does not currently have any shape files in the library, so they +have to be downloaded. There are various sites that offer shape files +and GADM (GADM, 2019) is comprehensive, Fig. 10.2a. + + ----------------------------------------------------------------------- + ***Fig. 10.2a The GADM data page*** + ----------------------------------------------------------------------- + ![](media/image190.png){width="6.11749343832021in" + height="3.305452755905512in"} + + ----------------------------------------------------------------------- + +C licking on country in Fig. 10.1a allows the input of a country name, +as shown in Fig. 10.2b. For Kenya, as for most other formats, there are +different ways to download the data. + ++------------------------------+---------------------------------------+ +| ***Fig. 10.2b*** | ***Fig. 10.2c*** | +| | | +| | ***Climatic \> File \> Open and Tidy | +| | Shapefile*** | ++==============================+=======================================+ +| ![](media/image185.png){ | ![](media/image | +| width="2.7050929571303586in" | 187.png){width="3.3892760279965004in" | +| h | height="1.7678455818022747in"} | +| eight="2.183115704286964in"} | | ++------------------------------+---------------------------------------+ + +Data at level 0 is simply the country boundary, while level 1 gives the +outline for each of Kenya's 47 counties. Levels 2 and 3 provide even +more detail. + +In Fig. 10.2b the R(sf) option provides a file, with an ***rds*** +extension, that can be opened into R-Instat through the ***File \> +Open*** dialogue. However, we suggest clicking on Shapefile in Fig. +10.2. This downloads a zip file that is about 20 Mbytes for Kenya and +which contains data at all 4 levels, 0, 1, 2, 3. + +Unzip this file. In R-Instat use ***Climatic \> File \> Open and Tidy +Shapefile***, Fig. 10.2c. Go to the unzipped files and open the Level 1 +shapefile. There are 47 rows of data, shown in Fig. 10.2d, (after +reordering the variables for clarity.) + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 10.2d*** ***Fig. 10.2e*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image188.png){width="3.5070898950131233in" ![](media/image163.png){width="2.380729440069991in" + height="3.419274934383202in"} height="2.9443088363954506in"} + + ------------------------------------------------------------------------------------------------------------ + +Go to ***Climatic \> Mapping***. Part of this dialogue is shown in Fig. +10.2e. Choose the data frame with the shape file if it isn't chosen +automatically. Then just press Ok for the map shown in Fig. 10.2f. + +What could be easier? + +Return to the ***Climatic \> Mapping*** dialogue and add the +***NAME_1*** variable from Fig. 10.2d into the ***Fill field*** of Fig. +10.2e. The result is in Fig. 10.2g. The map is now nicely colourful. If +there were, say, 10 regions, this would be fine, but with 47 counties +the legend is taking too much space and can't easily be associated with +each county. + + ---------------------------------------------------------------------------------------------------------- + ***Fig. 10.2fKenya county map*** ***Fig. 10.2g*** + ---------------------------------------------------- ----------------------------------------------------- + ![](media/image172.png){width="2.97536198600175in" ![](media/image189.png){width="3.021402012248469in" + height="3.437853237095363in"} height="2.575886920384952in"} + + ---------------------------------------------------------------------------------------------------------- + +So, return to the ***Climatic \> Mapping*** dialogue. Press ***Plot +Options,*** then use the ***Theme*** tab and set the ***Legend to +None***, Fig. 10.2h. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 10.2h*** ***Fig. 10.2i*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image139.png){width="2.9793011811023624in" ![](media/image166.png){width="3.0055807086614172in" + height="2.9853805774278217in"} height="3.5880883639545056in"} + + ------------------------------------------------------------------------------------------------------------- + +The resulting map is shown in Fig. 10.2i. + +Sometimes it is useful for an initial map to include the names of the +districts as labels. + +Return to the ***Climatic \> Mapping*** dialogue and include the same +data frame also on the right-hand side of the dialogue, Fig 10.2j. + + ----------------------------------------------------------------------- + ***Fig. 10.2j*** + ----------------------------------------------------------------------- + ![](media/image182.png){width="5.439518810148732in" + height="2.9879385389326334in"} + + ----------------------------------------------------------------------- + +The initial results are in Fig. 10.2k. It shows that, with 47 labels we +have given the software a considerable challenge to make all the labels +visible. The geom is called geom_label_repel and has done its best, but +perhaps it needs some help. Two possibilities are to make the labels +smaller, Fig. 10.2l, or to omit the box round each label. This then uses +geom_text_repel instead, Fig. 10.2m. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 10.2k*** ***Fig. 10.2l*** + ------------------------------------------------------ ---------------------------------------------------- + ![](media/image103.png){width="3.0282250656167977in" ![](media/image74.png){width="2.979179790026247in" + height="3.608007436570429in"} height="3.6041830708661418in"} + + ----------------------------------------------------------------------------------------------------------- + +Finally, in this section, we go "down a level". This uses the level 2 +data, which has 310 rows. Then we filter to give just one district, +choosing Kisumu. (A few neighbouring districts could be chosen.) The +resulting map is shown in Fig. 10.2n. + +The GADM site is limited to administrative data only. There are other +sites, such as +[[http://www.diva-gis.org/]{.underline}](http://www.diva-gis.org/) with +additional information, such as roads and elevation. + + --------------------------------------------------------------------------------------------------------- + ***Fig. 10.2m Text, rather than label*** ***Fig. 10.2n*** + ---------------------------------------------------- ---------------------------------------------------- + ![](media/image78.png){width="2.865278871391076in" ![](media/image85.png){width="3.192403762029746in" + height="3.3938265529308835in"} height="1.2317147856517936in"} + + --------------------------------------------------------------------------------------------------------- + +## Adding station data + +Adding station data to a map is just as easy as adding the county +information in Section 10.2. If your data are in CLIMSOFT, and you have +the necessary permissions, then transferring the data may be done with +the ***Climatic \> File \> Import from Climsoft*** dialogue. Here we +illustrate with the Kenya data from the Instat library. + +Use ***File \> Open from Library \> Instat \> Browse \> Climatic \> +Kenya*** and open the file called western_kenya.rds. This has 3 data +frames, including one called wkenya_stationinfo, Fig. 10.3a. + + ---------------------------------------------------------------------------------------------------------- + ***Fig. 10.3a*** ***Fig. 10.3b*** + ---------------------------------------------------- ----------------------------------------------------- + ![](media/image60.png){width="4.219044181977253in" ![](media/image63.png){width="1.6362029746281714in" + height="3.1557469378827645in"} height="2.9429680664916886in"} + + ---------------------------------------------------------------------------------------------------------- + +There are 52 stations, Fig. 10.3a, and the information includes the +County as well as the latitude and longitude. An initial step is to +examine how many counties have data. This uses the ***Right-Click*** +from the top of the County column, and the ***Levels/Labels*** option, +also shown in Fig. 10.3a. + +The Levels/Labels dialogue shows there are data from 12 counties. The +spelling is consistent with the County=level file, used in Section 10.2 +except for Homabay, which we change, in this dialogue, to Homa Bay. + +This initial check is important, as any spelling mistakes in the county +name, when entering the data, will invent a new county! + ++-------------------------------+--------------------------------------+ +| ***Fig. 10.3d Filter the map | ***Fig. 10.3e Map file for Western | +| file*** | Kenya*** | +| | | +| ***Right Click \> Filter \> | | +| Define New Filter*** | | ++===============================+======================================+ +| ![](media/image61.png | ![](media/imag | +| ){width="2.791648075240595in" | e62.png){width="3.346146106736658in" | +| height="2.561923665791776in"} | height="2.414307742782152in"} | ++-------------------------------+--------------------------------------+ + +Return to the level 1 map file, Right-Click and Filter to choose the +same 12 counties, Fig. 10.3d. The data file should now have just 12 +rows, to match the number of counties that will be mapped. + +Return to the Climatic \> Mapping dialogue. The map information is on +the left-hand side of the dialogue and the new station information is +now on the right, Fig. 10.3f. + + ----------------------------------------------------------------------- + ***Fig. 10.3f*** + ----------------------------------------------------------------------- + ![](media/image58.png){width="5.3781485126859145in" + height="3.0781649168853895in"} + + ----------------------------------------------------------------------- + +The result is shown in Fig. 10.3g with labels, and with the county given +as a legend. Fig. 10.3h uses text and omits the legend. This is quite a +challenging map, because so may stations are close together. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 10.3g*** ***Fig. 10.3h*** + ---------------------------------------------------- ------------------------------------------------------ + ![](media/image59.png){width="3.244919072615923in" ![](media/image101.png){width="2.7297692475940507in" + height="2.782950568678915in"} height="2.7890474628171478in"} + + ----------------------------------------------------------------------------------------------------------- + +The results show there are at least 2 obvious errors in the data. The +most obvious is Chemilil, which should be in Kisumu county, but is shown +in the middle of Kajaido. And Akira, that should be in Kajaido is shown +slightly outside any of the counties. It is tempting to correct these +obvious errors. However, better is the message that there may be other +errors and a strategy for checking the geographical information would be +useful. + +We wonder whether google maps could be used for checking? This aspect +has become important, partly because of the potential of combining +station and satellite information. However, the combining is only +sensible if the locations of the station data are correct. + +## Information about the stations + +[To be added.]{.mark} + +## Further types of mapping + +[Contours, gridded data]{.mark} \ No newline at end of file diff --git a/Chapter_12_Extremes.qmd b/Chapter_12_Extremes.qmd new file mode 100644 index 0000000..f649560 --- /dev/null +++ b/Chapter_12_Extremes.qmd @@ -0,0 +1,491 @@ +# Extremes +## Introduction + +Starting with daily, or sub-daily data the analysis proceeds in two +stages. The first is to get the extremes and the second is to analyse +them. The data from two stations in Ghana are used for illustration. Use +***File \> Open from Library \> Instat \> Browse \> Climatic \> Ghana*** +and open the RDS file called ***Ghana two stations***. From Fig 11.1a we +see the data start in 1944, though the elements, other than rainfall +start later. + + ---------------------------------------------------------------------------------------------------------- + ***Fig. 11.1a Two stations from Ghana*** ***Fig. 11.1b*** + ---------------------------------------------------- ----------------------------------------------------- + ![](media/image98.png){width="3.032425634295713in" ![](media/image113.png){width="2.950962379702537in" + height="2.8353412073490816in"} height="2.535641951006124in"} + + ---------------------------------------------------------------------------------------------------------- + +In the Climatic menu the data are already in the right "shape" and there +is a date column, see Fig. 11.1a. So start by checking whether there are +any missing dates to infill, Fig. 11.1b. + + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 11.1c*** ***Fig. 11.1d*** + ------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------ + ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTML177df15.PNG](media/image97.png){width="2.620236220472441in" ![](media/image100.png){width="3.3276706036745405in" + height="1.9923840769903762in"} height="1.519601924759405in"} + + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +In ***Climatic \> Dates Infill Missing Dates***, include the +***Station***, Fig. 11.1c. The results, in Fig. 11.1d, indicate that +there were 5 missing months in the record at Saltpond and four at +Tamale. There are now 53297 rows of data. + +Now use ***Climatic \> Dates \> Use Date***, Fig. 11.1e, and complete as +shown. + +Then use Climatic \> Define Climatic data. It should complete +automatically. Check for uniqueness and then press OK. + + --------------------------------------------------------------------------------------------------------- + ***Fig. 11.1e*** ***Fig. 11.1f*** + --------------------------------------------------- ----------------------------------------------------- + ![](media/image90.png){width="2.28207895888014in" ![](media/image88.png){width="3.4914720034995628in" + height="3.2165966754155733in"} height="4.148623140857393in"} + + --------------------------------------------------------------------------------------------------------- + +Now use ***Climatic \> Check Data \> Inventory***, Fig. 11.1g. Include +the elements down to wind speed. + + ---------------------------------------------------------------------------------------------------------- + ***Fig. 11.1g*** ***Fig. 11.1h*** + ---------------------------------------------------- ----------------------------------------------------- + ![](media/image99.png){width="2.729400699912511in" ![](media/image89.png){width="3.3204877515310587in" + height="3.16913823272091in"} height="3.202425634295713in"} + + ---------------------------------------------------------------------------------------------------------- + +The results show the other elements started roughly in 1960. There are +relatively few missing values in the rainfall, and the other elements +are also reasonably complete. + +The same Climatic \> Check Data menu has options for quality control +checks. These are assumed, as we proceed to examine the extremes. + +## Getting the extremes + +In the ***Climatic \> Prepare*** menu there are four dialogues that get +extremes. They are considered briefly and then ***Climatic \> Prepare \> +Extremes*** is examined in detail. + +The ***Climatic \> Prepare \> Climatic Summaries***, Fig. 11.2b has +already been used extensively in this guide. + + ----------------------------------------------------------------------------------------------------------- + ***The ClimzaFig. 11.2a*** ***Fig. 11.2b*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image91.png){width="2.9926891951006125in" ![](media/image56.png){width="2.9134219160104986in" + height="3.2375459317585302in"} height="3.1352055993000874in"} + + ----------------------------------------------------------------------------------------------------------- + +In Fig. 11.2c we can choose the extremes, i.e. the minimum and/or +maximum. These can be annual, as shown in Fig. 11.2b, or for a part of +the year, or perhaps monthly. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 11.2c*** ***Fig. 11.2d*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image55.png){width="2.8620866141732284in" ![](media/image52.png){width="2.8025732720909886in" + height="3.151451224846894in"} height="3.2878444881889766in"} + + ----------------------------------------------------------------------------------------------------------- + +Fig. 11.2d shows the ***Climatic \> Prepare \> Spells*** dialogue. This +automatically gives the extreme, i.e. longest spell each year. This may +be the longest dry spell for rainfall, or the longest hot (or cold) +spell for temperatures, etc. + +The Climdex system is covered in Sections 11.3 and 11.4. Hence now +consider ***the Climatic \> Prepare \> Extremes*** dialogue, Fig. 11.2e. + + --------------------------------------------------------------------------------------- + ***Fig. 11.2e*** ***Fig. 11.2f*** + --------------------------------------------------- ----------------------------------- + ![](media/image51.png){width="2.98702646544182in" + height="4.1097736220472445in"} + + --------------------------------------------------------------------------------------- + +[To be continued]{.mark} + +## Climdex Indices - precipitation + +A set of 27 climate change indices have resulted from WMO meetings and +reports. They are described in +[[http://etccdi.pacificclimate.org/list_27_indices.shtml]{.underline}](http://etccdi.pacificclimate.org/list_27_indices.shtml) +and implemented through an R package called climdex.pcic. The pcic +stands for Pacific Islands Impacts Consortium, but the indices are +general. + +Each index can produce an annual summary, and some offer the option of +monthly summaries. The are a single dialogue in R-Instat. Sixteen of the +indices are temperature-based. The other 11 are rainfall indices. + +The Dodoma data from Tanzania are used for illustration. Use ***File \> +Open from Library \> Instat \> Browse \> Climatic \> Tanzania*** and +open the file called Dodoma.rds. It is already defined as a climatic +dataset. Hence the climatic dialogues can be used immediately. + +The annual summaries from climdex are compared with those used in +Chapters 6 and 7. Hence start with the ***Climatic \> Prepare \> +Climatic Summaries***, Fig. 11.3b. + + ---------------------------------------------------------------------------------------------------------- + ***Fig. 11.3a*** ***Fig. 11.3b*** + ---------------------------------------------------- ----------------------------------------------------- + ![](media/image54.png){width="3.153367235345582in" ![](media/image53.png){width="2.8408005249343833in" + height="3.609623797025372in"} height="3.593584864391951in"} + + ---------------------------------------------------------------------------------------------------------- + +Press ***Summaries*** on the main dialogue and choose the summaries +indicated in Fig. 11.3c. Then choose the ***Missing Options*** tab to +give Fig. 11.3d. The default in climdex is to set the summary to missing +if more than 15 days in the year are missing, so the same is done here. + + --------------------------------------------------------------------------------------------------------- + ***Fig. 11.3c*** ***Fig. 11.3d*** + ---------------------------------------------------- ---------------------------------------------------- + ![](media/image49.png){width="3.008050087489064in" ![](media/image50.png){width="2.982723097112861in" + height="2.9473370516185478in"} height="2.1991699475065616in"} + + --------------------------------------------------------------------------------------------------------- + +The result is two annual summaries, Fig. 11.3e, that are like two of the +climdex indices. They are ready to draw graphs, fir trend lines and so +on. The data frame, in Fig. 11.3e, has 79 rows, because there are 79 +years of data + +Use ***Climatic \> Prepare \> Climdex***, Fig. 11.3f. The dialogue +should fill automatically. If not, then check you are using the correct +data frame. + + ---------------------------------------------------------------------------------------------------------- + ***Fig. 11.3e*** ***Fig. 11.3f*** + ---------------------------------------------------- ----------------------------------------------------- + ![](media/image57.png){width="2.275330271216098in" ![](media/image48.png){width="3.6112981189851268in" + height="3.5917311898512687in"} height="3.6112981189851268in"} + + ---------------------------------------------------------------------------------------------------------- + +In Fig. 11.3f click on ***Indices***. Complete the settings as shown in +Fig. 11.3g and then choose the ***precipitation tab***. The numbers for +each index match those given in +[[http://etccdi.pacificclimate.org/list_27_indices.shtml]{.underline}](http://etccdi.pacificclimate.org/list_27_indices.shtml) +. For illustration***, tick everything*** there and press ***Return***. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 11.3g*** ***Fig. 11.3h*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image982.png){width="3.097315179352581in" ![](media/image984.png){width="2.8853073053368328in" + height="2.6226126421697287in"} height="2.862516404199475in"} + + ------------------------------------------------------------------------------------------------------------ + +This results in 11 further columns, for each of the precipitation +indices. They are added to the yearly data frame and shown in Fig. +11.3i. Each is described briefly, before continuing with the analysis. + + ----------------------------------------------------------------------- + ***Fig. 11.3i*** + ----------------------------------------------------------------------- + ![](media/image980.png){width="6.155778652668417in" + height="2.999458661417323in"} + + ----------------------------------------------------------------------- + +The indices are defined as shown in table 11.3a. In Fig. 11.3i the +variable max_rain, from the Climatic \> Prepare \> Climatic Summaries is +seen to be the same as Rx1day. We consider briefly how to get each of +these indices using the other R-Instat dialogues. + + --------------------------------------------------------------------------------- + ***Table 11.3a + Precipitation + indices from + climdex*** + --------------- ------------ ---------------------------------------------------- + ***Number*** ***Name*** ***Description*** + + 17 Rx1day Annual maximum + + 18 Rx5day Maximum from 5-day running totals + + 19 SRII Simple intensity index, i.e. Annual total/Number of + rain days + + 20 R10mm Annual number of rain-days with 10mm or more + + 21 R20mm Annual number of rain-days with 20mm or more + + 22 Rnnmm Annual number of days with ≥ nn(mms). User chooses + value of nn + + 23 CDD Longest dry spell in the year (dry is \<1mm) + + 24 CWD Longest spell of successive rain days (rain is + \>=1mm) + + 25 R95p Annual total greater than 95^th^ percentile in base + period + + 26 R99p Ditto for 99^th^ percentile + + 27 PRCPTOT Total annual rainfall (from days with ≥ 1mm) + --------------------------------------------------------------------------------- + +This comparison is partly to help users understand exactly what each +index is measuring. In addition the regular dialogues provide additional +flexibility, if needed to examine the indices in more detail. + +The second summary, produced earlier is the total annual rainfall, +called sum_rain in Fig. 11.3i. This is almost the same as the climdex +index 27, PRCPTOT. For example sum_rain = 523mm in 1935, compared to +514mm for PRCPTOT. + +The small difference is because the sum_rain has totalled all the rain +days, while PRCPTOT only considers those with at least 1mm. + +Check this with ***Prepare \> Column: Calculate \> Calculation***. With +the ***Logical keyboard*** make a new column, called rain1, Fig. 11.3j, +with: + +rain1 \<- ***ifelse(rain\<1, 0, rain)***, or equivalently rain1 \<- +***(rain\>=1) \* rain***. + +Then use ***Climatic \> Prepare \> Climatic Summaries*** with the new +***rain1*** variable to check the annual totals now agree with those +from climdex. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 11.3j*** ***Fig. 11.3k*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image983.png){width="3.2370570866141732in" ![](media/image976.png){width="2.731232502187227in" + height="2.3834208223972in"} height="3.5022265966754156in"} + + ------------------------------------------------------------------------------------------------------------ + +From the rain5 variable, the ***Climatic \> Prepare \> Extremes*** is an +alternative dialogue to give the annual maxima, Fig. 11.3l. This gives +the same results as the climdex Rx5day variable. It also gives a further +the day in the year of the maximum. This could be used in a study to +investigate whether there is any evidence for a trend in ***when the +maximum occurs*** as well as its value. + ++-------------------------------------+--------------------------------+ +| ***Fig. 11.3l*** | ***Fig. 11.3m*** | +| | | +| | ***Climatic \> Prepare \> | +| | Climatic Summaries\ | +| | with sub-dialogue*** | ++=====================================+================================+ +| ![](media/image98 | ![](media/image977.pn | +| 6.png){width="3.1908333333333334in" | g){width="2.838053368328959in" | +| height="4.309553805774279in"} | height="2.913501749781277in"} | ++-------------------------------------+--------------------------------+ + +The "Simple intensity index", SRII is essentially the mean rain per rain +day, (just using the values of days with more than 1mm). In Fig. 11.3i +it is just PRCPTOT/Rnnmm, because we chose 1mm as the threshold. For +example, in 1935 there were 36 rain days with a total of 514mm. Hence + +SRII~1935~ = 514/36 = 14.26mm + +The next 2 indices, R10mm and R20mm are just the number days each year +with 10mm, and 20mm or more, each year. They can also be given using the +***Climatic \> Prepare \> Climatic Summaries*** dialogue. + +The indices CDD and CWD give the maximum dry-spell length and rain-spell +lengths, where rain = 1mm. They are special cases of the ***Climatic \> +Prepare \> Spells*** dialogue, Fig. 11.3n. The data in Fig. 11.3i show +that the CDD index for the whole calendar year is probably of little +interest, for this site, because the months of May to October are +usually dry. Hence the longest dry-spell of 197 days, in 1935, is not a +surprise. However, assessing evidence for trends in the longest +dry-spell during the season, perhaps from 1 January to 31 March, may be +useful. + + ---------------------------------------------------------------------------------------------------------- + ***Fig. 11.3n Spells dialogue to give CWD index*** ***Fig. 11.3o Filter sub-dialogue for rain days in + baseline years*** + ---------------------------------------------------- ----------------------------------------------------- + ![](media/image978.png){width="2.80285542432196in" ![](media/image985.png){width="3.185751312335958in" + height="3.4301082677165353in"} height="3.2739555993000873in"} + + ---------------------------------------------------------------------------------------------------------- + +The final 2 precipitation indices are R95p and R99p. They are the total +rainfall each year from heavy rain days. The definition of "heavy" is +relative to the baseline years. The first step is therefore to find the +thresholds. The process is as follows: + +1. ***Filter*** the Dodoma data to the baseline years and just the rain + days, Fig. 11.3. + +2. Use the ***Prepare \> Column: Calculate \> Column Summaries***, Fig. + 11.3p, with the ***percentile summary***, Fig. 11.3q, to give the + 95% and 99% points of the rain variable. The 95% point, Fig. 11.3q, + = 45.57mm and the 99% point = 67.3mm + ++----------------------------------+-----------------------------------+ +| ***Fig. 11.3p*** | ***Fig. 11.3q*** | ++==================================+===================================+ +| ![](media/image981. | ![](media/image1391. | +| png){width="2.959998906386702in" | png){width="3.0570866141732282in" | +| height="3.4789588801399827in"} | height="1.347684820647419in"} | +| | | +| | ***Result in the output window*** | +| | | +| | ![](media/image1388 | +| | .png){width="3.055495406824147in" | +| | height="1.0605249343832022in"} | ++----------------------------------+-----------------------------------+ + +3. Now ***filter*** to use just the days for the whole record where + (rain \> 45.57), Fig. 11.3r. . + +4. ***Use Climatic \> Prepare \> Climatic Summaries*** to give the sum + and number of observations, Fig. 11.3s + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 11.3r*** ***Fig. 11.3s*** + ------------------------------------------------------ ------------------------------------------------------- + ![](media/image1390.png){width="2.996907261592301in" ![](media/image1380.png){width="2.6710126859142607in" + height="3.2817366579177603in"} height="3.5565507436570427in"} + + -------------------------------------------------------------------------------------------------------------- + +The resulting data are in Fig. 11.3t. The new sum_rain variable gives +the same values as the R95p. In the first year, the total was 210.3mm +from 3 rain days. + + ----------------------------------------------------------------------- + ***Fig. 11.3t*** + ----------------------------------------------------------------------- + ![](media/image1384.png){width="3.06751968503937in" + height="3.325728346456693in"} + + ----------------------------------------------------------------------- + +## Climdex -- Temperatures + +The 16 temperature indices are shown in Table 11.4a. + + -------------------------------------------------------------------------------- + ***Table 11.4a + Temperature + indices from + climdex*** + -------------- ------------ ---------------------------------------------------- + ***Number*** ***Name*** ***Description*** + + 1 FD Number of frost days, when daily minimum + temperature, Tn \<0. + + 2 SU Number of "Summer" days, when daily maximum + temperature, Tx \> 25 + + 3 ID Number of icing days, when Tx \< 0 + + 4 TR Number of tropical nights, when Tn \> 20 + + 5 GSL Growing season length. Number of days between first + span of 6 consecutive days with daily Tmean \> 5°C + and first span of 6 days (after July 1^st^) with + Tmean \< 5°C. (July to June in Southern hemisphere.) + + 6 TXx Annual or monthly maximum of Tx + + 7 TNx Annual or monthly maximum of Tn + + 8 TXn Annual or monthly minimum of Tx + + 9 TNn Annual or monthly minimum of Tn + + 10 TN10p Percentage of days when Tn \< 10^th^ percentile from + the baseline + + 11 TX10p Ditto for Tx \< 10^th^ percentile + + 12 TN90p Ditto for Tn \> 90^th^ percentile + + 13 TX90p Ditto for Tx \> 90^th^ percentile + + 14 WSDI Warm spell duration index, the annual number of day + where at least 6 consecutive days are warmer than + the 90^th^ percentile + + 15 CSDI Cold spell duration index, the annual number of days + when at least 6 consecutive days are colder than the + 10^th^ percentile + + 16 DTR Mean temperature range, i.e. mean difference between + Tx and Tn + -------------------------------------------------------------------------------- + +They are again illustrated with the Dodoma data. Use Climatic \> Prepare +\> Climdex, Fig. 11.4a and complete the Temperature sub-dialogue as +shown in Fig. 11.4b. + ++---------------------------+------------------------------------------+ +| ***Fig. 11.4a The Climdex | ***Fig. 11.4b Climdex temperature | +| dialogue*** | sub-dialogue*** | +| | | +| ***Climatic \> Prepare \> | | +| Climdex*** | | ++===========================+==========================================+ +| ![] | ![](media/ima | +| (media/image1381.png){wid | ge1378.png){width="3.7590102799650045in" | +| th="2.3313899825021873in" | height="2.7697976815398073in"} | +| heig | | +| ht="2.152358923884514in"} | | ++---------------------------+------------------------------------------+ + +The results are in Fig. 11.4c. Some results are obvious; in particular +in the later years, shown in Fig. 11.4c, there are about 30% of days per +year in TN90p, i.e. with Tn higher than the 90% point from the 1961-90 +baseline. And TN10p has very low values. The change in Tn is clearer +than that of the maximum temperatures, Tx. + + ----------------------------------------------------------------------- + ***Fig. 11.4c*** + ----------------------------------------------------------------------- + ![](media/image1383.png){width="6.069974846894138in" + height="3.988590332458443in"} + + ----------------------------------------------------------------------- + +As in Section 11.3, some of the temperature indices can be calculated +through the ***Climatic \> Prepare \> Climatic Summaries*** dialogue. +For example completing Fig. 11.4d and Fig. 11.4e as shown produces the +indices TNn and TNx. + ++-----------------------------------+----------------------------------+ +| ***Fig. 11.4d*** | ***Fig. 11.4e Choosing the max | +| | and min*** | +| ***Climatic \> Prepare \> | | +| Climatic Summaries*** | | ++===================================+==================================+ +| ![](media/image1386. | ![](media/image1382.p | +| png){width="3.0453029308836395in" | ng){width="2.8903346456692915in" | +| height="3.371376859142607in"} | height="2.777569991251094in"} | ++-----------------------------------+----------------------------------+ + +The calculations for 6 of the indices is more complex. They are numbered +10 to 15 in Table 11.4a and depend on the temperatures in the baseline +period, usually 1961 to 1990. In this case the 10% and 90% points are +found, in turn, for each day of the year[^48] and these values are then +compared with the temperature on that day for the record. + +## Using the climdex indices + +[To be completed]{.mark} + +## Extreme value analysis + +[Using the extRemes package]{.mark} \ No newline at end of file diff --git a/Chapter_13_PICSA__Long_Before_the_season.qmd b/Chapter_13_PICSA__Long_Before_the_season.qmd new file mode 100644 index 0000000..9293b01 --- /dev/null +++ b/Chapter_13_PICSA__Long_Before_the_season.qmd @@ -0,0 +1,1268 @@ +# PICSA -- Long Before the season +## Introduction + +PICSA (Participatory Integrated Climate Services for Agriculture) is an +initiative to share climate information with small-scale farmers. It was +described briefly in Chapter 1 and Fig. 12.1a is a repeat of Fig. 1.6a +to show the different stages of the PICSA activity. + + ----------------------------------------------------------------------- + ***Fig. 12.1a Stages of the PICSA project*** + ----------------------------------------------------------------------- + ![](media/image1407.png){width="4.880428696412948in" + height="3.5892180664916884in"} + + ----------------------------------------------------------------------- + +PICSA has been used in many countries in Africa and beyond, including +Tanzania, Malawi, Lesotho, Ghana, Guyana, Rwanda, Haiti and Bangladesh. +At first glance it may seem like many other initiatives to share climate +information with farmers. It has some distinguishing features, that +explain its inclusion in this guide. + +The first distinguishing feature is the large set of activities that are +undertaken prior to the availability of the seasonal forecast. They +build on the information from the historical climatic data. There is a +detailed instruction guide, with 12 sections. The first 7 are shown in +Fig. 12.1b and take place in the "Long-before-the- season", step shown +in Fig. 12.1a. + + ----------------------------------------------------------------------- + ***Fig. 12.1b*** + ----------------------------------------------------------------------- + ![](media/image1415.png){width="5.551943350831146in" + height="3.387387357830271in"} + + ----------------------------------------------------------------------- + +The second distinguishing feature is that PICSA supports farmer's +activities in relation to crops, livestock or other livelihood +activities. It identifies options and is not directed towards any +particular crop or activity. This is indicated in Step d) of Fig. 12.1b. + +Third is the emphasis on "options by context" that places the farmer +(and not the "expert") at the centre. Thus, PICSA does not make +recommendations for the farmers. Instead it offers options, with the +idea, shown in steps d and e, in Fig. 12.1b, that the farmers, or +households, may wish to select those that particularly fit their +circumstances. Fig. 12.1c shows an example of options related to +livelihood activities. + + --------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 12.1c*** ***Fig. 12.1d*** + ------------------------------------------------------------------------------------------- ------------------------------------------------------- + ![0F15318A-1080-4C3C-AAB7-34B2C68B99B4](media/image1418.jpg){width="3.0914698162729657in" ![](media/image1392.png){width="3.1392847769028873in" + height="1.9868832020997376in"} height="2.0113549868766403in"} + + --------------------------------------------------------------------------------------------------------------------------------------------------- + +These options are not pre-selected but are constructed through dialogues +between the farmers and extension workers. Farmers evaluate options via +a set of participatory exercises. One is a resource allocation map +(RAM), step a) in Fig. 12.1b, an example of which is in Fig. 12.1d. + +Further information on PICSA is available via the website +[[https://research.reading.ac.uk/picsa/]{.underline}](https://research.reading.ac.uk/picsa/), +Fig. 12.1e. Information includes the field manual, from which Fig. 12.1b +shows the first 7 sections. This is currently available in 4 languages, +namely English, Bengali, French and Spanish. + +The idea, in PICSA, is that by step g, in Fig. 12.1b, the farmer has +provisional plans for the season. These could apply to any season. These +plans may then be modified by the extra information for this season, +from the seasonal forecast, discussed in Chapter 13. + + ----------------------------------------------------------------------- + ***Fig. 12.1e The PICSA webpage*** + ----------------------------------------------------------------------- + ![](media/image1428.png){width="6.078515966754156in" + height="2.4789512248468943in"} + + ----------------------------------------------------------------------- + +In this chapter we mainly consider Steps b and c from Fig. 12.1b. This +is a discussion of the historical temperature and rainfall data, both in +relation to climate change (Step b) and then to consider the risks from +different options (Step c). + +## Climate change and variability + +In PICSA it has been useful for farmers to examine and use the +historical graphs themselves, e.g. Fig. 12.2a. Some have had little or +no formal education, but almost all have been able to follow and +interpret the ideas of these time series graphs. + + ----------------------------------------------------------------------- + ***Fig. 12.2a*** + ----------------------------------------------------------------------- + ![](media/image1422.png){width="5.957272528433946in" + height="3.622808398950131in"} + + ----------------------------------------------------------------------- + +Step b, in Fig. 12.1b is one of comparing farmers (and extension +workers) perceptions of climate change with the evidence from the +historical climatic records. + +Many farmers, NGO and extension staff already have strong views on +climate change. However, most have never seen any of the time series +graphs of the type shown in Fig. 12.2b and Fig. 12.2c. + +Temperatures usually show a clear trend, illustrated by Tmin in Fig. +12.2b. For rainfall the message is usually one of variability, Fig. +12.2c, rather than trend, being the main concern. This is a surprise for +some, who interprete climate change as implying a change in the pattern +of rainfall. This is partly because rainfall is by far the most +important climatic element for tropical agriculture. + ++-----------------------------------+----------------------------------+ +| ***Fig. 12.2b Tmax and Tmin, | ***Fig. 12.2c Total annual | +| Dodoma*** | rainfall, Dodoma*** | ++===================================+==================================+ +| ![](media/image1406. | ![](media/image1402.p | +| png){width="3.1087773403324586in" | ng){width="3.0078958880139983in" | +| height="1.2193744531933508in"} | height="3.004401793525809in"} | +| | | +| ![](media/image1389 | | +| .png){width="3.068208661417323in" | | +| height="1.2979308836395451in"} | | ++-----------------------------------+----------------------------------+ + +Of course, if there is a trend in temperatures, then this ***is*** +climate change. The climatic elements are interlinked, hence there must +be a corresponding change in the other elements, including rainfall. +However, rainfall is so variable from year to year, that any change is +often not detectable. In addition, unlike temperatures, that are rising, +the changes in the patterns of rainfall will not be so simple -some +places will become wetter and others dryer. + +Hence, in most sites where PICSA has been used, many of the activities, +i.e. the options for farming households, are designed to manage the +rainfall risks, (i.e. variability), rather than change. + +There is an important corollary to this idea. It is easy to blame +climate change "on the West" and hence assume it is a problem for others +to solve. But rainfall variability, as shown in Fig. 12.2c, is a problem +faced locally by successive generations. Hence discussing options to +manage the risks is sensible for individual farmers to consider. + +This type of discussion, within PICSA, is constructive for both the +intermediaries (NGO and extension staff) and farmers in encouraging an +openness to consider changes in their activities, i.e. to consider what +options might be useful to manage the (rainfall) risks. This idea is +well phrased in the ICRISAT study, (Cooper, et al., 2008). They claim +that managing the current climate risks has a double benefit. It is +useful itself, as well as preparing farmers for future climate change. + +An initial one-week workshop is often used to introduce PICSA in a new +country, or in a new district, within a country. The graphs, such as +Fig. 12.2b and Fig. 12.2cc are usually part of the materials from the +first day. + +## Producing the initial graphs - no data issues + +Currently a key input in PICSA is a series of time-series graphs on +aspects of the rainfall that are of direct interest, and support farmers +in their choice of options. They don't just look at the graphs, but also +use them, as shown in Fig 12.2a, to calculate risks for themselves. + +For many farmers, also for intermediaries, this is the first time they +have seen this type of time-series graph. Hence, as mentioned above, it +usually serves two purposes. The first is as a practical demonstration, +that (for the rainfall) the main issue is one of variability, rather +than change. Hence "the ball is in their court" to manage their climatic +risks, rather than being part of the general topic of climate change. +The second is as a tool to calculate the risks for alternative options. + +These graphs are usually prepared by staff from the corresponding NMS. +Currently the work is often by NMS headquarters staff, but perhaps LMS +staff based locally may be able to do some of this work in the future. +The production is simple when there are no "data issues" and is +described in this section. + +A checklist may useful, and an initial version is in Table 12.3a. Start +with this list, and then edit to produce your own. + + --------------------------------------------------------------------------------- + ***Table 12.3a + Initial + checklist*** + -------------- ----------------------------------- ------------------------------ + ***Step*** ***Action*** ***R-Instat Dialogue*** + + 1 Read the data into R-Instat File \> Open from File + + 2 Check the data as input Climatic \> Tidy and Examine + \>\ + One Variable Summarise + + 3 Make a date variable Climatic \> Dates \> Make Date + + 4 Infill if dates are absent Climatic \> Dates \> Infill + + 5 Make further date variables Climatic \> Dates \> Use Date + (possibly shifted) + + 6 Probably delete the initial year, Right-click, then Delete and + month, day variables, plus further Reorder variables + "housekeeping" + + 7 Define the data as climatic Climatic \> Define Climatic + Data + + 8 Omitting Check Data, because data Could add:\ + are ok! Climatic \> Check Data \> + Inventory,\ + Climatic \> Check Data \> + Display Daily,\ + Climatic \> Check Data \> + Boxplot, etc. + + 9 Add rain-day variable Climatic \> Prepare \> + Transform + + 10 Save data as a R-file File \> Save As + + 11 Get annual/seasonal rainfall and Climatic \> Prepare \> + rain day totals Climatic Summaries + + 12 Get annual/seasonal mean Climatic \> Prepare \> + temperatures Climatic Summaries + + 13 Graph the max and min temperature Describe \> Specific \> Line + Plot + + 14 Graph the rainfall and rain day Climatic \> PICSA \> Rainfall + totals graphs + --------------------------------------------------------------------------------- + +This checklist involves largely going systematically down R-Instat's +climatic menu, shown in Fig. 12.3a, from ***Tidy and Examine***, to the +***PICSA menu*** for the graphs of the annual summaries. + +The data used for illustration are from a single station, Dodoma, in +Tanzania, but the checklist works equally well with data from multiple +stations. If the data file only has rainfall, then omit steps 12 and 13. + +The data from Tanzania were supplied as an Excel file as shown in Fig. +12.3b. This was exported from Clidata (Tolatz, 2019) and is in the +"right shape" for R-Instat, i.e. each row of data is for one day and the +four elements are in successive columns. + + --------------------------------------------------------------------------------------------------------------- + ***Fig. 12.3a*** ***Fig. 12.3b*** + ------------------------------------------------------- ------------------------------------------------------- + ![](media/image1414.png){width="2.1945570866141733in" ![](media/image1359.png){width="3.8149748468941382in" + height="2.2015015310586175in"} height="2.8353357392825895in"} + + --------------------------------------------------------------------------------------------------------------- + +Use ***File \> Open from File*** to input your data. + +To practice with these data, use ***Open from Library \> Instat \> +Browse \> Climatic \>Tanzania*** and open the ***Dodoma18.xlsx*** file, +Fig. 12.3c. + +We first make a deliberate mistake. If you are following the exercise, +then we strongly recommend that you make this mistake also. It is very +common! + ++---------------------------------------+------------------------------+ +| ***Fig. 12.3c Importing from Excel*** | ***Fig. 12.3d Data imported | +| | incorrectly*** | +| ***File \> Open from File or Open | | +| from Library*** | | ++=======================================+==============================+ +| ![](media/image | ![](media/image1364.png){ | +| 1358.png){width="3.363928258967629in" | width="2.6359897200349955in" | +| height="2.814714566929134in"} | h | +| | eight="2.800184820647419in"} | ++---------------------------------------+------------------------------+ + +In Fig. 12.3c the data frame preview indicates something is wrong, +because there are m values present. This is not always so obvious, +because only 10 lines are shown, which may not include missing values. + +Press ***Ok*** to import that data. The problem is now shown, in +R-Instat, by the (c) after SUNHRS(c) and TMPMIN(c) and TMPMAX(c). These +variables are numeric but have been imported as character (text) +variables, because there are some non-numeric characters in these +columns. + +You can correct this problem in R-Instat, but it is simpler to correct +when you import the data, or in Excel. Here it is easy to correct when +the data are imported. + +So, use ***File \> Close Data File***[^49]. Then recall the last +dialogue to give Fig. 12.3c again and insert ***m*** as the ***Missing +Value String***, Fig. 12.3c. The preview changes to show NA instead of +m. Press ***Ok*** and the variables are imported correctly. + +Use the climatic menu, Fig. 12.3e and item 2 in the checklist, see Table +12.3a. Start with the ***Tidy and Examine*** menu, Fig. 12.3e. The data +here are already tidy, hence move straight to the ***One Variable +Summarise Dialogue***. If your data are in a "different shape" some of +the other dialogues in this menu may be needed. + ++----------------------------------+-----------------------------------+ +| ***Fig. 12.3e The Tidy and | ***Fig. 12.3f One Variable | +| Examine menu*** | Summarise*** | +| | | +| | ***Climatic \> Tidy and Examine | +| | \> Summarise*** | ++==================================+===================================+ +| ![](media/image1355.p | ![](media/image1356. | +| ng){width="2.9702985564304463in" | png){width="2.7105074365704285in" | +| height="2.4269542869641296in"} | height="2.8048304899387575in"} | ++----------------------------------+-----------------------------------+ + +The results are in Fig. 12.3g. They are promising, because of the +following: + +a) There are no missing values in the Year, Month, Day variables. It + would be a problem if there were. + +b) Amazingly the rainfall variable is also complete. This is great, but + rare. There are missing values in the other elements, partly because + they started later than the rainfall. + +c) However, the Station name was imported as a character, and not a + factor variable. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 12.3g Results from Summary -- Step 2 in ***Fig. 12.3h Name as Factor*** + checklist*** + ------------------------------------------------------ ------------------------------------------------------- + ![](media/image1387.png){width="4.383143044619422in" ![](media/image1353.png){width="1.6977471566054243in" + height="2.081823053368329in"} height="2.714501312335958in"} + + -------------------------------------------------------------------------------------------------------------- + +The Station name is not a problem here, because there is only one +station. However, it is still made into a Factor variable for +completeness, Fig. 12.3h. This is important when there are multiple +stations in the same file. + + --------------------------------------------------------------------------------------------------------------- + ***Fig. 12.3i*** ***Fig. 12.3j*** + ------------------------------------------------------- ------------------------------------------------------- + ![](media/image1354.png){width="2.7324212598425195in" ![](media/image1361.png){width="3.1415496500437445in" + height="1.6530107174103237in"} height="3.01915135608049in"} + + --------------------------------------------------------------------------------------------------------------- + +The ***Climatic \> Date*** menu, Fig. 12.3i is used for Steps 3 to 5 in +the checklist, Table 12.3a. First calculate a single Date variable, i.e. +a Variable of Type (D). Here it is calculated from the 3 variables, +giving the YEAR, MONTH and DAY as shown in Fig. 12.3j. + ++------------------------------------+---------------------------------+ +| ***Fig. 12.3k Infilling where | ***Fig. 13 Adding variables | +| dates are omitted*** | from the date*** | +| | | +| ***Climatic \> Dates \> Infill | ***Climatic \> Dates \> Use | +| Missing Dates*** | Date*** | ++====================================+=================================+ +| ![](media/image136 | ![](media/image1376.p | +| 0.png){width="3.102471566054243in" | ng){width="2.859963910761155in" | +| height="2.9833847331583554in"} | height="4.37336176727909in"} | ++------------------------------------+---------------------------------+ + +Next -- Step 4 - is to check for any gaps in the data, using ***Climatic +\> Dates \> Infill Missing Dates***, Fig. 12.3k. They are absent dates +in the file, for example a year being absent. This is separate from the +dates being complete, but with missing values in the data. + +In this case the result was that there was nothing to infill. Proceed to +Step 5 with ***Climatic \> Dates \> Use Date***, Fig. 12.3l. Dodoma is +in the southern hemisphere, with a single rainy season from November to +April. Hence, in Fig. 12.3l, the year is shifted to start in July. Five +variables are generated, as shown in Fig. 12.3l. + +Now a little "housekeeping", Step 6 in the checklist. ***Right-click*** +and ***delete*** the 3 original YEAR, MONTH DAY variables and re-order +the remaining variables, Fig. 12.3m, so the measurements are last. This +is a convenient, and not an essential step. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 12.3m*** ***Fig. 12.3n*** + ------------------------------------------------------ ------------------------------------------------------- + ![](media/image1363.png){width="2.459254155730534in" ![](media/image1367.png){width="3.5132097550306214in" + height="1.949679571303587in"} height="2.354465223097113in"} + + -------------------------------------------------------------------------------------------------------------- + +The data are shown in Fig. 12.3n. They are now ready for Step 7, which +is to define the data as climatic, as shown in Fig. 12.3o. + ++------------------------------------+---------------------------------+ +| ***Fig. 12.3o Defining a data | ***Fig. 12.3p The Check Data | +| frame as climatic*** | menu*** | +| | | +| ***Climatic \> Define Climatic | ***Climatic \> Check Data*** | +| Data*** | | ++====================================+=================================+ +| ![](media/image138 | ![](media/image1365.p | +| 5.png){width="3.073804680664917in" | ng){width="2.909319772528434in" | +| height="3.739970472440945in"} | height="1.7850229658792651in"} | ++------------------------------------+---------------------------------+ + +The ***Climatic \>*** ***Define Climatic Data*** dialogue should largely +be filled automatically. Check carefully this it has the variables you +will be using in the future analyses. Check, especially, the variable +for the Station names and those for the dates. Then ***press the Check +Unique button***. + +In this check, green is a good colour as is shown in Fig. 12.3o. This +check verifies that the combination of Station name and Date can become +key fields in this data frame. If not, then it is likely that you have +some duplicates in the data. Duplicates are days (rows) in the file +where a date has been given twice. Then you need to return to the +***Climatic \> Tidy and Explore*** menu as we discuss in Section 12.6. + +In the checklist, Table 12.3a you now usually move to the ***Climatic \> +Check Data*** menu, Fig 12.3p. This is described in detail in Chapter 5, +and we return to this menu in Section 12.6. It is omitted here to +proceed quickly to the production of the variables and graphs needed for +PICSA. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 12.3q*** ***Fig. 12.3r*** + ------------------------------------------------------- ----------------------------------------------------- + ![](media/image1369.png){width="3.1966568241469817in" ![](media/image1379.png){width="2.34839457567804in" + height="2.9785728346456692in"} height="3.0432392825896764in"} + + ------------------------------------------------------------------------------------------------------------- + +Hence, move to Step 9 in the checklist, i.e. the ***Climatic \> +Prepare*** menu, Fig. 12.3q. The ***Climatic \> Prepare \> Transform*** +dialogue, Fig. 12.3r is used first as explained below. + +Complete Fig. 12.3r as shown and press ***Ok***. This produces a new +variable, called ***rainday***, that takes the value 1 when it is rainy +-- defined here as a day with more than 0.85mm. It is zero otherwise, as +shown in Fig. 12.3s. This is used for graphs of the number of rain days. + ++---------------------------------+------------------------------------+ +| ***Fig. 12.3s Saving the | ***Fig. 12.3t Save the RDS file*** | +| data*** | | +| | ***File \> Save As \>Save Data | +| | As*** | ++=================================+====================================+ +| ![](media/image1417.pn | ![](media/image137 | +| g){width="2.8975043744531934in" | 2.png){width="3.153951224846894in" | +| height="1.8040365266841645in"} | height="0.9491251093613299in"} | ++---------------------------------+------------------------------------+ + +These data are now saved as an R file, i.e. with an RDS extension. Use +***File \> Save As \> Save Data As***, Fig. 12.3s to give the dialogue +shown in Fig. 12.3t. ***Browse*** to where you want to save the data. +Once you click ***Save*** on that dialogue, you return automatically to +Fig. 12.3t and ***click Ok*** to make the Save. + +Once the data are saved, then re-open these saved data, to continue the +work on a future occasion. The first 10 steps do not have to be repeated + +These steps, so far, have been described in detail. In practice, once +they become routine, they typically take 5 minutes or less. If problems +are found during the process, then we strongly recommend you consider +making corrections in the database, or (less comfortably) in an Excel +file, and then start the checklist again. + +If you are following these steps with the Dodoma data, then it is time +to substitute a further data set. The data used, so far, was of very +good quality, but there were still some issues, that we discuss in +Section 12.6. Hence use ***File \> Open From Library \> Instat \> Browse +\> Climatic \> Tanzania*** again and choose the file called +***Dodoma18c***. The data are the same, except 2 more variables are +added, with the corrected temperature data. These new variables are +called Tmax and Tmin. + ++-----------------------------------+----------------------------------+ +| ***Fig. 12.3u Rainfall and | ***Fig. 12.3v Day range | +| temperature summaries*** | sub-dialogue*** | +| | | +| ***Climatic \> Prepare \> | | +| Climatic Summaries*** | | ++===================================+==================================+ +| ![](media/image1377. | ![](media/image1351.p | +| png){width="3.0173523622047242in" | ng){width="2.9682020997375327in" | +| height="3.719714566929134in"} | height="2.7967705599300086in"} | ++-----------------------------------+----------------------------------+ + +The next steps, 11 and 12 in the checklist, both use the ***Climatic \> +Prepare \> Climatic Summaries*** dialogue, Fig. 12.3u + +Two important decisions are i) whether the summaries are to be for the +whole (shifted) year, or perhaps just for the rainy season? Then ii) how +you will handle missing values in the data. + +In Fig. 12.3u we choose to get all summaries for the ***rain variable*** +for the 6 months of the rainy season, from November to April. Hence +click on the ***Day Range*** button in Fig. 12.3u. + +In the sub-dialogue in Fig. 12.3v, choose the range to be ***November +1st to April 30th***. After pressing ***Return*** you see that the day +range is now 6 months, from the shifted day number 124 to day 305, i.e. +about 182 days. + +Now, in Fig. 12.3u, check the ***Omit Missing Values checkbox***. Then +click on the ***Summaries button***, and then on the ***Missing Tab***, +Fig. 12.3w. Set it, as shown in Fig. 12.3w, to about 160 days. This +permits a few missing values, but not a complete month missing. + +Then, in the same sub-dialogue, click on the ***Summaries tab*** and +just have the ***N-Non Missing*** and the ***Sum*** checked, as shown in +Fig. 12.3x. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 12.3w Missing values tab*** ***Fig. 12.3x Summaries calculated*** + ------------------------------------------------------ ------------------------------------------------------- + ![](media/image1339.png){width="2.949481627296588in" ![](media/image1334.png){width="3.1188287401574804in" + height="1.9575754593175854in"} height="2.7169477252843395in"} + + -------------------------------------------------------------------------------------------------------------- + +Pressing Ok in the dialogue in Fig. 12.3u results in a new data frame +with 4 variables and 85 rows, Fig. 12.3y, because there are 85 years +(seasons) of data. The summary for the first year (1934/35 season) is +missing. This may come as a slight surprise, because there are no +missing values in the rainfall data. However, the record starts on 1 +January 1935, which therefore does not have November or December of the +1934/35 season. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 12.3y*** ***Fig. 12.3z*** + ------------------------------------------------------ ------------------------------------------------------- + ![](media/image1342.png){width="1.984459755030621in" ![](media/image1335.png){width="3.9305555555555554in" + height="3.0939971566054245in"} height="3.126576990376203in"} + + -------------------------------------------------------------------------------------------------------------- + +Return to the same dialogue (***Climatic \> Prepare \> Climatic +Summaries***) to add 3 more summaries. + +a) Change the ***rain*** to the ***rainday*** variable in the main + dialogue, Fig. 12.3u. Press Ok. + +b) Change the element to ***Tmin*** and change the ***Summary*** to the + ***Mean***, (rather than the Sum). Press ***Ok***. + +c) Change the element to ***Tmax***. Press Ok. + +The results are in Fig. 12.3z. They show, for example, that in the +1962-63 season (November to April) there was a total of 422mm rain from +41 rain days, hence an average of just over 10mm per rain day. The value +of Tmin could not be given, because there were only 147 non-missing days +in that season. The mean for Tmax was 29.4˚C. + +Finally, in this initial checklist, give the corresponding graphs. For +the temperature data there is not yet a special climatic dialogue, so +use ***Describe \> Specific \> Line Plot***, as shown in Fig. 12.3aa. + ++---------------------------------+------------------------------------+ +| ***Fig. 12.3aa*** | ***Fig. 12.3ab*** | +| | | +| ***Describe \> Specific \> Line | | +| Plot*** | | ++=================================+====================================+ +| ![](media/image1327.pn | ![](media/image133 | +| g){width="2.9165726159230094in" | 7.png){width="3.211813210848644in" | +| height="3.036790244969379in"} | height="3.0356714785651793in"} | ++---------------------------------+------------------------------------+ + +In Fig. 12.3aa the ***Multiple Variables*** option is used to facilitate +plotting Tmax and Tmin together. ***Points are added***, as is a ***line +of best fit***. The ***Data Options*** button is also used to +***filter*** the data to just ***s_year \> 1957***. + +The resulting graph is shown in Fig. 12.3ab. It indicates an increase of +temperatures, with Tmin having a higher slope than Tmax. The analysis of +the temperature data and the presentation of the corresponding PICSA +graphs is considered further in Section 12.5. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 12.3ac Remove filter*** ***Fig. 12.3ad The Climatic \> PICSA dialogues*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image1333.png){width="2.43494750656168in" ![](media/image1348.png){width="3.483146325459318in" + height="2.9829297900262466in"} height="2.312853237095363in"} + + ------------------------------------------------------------------------------------------------------------ + +Before doing a rainfall graph use ***Right-click*** and the last option +is to ***Remove Current Filter***, Fig. 12.3ac. + +Then use ***Climatic \> PICSA \> Rainfall Graph***, Fig 12.3ad. Graph +the variable called sum_rain, Fig. 12.3ae. Then use the ***PICSA +Options*** button to add a horizontal line for the mean, Fig. 12.3af. + ++---------------------------------+------------------------------------+ +| ***Fig. 12.3ae*** | ***Fig. 12.3af*** | +| | | +| ***Climatic \> PICSA \> | | +| Rainfall Graph*** | | ++=================================+====================================+ +| ![](media/image1325.pn | ![](media/image135 | +| g){width="2.8456485126859143in" | 2.png){width="3.093505030621172in" | +| height="2.7895516185476814in"} | height="2.1058464566929134in"} | ++---------------------------------+------------------------------------+ + +The resulting graph is shown in Fig. 12.3ag. Return to the ***Climatic +\> PICSA \> Rainfall Graph*** dialogue and substitute the +***sum_rainday*** variable to give a similar graph of the seasonal +number of rain-days. + + ----------------------------------------------------------------------- + ***Fig. 12.3ag PICSA graphs of the seasonal totals and number of rain + days*** + ----------------------------------------------------------------------- + ![](media/image1350.png){width="4.825438538932634in" + height="2.4303608923884514in"} + + ![](media/image1347.png){width="4.849785651793526in" + height="2.4711023622047246in"} + ----------------------------------------------------------------------- + +The results are in Fig. 12.3ag. They show that the mean rainfall total +was about 560mm from an average of just over 40 rain days. This is an +average of about 7 rain days per month, roughly one day in 4. This is +sufficiently low that it is likely that there are often long dry spells +during the season. + +We have produced our first "PICSA-style" graphs. Further graphs are +produced in the next Section, together with ways of making the graphs +appropriate for the extension staff and for farmers. + +## The rainy season + +In this section we consider the production of further rainfall summaries +with the ***Climatic \> Prepare*** menu and the corresponding graphs +from the ***Climatic \> PICSA*** menu. + +Usually between 6 and 8 graphs are prepared and discussed on the first +day of the main PICSA workshop. They all have the same format as shown +in Fig. 12.3ag and are designed to look consistent. The x-axis is the +years (or seasons) and the y-axis is for something of interest. They +usually include a rainfall total, Fig. 12.3ag together with the start, +end and length of the rainy season. There are then one or two graphs of +events within the season, for example the length of the longest dry +spell or the most extreme daily rainfall. + +Definitions can be changed easily. PICSA encourages "options by context" +and this can apply to households and or crops having different +definitions for the start of the rains, and for any other +characteristic. + +The graphs are also used on the "practice with farmers day", during the +workshop, usually day 4. Following the workshop, the agreed graphs are +then used by the extension staff or farmer's representatives to share +with individuals or groups of farmers. + +We continue with the data from Dodoma, used in Section 12.3. + ++----------------------------------------+-----------------------------+ +| ***Fig. 12.4a Start of the rains*** | ***Fig. 12.4b Adding a | +| | dry-spell condition*** | +| ***Climatic \> Prepare \> Start of the | | +| Rains*** | | ++========================================+=============================+ +| ![](media/image | ![](media/image1362.png){ | +| 1344.png){width="3.4121161417322834in" | width="2.573474409448819in" | +| height="3.154821741032371in"} | hei | +| | ght="2.9682469378827645in"} | ++----------------------------------------+-----------------------------+ + +Use ***Climatic \> Prepare \> Start of the Rains***, Fig. 12.4a. A range +of definitions of the Start of the rains is discussed in Section 7.3. In +2019, in Malawi and Tanzania the definitions used were: + +- Malawi: First occasion from 1 October with 25mm or more in 3 days. + +- Tanzania: First occasion from 15 November with 20mm in 4 days, of + which 2 days were rainy. + +We here use the same as Tanzania. Hence click on the ***Day Range*** in +Fig. 12.4a and set the earliest date to ***15 November***. Make the +latest date ***29 February***. Then ***complete the dialogue*** as shown +in Fig. 12.4a and press ***Ok***. + +This generates 2 new variables, the first with the day number in the +(shifted) year and the second giving the corresponding date. + +Return to the ***Climatic \> Prepare \> Start of the Rains*** dialogue +and add the dry-spells condition, Fig. 12.4b. Change the default of 9 +days to 10 days as the maximum allowable spell[^50]. Also change the +names of the resulting variables, or the events produced before will be +overwritten. + ++-----------------------------------+----------------------------------+ +| ***Fig. 12.4c End of the rains*** | ***Fig. 12.4d*** | +| | | +| ***Climatic \> Prepare \> End of | | +| the Rains*** | | ++===================================+==================================+ +| ![](media/image1343. | ![](media/image1341.p | +| png){width="3.0006211723534557in" | ng){width="2.9240430883639545in" | +| height="3.02583552055993in"} | height="2.478840769903762in"} | ++-----------------------------------+----------------------------------+ + +In Chapter 7 we discuss the use of these alternative definitions of the +start. Here we simply choose one of them -- for the next PICSA graph. We +quickly also get data on the end and length of the season. + +In many countries we use a simple water-balance definition of the end of +the rains/season. This does not work well in Southern Africa, as +explained in Section 7.4. Hence here we use the method proposed by +(Mupamgwa, Walker, & Twomlow, 2011). + +So, complete the ***Climatic \> Prepare \> End of the Rains*** dialogue +as shown in Fig. 12.4c. In the ***Day Range*** use ***15 February to 30 +June***. + +Then use ***Climatic \> Prepare \> Length of the Season***, Fig. 12.4d +and complete as shown. + +The results have added variables to the annual data frame, Fig. 12.4e. +The year indicated shows that in the 1937/38 season there was a planting +opportunity on day 174, (i.e. 21 December). But, if the dry-spell +definition is included then the start was on 23rd January. The last +heavy rainfall was on 31^st^ March, which was defined as the end of the +rains/season, giving a season length of 101 days. + +Graphs can be produced assuming the user accepts the definitions. + + --------------------------------------------------------------------------------------------------------------- + ***Fig. 12.4e The annual data frame*** ***Fig. 12.4f A graph of the Start*** + ------------------------------------------------------- ------------------------------------------------------- + ![](media/image1346.png){width="3.2341983814523183in" ![](media/image1349.png){width="2.7932720909886264in" + height="2.942286745406824in"} height="2.8815354330708662in"} + + --------------------------------------------------------------------------------------------------------------- + +Use ***Climatic \> PICSA \> Rainfall Graph*** for the variable +***start_rain*** and complete as shown in Fig. 12.4f. Then complete the +***PICSA options*** for the ***Y-axis*** and the ***Lines***, as shown +in Fig. 12.4g and 12.4h. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 12.4g*** ***Fig. 12.4h*** + ------------------------------------------------------ ------------------------------------------------------- + ![](media/image1357.png){width="2.811955380577428in" ![](media/image1294.png){width="2.9353149606299214in" + height="2.2885793963254595in"} height="2.232117235345582in"} + + -------------------------------------------------------------------------------------------------------------- + +The resulting graph is in Fig. 12.4i. There can be similar graphs for +the end of the rains and the length of the season. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 12.4i PICSA graph for the start*** ***Fig. 12.4j The start with the dry-spell condition*** + ------------------------------------------------------ ------------------------------------------------------- + ![](media/image1292.png){width="2.963582677165354in" ![](media/image1291.png){width="3.1734350393700788in" + height="2.6766152668416447in"} height="2.6980872703412073in"} + + -------------------------------------------------------------------------------------------------------------- + +Then it is time to reflect in three different ways: + +a) Is this the ***right definition to use for the start***? For + example, should the 15 Nov be the earliest possible starting date, + given that quite a lot of seasons had a starting opportunity very + close to this earliest date. Or should the dry spell have been + included.\ + It is easy to try the graph with the dry spell included. Just return + to the ***Climatic \> PICSA \> Rainfall Graph*** dialogue, + substitute the start_dry variable and press Ok to give the graph in + Fig. 12.4j. The mean starting date is now about a week later and + there are considerably more years that do not have a successful + start until January. Which graph more closely reflects the farmer's + situation? + +b) Does the graph indicate there may be ***problems with the data***? + Often the first results indicate possible data issues. In this case + there is nothing that stands out, but to show what might be done, we + examine the extreme value in Fig. 12.4i. This was a start only on + 6^th^ February in the 1960/61 season. + ++------------+--------------+-----------------------------------------+ +| ***Fig. | | ***Fig. 12.4l PICSA graph with | +| 12.4k The | | options*** | +| start in | | | +| the | | | +| extreme | | | +| year*** | | | +| | | | +| * | | | +| **Climatic | | | +| \> Check | | | +| Data \> | | | +| Display | | | +| Daily*** | | | ++============+==============+=========================================+ +| ![] | ![](m | ![](media/ima | +| (media/ima | edia/image12 | ge1297.png){width="3.490313867016623in" | +| ge1284.png | 85.png){widt | height="3.295974409448819in"} | +| ){width="0 | h="1.1892607 | | +| .981046587 | 174103238in" | | +| 9265092in" | heigh | | +| height="4 | t="4.1505664 | | +| .193491907 | 91688539in"} | | +| 261592in"} | | | ++------------+--------------+-----------------------------------------+ + +Use the ***Climatic \> Check Data \> Display Daily*** dialogue to give +the results in Fig. 12.4k. This shows that November and December did +have very poor rains in that season. With the definition of the start +used in Malawi (25mm in 3 days) the start would have been on 23^rd^ +January, but the insistence, in the Tanzania definition, of at least 2 +rain days ruled this out. Hence the start was indeed on 6^th^ February. + +c) Is the graph as clear as possible for the intended PICSA audience? + This is what we address here. + +An example of a graph with additional options is in Fig. 12.4l. The +elements changed, compared to the default, are shown in Fig. 12.4m. + + ----------------------------------------------------------------------- + ***Fig. 12.4m Setting PICSA graph options*** + ----------------------------------------------------------------------- + ![](media/image1307.png){width="5.997491251093614in" + height="2.5479090113735783in"} + + ![](media/image1282.png){width="6.012708880139982in" + height="1.6143339895013122in"} + + ![](media/image1286.png){width="2.433937007874016in" + height="1.8857534995625547in"} + ----------------------------------------------------------------------- + +1) From the titles tab in Fig. 12.4m, a sub-title shows what has been + plotted. The caption gives credit to TMA for supplying the data. The + units are now specified on the y-axis. + +2) On the x-axis the labels are given every 10 years. + +3) On the y-axis the data start at zero. I like that! + +In Fig. 12.4n the x-axis labels have been changed to every 4 years. The +minor-grid lines are now omitted (using the Panel tab in the +sub-dialogue). The sub-title has also been moved to become part of the +caption[^51]. + + --------------------------------------------------------------------------------------------------------------- + ***Fig. 12.4n*** ***Fig. 12.4o*** + ------------------------------------------------------- ------------------------------------------------------- + ![](media/image1298.png){width="2.9957917760279966in" ![](media/image1328.png){width="3.0032381889763777in" + height="2.755722878390201in"} height="2.7912871828521433in"} + + --------------------------------------------------------------------------------------------------------------- + +Further "within the season" graphs can be given as needed. The season +length was calculated earlier, Fig. 12.4e and is plotted in Fig. 12.4o. +The median length at Dodoma was about 4 months and varies between 2 and +6 months. + +The total rainfall within the season is sometimes requested. This is the +rainfall between the start dates and the end dates. This again uses the +***Climatic \> Prepare \> Climatic Summaries***, as shown in Fig. 12.4p. + ++----------------------------+-----------------------------------------+ +| ***Fig. 12.4p*** | ***Fig. 12.4r Day Range from start to | +| | end*** | +| ***Climatic \> Prepare \> | | +| Summaries*** | | ++============================+=========================================+ +| ! | ![](media/imag | +| [](media/image1329.png){wi | e1331.png){width="3.6065048118985126in" | +| dth="2.4361231408573927in" | height="2.3646872265966756in"} | +| heig | | +| ht="3.1956178915135607in"} | | ++----------------------------+-----------------------------------------+ + +The difference here, from the summaries given earlier, is the choice of +the dates, from the ***Day Range*** button in Fig. 12.4q. In Fig. 12.4r +they are specified as ***Variable Day*** and use the summary data for +the start and end of the rains, that was found earlier. In the dialogue, +in Fig. 12.4q the missing values checkbox is now unticked to dis-allow +any years when there are missing values for the rainfall during the +season. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 12.4s*** ***Fig. 12.4t*** + ------------------------------------------------------ ------------------------------------------------------- + ![](media/image1332.png){width="2.741344050743657in" ![](media/image1308.png){width="3.2065726159230095in" + height="2.8988910761154854in"} height="2.9150656167979in"} + + -------------------------------------------------------------------------------------------------------------- + +The results are in the last 2 variables of the summary data, shown in +Fig. 12.4s. In this summary, the variable called ***count_rain*** is the +number of days used for the sum and is almost the same as the length -- +which is also given in Fig. 12.4s. It should be the same, because it is +simply counting the number of days used for that calculation, i.e. +between the start and end dates. It is thus effectively another way of +finding the length[^52]. + +The resulting graph is shown in Fig. 12.4t. + +An attractive way these results can be used is shown in Fig. 12.4u. The +data, from Fig. 12.4s, can be transferred to an interactive app which +(unlike R-Instat) is available for a smart-phone. In Fig. 12.4u the user +can move the slider, shown at 600mm to find the risks for any given +seasonal rainfall required. + + ----------------------------------------------------------------------- + ***Fig. 12.4u*** + ----------------------------------------------------------------------- + ![](media/image1311.png){width="6.148199912510936in" + height="2.9562587489063867in"} + + ----------------------------------------------------------------------- + +It is an obvious graph and is often proposed for PICSA. However, it is +complicated, as it is composed of three elements, namely the start, the +end, and then the totals within this period, that varies from season to +season. We often find it is not very different to the graph with fixed +end points, such as Fig. 12.3ag that gave the totals from November to +April. + +These graphs, from the start to the end may be more relevant for sites +where there is a bimodal pattern of rainfall. Even then that would be +"in competition" with simpler graphs giving the totals for fixed +periods, say from October to December and then for March to May. + +We return to the possible use of the facility for variable dates in the +Section 12.5. + +This same facility for flexible choice of the starting and ending dates +is available in other dialogues and the longest dry-spell length during +the season is an obvious graph. + +The ***Climatic \> Prepare \> Spells*** dialogue is shown in Fig. 12.4v. +The ***Day Range*** is completed as shown earlier in Fig. 12.4r. The +graph of the spell lengths, using Climatic \> PICSA \> Rainfall Graphs +is then shown in Fig. 12.4 w. The median for the longest spell length in +the season is 2.5 weeks and about 1 year in 7 has a dry spell of 25 days +or more. + ++------------------------------+---------------------------------------+ +| ***Fig. 12.4v Dry spells | ***Fig. 12.4w Graph of maximum spell | +| during the season*** | lengths*** | +| | | +| ***Climatic \> Prepare \> | | +| Spells*** | | ++==============================+=======================================+ +| ![](media/image1320.png){ | ![](media/image1 | +| width="2.5910148731408573in" | 317.png){width="3.4119761592300963in" | +| he | height="3.088657042869641in"} | +| ight="3.0473589238845142in"} | | ++------------------------------+---------------------------------------+ + +The Climatic \> Prepare \> Extremes dialogue facilitates a study of +extreme events. It is used in Fig. 12.4x to find the maximum single day +rainfall each year, together with when the maximum occurred. + +The graph, in Fig. 12.4y shows the median is 66mm on a day and just a +few years have a day with more than 100mm. The colours in Fig. 12.4y +indicate which month the maximum value occurred, and indicate that it +can be in any of the months of the rainy season[^53]. + ++----------------------------+-----------------------------------------+ +| ***Fig. 12.4x*** | ***Fig. 12.4y*** | +| | | +| ***Climaitc \> prepare \> | | +| Extremes*** | | ++============================+=========================================+ +| ![](media/image1319.png){w | ![](media/imag | +| idth="2.415457130358705in" | e1310.png){width="3.5962543744531934in" | +| hei | height="3.2320866141732285in"} | +| ght="3.559381014873141in"} | | ++----------------------------+-----------------------------------------+ + +## More with the rainfall and temperature data? + +With rainfall propose more detailed analyses and other types of +presentation. + +Vertical lines instead of joined lines[^54]? + + ----------------------------------------------------------------------- + ![](media/image1261.png){width="6.268055555555556in" + height="2.8256944444444443in"} + + ----------------------------------------------------------------------- + +[Also do risks for temperatures, where no special facilities exist. +First frost and last frost in Leshoto as examples. Also in more detail +in Chapter 8.]{.mark} + +[Also ask about Bangladesh where the risks may be of too much rain, +rather than too little?]{.mark} + +## Coping with data issues + +## Combining risks for different crops + +Table 12.7a is taken from the PICSA Field Guide, (Dorward, Clarkson, & +Stern, 2016) and shows the sort of results we are aiming for. The first +step is for the Ministry of Agriculture or elsewhere to provide the +information in the first 4 columns of Table 12.7a. This specifies +various crops (options for PICSA farmers) together their length and +water requirement. For example, the local variety of maize is a 120-day +crop and needs 480mm water. Alternatively, a possible variety of sorghum +is 110 days and needs 300mm. + +The calculations in this section provide the risks from specified dates +of planting. In the last column of Table 12.7a the chance of success +from a late planting is just one year in 5 for the local maize, compared +to 3 years in 5 for the sorghum. + + -------------------------------------------------------------------------------------- + **Table + 12.7a + Example + crop + table** + ---------- ------------- ------------ ---------- ----------- ------------ ------------ + **Crop** **Variety** **Days to **Crop **Chance of + maturity** water need success if + (mm)** season + starts:** + + **on x **on x **on x + (Early)** (Middle)** (Late)** + + Maize Local 120 480 5/10 4/10 2/10 + + Maize Pioneer xxx 100 350 7/10 5/10 4/10 + + Sorghum Seed Co xxx 110 300 8/10 7/10 6/10 + -------------------------------------------------------------------------------------- + +Overall, for a chosen planting date, there are 3 separate risks, as +follows: + +1. Planting may not be possible by that date, i.e. the season starts + later. + +2. There may not be time to grow the crop, i.e. the season ends too + early + +3. There may be insufficient water in the time needed for the crop. + +The crop will only be successful if none of these three risks occurs. We +call this the "Overall risk". + +A second possibility is the calculation of the risk of success if there +is a planting opportunity on day x. In that case, just risks 2 and 3 +apply. This is the "Conditional risk". + +The example used is for Dodoma in Tanzania. Use ***File \> Open from +Library \> Instat \> Browse \> Tanzania \> Dodoma***. + +Use ***Climatic \> Check Data \> Boxplot*** as shown in Fig. 12.7a to +show the seasonal pattern of rainfall. The results are in Fig. 12.7b. +There July and August are omitted because there was no rain over the +lower threshold of 0.85mm. The rainy season is seen to be from November +to April. + + --------------------------------------------------------------------------------------------------------------- + ***Fig. 12.7a*** ***Fig. 12.7b*** + ------------------------------------------------------- ------------------------------------------------------- + ![](media/image1258.png){width="2.9769870953630795in" ![](media/image1250.png){width="3.0695778652668415in" + height="3.1413003062117237in"} height="2.9936154855643045in"} + + --------------------------------------------------------------------------------------------------------------- + +As a second preliminary, Fig. 12.7c uses ***Climatic \> Prepare \> +Climatic Summaries*** to show the seasonal totals. The summary data are +in Fig. 12.7d. + ++---------------------------------------+------------------------------+ +| ***Fig. 12.7c*** | ***Fig. 12.7d Summary | +| | Data*** | +| ***Climatic \> Prepare \> Climatic | | +| Summaries*** | | +| | | +| ***Summaries sub-dialogue for total | | +| and missing values*** | | ++=======================================+==============================+ +| ![](media/image1 | ![](media/image1257.png) | +| 255.png){width="3.0278248031496062in" | {width="2.008472222222222in" | +| height="3.533358486439195in"} | he | +| | ight="3.5148261154855645in"} | ++---------------------------------------+------------------------------+ + +The ***Climatic \> PICSA \> Rainfall Graph***, Fig. 12.5e is then used +to show the resulting data. This is in Fig. 12.7f, and shows the +seasonal mean is just over 550mm. + ++--------------------------+-------------------------------------------+ +| ***Fig. 12.7e*** | ***Fig. 12.7f*** | +| | | +| ***Climatic \> PICSA \> | | +| Rainfall Graph*** | | ++==========================+===========================================+ +| ![](m | ![](media/i | +| edia/image1242.png){widt | mage1253.png){width="3.830748031496063in" | +| h="2.2830610236220474in" | height="2.8240419947506563in"} | +| height | | +| ="2.6302777777777777in"} | | ++--------------------------+-------------------------------------------+ + +The start and end of the rains are two of the building blocks for the +crops dialogue. Hence these are now found. They will usually already be +available from earlier calculations, see Section 12.3, but are also +shown here for completeness of this section. + ++-------------------------------------+--------------------------------+ +| ***Fig. 12.7g*** | ***Fig. 12.7h*** | +| | | +| ***Climatic \> Prepare \> Start of | ***Climatic \> Prepare \> End | +| the Rains*** | of the Rains*** | ++=====================================+================================+ +| ![](media/image125 | ![](media/image1256.png | +| 1.png){width="3.3399529746281713in" | ){width="2.8455391513560806in" | +| height="3.198429571303587in"} | height="3.1844127296587925in"} | ++-------------------------------------+--------------------------------+ + +The resulting data frame is shown in Fig. 12.7i and the start and end of +the rains are shown graphically in Fig. 12.7j. + +With these preparatory steps the scene is now set for the crops +dialogue. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 12.7i*** ***Fig. 12.7j*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image1252.png){width="2.951829615048119in" ![](media/image639.png){width="2.942677165354331in" + height="3.082483595800525in"} height="3.0885640857392826in"} + + ------------------------------------------------------------------------------------------------------------ + +Use ***Climatic \> PICSA \> Crops***. For clarity the dialogue is shown +twice. In Fig. 12.7k the top controls are completed with the data frame +for the daily data, i.e. dodoma. + ++-----------------------------------+----------------------------------+ +| ***Fig. 12.7k Crops with daily | ***Fig. 12.7l Crops with start | +| data*** | and end data*** | +| | | +| Climatic \> PICSA \> Crops | | ++===================================+==================================+ +| ![](media/image637. | ![](media/image640.p | +| png){width="3.0290857392825896in" | ng){width="2.9666754155730533in" | +| height="2.6049267279090116in"} | height="2.6094991251093616in"} | ++-----------------------------------+----------------------------------+ + +Then, as shown in Fig. 12.7l, the dates for the start and end of the +rains are from the summary data, i.e. using the dodoma_by_s_year data +frame. The details of the crop are then also specified. + +For this first illustration a crop planted on day 185 (1 January) that +needs 300mm water and has a growing season length of 90 days is used. + +The results are in the output window and also in two new data frames, +shown in Fig. 12.7m and Fig 12.7n. The overall summary is in Fig. 12.7m +and shows that this combination has a chance of success of 0.412, about +4 years in 10. + +The detailed results are in Fig. 12.7n. In the 1935/36 season there was +a planting opportunity on day 177, i.e. before our day 185 requirement. +The rainfall in the 90 days from day 185 was 357mm, which is sufficient +and the end date of day 296 was also more than 90 days from the starting +date. + ++----------------------------+-----------------------------------------+ +| ***Fig. 12.7m*** | ***Fug 12.7n*** | +| | | +| | [Redo when no zero in first | +| | year]{.mark} | ++============================+=========================================+ +| ![](media/image654.png){wi | ![](media/im | +| dth="2.4111964129483816in" | age644.png){width="3.565169510061242in" | +| he | height="3.1352241907261593in"} | +| ight="2.10790135608049in"} | | ++----------------------------+-----------------------------------------+ + +Hence all 3 conditions were TRUE and hence the final column, called +***overall_cond*** is also TRUE. This final variable is TRUE in xxx of +the 77 years that did not have missing data, giving the overall result +of 0.412. [Change when corrected.]{.mark} + +The 1947/48 season was one where the rainfall in the 90 days was just +244mm and hence was insufficient. In 1949/50 the season was not long +enough and in 1950/51 there was no starting opportunity by January +1^st^. These years all contributed to the 6 years in 10 when the crop +would have had problems. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 12.7o*** ***Fig. 12.7p*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image638.png){width="2.976654636920385in" ![](media/image641.png){width="2.935657261592301in" + height="2.223937007874016in"} height="3.0640923009623795in"} + + ----------------------------------------------------------------------------------------------------------- + +Return to the ***Climatic \> PICSA \> Crops*** dialogue and specify +planting dates from 1^st^ December to mid-January as shown in Fig. +12.7o. There is also a range of crop water requirements, from 250 to +400mm) and crop durations from 75 to 120 days. At other sites crops with +a greater water requirement and with longer season lengths could also be +considered. For Dodoma, the initial graphs in Fig. 12.7b, 12.7f and +12.7j suggest the range of values given in Fig. 12.7o. + +The results, in the output window, are shown in Fig. 12.7p. They can be +interpreted here, but for presentation they are copied into Excel or to +Calc (in Open Office). Copied from Fig. 12.7p they can be pasted into +Excel, using the Import wizard. The results are shown in Fig. 12.7r + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 12.7r*** ***Fig. 12.7s*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image627.png){width="3.011803368328959in" ![](media/image626.png){width="3.008370516185477in" + height="1.499838145231846in"} height="1.74082239720035in"} + + ----------------------------------------------------------------------------------------------------------- + +In Excel it is convenient to express the risks as fractions over 10 +years as is shown in Fig. 12.7s. The results are in Fig. 12.7t. From +Fig. 12.7t we see that a 75 day crop that needed 250mm and planted in +1^st^ December would be OK in 6 years out of 10. Later planting would +slightly increase the chance of success. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 12.7t*** ***Fig. 12.7u Find the planting probabilities*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image645.png){width="3.074582239720035in" ![](media/image610.png){width="2.857296587926509in" + height="2.1449365704286962in"} height="1.8919181977252844in"} + + ----------------------------------------------------------------------------------------------------------- + +A 90-day crop with this same modest water requirement would have a +greater chance of success, if planted in December, but not if planting +were delayed till January. + +It would be useful to include the chance of being able to plant by the +dates given in Fig. 12.7t. A possible exercise in a training workshop is +to consider how many different ways this can be found in R-Instat[^55]. +We choose a bizarre, but simple way using the ***Climatic \> PICSA \> +Crops*** dialogue as shown in Fig. 12.7u. Complete the dialogue as shown +in Fig. 12.7u. This is just for the first day of the crop, when we +assume it needs no water. So the only risk is from the planting day. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 12.7v*** ***Fig. 12.7w*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image608.png){width="3.1308114610673665in" ![](media/image622.png){width="2.8979527559055116in" + height="1.2700459317585302in"} height="2.1428182414698163in"} + + ------------------------------------------------------------------------------------------------------------- + +The results are in Fig. 12.7v. They show, for example that there is a +planting opportunity by 1 Jan in 9 years out of 10. This information is +now added to the table of crop risks, Fig. 12.7w. The interpretation is +that in 4 years in 10 there was a planting opportunity by 1^st^ +December. In a year when planting was possible on 1^st^ December the +proportion of successes for a 75-day crop needing 250mm water was 6 out +of 10. \ No newline at end of file diff --git a/Chapter_14_The_Seasonal_forecast.qmd b/Chapter_14_The_Seasonal_forecast.qmd new file mode 100644 index 0000000..d2e0882 --- /dev/null +++ b/Chapter_14_The_Seasonal_forecast.qmd @@ -0,0 +1,465 @@ +# The Seasonal forecast +## Introduction + +Many countries produce a seasonal forecast. (Hansen, Mason, Sun, & Tall, +2011) provides a review for Sub-Saharan Africa. The forecast, for a +given season, often results from a Regional Climate Outlook Forum +(RCOF), updated and down-scaled by the National Meteorological Service +(NMS). In some countries the forecast is a mixture of results from the +global climate models (GCMs) and statistical methods relating historical +climatic data to sea-surface temperatures. Fig. 13.1a and Fig. 13.1b +give examples of the forecast from Ghana and the Caribbean. + + ----------------------------------------------------------------------------------------------------------- + ***Fig 13.1a Ghana rainfall forecast, April - June ***Fig. 13.1b Caribbean rainfall forecast April -- + 2015*** June 2015*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image606.gif){width="2.991641513560805in" ![](media/image623.png){width="3.008535651793526in" + height="3.068241469816273in"} height="2.7479418197725285in"} + + ----------------------------------------------------------------------------------------------------------- + +When statistical methods are used, the Climate Predictability Tool (CPT) +software is usually used to produce the forecast. CPT uses multiple +regression with usually the rainfall as the y (dependent or predictand) +variables and SSTs as the x's (independent, or predictor) variables. +There are usually many x (SST) variables and hence CPT offers the option +of doing a principal component analysis first. + +When there are also many y (rainfall) variables, a canonical correlation +analysis may precede the multiple regression analysis. + +R-Instat can export data for CPT. Hence one use of R-Instat is to +prepare the y-variables (rainfall or temperature) for analysis with CPT. +Traditionally these are 3-month rainfall totals, but any other summary +is possible, for example 3-month total rain days, or the date of the +start of the rains. The requirement is that there is one summary per +year (per station) and the ***Climatic \> Prepare*** menu provides many +options. This is considered in Section 13.2. + +The rainfall (or temperature data) are often station values, but they +may also originate from other sources, e.g. reanalysis, or satellite or +merged data. These are sometimes provided ready for CPT. Sometimes +R-Instat could examine these data also and then prepare a subset for +CPT. This option is considered in Section 13.3 + +## The Y variables - Examining the rainfall data + +One use we propose for R-Instat is to examine the rainfall data, before +it is analysed with CPT. The first example is data from Ghana, already +prepared for CPT. The data are in the R-Instat library, hence use +***File \> Open from Library \> Instat \> Browse \> Climatic \> Ghana*** +and open the file called ***rr-amj-1981-2014.txt***. The data are shown +in Fig. 13.2a. + +The first 2 lines are the locations (Lat and Long) of each station. Then +there are the rainfall data, the 3-month totals from April to June, for +the 34 years from 1981 to 2014. They are from the 22 synoptic stations +in Ghana. + +We also need the locations of the station, but in a separate data frame. +Return to the last dialogue and read the data again. This time read just +the first 2 rows, Fig. 13.2b and give the file a new name. + + --------------------------------------------------------------------------------------------------------- + ***Fig. 13.2a*** ***Fig. 13.2b*** + ----------------------------------------------------- --------------------------------------------------- + ![](media/image615.png){width="2.998064304461942in" ![](media/image607.png){width="3.0224343832021in" + height="2.7682305336832895in"} height="3.2848982939632547in"} + + --------------------------------------------------------------------------------------------------------- + +The station data are now still the "wrong way round". There is a +dialogue to transpose, but it is simpler to use ***Prepare \> Column: +Reshape \> Stack***, Fig. 13.2c, as shown in Fig. 13.2d. + +In Fig. 13.2d put all the columns, except the first to be stacked and +put the STN column to be "carried". + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 13.2c*** ***Fig. 13.2d*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image609.png){width="3.5934798775153105in" ![](media/image602.png){width="2.477023184601925in" + height="1.7293897637795275in"} height="2.1099081364829395in"} + + ------------------------------------------------------------------------------------------------------------ + +In the stacked data the column called STN now has the Lat and Long. Now, +Fig. 13.2e, use the ***Prepare \> Column: Reshape \> Unstack***, as +shown to produce the location data as shown in Fig. 13.2f. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 13.2e*** ***Fig. 13.2f*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image599.png){width="3.2505271216097986in" ![](media/image642.png){width="2.7720789588801398in" + height="3.3606167979002626in"} height="3.350340113735783in"} + + ------------------------------------------------------------------------------------------------------------- + +The rainfall data are first examined briefly (as usual) with ***Climatic +\> Tidy and Examine \> One Variable Summaries.*** Use all the columns. +The results are shown in Fig. 13.2g. There is a problem with the station +WEN, where the minimum is -999. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 13.2g*** ***Fig. 13.2h*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image624.png){width="3.1101279527559056in" ![](media/image619.png){width="2.8708475503062116in" + height="2.217218941382327in"} height="2.8815398075240597in"} + + ------------------------------------------------------------------------------------------------------------- + +This could have been changed to a missing value when the data were +imported. Now the change is made with the dialogue ***Climatic \> Tidy +and Examine \> Replace Values***. Fig 13.2h. + +Now stack the rainfall data using ***Climatic \> Tidy and Examine \> +Stack***, as shown in Fig. 13.2i. + +Now use ***Describe \> Specific \> Line Plot***, as shown in Fig. 13.2j. +Include the ***Station*** as a ***facet***. + ++------------------------------------+---------------------------------+ +| ***Fig. 13.2i*** | ***Fig. 13.2j*** | +| | | +| ***Climatic \> Tidy and Examine \> | | +| Stack*** | | ++====================================+=================================+ +| ![](media/image6 | ![](media/image630.pn | +| 18.png){width="3.15838801399825in" | g){width="2.8473687664041996in" | +| height="2.91377624671916in"} | height="2.88209208223972in"} | ++------------------------------------+---------------------------------+ + +The results are roughly as shown in Fig. 13.2k. (If you would like to +get the results exactly as Fig. 13.2k, then either follow the note +below[^56] or open the file that is better prepared -- called +ghana1981-2014.rds and use the Climatic \> PICSA \> Rainfall Graph +dialogue.) + + ----------------------------------------------------------------------- + ***Fig. 13.2k*** + ----------------------------------------------------------------------- + ![](media/image617.png){width="6.268055555555556in" + height="3.057638888888889in"} + + ----------------------------------------------------------------------- + +The stations go from South to North in Fig. 13.2k. We see that the most +Southerly station, Axim, is different to the other stations. The +variability of the few stations in the North of Ghana is much less than +those in the South. This is going to make the forecasting task much +harder to expect much that is meaningful for the North. + +Next examine the correlations. They use the original data, but +unstacking the data with the Stations from South to North will put the +resulting columns in the same order. + +Hence (assuming you have the data in this order) use Climatic \> Tidy +and Examine \> Unstack, as shown in Fig. 13.2l + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 13.2l*** ***Fig. 13.2m*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image620.png){width="3.0245745844269467in" ![](media/image625.png){width="2.868203193350831in" + height="2.9575273403324585in"} height="3.0626574803149604in"} + + ------------------------------------------------------------------------------------------------------------ + +Next use ***Climatic \> Seasonal Forecast Support \> Correlations***. +Fig. 13.2m. The results provide further "food-for-thought. The most +Southerly station (bottom row in Fig 13.2m) and the most Northerly +(column to the right in Fig. 13.2m) each have quite a lot of blue +values, i.e. negative correlations. There are just 5 stations in the +North of Ghana (latitudes between 9°N and 11°N and the correlations +there are low. If 2 stations have a low or zero correlation, then +logically they should have a separate seasonal forecast. However, Fig. +13.1a shows the whole of the North has a single forecast. + +With this information we would be inclined to + +a) Omit Axim as it seems so different + +b) Consider only using the stations from the South. + +c) Query including Akatsi, which is the furtherst to the Eaqst and has + very low correlation with the other stations + +d) Look for more rainfall stations from the North. + +If, instread, all the stations are used in CPT, then the finalo stage is +a multiple regression on each y-variable separately, as a function of +the set of x-variables, and they are usually the principal components. +Then the interest would be more in the individual results at a station +level -- and these are given by CPT. + + ----------------------------------------------------------------------- + ***Fig. 13.2n*** + ----------------------------------------------------------------------- + ![](media/image621.png){width="5.91378280839895in" + height="5.039098862642169in"} + + ----------------------------------------------------------------------- + +Finally, in ***Climatic \> Seasonal Forecast Support \> Correlations*** +(Fig. 13.2m) use just the 5 columns from the North, (from Bole to +Navrongo) and opt for a pairwise plot. This shows the size of the +correlations clearly and confirms that the whole of the North should not +have a single forecast. + + ----------------------------------------------------------------------- + ***Fig. 13.2o*** + ----------------------------------------------------------------------- + ![](media/image614.png){width="6.112517497812774in" + height="3.49576990376203in"} + + ----------------------------------------------------------------------- + +## Rainfall data with many stations + +The second example is from Rwanda. The rainfall data are considered in +this section. The data file is again in a form that reads directly into +CPT. The file, in Excel, is shown in Fig. 13.3a. These data are again +3-month rainfall totals and are from March to May. They are for 37 +years, from 1981 to 2017. + +These are estimated rainfall from ENACTS. This is a merged product, +combining station data with estimated rainfall from satellite +observations (Siebert, et al., 2019). In Fig. 13.3a the first column +gives the latitude and row 5 gives the longitude of each grid point. So, +the estimated rainfall total at 1.05°S and 28.54°E in 1981 was 550mm. + ++-----------------------------------+----------------------------------+ +| ***Fig. 13.3a*** | ***Fig. 13.3b*** | +| | | +| | ***File \> Open*** | ++===================================+==================================+ +| ![](media/image952 | ![](media/image969.p | +| .png){width="3.004711286089239in" | ng){width="2.9594510061242345in" | +| height="2.948018372703412in"} | height="3.2666458880139984in"} | ++-----------------------------------+----------------------------------+ + +In the data in Fig. 13.3a the rectangle of data for 1981 is followed by +an approximate repeat of lines 4 and 5, followed by the data for 1982. +And so on to 2017. + +If the data, from Excel are saved, then the default (by Excel) is to add +the ***txt*** extension and this makes it easy to import into R-Instat. + +In R-Instat use ***File \> Open***, Fig. 13.3b. Change the ***Lines to +Skip*** to 4, so the first line is the longitudes. + ++----------------------------------+-----------------------------------+ +| ***Fig. 13.3c*** | ***Fig. 13.3d Setting the | +| | filter*** | +| | | +| | ***(Omit level 1 and from 54 | +| | onwards)*** | ++==================================+===================================+ +| ![](media/image951. | ![](media/image940. | +| png){width="2.938659230096238in" | png){width="2.9718602362204725in" | +| height="3.8734087926509186in"} | height="2.960559930008749in"} | ++----------------------------------+-----------------------------------+ + +These data, in Fig. 13.3c, need tidying. The first step is to delete the +rows between each year. This uses a filter, so right click, choose +Filter and then define a new filter on the first column. Part of the +filter sub-dialogue is shown in Fig. 13.3d. + +When you return to the main dialogue, Fig. 13.3e choose to make the +filtered data a subset. If you feel bold, then give the new name the +same as the old one, so the original file is overwritten. + +There are now 1924 rows of data, i.e. 52 rows each year, for 37 years. + +Now a year variable is added as shown in Fig. 13.3f. Check, Fig. 13.3f, +that it will be the same length as the other columns of data. + ++----------------------------+-----------------------------------------+ +| ***Fig. 13.3e Making a | ***Fig. 13.3f Adding a year variable*** | +| subset*** | | +| | ***Prepare \> Column: Generate \> | +| | Regular Sequence*** | ++============================+=========================================+ +| ![](media/image942.png){wi | ![](media/ima | +| dth="2.4592377515310586in" | ge960.png){width="3.5354002624671916in" | +| hei | height="2.9525820209973754in"} | +| ght="2.761431539807524in"} | | ++----------------------------+-----------------------------------------+ + +Now all that remains is to stack the data, ***Climatic \> Tidy and +Examine \> Stack***, as shown in Fig. 13.3g. The re4sulting data are in +Fig.13.3h. There are now 126984 rows of data, i.e. 37 years from 52 \* +66 = 3432 equally spaced locations. + ++----------------------------------+-----------------------------------+ +| ***Fig. 13.3g*** | ***Fig. 13.3h The Rwanda ENACTS | +| | data so far*** | +| ***Climatic \> Tidy and Examine | | +| \> Stack*** | | ++==================================+===================================+ +| ![](media/image943. | ![](media/image941 | +| png){width="2.946774934383202in" | .png){width="2.965952537182852in" | +| height="2.53537510936133in"} | height="3.399851268591426in"} | ++----------------------------------+-----------------------------------+ + +We outline further "housekeeping" steps on these data to make it simpler +to examine and to export back to CPT when needed: + +a) Use ***Prepare \> Column: Text \> Transform \> Substring*** on the + variable ***Lat*** into ***LatS*** from Start Value 2 to End Value + 5. + +b) Recall the ***last dialogue*** and put ***Lon*** into ***LonE*** + from 2 to 6. + +c) ***Select*** both these columns, (LatS and LonE), then + ***right-click*** and make them ***Factors***. + +d) Use ***Prepare \> Column: Factor: Factor \> Combine Factors***. + Choose ***LatS and LonE***, make the separator an ***underscore*** + and make the ***New Column Name:*** ***Location***. + +e) Select LatS and LonE again. Right-click and ***Convert to Numeric*** + columns. + +f) Use ***Prepare \> Column: Factor \> Recode Numeric*** and make a new + column from ***Lats*** into ***Lat6S***, with 10 break points at + about (1.03, 1.25, 1.48, 1.7,1.93, 2.15, 2.38, 2.6, 2.83, 2.98). + +g) Recall the last dialogue and make LonE into Lon6E using (28.5, + 28.74, 28.97, 29.2, 29.42, 29.64, 29.87, 30.1, 30.32, 30.54, 30.77, + 31). + +h) Right click to delete the 2 columns Lat, Lon. + +i) Reorder the columns possibly as shown in Fig. 13.3i + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 13.3i ENACTS data for Rwanda*** ***Fig. 13.3j The locations*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image953.png){width="3.459744094488189in" ![](media/image949.png){width="2.6555074365704288in" + height="2.7487062554680666in"} height="2.722613735783027in"} + + ------------------------------------------------------------------------------------------------------------ + +A Station (i.e. Location data frame is also needed for exporting back to +CPT. From here: + +a) ***Right-click*** and choose ***Filter*** on the year column and put + just the first year (1981) into a new data frame called + ***Location***. + +b) Delete the ***year and rain*** variables from the Location data + frame. + +The resulting data frame is in Fig. 13.3j. + +Now look at the at the data. Start with a given part of Rwanda. +Right-click and filter the data file to the ***last set of stations in +Lat6S*** and ***Lon6E***, i.e. the South-East corner. This is a 30km +square and there should be 880 rows of data, Fig. 13.3k. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 13.3k SE corner (24 locations)*** ***Fig. 13.3l*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image965.png){width="3.0264523184601924in" ![](media/image964.png){width="2.8941546369203848in" + height="2.2105172790901135in"} height="2.9555139982502188in"} + + ------------------------------------------------------------------------------------------------------------- + +These data can now be graphed. The results from a ***Describe \> +Specific \> Line Plot*** of ***rain*** against ***year*** by +***location*** is in Fig. 13.3l. (A facetted graph by LonE and LatS, +after making them factors, is an alternative). + +Fig. 13.3l the coherence (high correlation) between the different +locations is clear. The last point (data from 2017) is a cause for +concern. This is also indicated for 4 of the locations in Fig. 13.3k. +This last year has less than half the rain of any of the other 36 years +at most locations. That can greatly affect a regression model. Perhaps +only fit using the data to 2016? + +Next, use ***Climatic \> Tidy and Examine \> Unstack*** for the +***rain***, by the ***location*** and ***carry the year***. This gives +the 24 stations in separate columns and ***Climatic \> Seasonal Forecast +Support \> Correlations***, gives the results in Fig. 13.3m. They are +all coloured dark red (compare with Fig. 13.2n) as all correlations are +more than 0.8. + + ----------------------------------------------------------------------- + ***Fig. 13.3m*** + ----------------------------------------------------------------------- + ![](media/image961.png){width="5.9061286089238845in" + height="5.168680008748907in"} + + ----------------------------------------------------------------------- + +This can be repeated for further parts of Rwanda. We suggest that +exporting the data from individual "blocks" of 24 or usually 36 stations +for CPT, may enable separate local forecasts to be given? + +Change the filter to choose 12 blocks over the country, possibly Lat6S = +(1, 5, 9) and Lon6E = (1, 4, 7, 10). + ++------------------------------------------+---------------------------+ +| ***Fig. 13.3n Choosing 12 blocks as a | ***Fig. 13.3oFacet with 2 | +| filter*** | variables*** | +| | | +| ***Right-Click \> Filter \> Define New | ***Describe \> Specific | +| Filter*** | \> Line Plot Options \> | +| | Facet*** | ++==========================================+===========================+ +| ![](media/im | ! | +| age963.png){width="3.6805905511811026in" | [](media/image979.png){wi | +| height="2.7163943569553806in"} | dth="2.402188320209974in" | +| | heigh | +| | t="2.6810597112860894in"} | ++------------------------------------------+---------------------------+ + + ----------------------------------------------------------------------- + ***Fig. 13.3p*** + ----------------------------------------------------------------------- + ![](media/image966.png){width="6.268055555555556in" + height="3.0805555555555557in"} + + ----------------------------------------------------------------------- + +The results in Fig. 13.3p show some part of the country, e.g. North-West +-- (top-left) with very high correlations, but also relatively little +year-to-year variability to be explained, compared to other parts. (The +blue set of graphs in the middle of Fig. 13.3p should be examined in +more detail, as the large rainfall in about 1990 is just in a few +locations -- perhaps caused by data from a single station?). The low +rainfall totals in 2017, mentioned above, is apparent in some parts of +the country, but not all. + +Plots of further combinations could be useful. Then 2 alternative +strategies for CPT (in addition to the default of using the 3432 +stations individually) could be: + +a) Use data from single blocks of interest, i.e. usually 36 locations + over a 30km by 30km grid, to examine the forecast for specific parts + of the country. + +b) Take the means (or medians) each year, for each of the blocks, so + reducing the number of locations to 96 and use these data instead of + the data individually for the 3432 locations. + +## The X variables -- Sea Surface Temperatures + +Ghana data first. + +Then Rwanda data! + +For Rwanda data use +[[http://iridl.ldeo.columbia.edu/SOURCES/.IRI/.Analyses/.ICPAC/.Models/.GFDL/.GFDL-CM2p5-FLOR-A06/.MONTHLY/.sst/index.html]{.underline}](http://iridl.ldeo.columbia.edu/SOURCES/.IRI/.Analyses/.ICPAC/.Models/.GFDL/.GFDL-CM2p5-FLOR-A06/.MONTHLY/.sst/index.html) + +The data were downloaded from this +link [[http://iridl.ldeo.columbia.edu/SOURCES/.Models/.NMME/.GFDL-CM2p5-FLOR-A06/.MONTHLY/.sst/]{.underline}](http://iridl.ldeo.columbia.edu/SOURCES/.Models/.NMME/.GFDL-CM2p5-FLOR-A06/.MONTHLY/.sst/)  +However you may decide to choose any other model of your choice.   + +Those Sea Surface Temperature (SST) are GCM outputs from different +source (GFDL, CFS2, NASA etc). Initialization is the process of locating +and using the defined values for variable data that is used by a model +or system. For our model we choose February as the month forecasts (MAM) +were initialized. \ No newline at end of file diff --git a/Chapter_15_Fitting_and_using_stochastic_models.qmd b/Chapter_15_Fitting_and_using_stochastic_models.qmd new file mode 100644 index 0000000..6aa3842 --- /dev/null +++ b/Chapter_15_Fitting_and_using_stochastic_models.qmd @@ -0,0 +1 @@ +# Fitting and using stochastic models diff --git a/Chapter_16_Withinday_data.qmd b/Chapter_16_Withinday_data.qmd new file mode 100644 index 0000000..e99549c --- /dev/null +++ b/Chapter_16_Withinday_data.qmd @@ -0,0 +1 @@ +# Within-day data diff --git a/Chapter_17_Circular_data_and_wind_roses.qmd b/Chapter_17_Circular_data_and_wind_roses.qmd new file mode 100644 index 0000000..aff1cdc --- /dev/null +++ b/Chapter_17_Circular_data_and_wind_roses.qmd @@ -0,0 +1,908 @@ +# Circular data and wind roses +## Introduction + +Fig. 16.1a shows data from the R openair package. These are hourly data +and the two columns called ws and wd are wind speed and direction. Fig. +16.1b shows a single wind rose and these are discussed in detail in +Section 16.4. The wind rose is a circular stacked histogram that shows +both wind speeds and wind directions on the same graph. They are a +popular form of display by National Met Services (NMSs) for these data. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 16.1a*** ***Fig. 16.1b*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image876.png){width="2.6243372703412073in" ![](media/image975.png){width="3.3880194663167105in" + height="2.683885608048994in"} height="2.6981517935258092in"} + + ------------------------------------------------------------------------------------------------------------- + +[For reference the command was as follows:]{.mark} + +[last_graph \<- clifro::windrose(speed=ws, direction=wd, +speed_cuts=c(3,6,9,12,15,18), col_pal=\"Dark2\", ggtheme=\"linedraw\") + +ggplot2::labs(title=\"\", caption=\"\", subtitle=\"\")]{.mark} + +Wind direction is an example of circular data and this type of data +needs some special treatment. Circular variables are common in climatic +data. The obvious example is wind direction, but there are many others: + +- Time in hours at which rainfall starts. The circle is 24 hours. + +- The hour of the minimum temperature each day. The circle is again 24 + hours. + +- Day of the year when the season starts. The circle is 366 days. + +- The month of maximum rainfall. The circle is 12 months. + +Special methods are needed to cope with circular data. Sometimes they +can be avoided, and we have done this often in this guide. For example, +the date of the start of the rains may be from November to January. If +the year is always defined from January, then these data mist be handled +as circular. But the complexity can be avoided by shifting the year to +start in August, as was shown in Chapter 7. + +Section 16.2 considers the general idea of circular data and Section +16.3 shows some simple graphs. Then we return to wind roses in Section +16.4. + +## Circular data + +Wikipedia (Wikipedia contributors) shows a small example of 10, 20, 30 +degrees to illustrate circular data. The mean is obviously 20. Now +subtract 15 degrees, so the mean becomes 5. The data are now 355, 5, 15, +so the usual formula for the mean is (355 + 5 + 15)/3 = 125 -- obviously +wrong. With circular data, once we "go over" zero, the usual formulae no +longer apply. + +There are books on circular statistics, for example (Pewsey & D., 2013) +and, of course, R packages. R-Instat mainly uses the ***circular*** +package. (Agostinelli & Lund, n.d.). + +An example from the circular package is called wind. This has 310 +observations on wind direction. The data in ***File \> Open from Library +\> R package \> circular \> wind***, just has a single variable. The +description states it is five 15-minute observations per day, for 62 +days, from 3am to 4am. It is for a single site from 29 January to 31 +March 2001. + +Fig. 16.2a shows the data in R-Instat. The wind directions (column +wind_dir) are in radians, i.e. they are an angle between 0 and 2pi (i.e. +2 \* 3.14 = 6.28). + ++------------------------------+---------------------------------------+ +| ***Fig. 16.2a Data from | ***Fig. 16.2b Adding a date | +| circular package*** | variable*** | +| | | +| | ***Climatic \> Dates \> Generate | +| | Dates*** | ++==============================+=======================================+ +| ![](media/image955.png){ | ![](media/imag | +| width="2.5966491688538933in" | e954.png){width="3.488678915135608in" | +| h | height="3.357030839895013in"} | +| eight="3.298924978127734in"} | | ++------------------------------+---------------------------------------+ + +Directional data are often given in degrees. Hence also use ***Prepare +\> Column: Calculate \> Calculations***, with the formula: + +wind_dir \*360/(2\*pi) + +Data should be given with their "structure". The dialogue ***Climatic \> +Dates \> Generate Dates***, Fig. 16.2b is used to add the date column, +then ***Prepare \> Column: Generate \> Regular Sequence***, Fig. 16.2c, +to add the time column. + +to give the directions in degrees. The results are all shown in Fig. +16.2a. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 16.2c*** ***Fig. 16.2d*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image900.png){width="2.5924682852143484in" ![](media/image916.png){width="3.5642311898512684in" + height="2.2782305336832898in"} height="1.0976224846894138in"} + + ------------------------------------------------------------------------------------------------------------- + +Start, as usual with a check on the data. Use ***Climatic \> Tidy and +Examine \> One Variable Summarise*** to give the results in Fig. 16.2d. +The summaries for the 2 wind variables are of course for linear, rather +than circular data. The analysis can begin. One aspect that is simpler +here is that there are no missing values in these data. + +The structure of the data is ignored initially, to concentrate on the +new summary statistics for circular data. Graphs are discussed in +Section 16.3. A preview, in Fig. 16.2e indicates the data are reasonably +concentrated near zero. From the graph we expect a mean just above zero, +i.e. perhaps North-North-East, (where East = pi/2 = 1.57 in radians) and +a standard deviation that indicates a good level of concentration of the +data. Thus, we don't expect the circular mean to be as large as 2.36 +radians, or 135 degrees, as shown in Fig. 16.2d + ++-----------------------------+----------------------------------------+ +| ***Fig. 16.2e A circular | ***Fig. 16.2f The circular keyboard*** | +| histogram of the wind | | +| data*** | ***Prepare \> Column: Calculate \> | +| | Calculations*** | ++=============================+========================================+ +| ![](media/image928.png){ | ![](media/imag | +| width="2.557014435695538in" | e921.png){width="3.5340409011373577in" | +| hei | height="1.9491097987751531in"} | +| ght="2.6285608048993874in"} | | ++-----------------------------+----------------------------------------+ + +Use ***Prepare \> Column: Calculate \> Calculations*** and open the +***Circular*** keyboard, Fig. 16.2f. The initial step is to define the +two variables wind_dir and wind_deg in Fig. 16.2a as circular. For +wind_dir, click on the ***circular button*** and add the variable, +***wind_dir***. Save the result back into the same variable, Fig. 16.2g. + +Then press ***Clear***, and do the same for the wind_deg variable, Fig. +16.2h. In this case you need to replace the word "radians" by "degrees". + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 16.2g*** ***Fig. 16.2h*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image902.png){width="3.5270439632545934in" ![](media/image919.png){width="2.536725721784777in" + height="2.5473108048993875in"} height="2.549666447944007in"} + + ------------------------------------------------------------------------------------------------------------ + +It seems that nothing has happened. But now press the +![](media/image898.png){width="0.2736023622047244in" +height="0.30578958880139984in"}icon on the toolbar, Fig. 16.2i to +confirm that the two variables are now defined as circular. Press +![](media/image950.png){width="0.26344050743657044in" +height="0.23361767279090115in"} to close the metadata window. + + ----------------------------------------------------------------------- + ***Fig. 16.2i*** + ----------------------------------------------------------------------- + ![](media/image929.png){width="4.6506572615923005in" + height="1.764834864391951in"} + + ----------------------------------------------------------------------- + +Click ***Clear***, then the ***mean button*** and add the ***wind_dir*** +column as shown in Fig. 16.2j. Un-check Save so the result is in the +Output window, Fig. 16.2k. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 16.2j*** ***Fig. 16.2k*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image899.png){width="3.1713484251968502in" ![](media/image939.png){width="2.8102821522309713in" + height="3.01583552055993in"} height="1.6273206474190727in"} + + ------------------------------------------------------------------------------------------------------------- + +The mean direction is 0.2922 radians (or 0.2922\*360/(2\*pi) = 16.7 +degrees.) + +In the command in Fig. 16.2j the package name is given first, i.e. + +circular::mean.circular(wind_dir) + +Change the variable in Fig. 16.2j to ***wind_deg*** to give the result +directly as 16.7 degrees, Fig. 16.2l. + +This result for the circular mean of 17 degrees is consistent with the +graph, given in Fig. 16.2e. It is a long way from the result in Fig. +16.2d that has ignored the circular nature of the data (and is wrong!) + + ---------------------------------------------------------------------------------------------------------- + ***Fig. 16.2l*** ***Fig. 16.2m*** + ---------------------------------------------------- ----------------------------------------------------- + ![](media/image948.png){width="2.40545384951881in" ![](media/image930.png){width="3.680741469816273in" + height="1.7108311461067367in"} height="2.1625273403324585in"} + + ---------------------------------------------------------------------------------------------------------- + +Now examine the spread of the data. In the dialogue, ***Clear the +expression again***, and find the ***circular variance*** of the +***wind_dir*** variable. The result is seen to be 0.3443 from pressing +the ***Try*** button. Pressing ***Ok*** puts this result into the output +window. + +***Return to this dialogue*** and find the circular variance of the same +data in degrees. The result is identical, i.e. 0.3443, despite the +numbers being very different! Some explanation is needed, because with +ordinary (linear) data, that is not the case. + +Change the function to get the ***standard deviation***, i.e. the sd key +on the circular keyboard, rather than var. The formula is then + +circular::sd.circular(wind_deg). + +This gives the circular standard deviation as 0.9187, and again this is +the same for the wind_dir variable. + +However, in addition, the circular standard deviation is not the square +root of the circular variance. The var = 0.3443 and √0.3443 = 0.5868 +which is quite a long way from the result above. + +The results for the variability (spread) of circular data require +explanation, because they are so different to "ordinary" data. + +We need a formula. With angles (in degrees), x~1~, x~2~,... x~n~ define: + +R = √((Σcos(x~i~))^2^ +(Σsin(x~i~))^2^) + +R is called the resultant length, and r = R/n is called the mean +resultant length. It is the ***rho key*** on the circular keyboard, with + +circular::rho.circular(wind_dir) or circular::rho.circular(wind_deg) + +In each case it gives the value of r = 0.6557 for these data. + +The mean resultant length, r, is between 0 and 1 and values near to 1 +correspond to low variation. + +In the R circular package, and hence in R-Instat the var.circular = +(1-r) = 0.3443 as found above. So, the circular variance is between 0 +and 1 with 0 being no variation. + +Then, sd.circular = √(-2log(r), to be consistent with the definition +first given in (Mardia, 1972). + +Also available in R-Instat is the angular.variance = 2 \* (1-r) = 2 \* +var.circular. + +For these data, the angular.variance is the ***ang.var*** key = 0.6886 + +And there is also the angular.deviation = √(angular variance) + +The angular.deviation is the ang.dev key = √0.6886 = 0.8298. + +To help with the interpretation, of these summaries, take a very simple +example with 5 observations. In degrees take 10, 15, 20, 25 30, Fig. +16.2n. Round the circle they are not very spread out. + ++------------------------------------+---------------------------------+ +| ***Fig. 16.2n*** | ***Fig. 16.2o*** | +| | | +| ***File \> New Data Frame*** | | ++====================================+=================================+ +| ![](media/image93 | ![](media/image937.pn | +| 8.png){width="3.098264435695538in" | g){width="2.7570877077865266in" | +| height="2.7773720472440946in"} | height="2.7570877077865266in"} | ++------------------------------------+---------------------------------+ + +Use ***Prepare \> Column: Calculations \> Calculate*** and produce +***data_rad = (data_deg/360)\*2\*pi***. + +In radians, these data are 0.175, 0.262, 0.349, 0.436, 0.524 as shown in +Fig. 16.2o. + +In ***Prepare \> Column: Calculations \> Calculate*** use the +***degrees*** and ***radians*** buttons to define each of these +variables as circular. + +Then, with the ***sd button***, the sd.circular = 0.1235 for each +variable. + +The ordinary standard deviation for the data in radians is 0.138, i.e. +is close. So, for circular data, with small spread the circular standard +deviation can be interpreted roughly as the ordinary standard deviation, +i.e. a typical distance from the circular mean (which is 0.349 radians), +of the data -- when measured in radians. + +Let's confirm this, with even smaller spread. Divide all the values (in +radians) by 2. The new circular standard deviation = 0.617, which is +half the previous value. Of course, the ordinary standard deviation also +halves, so the interpretation is ok. + +Now multiply the values by 10. In degrees, the values are now 100, 150, +200, 250, 300 so almost round the circle. This is therefore very large +spread for the circular data. In radians this becomes 1.75, 2.62, 3.49, +4.36, 5.24. The maximum is 360 degrees = 2π = 6.28 radians. + +For the data in radians, the ordinary standard deviation is 1.38 and the +circular standard deviation is the same. Hence, a very spread-out +circular dataset has a circular standard deviation of more than 1. +(Otieno Sango & Anderson-Cook, 2003) + +The wind data, analysed in this section, had a circular standard +deviation of 0.92 (radians). So quite large as can be seen from the +graph in Fig. 16.2e. + +What of r and the circular variance = (1-r)? For the 5 values from 10, +to 30 degrees, the circular variance = 0.0076. For large spread, e.g. +the 5 values from 100 to 300 degrees the circular variance = 0.6123. So, +the circular variance can be interpreted directly, with close to 0 being +very concentrated data and close to 1 being very spread out -- round the +circle. The wind data had a spread -- as measured by the circular +variance of 0.3443, i.e. about 1/3. + +Other summary statistics, including the median are also available, +through the circular package, and hence through R-Instat. These are the +median and the quantiles, including the quartiles, the "maximum" and +"minimum" and the range. Most are intuitively obvious for data that are +"concentrated", i.e. have small variability, but are more difficult to +consider where data can be anywhere round the circle. And general +definitions are needed. + +The median is defined by considering diameters that cut the circle in +two. Look for the diameter with end-points P and Q, so that half the +data points are in each semi-circle. Then the median is either P or Q +and choose P, so that the data are more concentrated round it, compared +to Q, + +For the wind data the median is 9.5 degrees, so a little lower than the +mean. + +Once the median exists, the other quantiles, including the maximum and +minimum, can go outwards from this point. The lower quartile is 355 +degrees and the upper quartile is 37 degrees. + +The range is defined as the extent of the circle, minus the biggest gap +of data. This is usually (but not necessarily) the maximum minus the +minimum! + +The von Mises distribution is roughly the equivalent to the normal +distribution for linear data, Fig. 16.2k. This has, similarly, 2 +parameters and is symmetrical about the circular mean. + ++----------------------------------+-----------------------------------+ +| ***Fig. 16.2k Examples of von | ***Fig. 16.2l*** | +| Mises distributions*** | | ++==================================+===================================+ +| [Prefer from R-Instat]{.mark} | ![](media/image934 | +| | .png){width="3.070688976377953in" | +| ![](media/image933. | height="2.5898534558180226in"} | +| png){width="2.939744094488189in" | | +| height="2.360246062992126in"} | | ++----------------------------------+-----------------------------------+ + +The shape is dictated by the к parameter. К = 0 corresponds to the +uniform distribution (round the circle) and large values of к correspond +to a concentrated distribution, i.e. one with low variation. + +Estimating к is done by setting r = A~1~(к) = I~1~(к)/I~0~(к) = 1 -- +var.circular, where I~1~ and I~0~ are modified Bessel functions. In the +R-Instat circular keyboard the function A1(к) is available, Fig. 16.2l. +With a little trial and error we see that, for the wind data the +appropriate value of к = 0.734, i.e. the shape is just above the blue +line in Fig. 16.2k. + +Compared to the circular histogram, Fig. 16.2e it is not clear that a +symmetrical distribution is appropriate. However, more important is that +the wind data have structure that the above analysis has ignored. In +particular, the data are 5 observations from each of 62 days. In any +analysis this sort of structure should not be ignored. + +Hence get the mean each day and then analyse the resulting daily data. +This is the circular mean, and uses the ***Prepare \> Column: Reshape \> +Column Summaries*** as shown in Fig. 16.2m and Fig. 16.2n. + ++-----------------------------------+----------------------------------+ +| ***Fig. 16.2m*** | ***Fig. 16.2n Circular | +| | sub-dialogue*** | +| ***Prepare \> Column: Reshape \> | | +| Column Summaries*** | | ++===================================+==================================+ +| ![](media/image932. | ![](media/image926. | +| png){width="2.9925721784776904in" | png){width="2.955838801399825in" | +| height="3.2901760717410324in"} | height="2.0233978565179354in"} | ++-----------------------------------+----------------------------------+ +| | ![](media/image931.p | +| | ng){width="2.9682622484689416in" | +| | height="1.713193350831146in"} | ++-----------------------------------+----------------------------------+ + +These daily data have 62 records as shown in Fig. 16.2o. For example on +2^nd^ February the mean wind direction was 355 degrees (or 6.19 +radians). The 5 observations were all close in direction, with the +minimum being 345 degrees and the maximum 0.5 degrees. The (circular) +standard deviation was 0.1. The directions were much more variable on +the next day, ranging from 303 degrees (roughly from the West) to 77 +degrees (almost East) within the hour. The (circular) standard deviation +was just over 1. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 16.2o*** ***Fig. 16.2p*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image885.png){width="3.054669728783902in" ![](media/image879.png){width="2.9363615485564303in" + height="2.7000721784776904in"} height="2.3743088363954508in"} + + ------------------------------------------------------------------------------------------------------------ + +It is simply for illustration that the results, in Fig. 16.2o are given +in both degrees and radians. As discussed above, the standard deviation +is the same, whatever the units and the interpretation is similar to the +ordinary standard deviation for the data in radians. + +The resulting daily data can now be plotted and summarised. As an +example, a circular histogram is shown in Fig. 16.2p. + +These data are fine to illustrate the commands in the R circular package +but not for real applications because they are all from a single year +and the summaries, from January to March may also include some +seasonality. In the following sections, we therefore largely consider +data from multiple years. + +## Graphs for wind direction + +The example used is from ***File \> Open From Library \> Open from R \> +R package \> openair*** that was shown earlier in Fig. 16.1a and Fig +16.1b. Open the dataset called ***mydata.*** It is hourly data on +pollution concentrations plus wind speed (ws) and wind direction (wd). +There are 65,533 records, shown again in Fig. 16.3a. The data are from +London for 7.5 years from January 1998 to June 2005. + +Section 16.4 examines wind roses, that examine wind speeds and wind +directions together. Here simpler plots are used to examine just the +circular element, i.e. the wind directions in the variable called wd. + ++-----------------------------------+----------------------------------+ +| ***Fig. 16.3a Wind and pollution | ***Fig. 16.3b Checking the wind | +| data*** | data*** | +| | | +| | ***Climatic \> Tidy and Examine | +| | \> One Variable Frequencies*** | ++===================================+==================================+ +| ![](media/image876. | ![](media/image878.p | +| png){width="2.9951706036745405in" | ng){width="2.5270352143482064in" | +| height="3.0631321084864394in"} | height="3.0722867454068243in"} | ++-----------------------------------+----------------------------------+ + +First examine the wind direction data. One way uses the ***Climatic \> +Tidy and Examine \> One Variable Frequencies*** dialogue, Fig. 16.3b. + ++----------------------------------+-----------------------------------+ +| ***Fig. 16.3c Different values | ***Fig. 16.3d Duplicating the | +| in the wd variable*** | wind variable*** | +| | | +| | ***Right click (in wd variable) | +| | \> Duplicate Column*** | +| | | +| | [Redo with new duplicate column | +| | dialogue]{.mark} | ++==================================+===================================+ +| ![](media/image873. | ![](media/image889 | +| png){width="2.902083333333333in" | .png){width="3.140196850393701in" | +| height="3.334722222222222in"} | height="2.535087489063867in"} | ++----------------------------------+-----------------------------------+ + +The results are in Fig. 16.3c. They confirm that the data are measured +to the nearest 10 degrees. There is one possible oddity, namely that +there are 37 different directions and not 36. There are 608 hours with +North, i.e. 0 degrees and 1377 values at 360 degrees. One obvious reason +for this feature is that there are calm days, i.e. zero wind speed, and +hence no direction. This could reasonably be given the direction of +zero. Use of the right-click and Filter however shows this is not the +case. + +There are 4 alternative next steps to resolve this oddity in the data: + +1. Ignore it and see what happens + +2. Omit one category, i.e. recode those observations as missing + +3. Recode the value 0 to be 360, or 360 to become 0, so the frequencies + are added + +4. Contact the supplier to resolve the oddity. + +We tried option 4 first but had no response. The frequency at 360 +degrees seems reasonable, compared to the values at 350 and 10 degrees, +hence we adopt option 2, and set the zero-degree values to be missing. + +First use the ***Right-click \> Duplicate Column*** dialogue, Fig. 16.3d +to avoid overwriting the original data in wd. + ++--------------------------+-------------------------------------------+ +| ***Fig. 16.3e Replace 0 | ***Fig. 16.3f Results from summary of 4 | +| by missing*** | variables*** | +| | | +| ***Climatic \> Tidy and | ***Climatic \> Tidy and Examine \> One | +| Examine \> Replace*** | Variable Summarise*** | ++==========================+===========================================+ +| ![] | ![](media/i | +| (media/image872.png){wid | mage871.png){width="3.8288287401574803in" | +| th="2.243173665791776in" | height="1.8698742344706911in"} | +| heigh | | +| t="2.243173665791776in"} | | ++--------------------------+-------------------------------------------+ + +Now use ***Climatic \> Tidy and Examine \> Replace Values***, Fig. +16.3e, to replace all instances of 0 by missing values. The result can +be checked with the ***Climatic \> Tidy and Examine \> One Variable +Summarise*** dialogue, the results of which are in Fig. 16.3f. The new +wd1 variable now has 608 missing values and ranges from 10 to 360 +degrees. + +There isn't yet a special climatic graph for these data, so the general +graphics dialogues are used. Use ***Describe \> Specific \> Histogram*** +with the variable wd1, Fig. 16.3g to give the result in Fig. 16.3h. + +Before making this graph circular, note an oddity in the results in Fig. +16.3h. There are exactly 6 directions that stand out. This could either +be a real feature in the data, or an oddity caused by the grouping of +the data when the histogram is constructed. The default in the ggplot2 +system is 30 bins, and we just have 36 different values in the data. So +here the grouping for the histogram is probably to blame. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 16.3g*** ***Fig. 16.3h*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image877.png){width="2.882574365704287in" ![](media/image870.png){width="3.096017060367454in" + height="3.0101727909011373in"} height="3.2579746281714788in"} + + ----------------------------------------------------------------------------------------------------------- + +So return to the dialogue and click on the Histogram Options button to +set the number of bins to 36, Fig. 16.3i. We make the histogram a little +more colourful at the same time. + ++------------------------------+---------------------------------------+ +| ***Fig. 16.3i Setting bins | ***Fig. 16.3j Ordinary histogram*** | +| in the histogram*** | | +| | | +| ***Describe \> Specific \> | | +| Histogram\ | | +| Then Histogram Options*** | | ++==============================+=======================================+ +| ![](media/image895.png | ![](media/image | +| ){width="2.63702646544182in" | 915.png){width="3.3948250218722658in" | +| h | height="3.5374660979877515in"} | +| eight="3.539001531058618in"} | | ++------------------------------+---------------------------------------+ + +This is now ready to produce a circular plot. Return to the dialogue, +use the Plot Options and the Y-axis tab, Fig. 16.3k. Set the axis limits +for the y-axis as shown in Fig. 16.3k. Also press on the +***Coordinates*** tab in Fig. 16.3k and specify ***polar*** coordinates. + ++---------------------------------+------------------------------------+ +| ***Fig. 16.3k*** | ***Fig. 16.3l Histogram as a | +| | circular plot*** | +| ***Describe \> Specific \> | | +| Histogram\ | | +| Then Plot Options \> Y-Axis and | | +| Coordinates*** | | ++=================================+====================================+ +| ![](media/image897.pn | ![](media/image886 | +| g){width="2.8561056430446192in" | .png){width="2.7276979440069993in" | +| height="2.6587325021872266in"} | height="2.743533464566929in"} | ++---------------------------------+------------------------------------+ + +The "trick" of starting the Y-Axis with a negative value in Fig 16.3k, +gives the "hole" in the circular plot. + +There is therefore a series of steps to constructing a circular plot in +R-Instat. They could be avoided through using a special function, such +as ***rose.diag*** in the circular package. One reason for continuing +with the ggplot graphs is the ease with which multiple plots (facets) +can be constructed. + +This is illustrated by examining whether there are obvious differences +in the pattern of the wind directions at different times of the day. + +Use ***Prepare \> Column: Calculate \> Calculations***, with the +***Dates*** keyboard, Fig. 16.3m and the ***hour*** key. + +Check the calculation by using the ***Try button***, Fig. 16.3m and save +the result into a variable called ***hour***. + ++--------------------------------+-------------------------------------+ +| ***Fig. 16.3m Making an hour | ***Fig. 16.3n Making a 3-hour | +| variable*** | variable*** | +| | | +| ***Prepare \> Column: | ***Prepare \> Column: Calculate \> | +| Calculate \> Calculations*** | Calculations*** | ++================================+=====================================+ +| ![](media/image888.pn | ![](media/image91 | +| g){width="2.794021216097988in" | 7.png){width="3.1914271653543307in" | +| height="3.2234055118110234in"} | height="3.2890627734033244in"} | ++--------------------------------+-------------------------------------+ + +The hour variable is from 0 (midnight) to 23 (11pm). This can be used to +give 24 plots, one for each hour. This is unnecessarily detailed, so +combine the hours into blocks of 3. There are many ways this can be done +in R-Instat. We choose the calculator again, with the DIV function, +which is given by %/% in R and is on the Logical keyboard, Fig. 16.3n. + +The formula: ***threehour \<- (hour %/% 3)*** gives the values 0, 0, 0, +1, 1, 1,...,8,8,8 so multiplying by 3 and adding 1 gives the middle hour +of each 3-hour period as shown in Fig. 16.3n. + +***Right-click*** and make the resulting variable into a ***factor***. +Then return to the ***histogram dialogue, Plot Options*** and use this +variable as a ***facet***, Fig. 16.3o. Also change the ***Y-axis +limits*** to ***-600 to 600***. + ++-------------------------+--------------------------------------------+ +| ***Fig. 16.3o*** | ***Fig. 16.3p Circular histogram with | +| | facets*** | +| ***Describe \> Specific | | +| \> Histogram\ | | +| Plot Options \> Facets | | +| and Y-axis*** | | ++=========================+============================================+ +| ![](m | ![](media | +| edia/image901.png){widt | /image882.png){width="3.889770341207349in" | +| h="2.160592738407699in" | height="2.695122484689414in"} | +| height | | +| ="2.357010061242345in"} | | ++-------------------------+--------------------------------------------+ + +The resulting graph is shown in Fig. 16.3p. There is no obviously +consistent pattern for different times of the day. + +The next step is to summarise the hourly data to a daily basis. To +enable this, use the ***Climatic \> Dates \> Make Date*** dialogue, Fig. +16.3q to make a Date column from the date-time column. + ++-----------------------------------+-----------------------------------+ +| ***Fig. 16.3q*** | ***Fig. 16.3r Defining a variable | +| | as circular*** | +| ***Climatic \> Dates \> Make | | +| Date*** | ***Prepare \> Column: Define \> | +| | Circular*** | ++===================================+===================================+ +| ![](media/image883. | [The new dialogue when | +| png){width="2.9268219597550305in" | ready]{.mark} | +| height="3.5730719597550307in"} | | ++-----------------------------------+-----------------------------------+ + +Now use the ***Prepare \>Column: Define \> Circular*** to set the ***wd +variable*** as ***circular, Fig 16.4r***. + ++---------------------------------+------------------------------------+ +| ***Fig. 16.4s Calculating | ***Fig. 16.4t*** | +| circular summaries*** | | +| | | +| ***Prepare \> Column: Reshape | | +| \> Summarise*** | | ++=================================+====================================+ +| ![](media/image892.p | ![](media/image855 | +| ng){width="2.861185476815398in" | .png){width="3.2525437445319336in" | +| height="2.8767071303587053in"} | height="1.0542038495188102in"} | ++---------------------------------+------------------------------------+ +| | ![](media/image851 | +| | .png){width="3.2090365266841645in" | +| | height="1.2806244531933508in"} | ++---------------------------------+------------------------------------+ +| | ![](media/image86 | +| | 7.png){width="3.264692694663167in" | +| | height="0.9643383639545057in"} | ++---------------------------------+------------------------------------+ + +Then use the ***Prepare \> Column: Reshape \> Column Summaries, Fig +16.4s*** to give the ***circular mean and standard deviation,*** Fig. +16.4t. One complication is that there are missing values in these data. +We choose, in Fig. 16.4t, to allow up to 3 missing hours in the day. + +The resulting data frame has 2731 rows (days) of data, Fig. 16.4u. The +summary in Fig. 16.4uhas a few missing daily values, when less than 21 +hours are available. + + -------------------------------------------------------------------------------------------- + ***Fig. 16.3u*** ***Fig. 16.3v*** + ------------------------------------------------------ ------------------------------------- + ![](media/image862.png){width="2.6617049431321087in" + height="3.3775021872265967in"} + + -------------------------------------------------------------------------------------------- + + ----------------------------------- ------------------------------------------------------ + ![](media/image843.png){width="2.9924245406824146in" + height="2.9322222222222223in"} + + ----------------------------------- ------------------------------------------------------ + +The obvious extension of this plotting is to consider the seasonality, +e.g. to produce the plot on a monthly basis. This is left largely as a +challenge[^57]. This produces the plot in Fig. 16.3u. This shows the +predominant wind direction is consistent in each month, but some have an +indication of bimodality. + + ----------------------------------------------------------------------- + ***Fig. 16.3u*** + ----------------------------------------------------------------------- + ![](media/image849.png){width="6.120766622922135in" + height="2.369372265966754in"} + + ----------------------------------------------------------------------- + +[Discuss further once it is easy to have percentages and proportions in +histograms.]{.mark} + +## Wind roses + +In this section we consider graphs of the wind speed and the wind +direction together. This is simpler, because of the special wind-rose +dialogue using the R clifro package. [(reference)]{.mark}. + +The steps in the previous section are followed. First, produce a single +wind rose of the two columns, wind speed (ws) and direction (wd) +together using the hourly data. + +Use ***Climatic \> Describe \> Wind Speed/Direction \> Wind Rose***, +Fig. 16.4a. Ignore the Windrose Options to investigate the default +results from the hourly data. + ++-------------------------------+--------------------------------------+ +| ***Fig. 16.4a Default wind | ***Fig. 16.4b Default wind-rose*** | +| rose*** | | +| | ***(5 wind speeds, colours: Blues, | +| ***Climatic \> Describe \> | Theme: Minimal)*** | +| Wind \> Wind Rose*** | | ++===============================+======================================+ +| ![](media/image866.png) | ![](media/image | +| {width="2.7000404636920385in" | 853.png){width="3.279529746281715in" | +| height="2.970044838145232in"} | height="2.730269028871391in"} | ++-------------------------------+--------------------------------------+ + +Many wind roses will be produced, so a useful step is to fix on a +suitable colour scheme and theme for the graphs. + +Return to the dialogue and choose ***Windrose Options***, Fig. 16.4c. +This shows that 12 is the default number of directions for the graph -- +lucky for us as the wd1 variable has 36 distinct values. Change the +theme to Classical. Then choose the Colours tab and try Red-Yellow-Blue. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 16.4c Windrose Options*** ***Fig. 16.4d*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image839.png){width="2.305673665791776in" ![](media/image844.png){width="3.5765726159230096in" + height="2.826534339457568in"} height="2.8056999125109363in"} + + ------------------------------------------------------------------------------------------------------------ + +The resulting wind rose is in Fig. 16.4e. Changing the theme to linedraw +(Fig. 16.4c) and the colours to Qualitative \> Dark2 gives Fig. 16.4f. + + ---------------------------------------------------------------------------------------------------------- + ***Fig. 16.4e*** ***Fig. 16.4f*** + ---------------------------------------------------- ----------------------------------------------------- + ![](media/image352.png){width="2.99290791776028in" ![](media/image348.png){width="2.940764435695538in" + height="2.7942268153980754in"} height="2.7876476377952755in"} + + ---------------------------------------------------------------------------------------------------------- + +It is easy to add facets, and Fig. 16.4g shows the windspeeds and +directions at different times of the day. + ++-----------------------------------------------------------------------+ +| ***Fig. 16.2g Time of day as facets*** | +| | +| ***Climatic \> Describe \> Wind Speed/Direction \> Wind Rose - | +| three-hour as facet and 4 columns*** | ++=======================================================================+ +| ![](media/image340.png){width="6.1262849956255465in" | +| height="2.9776224846894137in"} | ++-----------------------------------------------------------------------+ + +As in the previous section, the data are now summarised to a daily +basis. This uses ***the Prepare \> Column: Reshape \> Column +Summaries*** dialogue. We add the daily values of both the mean wind +speed and the maximum speed in the 24 hours to the daily data frame. + +The daily data are shown in Fig. 16.4h. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 16.4h*** ***Fig. 16.4i*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image337.png){width="3.3471358267716536in" ![](media/image342.png){width="2.649762685914261in" + height="3.201608705161855in"} height="2.5432163167104114in"} + + ------------------------------------------------------------------------------------------------------------ + + ----------------------------------------------------------------------- + ***Fig. 16.4j*** + ----------------------------------------------------------------------- + ![](media/image341.png){width="6.124628171478565in" + height="2.3491535433070867in"} + + ----------------------------------------------------------------------- + +## More displays for circular data + +The wind roses, shown in Section 16.4 are essentially stacked histograms +round a circle. As such they remain largely a circular plot, showing the +wind direction and something of the wind speeds. If more detail is +needed on the wind speeds, then boxplots may be useful. If necessary, +they can also be displayed round a circle as is shown below. + +The daily data from the previous section are used again. The 12 +directions used in Section 16.4 seem appropriate, so these are +constructed. These are 30 degrees per category, and the only +complication is that the first category is conveniently 345 to 15 +degrees. This is therefore a 2-step process. The first step uses the +***Prepare \> Factor \> Recode Numeric*** dialogue, Fig. 16.5a. The 14 +break points are: + +-1, 15, 45,75, 105, 135, 165, 195, 225, 255, 285, 315, 345, 361 + +This gives a factor column with 13 levels (not 12!). The second step is +to use ***Prepare \> Column: Factor \> Recode Factor*** to combine the +first and last levels. In Fig. 16.5b make the new first label into (345, +15\] and do the same to the last level. Give the new column a sensible +name, Fig. 16.5b. + +If you prefer, then relabel each level in Fig. 16.5b to indicate the +middle angle of that group, namely 0, 30, 60, 90,... , 0. Or you could +use directions, i.e. N, NNE, etc. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 16.5a*** ***Fig. 16.5b*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image338.png){width="2.9411942257217847in" ![](media/image353.png){width="2.9109405074365706in" + height="2.2323447069116362in"} height="2.239504593175853in"} + + ------------------------------------------------------------------------------------------------------------- + +Check, using ***Right-Click \> Levels/Labels*** that the new Direction +variable has 12 levels. + +Use ***Describe \> Specific \> Boxplot***, Fig. 16.5c, to get a boxplot +of the wind speeds by these 12 directions. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 16.5c*** ***Fig. 16.5d Maximum daily wind speeds, by + direction*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image339.png){width="2.5343930446194225in" ![](media/image346.png){width="3.4517311898512686in" + height="2.976563867016623in"} height="3.5370078740157482in"} + + ------------------------------------------------------------------------------------------------------------- + +In Fig. 16.5c make the boxplots of variable width, so the width of each +boxplot indicates the relative frequencies of each wind direction. One +small problem in Fig. 16.5d is that the missing values are included as a +13^th^ category. Use ***Right-Click \> Filter*** (or ***Data Options*** +in the Boxplot dialogue) to omit the missing values in the wind speed +column and repeat the boxplot. At the same time you may wish to use +***Plot Options \> Coordinates*** to make this into a circular plot, +Fig. 16.5e. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 16.5e*** ***Fig. 16.5f*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image315.png){width="2.9485433070866143in" ![](media/image324.png){width="2.9764621609798776in" + height="2.9555708661417324in"} height="2.958765310586177in"} + + ------------------------------------------------------------------------------------------------------------- + +There are alternative displays, from the Describe \> Specific \> Boxplot +dialogue. Fig. 16.5f shows a violin plot(essentially a density plot +instead of the boxplot[^58]. + +Fig. 16.5g, shows the boxplot without the red outliers of Fig. 16.5e, +while Fig. 16.5h adds the jittered points to the diagram. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 16.5g*** ***Fig. 16.5h*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image311.png){width="2.992658573928259in" ![](media/image302.png){width="2.977374234470691in" + height="2.9998425196850396in"} height="2.988058836395451in"} + + ----------------------------------------------------------------------------------------------------------- + +Usually it will be informative to have a set of graphs to investigate a +further factor at the same time. These are usually the seasonality, or +the station. Fig. 16.5i shows the data for the mean daily windspeed +(rather than the maximums, shown above) for each month. + + ----------------------------------------------------------------------- + ***Fig. 16.5i*** + ----------------------------------------------------------------------- + ![](media/image333.png){width="6.155880358705162in" + height="2.937444225721785in"} + + ----------------------------------------------------------------------- + +Fig. 16.5i shows the data as linear plots and Fig. 16.5j as circular +plots. We invite you to compare the two displays. The wind direction +data are circular, so perhaps Fig. 16.5j is the more natural display. +But, for some readers we suggest the comparisons between the months seem +easier to make from Fig. 16.5i. + + ----------------------------------------------------------------------- + ***Fig. 16.5j*** + ----------------------------------------------------------------------- + ![](media/image313.png){width="6.137919947506561in" + height="2.27128937007874in"} + + ----------------------------------------------------------------------- \ No newline at end of file diff --git a/Chapter_18_Temperatures.qmd b/Chapter_18_Temperatures.qmd new file mode 100644 index 0000000..6212d11 --- /dev/null +++ b/Chapter_18_Temperatures.qmd @@ -0,0 +1,16 @@ +# Temperatures +## Examining trends + +[Check on scale, daily, monthly, annual.]{.mark} + +[Consider adding broken stick -- segmented regression model. With fixed +or estimated break points. Package segmented may be used if estimated. +Probably not needed if a break-point and want to try a fixed +value.]{.mark} + +See, for example +[[https://stats.stackexchange.com/questions/382114/segmented-regression]{.underline}](https://stats.stackexchange.com/questions/382114/segmented-regression) + +## Comparing gridded and station data + +## Degree days \ No newline at end of file diff --git a/Chapter_19_Drought_Indices__SPI.qmd b/Chapter_19_Drought_Indices__SPI.qmd new file mode 100644 index 0000000..cf94cd9 --- /dev/null +++ b/Chapter_19_Drought_Indices__SPI.qmd @@ -0,0 +1,165 @@ +# Drought Indices -- SPI +## Introduction + +The Standardised Precipitation Index (SPI) is acknowledged as an obvious +index to monitor drought, e.g. (Keyantash & (Eds), 2018). It is +described in the WMO guide (Svoboda, Hayes, & Wood, 2012). + +There are various R packages to implement SPI and R-Instat includes the +command from the SPEI package (Beguería & Vicente-Serrano, 2017). This +permits the calculation of the SPI index, as described by WMO and an +SPEI index that includes evapotranspiration, (Vicente-Serrano, Beguería, +& López-Moreno, 2010). + +The SPI index is promoted as being superior to the Palmer Drought +Severity Index. This is based on an original index by (Palmer, 1965), +generalised by (Wells, Goddard, & Hayes, 2004) and implemented in their +R package, called scPDSI (Zhong, Chen, Wang, & Chengguang, 2018) to +produce both the self-calibrating and the conventional Palmer index. + +## Using the SPI index + +For illustration use the Nigerian data from Samaru, ***File \> Open from +Library \> Instat \> Browse \> Climatic \> Nigeria***, Fig. 12.2a. The +data frame, called samaru56t, has already been defined as climatic and +has 56 years of daily rainfall data. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 18.2a*** ***Fig. 18.2b*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image332.png){width="2.754974846894138in" ![](media/image312.png){width="3.198131014873141in" + height="3.516872265966754in"} height="3.513098206474191in"} + + ----------------------------------------------------------------------------------------------------------- + +The SPI index is usually used on monthly data, though this is not +essential. Hence use ***Climatic \> Prepare \> Climatic Summaries***, as +shown in Fig. 18.2b. On the ***Summaries sub-dialogue*** choose the +***Count not missing*** and the ***Sum***. The monthly totals are shown +in Fig. 18.2a. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 18.2c*** ***Fig. 18.2d*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image319.png){width="2.616885389326334in" ![](media/image305.png){width="3.352402668416448in" + height="3.7938856080489938in"} height="3.8009251968503937in"} + + ----------------------------------------------------------------------------------------------------------- + +Now use Climatic \> Prepare \> SPI, Fig. 18.2d. Complete the dialogue as +shown in Fig. 18.2d, giving the resulting column the name spi1, because +the index is for single months. + +Then return to the SPI dialogue. Change the time scale to 3 (months) and +the name of the resulting column to spi3. + +Repeat again, changing the time scale to 12, i.e. to a full year and +change the name to spi12. + +The first years of the resulting data are shown in Fig. 18.2e. The +results are interpreted and the graphed. + +To help with the interpretation Fig. 18.2f shows boxplots of the monthly +data. + ++---------------------------------+------------------------------------+ +| ***Fig. 18.2e spi1, spi3 and | ***Fig. 18.2f*** | +| spi12*** | | +| | ***Describe \> Specific Boxplot: | +| | sum_rain by month*** | ++=================================+====================================+ +| ![](media/image321.pn | ![](media/image33 | +| g){width="2.8649070428696413in" | 4.png){width="3.175556649168854in" | +| height="3.703416447944007in"} | height="3.468993875765529in"} | ++---------------------------------+------------------------------------+ + +First examine March 1928, that has an spi1 index of +2. This has +resulted from the rainfall total of 52.6mm. Fig. 18.2f shows that this +is very large for March -- it is the 2^nd^ highest from the 56 years. +Hence positive values of 2 (or more) indicate very rainy compared to the +norm. March 1929 had 12.7mm, and the spi1 index of 1.06 indicates that +even this value is quite large. Often the March total is zero. + +August 1928 had a modestly negative value of spi1 = -0.456. This was +from the August total of 233mm, and the boxplot indicated that this is +slightly lower than average. In contrast, August 1929 had 356mm, which +is higher than the average, and corresponds to the spi1 index of +1. + +The spi3 index fist calculates the 3-month running sums. Hence it +indicates how they compare with what is expected. For example, from Fig. +18.2e, April to June 1928 is all each individually higher than expected. +Hence the April to June 1928 total is surprisingly high and has an spi3 +index of +1.83. + +The 12-month index gives information about the annual (running) totals. +To investigate these, use the Climatic \> Prepare \> Climatic Summaries +again. Change the top button in Fig. 18.2b to Annual to give a data +frame with 56 values. Now use either ***Prepare \> Column: Calculations +\> Calculate*** or ***Prepare Column: Calculate \> Column Summaries*** +on the ***sum_rain*** variable to show the annual mean is 1068mm and the +standard deviation is 178.5mm. + +The total in 1928 was 1262mm. This is higher than the mean of 1068mm and +hence a positive spi12 value is expected for December 1928 in Fig. +18.2e. If we standardise the annual total, i.e. evaluate: + +(1262 -- mean)/sd = (1262 -- 1068) /178.5 = +1.086, which is close to +the spi12value of 1.074. + +In 1929, the total was 1284mm and the standardised value was (1284 -- +1068)/178.5 = 1.21, again close to the spi12 index for December 1929 in +Fig. 18.2e, of 1.18. + +The calculations to produce the spi index is relatively complex. A +distribution is fitted to the data and then the equivalents from the +normal distribution are found. For the annual totals, the distribution +is already close to normal, as is shown by the density plot in Fig. +18.2g. Then the normal distribution is used, as in Fig. 18.2h, where the +value for 1928 is indicated. The results are then standardised, which +just changes the x-axis in Fig. 18.2h to go from roughly -2 to + 2. In +fig 18.2h -2 corresponds to a value of 1068 -- 2 \* 178.5 = 711mm. A +value of 711mm has a probability of 1 year in 40 (probability of about +0.025) of occurring and represents a severe drought. (Most readers will +remember the value of ± 1.96, i.e. about ± 2 that gives the 5% points +from the standard normal distribution.) + ++----------------------------------+-----------------------------------+ +| ***Fig. 18.2g Density graph of | ***Fig. 18.2h Normal plot showing | +| annual totals*** | 1928 total*** | +| | | +| ***Describe \> Specific \> | ***Model \> Probability | +| Histogram with density*** | Distributions \> Show Model*** | ++==================================+===================================+ +| ![](media/image323.p | ![](media/image335. | +| ng){width="2.9731157042869643in" | png){width="3.0730129046369203in" | +| height="3.222425634295713in"} | height="3.253115704286964in"} | ++----------------------------------+-----------------------------------+ + +The indices from Fig. 18.2e can be plotted in a variety of ways. The +"standard" time series graphs look cluttered, as they include the +seasonality within the graph. Fig. 18.2i presents graphs of spi1 and +spi12 separately for each of the months. It shows that spi1 is +meaningless in the dry months (November to February). Lines at 0 and -2 +have been added and show largely that any problem is towards the later +years. + + ----------------------------------------------------------------------- + ***Fig. 18.2i*** + ----------------------------------------------------------------------- + ![](media/image331.png){width="6.113659230096238in" + height="3.0128029308836397in"} + + ----------------------------------------------------------------------- + +## The SPEI index + +[Need to add this section. It works "trivially" by giving a +water-ba;ance variable instead of the rainfall. So, it could be within +R-Instat that we just use the Climatic \> Prepare \> Transform dialogue +first, to get the water balance, and then return to the SPI +dialogue.]{.mark} + +## Palmer Drought Severity Index + +[Check first whether we add it to the dialogue, add another dialogue, or +try to give it as a command.]{.mark} \ No newline at end of file diff --git a/Chapter_1_About_this_guide.qmd b/Chapter_1_About_this_guide.qmd new file mode 100644 index 0000000..2cb6795 --- /dev/null +++ b/Chapter_1_About_this_guide.qmd @@ -0,0 +1,245 @@ +# About this guide +## Who is this guide for? + +This guide is concerned with the analysis of climatic data. It is for +four types of reader: The first is those concerned with the collection +and subsequent use of their climatic data. This includes staff of +national meteorological services, (NMSs) who are often the custodians of +the historical climatic data for their country. There are many others +who collect climatic data, for example schools and colleges, farms, +agricultural institutes and many individuals. + +Second is the users who need results from an analysis of historical +climatic data. They may undertake analyses themselves, or, at least, +need to know what is possible from the data. They are in many walks of +life, including agriculture, health, flood prevention, water supply, +renewable energy, building, tourism and insurance. + +The other two groups are concerned more with teaching and learning +statistics. Looking at climatic data is an application of interest to +many people; partly because of the effects that climate has on many +areas. Also because of the many issues of climate change. + +So, the third group is those who teach statistics. This guide shows how +simple statistical ideas are used in solving practical problems in one +application area. The key concepts of sensible data handling are the +same whatever the area of application. + +The final group consists of those who have to learn statistics. Many +people recognize that they need statistics skills for their work but +sometimes find their statistics courses are difficult to relate to +real-life applications. The materials here are complementary, by +starting with the application and considering the statistical ideas that +are needed to process the data. + +These groups overlap. For example, many users of climatic data are also +conscious of their need for further training in statistics. + +## Why is it needed? + +Many organizations have devoted more effort to collecting climatic data +than to their subsequent analysis. This is like other areas where +monitoring data are collected routinely. One way that climatic data is +perhaps different is that much of the data has an important immediate +use. It is an input for the short-term forecasts and for other immediate +monitoring of the current season. This might be termed a "spatial need" +in that these applications benefit from lots of data from different +places at the same time. These data are then stored, and this guide is +for a "time series need". Most of the analyses in this guide are for +long records in time. They may be for one, or more, points in space. + +Sometimes the excuse for the lack of analysis is that the quality of the +data is suspect. This is not a good reason, because one way to improve +data quality is to analyze the existing data to demonstrate their +importance and shortcomings. + +It is also useful if those who collect data can do their own analysis, +or at least be involved in the analysis. This is highly motivating for +staff and an excellent way to encourage good data quality. + +Some familiarity with the use of software (under Windows) is assumed. +Knowledge of statistics is useful, but not essential for most chapters. +Indeed, though this guide cannot substitute for a conventional +statistics book, users can learn many general ideas through seeing where +different techniques are useful. + +## What software is used? + +This guide uses the R Statistical system (R Core Team, 2018). It mainly +uses R through a graphical user interface, called R-Instat. An earlier +version of this guide (Stern, Rijks, Dale, & Knock, 2006) was for a +simple statistics package, called Instat. Like the original Instat, +R-Instat combines a general statistics package with a special additional +menu to simplify the analysis of climatic data. + +R-Instat is designed to support improved learning of statistics in +general as well as providing a wide range of special dialogues to +simplify, and hence facilitate, the analysis of climatic data. + +## What is in this guide? + +Illustrations and 'route maps' are provided in all chapters for those +who just wish to study particular topics. We hope that some users will +enjoy the way the ideas unfold in successive chapters but do not assume +that readers will wish to look at every chapter. Most chapters are in a +"tutorial" style, so readers can follow, and practice at the same time. +There is considerable repetition, to support users to "dip into" the +chapters they need. + +How much practice is needed, depends on the user's current experience in +statistical computing. Those who are relatively inexperienced, or have +never used a statistics package, may be surprised at how easy the ideas +and the software are. However, beginners need practice, so just reading +the guide will not be so effective. + +Those with experience of a statistics package should find that R-Instat +is like many other statistics packages. Then practice is not so +important, because they should be able to visualize the results from +just reading the text. + +We assume R-Instat has already been installed, see +[[http://r-instat.org/index.html]{.underline}](http://r-instat.org/index.html). + +Chapters 2 and 3 provide practice of using R-Instat in general. Climatic +data are used, but not the special climatic menu. They assume initial +knowledge of R-Instat that could be from the two initial tutorials. +Beginners should go through these tutorials, while others may just need +to see the corresponding videos. + +Chapters 4 to 7 show the use of the R-Instat climatic menu. The +structure of the climatic menu mirrors the main menus. It has items in +the order that is usually needed in an analysis. First is ***File***, to +input the data, then ***Prepare***, to organise them for analysis, then +***Describe***, to analyse the data without assuming a particular +(statistical) model. Lastly, the menu includes some special modelling +items. + +If your need is to analyze your own climatic data as quickly as +possible, then you may choose to omit Chapters 2 and 3 initially. +Chapter 4 describes the R-Instat "climatic system". This is then assumed +in later chapters. Chapter 5 is on initial exploration of the data and +on quality control. Chapter 6 produces and analyses "standard" +summaries, such as rainfall totals, while Chapter 7 examines "tailored +products" such as the start of the rains. + +Chapter 8 examines further features of R-Instat, particularly for users +of climatic data who may wish to migrate from R-Instat to using R +itself. There are inevitable limits to the efficient processing of data +with a menu-driven package. This idea is already introduced in Chapter 3 +where Section 3.5 is titled "Don't let the computer laugh at you". +Hence, for example, Chapter 8 considers how particular climatic analyses +can be done, using tools in R that are currently absent from R-Instat. + +The remaining chapters examine more specialised topics. Chapter 9 is on +the input and analysis of gridded satellite and reanalysis data. Chapter +10 is on mapping and 11 introduces the important area of extremes. + +The PICSA (Participatory Integrated Climate Services for Agriculture) +project is described briefly in Section 1.6 and in more detail in +Chapter 12. + +The remaining chapters are on a range of further topics including the +(statistical approach to) the seasonal forecast, the use of stochastic +models, the processing of within-day data (e.g. from automatic stations) +and the analysis of circular data, particularly for wind direction. + +All the data sets used for illustration are supplied in the R-Instat +"library". Chapter 3 describes how the data are organized, so readers +can substitute their own data for the examples in later chapters. + +The analysis of the climatic records is often a two-stage process. The +first stage reduces the raw, often daily, data to a semi-processed form +with key summaries that correspond to users\' needs. The second stage +involves processing these summaries. + +This two-stage process is typical of the processing of many types of +data and is one reason why users often find their statistics training +did not seem relevant to real-world problems. Many courses use only +small sets of semi-processed data that are tailored to the topic being +taught. However, the real world starts with primary data, and these are +often quite large. + +## Climatology, statistics, and computing? + +Readers who are not confident in statistics should recognize the three +different subjects that are in this guide, namely climatology, +statistics, and computing. The material becomes easier if you separate +these subjects as far as possible. + +R is a programming language and those who are already adept in R may +find they do not need the R-Instat menus and dialogues but can use +RStudio more efficiently for the same analyses. In contrast, beginners +in R, sometimes find it difficult to use in their statistics courses. +They are still trying to master the computing ideas, and this becomes +mixed with the statistical objectives. + +Computing ideas are raised at various points in this guide, because +users sometimes limit the analyses they conduct, by not exploiting the +software fully. So, we show how R-Instat can be used in different ways, +to solve problems raised by users in their needs for data analysis. +These sections should be recognized as largely computing topics and +perhaps omitted initially by those who have less interest in using R +itself. + +Statistics and climatology have two features in common. Both are +relevant to a wide range of applications and many specialists in those +application areas treat both statisticians and climatologists as an +unwelcome nuisance! Perhaps by working together, they can be welcomed +more. + +## Climate Services for Agriculture + +Many countries have projects on climate and agriculture. These projects +often concentrate on sharing the information on the short-term and +seasonal forecasts with producers. We outline one such project, called +PICSA (Participatory Integrated Climate Services for Agriculture). More +information on PICSA is here: +[[https://research.reading.ac.uk/picsa/]{.underline}](https://research.reading.ac.uk/picsa/). + +The different component of PICSA are shown in Fig. 1.6a + + ----------------------------------------------------------------------- + ***Fig. 1.6a The PICSA project*** + ----------------------------------------------------------------------- + ![](media/image1407.png){width="5.643466754155731in" + height="4.150380577427821in"} + + ----------------------------------------------------------------------- + +A distinguishing feature of PICSA is the first panel in Fig. 1.6 and +this is in addition to the forecasting activities. The first panel is on +aspects that are based on an analysis of the historical climatic +records, that are shared with small-scale farmers, before the seasonal +forecast is available. The National Met Service (NMS) is a key partner +in each country and provides analyses of the historical data. These +analyses use the methods described in Chapters 6 and 7 of this guide and +are from the climatic stations that are as close as possible to +different groups of farmers. PICSA is described in Chapter 12. + +## The Climsoft Climate Data Management System + +Climsoft is a free and open source system for the entry and management +of primary climatic data. The initial screen is shown in Fig. 1.7a. It +has facilities for the entry and checking of data from paper records, +and for the transfer of data from previous systems, and from automatic +stations. The data, and metadata are currently held in a mysql database. + +Climsoft is designed particularly for National Met Services (NMSs), but +can be used by any other organisation that has to manage historical +climatic or other related data. A wide range of elements are +pre-defined, but others can be added for hydrology, pollution or other +aspects. Data can be at any scale, e.g. daily, 10-minute. + +Climsoft includes some products, but not many. Instead, R-Instat can +read data directly from Climsoft, or exported from Climsoft, and is +designed as the products' partner to Climsoft. In later versions of +Climsoft the plan is for some of the R-routines in R-Instat to become +part of Climsoft. + + ----------------------------------------------------------------------- + ***Fig. 1.7a The main Climsoft menu*** + ----------------------------------------------------------------------- + ![](media/image1396.png){width="5.75634842519685in" + height="3.9693667979002623in"} + + ----------------------------------------------------------------------- \ No newline at end of file diff --git a/Chapter_20_Climate_Normals.qmd b/Chapter_20_Climate_Normals.qmd new file mode 100644 index 0000000..204b220 --- /dev/null +++ b/Chapter_20_Climate_Normals.qmd @@ -0,0 +1,669 @@ +# Climate Normals +## Introduction + +The calculation of climate normals in this chapter is based largely on +(World Meteorological Organization (WMO), 2017). We also consider the +adaptation of the guidelines to the calculations of the normals in the +US, as described in (Arguez, et al., 2012). + +A climatological standard normal now refers to the most recent 30-year +period finishing in a zero, i.e. currently 1981-2010, and soon to be +1991-2020. In addition, the 1961-1990 period is retained as a standard +reference period for assessing long-term climate change. + +A distinction is made in (World Meteorological Organization (WMO), +2017), between "Principal Climatological Parameters" and "Secondary +Parameters". There are 8 primary parameters including monthly total +rainfall (precipitation) and the total number of rain days, Table 19.1a. + + ----------------------------------------------------------------------- + ***Table 19.1a WMO Principal Climatological + Parameters*** + ------------------------------------------------------- --------------- + **Parameter** **Units** + + Precipitation total mm + + Precipitation days (Precip ≥ 1mm) days + + Mean Tmax °C + + Mean Tmin °C + + Mean Tavg °C + + Mean sea-level pressure hPa + + Mean vapour pressure hPa + + Total hours of sunshine hours + ----------------------------------------------------------------------- + +The quintile boundaries for rainfall (mm) and the mean number of days +with more than 5, 10, 50, 100 and 150mm are secondary parameters. +Temperature thresholds and extremes are also included. + +These are intended as guidelines and are adapted by individual +countries. Examples from the US are shown in Table 19.1b. This table is +adapted from Table 5 in (Arguez, et al., 2012). The units have been +changed to millimetres for rainfall and °C for temperatures (US uses +inches and Fahrenheit.) + + -------------------------------------------------------------------------------------------------------- + Table 19.1b + Monthly and + annual + normals for + a station in + Chicago, + from + (Arguez, et + al., 2012) + ------------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------ ------- + Variable J F M A M J J A S O N D Ann + + Tmax (°C) -0.3 2.1 8.2 15.1 21.2 26.6 29.0 27.8 24.1 17.1 9.2 1.8 15.2 + + Tavg (°C) -4.0 -1.8 3.8 10.2 16.1 21.7 24.4 23.4 19.1 12.3 5.3 -1.7 10.8 + + Tmin (°C) -7.7 -5.7 -0.6 5.4 10.9 16.7 19.7 19.0 14.2 7.6 1.4 -5.2 6.4 + + DTR (°C) 7.4 7.8 8.8 9.7 10.3 9.9 9.3 8.8 9.9 9.5 7.8 7.0 8.8 + + Precip(mm) 52 49 69 92 105 103 102 101 84 82 87 65 993 + + HDD 692 564 451 249 104 17 1 2 43 194 391 620 3327 + + CDD 0 0 1 7 34 117 188 160 66 9 0 0 581 + + Days Tmax \> 0 0 0 0 0.6 3.1 6.3 3.8 1.2 0 0 0 15.1 + 32.2 + + Days with 1.4 2.9 10.6 23.5 30.5 30 31 31 30 28.1 13.1 2.9 235 + Tmin \< 10 + + Precip 25% 29 26 41 54 63 70 53 57 40 49 48 38 + + Precip 75% 75 66 90 119 141 124 115 143 117 93 133 80 + + Precip \> 10.7 8.8 11.2 11.1 11.4 10.3 9.9 9 8.2 10.2 11.2 11.1 123.1 + 0.2mm[^59] + + Precip \> 0.2 0.2 0.3 0.9 1 1.3 1 1.3 0.7 0.8 0.8 0.5 9 + 25mm + -------------------------------------------------------------------------------------------------------- + +One differences is for rainfall, where WMO suggests quintiles, i.e. 20%, +to 80%, while the US uses quartiles (25% and 75%). Heating (HDD) and +cooling degree days are also including. A heating degree day is defined +as a value of Tavg above 18°C (65 degrees Fahrenheit), while CDDs are +temperatures below that level. + +The WMO lower threshold for rainfall is proposed as ≥ 1mm. We have +largely used 0.85mm as a practical lower limit in this guide. We claim +this is consistent with the WMO value of ≥1mm. For practical purposes, +as data are recorded to 0.1mm the WMO value is effectively \> 0.95mm. +For consistency between stations (which is important for climate +normals) the value of 0.85mm is about the same. But it allows for +differences in rounding at different stations. This can occur in 2 ways. +If data were originally in inches, then 0.01inch = 0.3mm. The value of +0.9mm is not possible, because 0.03inches = 0.8mm, while 0.04inches = +1mm. + +In addition, some observers round data more than others. An observer who +rounds 0.9mm to 1mm would have that day counted as rain, while the more +precise observer, recording the same value as 0.9mm would have it +omitted as dry. + +For these reasons, we claim the proposed threshold value of 0.85mm is a +practical was of implementing the WMO ≥1mm threshold. + ++-----------------------------------+-----------------------------------+ +| ***Fig. 19.1a Inventory for | ***Fig. 19.1b Subset with 30 | +| Dodoma*** | years*** | +| | | +| ***Climatic \> Check Data \> | Right-click \> Filter (to year | +| Inventory*** | from 1981 to 2010) | ++===================================+===================================+ +| ![](media/image320. | ![](media/image326. | +| png){width="2.9576673228346455in" | png){width="2.8694127296587926in" | +| height="2.9941371391076115in"} | height="3.0189227909011374in"} | ++-----------------------------------+-----------------------------------+ + +In principle, producing normals is straightforward as is shown in +Section 19.2 with examples using rainfall data. Complications relate +largely to the presence of missing values in the reference period and +this is discussed in Section 19.3. + +The Dodoma data are used as an example. ***File \> Open from Library \> +Instat \> Browse \> Climatic \> Tanzania \> Dodoma.rds***. + +The data are already defined as climatic. An inventory is shown in Fig. +19.1a. IT shows there are virtually no missing values in the rainfall, +either in the 30 years from 1961 or in the most recent period, from 1981 +to2010. A subset of the data is produced as shown in Fig. 19.1b, and +rainfall normals from 1981-2010 are shown in Section 19.2. + +There are also relatively few missing values in the temperatures. They +are considered in Section 19.3, where we also explain the WMO +recommendations for coping with missing values. + +The sunshine records only started in 1973, and so could not be used for +1961-90 normals. And there are far too many missing values for them to +be used in 1981-2010, unless they can be merged with satellite data. +This is considered in Section 19.4. + +The examples here are for a single station. Usually they would be done +for a whole set of stations in a single file, and that is no more work. +The process, in R-Instat, currently involves three successive steps. +There seems to be no R-package for this task. We expect to construct one +for R and hence R-Instat, in the future. + +## Precipitation normals + +From Fig. 19.1b the Dodoma data are now from 1981 to 2010. We have +chosen to keep the year from January to December, though there could be +a case for July to June, as that would mean each "year" would be a +complete season. The rains in Dodoma are from November to April. In +(World Meteorological Organization (WMO), 2017), mention is made of +climate normals being for seasons rather than annual, but no details are +given, In Tanzania part of the country is unimodal and part is bimodal, +so comparisons of the normals between stations would be easier with a +consistent definition and January to December therefore seems justified. + +The first 2 normals in Table 19.1a are the precipitation totals and the +number of rain days. As preparation, calculate the rain days as shown in +Fig. 19.2a. In Fig. 19.2a the 0.85mm threshold has been used, which we +claimed above, is consistent with the WMO definition of rain ≥ 1mm. (Use +0.95mm is you don't agree!) + ++--------------------------------+-------------------------------------+ +| ***Fig. 19.2a Add a variable | ***Fig. 19.2b*** | +| for raindays*** | | +| | | +| ***Climatic \> Prepare \> | | +| Transform*** | | ++================================+=====================================+ +| ![](media/image343.png | ![](media/image32 | +| ){width="2.7958967629046367in" | 2.png){width="3.2288713910761153in" | +| height="3.432683727034121in"} | height="3.409433508311461in"} | ++--------------------------------+-------------------------------------+ + +The resulting daily data are in Fig. 19.2b. The rainday variable can be +seen to be 1 on rain days, and 0 otherwise. + +Getting the monthly normals is a 2-step process and the annual normals +adds a 3rd step. + +The first step uses the ***Climatic \> Prepare \> Climatic Summaries***, +as shown in Fig. 19.2c, to give the monthly rainfall totals for each +year. + ++-----------------------------------+----------------------------------+ +| ***Fig. 19.2c*** | ***Fig. 19.2d*** | +| | | +| ***Climatic \> Prepare \> | | +| Climatic Summaries*** | | ++===================================+==================================+ +| ![](media/image325. | ![](media/image298.p | +| png){width="2.9981966316710413in" | ng){width="2.8774507874015747in" | +| height="3.774873140857393in"} | height="2.998788276465442in"} | ++-----------------------------------+----------------------------------+ + +Complete the dialogue as shown in Fig. 19.2c and choose just the 3 +summaries from the sub-dialogue, as shown in Fig. 19.2d. This generates +a new data frame with 30 (years) by 12 (months), i.e. 360 rows of data. +It will be multiples of 360 rows if there is more than one station. + +Return to the dialogue, change the variable, in Fig. 19.2c, to +***raindays*** and omit the ***Maximum*** and also the ***N Non +Missing*** summary -- it isn't needed, because it is just the same as +for the rain column. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 19.2e The resulting monthly data*** ***Fig. 9.2f*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image280.png){width="2.6224245406824145in" ![](media/image294.png){width="3.398500656167979in" + height="3.3829286964129484in"} height="3.334045275590551in"} + + ------------------------------------------------------------------------------------------------------------ + +Check the resulting data frame, shown in Fig. 19.2e. For example, the +first row shows there was a total of 26.4mm from 5 rain days in +1981[^60]. The maximum daily value was 14.4mm in January 1981. In Fig. +19.2e, check there are no missing months. With the setting for missing +values unchecked in Fig. 19.2c, a month will be set to missing if there +is even a single missing day in that month. We consider this issue at +the start of Section 19.3. + +The (World Meteorological Organization (WMO), 2017) describes four +different parameters that can become monthly normals. From the daily +data it may be a mean, or a sum, or a count or an extreme. In Fig. 19.2e +there are 3 of these types. Thus, the rainfall totals are an example of +a sum, the number of rain days is a count, and the maximum rainfall is +an example of an extreme. Once temperature data are considered, there +will also be examples of means. + +The second step is to produce the climate normals from these monthly +data. This uses the "ordinary" summary dialogue in R-Instat, from +***Prepare \> Column: Reshape \> Column Summaries***, Fig 19.2f, rather +than the special climatic summary. This time the only summary needed is +the mean, Fig. 19.2g. + +The results are a new data frame with just 12 rows, giving the monthly +climate normals, Fig. 19.2h. With multiple stations this would be a data +frame with 12 rows for each station. These can now be copied to a table +or presented graphically. With multiple stations this would be in a +facetted graph. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 19.2g*** ***Fig. 19.2h The climate normals*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image282.png){width="2.8663834208223973in" ![](media/image306.png){width="2.805609142607174in" + height="3.124615048118985in"} height="3.1915343394575677in"} + + ------------------------------------------------------------------------------------------------------------ + +Fig. 19.2i gives a simple graph of the mean monthly totals with the data +from Fig. 19.2h as labels. Fig. 19.2j shows the rain days, where the +months have been changed into the more natural seasonal order. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 19.2i*** ***Fig. 19.2j*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image275.png){width="3.008005249343832in" ![](media/image281.png){width="3.0185575240594926in" + height="2.9874726596675414in"} height="2.9944094488188977in"} + + ------------------------------------------------------------------------------------------------------------ + +Secondary parameters for the rainfall, suggested by (World +Meteorological Organization (WMO), 2017) are the extremes, the quintile +boundaries and the number of rain days above defined thresholds. + +The quintile boundaries are the 0%, 20%, 40%, 60%, 80%, 100% points, +where the 0% and 100% are the monthly extremes. Countries are unlikely +to need them all and this is where the US has chosen quartiles, i.e. 25% +and 75% instead of quintiles. + +In R-Instat either can be found from adapting the second stage of the +calculations. If you would like the extremes and quartiles then use +Prepare \> Column: Reshape \> Column Summaries again, Fig. 19.2f, but +just for the sum_rain variable. In the summaries, Fig. 19.2g use the +Minimum and Maximum for the extremes and the Lower and Upper Quartiles +if they are what you wish. + +If you prefer the quintiles (say 20% and 80% points), use the ***More*** +tab, in Fig. 19.2g, to provide further summaries, Fig. 19.2k, where the +0.2 gives the 20% point. Currently only a single value is allowed, so +use the dialogue a second time to add the 80% point. + +Section 4.5 in (World Meteorological Organization (WMO), 2017) proposes +a definition for the quintile boundaries. R, and hence R-Instat, have 9 +alternative methods for the calculation of quantiles (including +therefore quintiles). The default in R is method 7 and this, +fortunately, coincides with the method proposed in (World Meteorological +Organization (WMO), 2017). + +Fig. 19.2l shows the normals for the mean, as in Fig. 19.2i, as a line +plot. It is together with the minimum, 20%, 80% and maximums for the +1981-2010 period. Note that the minimums and maximums are for the +monthly data, i.e. the maximum of the monthly totals. For the rainfall +data it is also useful to have the daily maximums. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 19.2k*** ***Fig. 19.2l*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image279.png){width="2.3519149168853892in" ![](media/image277.png){width="3.1489687226596677in" + height="2.540067804024497in"} height="3.1894805336832897in"} + + ------------------------------------------------------------------------------------------------------------- + +It is important to be clear on the differences between the two maximums. +In January in Fig. 19.2m shows the largest monthly total was 331mm. + + ----------------------------------------------------------------------- + ***Fig. 19.2m*** + ----------------------------------------------------------------------- + ![](media/image260.png){width="5.713489720034995in" + height="3.0282895888013996in"} + + ----------------------------------------------------------------------- + +Also, in January, the maximum daily rainfall in the 30 years was 113mm. + +The quartile or quintile boundaries are calculated from the monthly +summaries, (i.e. the second stage in the calculations). The mean number +of days above different thresholds needs the daily data. + +In ***Climatic \> Prepare \> Transform***, Fig. 19.2a change the +threshold from 0.85mm to 5mm, 10mm, etc and then summarise the resulting +column(s) as described above. + +In practice, decide on the thresholds at the start, and then produce the +summaries together with the 1mm threshold. + +The resulting normals are in Fig. 19.2m for 5mm, 10mm and 25mm. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 19.2n*** ***Fig. 19.2o*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image314.png){width="2.9886920384951883in" ![](media/image304.png){width="2.9118350831146107in" + height="2.7532655293088366in"} height="2.8491032370953633in"} + + ------------------------------------------------------------------------------------------------------------- + +Fig. 19.2n presents the normals of the number of rain days at +Dodoma[^61]. It shows that there was an average of 10 rain days in +January. Of these, just under half were between 1mm and 5mm and there +were about 2 days per month, on average, with more than 25mm. + +So far, we have considered monthly normals for the 1981-2010 rainfall +data. The third stage is to produce annual normals. The (World +Meteorological Organization (WMO), 2017) recommend producing them from +the monthly normals, i.e. from the data in Fig. 19.2m, rather than from +the monthly data, e.g. Fig 19.2e. If there are no missing values the +results are essentially the same. + +From the monthly normals in Fig. 19.2m use ***Prepare \> Column: Reshape +\> Column Summaries*** again, Fig. 19.2o, with the five variables +***meanrain, rainday, rainday5, rainday10*** and ***rainday25***. In +Fig. 19.2o press the ***Summaries*** sub-dialogue and just get the +***Sum***. Also, in Fig. 19.2o, the results could be stored in another +data frame if the calculations were for multiple stations. We choose +here to give the results in the ***output window*** instead, Fig. 19.2p. + +Now return to the dialogue in Fig. 19.2o. Use the variable ***maxrain*** +instead and change the summary to just produce the ***maximum***. + +The annual results, in Fig. 19.2p show the mean annual rainfall was +595mm from 43 rain days, of which, on average 7 days has 25mm or more. +So, the mean rain per rain day was on average 14mm and about one rain +day in six had 25mm or more. The largest ever daily rainfall was 113mm. + ++--------------------------------------+-------------------------------+ +| ***Fig. 19.2p*** | ***Fig. 19.2q*** | +| | | +| | ***Prepare \> Column: Reshape | +| | \> Column Summaries (after | +| | making year a factor)*** | ++======================================+===============================+ +| ![](media/image | ![](media/image293.png | +| 297.png){width="3.388011811023622in" | ){width="2.658290682414698in" | +| height="1.6162992125984252in"} | height="2.639235564304462in"} | ++--------------------------------------+-------------------------------+ + +The (World Meteorological Organization (WMO), 2017) recommendation of +calculating the annual normals from the monthly values does not work for +the quintiles. In the calculations above we have used the nice property +that "the sum of the means is the same as the mean of the sums". So, in +the figures above, totalling the monthly values in Fig. 19.2e to give +the 30 annual values and then taking the mean over the years, still +gives the value of 595mm that we found doing it "the other way round". + +One limitation with this recommendation is that it is not possible to +calculate the annual normal quintiles, i.e. the variables minrain, 20% +(q20) , q80 and maxrain, see Fig. 19.2m, from their monthly +counterparts. The same applies to the quartiles, see Table 19.1b above, +from (Arguez, et al., 2012) where the annual quartiles have been +omitted. + +These quintiles, including the annual extremes, are useful. As there are +no missing values in the data, they are calculated from the individual +monthly values, shown in Fig. 19.2e. + +With the monthly data frame, Fig. 19.2e, right-click in the year name +and make the year into a factor column. Then use ***Prepare \> Column: +Reshape \> Column Summaries*** again as shown in Fig. 19.2q, for the +sumrain variable. + +In the summaries sub-dialogue just get the ***Sum***. The resulting data +frame is shown in Fig. 19.2r. + +Use the ***Prepare \> Column: Reshape \> Column Summaries*** in this new +data frame. With the ***Summaries*** sub-dialogue give the ***Mean, +Minimum,*** ***Maximum*** and the ***0.2 percentile*** (on the More +tab). Use the same dialogue again, and change 0.2 to 0.8 to give the 80% +point. + +The results are in Fig. 19.2s. The first value simply confirms that the +mean is the same, whichever way it is calculated. The lowest year had a +total of 330mm and the highest was 864mm. The 20% point for the annual +rainfall total was 487mm and the 80% point was 717mm. + ++---------------------------+------------------------------------------+ +| ***Fig. 19.2r*** | ***Fig. 19.2s Annual results*** | +| | | +| | ***From Prepare \> Column: Reshape \> | +| | Column Summaries*** | ++===========================+==========================================+ +| ![ | ![](media/im | +| ](media/image307.png){wid | age303.png){width="3.7290562117235346in" | +| th="2.3395986439195102in" | height="1.6612860892388452in"} | +| heig | | +| ht="2.445317147856518in"} | | ++---------------------------+------------------------------------------+ + +## Missing values + +Make a copy of the rainfall column, to illustrate how to cope with +missing values. + +***Right-click*** in the ***rain variable***, Fig. 19.3a and choose +***Duplicate Column***. Call the resulting variable ***rainm***, Fig. +19.3b. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 19.3a*** ***Fig. 19.3b*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image291.png){width="3.0459667541557307in" ![](media/image296.png){width="2.8682020997375326in" + height="3.0348293963254593in"} height="2.8682020997375326in"} + + ------------------------------------------------------------------------------------------------------------- + +In the resulting column, double-click on 7^th^, 8^th^ and 9^th^ January +and make the values into NA. Scroll down and make 1^st^ to 5^th^ +February 1981 into NA. + +Then use Climatic \> Prepare \> Transform, Fig. 19.3c, to make a column +called raindaym. The resulting data are shown in Fig. 19.3d. + + ---------------------------------------------------------------------------------------------------------- + ***Fig. 19.3c*** ***Fig. 19.3d*** + ----------------------------------------------------- ---------------------------------------------------- + ![](media/image310.png){width="2.964792213473316in" ![](media/image289.png){width="2.98044728783902in" + height="4.0111898512685915in"} height="2.9964720034995627in"} + + ---------------------------------------------------------------------------------------------------------- + +The guidelines in (World Meteorological Organization (WMO), 2017) depend +on what type of parameter you are calculating, i.e. sum, mean, count or +extreme. + ++--------------------------------+-------------------------------------+ +| ***Fig. 19.3e*** | ***Fig. 19.3f*** | +| | | +| | ***[Redo when new option | +| | available]{.mark}*** | ++================================+=====================================+ +| ![](media/image593.pn | ![](media/image58 | +| g){width="2.739374453193351in" | 2.png){width="3.2279877515310584in" | +| height="3.505337926509186in"} | height="2.816849300087489in"} | ++--------------------------------+-------------------------------------+ + +It is strict for a sum parameter, so here for the total monthly +rainfall. If there are ***any*** missing values, it proposes the monthly +sum be set to missing. + +This is also one of the default settings in R, and hence in R-Instat. +So, repeat the ***Climatic \> Prepare \> Climatic Summaries*** dialogue, +from Fig. 19.2b, also shown in Fig. 19.3e, for the new ***rainm*** +variable. Just get the ***sum***. + +The maximum daily rainfall is an extreme. When there are missing values +in the month, the extreme is found for those that remain present. So, +return to the ***Prepare \> Column: Reshape \> Column Summaries*** +dialogue, tick the ***Omit Missing Values*** checkbox in the dialogue +shown in Fig. 19.3e. Click the ***Summaries button*** and change the +summary to give just the ***Maximum***. + +When the parameter is a count, like the number of rain days, (or a +mean), there is an intermediate recommendation, shown in Fig. 19.3f. The +monthly summary is set to missing if there are 11 or more missing days +in the month, or if 5, or more, consecutive days are missing[^62]. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 19.3g*** ***Fig. 19.3h*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image581.png){width="2.6387160979877518in" ![](media/image577.png){width="3.3559295713035873in" + height="2.633252405949256in"} height="2.6931856955380575in"} + + ------------------------------------------------------------------------------------------------------------- + +Return to the ***Prepare \> Column: Reshape \> Column Summaries*** +dialogue, Fig. 19.3e, yet again and use the ***raindaym*** variable. +Click on the Summaries and choose ***N Non Missing*** and ***Sum***. On +the main dialogue also tick the Add Date Column[^63] checkbox. + +The results are shown in Fig. 19.3h. With the missing values, the first +2 months in 1981 are set to missing for the rainfall total and neither +month is missing for the maximum. For the number of rain days, the first +month is summarised, because just 3 days were missing. The second has +been set to NA, because 5 consecutive days were missing. + +With missing values (World Meteorological Organization (WMO), 2017) +propose one further adjustment for the count-type normals, that are here +represented by the number of rain days. The first row of data in Fig. +19.3h shows there were 4 rain days in the 28 non-missing days in January +1981. There are 31 days in January and hence the value is multiplied by +31/28, which gives an estimate of 4.4 rain days in the full month. + +To handle this adjustment, use ***Climatic \> Date \> Use Date*** as +shown in Fig. 19.3i. Just choose the check-box for ***Days in Month***. +The resulting column is also shown in Fig. 19.3h. Now use ***Prepare \> +Column: Calculate \> Calculations*** and complete it as shown in Fig. +19.3j. The resulting variable is also shown in Fig. 19.3h. + ++--------------------------------+-------------------------------------+ +| ***Fig. 19.3i Number of days | ***Fig. 19.3j*** | +| in each month*** | | +| | | +| ***Climatic \> Date \> Use | | +| Date*** | | ++================================+=====================================+ +| ![](media/image580.pn | ![](media/image57 | +| g){width="2.790554461942257in" | 8.png){width="3.1834765966754155in" | +| height="2.93128937007874in"} | height="2.9771905074365703in"} | ++--------------------------------+-------------------------------------+ + +The second stage in the calculations is the summary of the normal for +each month, as shown in Section 19.2. The recommendation is that the +monthly normals should only be calculated where there are at least 80%, +i.e. 24 of the 30 years that are not missing. In the example here, there +is missing in only a single year. Hence the second and third stages can +proceed as described in Section 19.2. + +This same rule of needing 80% of the years also applies to the +calculations of the monthly quintiles. The annual quintiles, unlike the +other normal, can not be calculated from the monthly normal. Hence +annual quintiles should not be calculated if there are missing months in +the data. + +## Temperature normals + +In (World Meteorological Organization (WMO), 2017) the monthly (and +annual) mean values of the (daily) Tmax, Tmin and Tmean are in the list +of Principal normals, [[Table 19.1a]{.underline}](#bookmark=id.4anzqyu), +while the monthly extremes and the count of the number of days that Tmax +exceeds 25˚C, 30˚C, 35˚C and 40˚C are listed as secondary. The only +equivalent threshold for Tmin is the count less than 0˚C, which is +rarely useful in Africa. In (Arguez, et al., 2012) the count less than +10˚C is used, see [[Table 19.1b]{.underline}](#bookmark=id.2pta16n) and +that may be more relevant. + +There are missing values in the temperature record. The inventory in +Fig. 19.1a indicated that there are not many missing values, but a more +accurate check may be useful. One way again uses ***Climatic \> Check +Data \> Inventory***, as shown in Fig. 19.4a, but with a different +layout of the data. The result is in Fig. 19.4b. + ++---------------------------+------------------------------------------+ +| ***Fig. 19.4a Detailed | ***Fig. 19.4b Results for Tmax and Tmin | +| inventory*** | 1981-2010*** | +| | | +| ***Climatic \> Check Data | | +| \> Inventory*** | | ++===========================+==========================================+ +| ! | ![](media/im | +| [](media/image576.png){wi | age579.png){width="3.6292169728783903in" | +| dth="2.362328302712161in" | height="3.4070188101487315in"} | +| heig | | +| ht="2.666806649168854in"} | | ++---------------------------+------------------------------------------+ + +This confirms that there are only a few missing values. A more precise +result would be through a table. This is not currently an automatic +option in R-Instat. However, it can easily be given as was shown in +Chapter 8, giving the results in Fig. 19.4c. They show the thin red +lines in Fig. 19.4b refer to isolated single missing days. There are +just 2 years with at least a missing month for Tmax and one year for +Tmin. The analysis can continue. + + ----------------------------------------------------------------------- + ***Fig. 19.4c Count of missing values in Tmax, Dodoma 1981-2010*** + ----------------------------------------------------------------------- + ![](media/image569.png){width="6.268055555555556in" height="4.25625in"} + + ----------------------------------------------------------------------- + +Tmin is used for illustration. The main dialogue is ***Climatic \> +Prepare \> Climatic Summaries***, Fig. 19.4d. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 19.4d*** ***Fig. 19.4e*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image588.png){width="2.9493580489938758in" ![](media/image596.png){width="2.993937007874016in" + height="3.6728904199475068in"} height="3.0913003062117235in"} + + ------------------------------------------------------------------------------------------------------------ + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 19.4f*** ***Fig. 19.4g*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image587.png){width="2.798834208223972in" ![](media/image613.png){width="3.347797462817148in" + height="1.2322878390201224in"} height="2.8662959317585304in"} + + ![](media/image598.png){width="2.7431364829396325in" + height="1.68996719160105in"} + ------------------------------------------------------------------------------------------------------------ + +The results are shown in Fig. 19.4g. For example, in July 1984 the +minimum of Tmin was 12.3˚C, the mean was 14.0˚C and the maximum was 15.8 +˚C. These were from 30 days, because one day was missing. 25 out of the +30 days were less than 15 ˚C. This count is adjusted as described in +Fig. 19.3i, i.e. use Climatic \> Dates \> Use Date to add a variable +giving the number of days in each month and then adjust the count of +days less than 15 ˚C by: + +Countlt15/count_non_missing \* days_in month. + +This gives the last variable shown in Fig. 19.4g. + +The second stage is to average over the years. This uses ***Prepare \> +Column: Reshape \> Column Summaries*** as for the rainfall normals, Fig. +19.4h. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 19.4h*** ***Fig. 19.4i*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image601.png){width="2.648307086614173in" ![](media/image594.png){width="3.4425153105861765in" + height="2.638747812773403in"} height="2.5276388888888888in"} + + ------------------------------------------------------------------------------------------------------------ + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 19.4j*** ***Fig. 19.4k*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image586.png){width="3.2818733595800524in" ![](media/image590.png){width="2.493397856517935in" + height="3.1984864391951007in"} height="3.3734208223972004in"} + + ------------------------------------------------------------------------------------------------------------ \ No newline at end of file diff --git a/Chapter_21_Various.qmd b/Chapter_21_Various.qmd new file mode 100644 index 0000000..ae34498 --- /dev/null +++ b/Chapter_21_Various.qmd @@ -0,0 +1,10 @@ +# Various +## Evapotranspiration + +## Filling and homogenising data + +## Markov chains + +Will refer to (Stern, Dennett, & Dale, The Analysis of Daily Rainfall +Measurements to Give Agronomically Useful Results 2 - A Modelling +Approach, 1982) \ No newline at end of file diff --git a/Chapter_22_References.qmd b/Chapter_22_References.qmd new file mode 100644 index 0000000..853af02 --- /dev/null +++ b/Chapter_22_References.qmd @@ -0,0 +1,96 @@ +# References +Agostinelli, C., & Lund, U. (n.d.). *R package \'circular\': Circular +Statistics*, 0.4-93. Retrieved 2017, from +https://r-forge.r-project.org/projects/circular/ + +Beguería, S., & Vicente-Serrano, S. M. (2017). *SPEI: Calculation of the +Standardised Precipitation-Evapotranspiration Index. R package version +1.7.* Retrieved from https://CRAN.R-project.org/package=SPEI + +Cooper, P. M., Dimes, J., Rao, K. P., Shapiro, B., Shiferaw, B., & +Swomlow, S. (2008). Coping better with current climatic variability in +the rain-fed farming systems of sub-Saharan Africa: An essential first +step in adapting to future climate change? *Agriculture, Ecosystems and +Environment*, 24-35. + +GADM. (2019, 6 12). *GADM*. Retrieved from https://gadm.org/data.html + +Hansen, J. W., Mason, S. J., Sun, L., & Tall, A. (2011). Review of +Seasonal Climate Forecasting. *Experimental Agriculture*, 201-240. + +Keyantash, J., & (Eds), N. C. (2018, August 7). *The Climate Data Guide: +Standardized Precipitation Index (SPI)*. Retrieved June 10, 2019, from +NCAR/UCAR Climate Data Guide: +https://climatedataguide.ucar.edu/climate-data/standardized-precipitation-index-spi + +Mardia, K. V. (1972). *Statistics of Directional Data.* London: Academic +Press. + +Mupamgwa, W., Walker, S., & Twomlow, S. (2011). Start, end and dry +spells of the growing season in semi-arid southern Zimbabwe. *Journal of +Arid Environments*, 1097-1104. + +Otieno Sango, B., & Anderson-Cook, C. M. (2003). A More Efficient Way Of +Obtaining A Unique Median Estimate For Circular Data. *Journal of Modern +Applied Statistical Methods*. + +Palmer, W. C. (1965). *Meteorological Drought.* US Weather Bureau. + +Pewsey, A. N., & D., R. G. (2013). *Circular Statistics in R.* Oxford: +Oxford University Press. + +R Core Team. (2018). *R: A language and environment for statistical +computing.* Retrieved from https://www.R-project.org/. + +Siebert, A., Dinku, T., Vuguziga, F., Twahirwa, A., Kagabo, D. M., +delCorral, J., & Robertson, A. W. (2019). Evaluation of ENACTS‐Rwanda: A +new multi‐decade, high‐resolution rainfall and temperature data +set---Climatology. *International Journal of Climatology*, 3104-3120. + +Stern, R. D., Dennett, M. D., & Dale, I. C. (1982). The Analysis of +Daily Rainfall Measurements to Give Agronomically Useful Results 1 - +Direct Methods. *Experimental Agriculture*, 223-236. + +Stern, R. D., Dennett, M. D., & Dale, I. C. (1982). The Analysis of +Daily Rainfall Measurements to Give Agronomically Useful Results 2 - A +Modelling Approach. *Experimental Agriculture*, 237-253. + +Stern, R. D., Rijks, D., Dale, I. C., & Knock, J. (2006). *Instat +Climatic Guide.* + +Svoboda, M., Hayes, M., & Wood, D. A. (2012). *Standardized +Precipitation Index User Guide.* Geneva: WMO. Retrieved from +http://library.wmo.int/pmb_ged/wmo_1090_en.pdf + +Vicente-Serrano, S. M., Beguería, S., & López-Moreno, J. I. (2010). A +Multiscalar Drought Index Sensitive to Global Warming: The Standardized +Precipitation Evapotranspiration Index. *Journal of Climate*, 1696-1718. +Retrieved from https://doi.org/10.1175/2009JCLI2909.1 + +Wells, N., Goddard, S., & Hayes, M. J. (2004). . A Self-Calibrating +Palmer Drought Severity Index. *Journal of Climate*, 2335-2351. + +Wikipedia contributors. (2019). *R (programming language)*. Retrieved +from Wikipedia, The Free Encyclopedia: +https://en.wikipedia.org/w/index.php?title=R\_(programming_language)&oldid=887219468 + +Wikipedia contributors. (n.d.). *Mean of circular quantities.* Retrieved +May 14 , 2019, from +https://en.wikipedia.org/w/index.php?title=Mean_of_circular_quantities&oldid=885307281 + +World Meteorological Organization (WMO). (2017). *WMO guidelines on the +calculation of climate normals.* WMO. Retrieved from +https://library.wmo.int/doc_num.php?explnum_id=4166 + +World Meteorological Organization, (., Zwiers, F. W., & Zhang, X. +(2009). *Guidelines on Analysis of extremes in a changing climate in +support of informed decisions for adaptation.* WMO. Retrieved from +http://library.wmo.int/pmb_ged/wmo-td_1500_en.pdf + +Zhang, X., Hegerl, G., Zwiers, F. W., & Kenyon, J. (2005). Avoiding +Inhomogeneity in Percentile-Based Indices of Temperature Extremes. +*Journal of Climate*, 1641-1651. + +Zhong, R., Chen, X., Wang, Z., & Chengguang, L. (2018). scPDSI: +Calculation of the Conventional and Self-Calibrating Palmer Drought +Severity Index. Retrieved from https://CRAN.R-project.org/package=scPDSI \ No newline at end of file diff --git a/Chapter_23_Index.qmd b/Chapter_23_Index.qmd new file mode 100644 index 0000000..03ec7e3 --- /dev/null +++ b/Chapter_23_Index.qmd @@ -0,0 +1,297 @@ +# Index +Zimbabwe, 123 + +[^1]: This threshold is like the value of 1mm sometimes suggested by + WMO. The smallest value usually recorded is 0.1mm, but we find + stations are not equally conscientious in recording very small + amounts. So, if 0.1mm is used, then it is harder to compare the + pattern of rainfall at different stations. Records also differ in + their attitudes on rounding. So, some records have far fewer values + of 0.9 or 1.1mm than others. There is also an old issue that some + stations used to measure in inches and the smallest value was then + 0.01 inches. This translates to 0.3mm and higher values are 0.5, 0.8 + and 1mm. So 0.9mm is not possible in data that used to be in inches. + Hence the threshold of 0.85mm is a practical way of implementing + "1mm and above". + +[^2]: The body of the boxplot is not blue by default. For this, choose + ***Boxplot Options*** in Fig. 2.2e, then choose the ***Geom + Parameters*** tab and change the ***Fill colour*** to your choice. + +[^3]: This is partly because the "Omit Missing Values" checkbox in Fig. + 2.3c was left unchecked. Coping with missing values in the data, + when summaries are calculated, is a complex issue. It is discussed + in detail in Chapter 6. + +[^4]: The graph in Fig. 2.4k also starts from 0. This used the Yaxis tab + in Fig. 2.3j. + +[^5]: R is case sensitive. So Date and date are different variable + names. Hence make sure you use Date as the new name. + +[^6]: If the names of your date columns are not the same, then use the + Options sub-dialogue to tell R-Instat which columns to match. + +[^7]: The missing values are because a full join was used in the merging + process. The satellite data are up to 2015, while the observed data + are to 2013. One way of avoiding the problem is to use a Left Join + instead. + +[^8]: Use Tools \> Options \> Data View to change these values. However, + this may have a speed effect on R-Instat. + +[^9]: This is the Dodoma data used in Chapter 2. Use ***File \> Open + from Library \> Instat \> Climatic \> Original Climate Guide Data*** + and choose ***Dodoma*** to open these data. + +[^10]: An R data book is special to R-Instat. Hence these RDS files + cannot be opened directly in R, for example in RStudio. We describe, + in Section 3.3 how you can transfer your R-Instat work to RStudio. + +[^11]: Changing the number of significant figures does not change any of + the data in R at all. It just changes how it is presented in the + grid. If you do want to change the number, then use the R-Instat + Calculator with Prepare \> Column: Calculate \> Calculations, where + the maths keyboard has round and various other functions that can be + applied. + +[^12]: This can be changed if not appropriate. + +[^13]: Sometimes the graph in the R viewer does not seem to appear, or + it appears and then disappears again. This is because it is on a + totally separate window. In this case look in the R-Instat icon in + the taskbar at the bottom of the screen. + +[^14]: The extra feature in Fig. 3.4 is the date of each outlier, which + helps in the quality control. This is provided by the label argument + in the ***Describe \> Specific \> Scatter Plot*** dialogue in Fig. + 3.4h. + +[^15]: Though a "list" is something different in R. + +[^16]: We could alternatively have used Climatic \> Tidy and Examine \> + Replace Values in R-Instat and then changed the columns to be + numeric. But it is simpler to do a Find and Replace in Excel. + +[^17]: Use Climatic \> Tidy and Examine \> Replace Values. + +[^18]: This issue was with Climsoft Version 3.2. The problem has been + resolved in later versions. + +[^19]: They use ***Describe \> Specific \> Line Plot*** dialogue, with + the ***Date*** column as the x-variable. + +[^20]: To filter, one way is to return to the data, and right-click to + set up the filter. Alternatively press the Data Options button in + any dialogue, here Fig. 5.2h. Then filter to select just the first + station. + +[^21]: The Climatic \> dates \> Use Date dialogue is used to generate + the quarters. + +[^22]: In Section 3.3 we show how a skew boxplot may be constructed as a + preferred graph for rainfall data. + +[^23]: From the main ***Climatic \> Check Data \> Boxplot*** dialogue, + with ***Tmin*** as the variable, use ***Plot Options \> Layer \> + Add*** to give Fig. 5.3j. Include ***Tmax*** as the y, Fig. 5.3j, + then use the ***Layer Parameters*** tab, Fig. 5.3j, and set the + ***Outlier colour*** to ***red***. Then ***Return*** to the main + dialogue and ***Ok***. + +[^24]: This feature is common and is largely due to the possibility of + lower values of Tmax on some rainy days. One way to check this + feature is the filter the data and just consider the Tmax data on + dry days. + +[^25]: An outlier is when a point is further from the respective + quartile than 1.5 times the interquartile range. + +[^26]: This threshold is like the value of 1mm sometimes suggested by + WMO. The smallest value usually recorded is 0.1mm, but we find that + stations are not equally conscientious in recording very small + amounts. So, if 0.1mm is used, then it is harder to compare the + pattern of rainfall at different stations. Records also differ in + their attitudes on rounding. So some records have far fewer values + of 0.9 or 1.1mm than others. There is also an old issue that some + stations used to measure in inches and the smallest value was then + 0.01 inches. This translates to 0.3mm and higher values are 0.5, 0.8 + and 1mm. So, 0.9mm is not possible in data that used to be in + inches. Hence the threshold of 0.85mm is a practical way of + implementing "1mm and above". + +[^27]: And, of course, if it is not possible with the ordinary R-Instat + menus it may still be possible using R directly. + +[^28]: To find the equation and level of significance of this result you + could then use the ***Model \> Two Variable*** dialogue + +[^29]: To add the colour, we also used the ***Boxplot Options*** in Fig. + 6.4d and specified the ***Fill Colour*** as green. + +[^30]: We also used the Data Options and filtered on the Months to use + just March to October. + +[^31]: It uses the 2 factors month and station for the facets. + +[^32]: ***Filter to 1962 at Saltpond*** and use ***Climatic \> Check + Data \> Display Daily***. + +[^33]: In the current version of R-Instat the Plot Options are disabled + for multiple variables. Hence set the facets before setting the + variables to Multiple. Set them back to Single Variable if you wish + to edit the Plot Options. This limitation will be removed in a + future version. + +[^34]: Monthly means are calculated using ***Climatic \> Prepare \> + Climatic Summaries*** as shown in Fig. 6.6k. The data are then + filtered to just 1971 to 1980 for Saltpond. Then the results could + be shown in the output window, but we chose to unstack the data, by + Month to give the display shown in Fig. 6.6h. + +[^35]: Use ***Prepare \> Column: Calculate \> Calculation*** with the + formula ***round(max_temperature\*9/5+32)***. + +[^36]: An alternative to renaming the variables is to change the names + of the new variables in the ***Climatic \> Prepare \> Start of the + Rains*** dialogue, Fig. 7.3a. + +[^37]: The file called Moorings 7.4.rds from ***File \> Open from + Library,*** contains the data including the variables from Section + 7.3. + +[^38]: To plot as shown in Fig. 7.6h, use ***Climatic \> Tidy and + Examine \> Stack*** with the 3 totals, carrying the ***s_year*** + variable. Then, on the ***Climatic \> PICSA \> Rainfall Graph***, + choose Plot Options and Facets and make the layout vertical. + +[^39]: Include the checkbox to display the zero values as "---". + +[^40]: Plotting exceedance graphs is one way to examine these data. Our + use + +[^41]: The default gives the x-axis as numeric. The presentation shown, + as dates within the year, will soon be easy, but currently it needs + a little coding as described in Chapter 8. + +[^42]: They are higher because they include years where a dry spell may + have started before the given dates and continued into the flowering + period. The earlier calculation (following planting) assumed the + previous day had rain -- as it was a potential planting date.) + +[^43]: If we move the dekad column "down one row", , that's the + ***lead*** function (lag is the opposite) then these are the rows + when the two columns are different, (i.e. !=). So, with the + ***dekad_abbr*** variable the function: ***dekad_abbr != + lead(dekad_abbr)*** is used. We need to specify the R package for + the ***lead*** function, so give the command as ***dekad_abbr != + dplyr::lead(dekad_abbr)*** + +[^44]: In Fig. 7.8ad we have also filtered to omit the very dry months + of the year. + +[^45]: This adds two ***layers*** to the boxplot with the data from the + current year. One layer is for the line and the other for the + points. This is explained n=in more detail in Chapter 8. + +[^46]: This might have been corrected by the time you read this section. + +[^47]: The resulting column is slightly incorrect, because of the + multiple stations. The last 2 rows (hours) at each station should be + missing, but they continue with the values from the next station. + This will have a negligible effect on subsequent calculations. If + you wish to be strictly correct, then filter for these last 2 days + and set the values as missing. + +[^48]: The calculation of the baseline values is more complex in two + ways. First is that each day uses the data from the 5 surrounding + days, e.g. for 10^th^ January, the data are used from 8^th^ to + 12^th^ January. There are therefore 150 values for each day, from + which to calculate the 10% and 90% points. Second is that a + bootstrapping methods is used, following (Zhang, Hegerl, Zwiers, & + Kenyon, 2005) where each year in turn is omitted and replaced by one + of the other 29 years. + +[^49]: If you have multiple data frames open, and you just want to close + this one, then use ***Right-Click*** on the data frame tab (at the + bottom of the data) and choose ***Delete***. + +[^50]: With the default of more than 9 days, there is no planting date + in 2 of the years. This is possible, and the issue us discussed in + Section 7.4. Here we avoid the discussion! + +[^51]: A caption can be split over multiple lines if \\n is used as a + line feed. + +[^52]: You may wonder why they are not always the same. They are within + a day of each other and we consider that is "good enough" for the + uses of the results. They sometimes differ by a day for one (or + both) of 2 reasons. First the length =End -- Start. So, if the Start + was 14 Nov, and the End was 16^th^, then Length = 2 days. But 3 days + are used in the calculation of the sum, from the start day to the + end day. Second -- and the other way -- is that February 29 is an + extra day in non-leap years for calculating the length, but not for + the number of days in calculating the sum. So, in Fig. 12.4s the + results are the same in non-leap years, and different, by one day, + in leap years. + +[^53]: From the dates, use ***Prepare \> Column: Calculate + \>Calculation*** to find the month of the maximum. ***Label*** the + month and ***reorder***, so December is first. Then, in the + ***Climatic \> PICSA \> Rainfall Graph***, use ***Plot Options*** + and edit the points layer to include the month in the graph. + +[^54]: Changed geom_line, to geom_col, colour to black, and size=0.8 to + width=0.05 in PICSA line chart. + +[^55]: You could simply count the number of years in Fig. 12.4i when + planting is on or before each day number. Or count from a graphical + display, such as Fig. 12.4j. This is simpler from a cumulative + display of the starting dates, using the ***Climatic \> PICSA \> + Cumulative/Exceedance Graph***. Numerically you could give a logical + expression using the calculator, ***Prepare \> Column: Calculate \> + Calculation***, or using the proportion summary in ***Prepare \> + Column Calculate \> Column Summaries***. + +[^56]: The order of the factor levels is changed to go from South to + North (i.e. in latitude order). A Date column has been added (with + Climatic \> Dates \> Make Date, and just use the Year column. Then + the data frame is defined as climatic, as described in Chapter 8. + +[^57]: It isn't difficult. First use ***Climatic \> Dates \> Make + Date*** for the daily data, (possibly change the year and doy to be + numeric) then, ***Use Date*** to get the monthly variable. Then + repeat the plot with the ***month as a facet***. + +[^58]: The scale option was used to make the width proportional to the + count of observations at each direction. + +[^59]: This is Precip ≥ 0.01 inches as the US uses inches rather than + mm. (1 inch = 25.4mm). + +[^60]: Here the total rainfall is calculated from ***all*** the rain + days -- i.e. even those with less than 0.85mm. This slightly higher + than the totals ignoring those days completely, i.e. setting those + values to zero. If you wish to set those values to zero, then, with + the daily data, generate a new variable, say rain0 using ***Prepare + \> Column: Calculate \> Calculation*** with the formula + ***(rain\>0.85) \* rain*** or equivalently ***ifelse(rain\>0.85, + rain, 0)***. + +[^61]: There were some simple steps to produce the graph in Fig. 19.2n, + from the data in Fig. 19.2m, as follows. First subtract successive + columns to give the number of days between 1mm and 5mm, etc. Then + use Climatic \> Tidy and Examine \> Stack on these four variables, + carrying the Month factor. Then produce the stacked bar chart. It is + good if the chart is in the "right order", both for the bars and the + legend, and this may involve the Prepare \> Column: Factor \> + Reorder Levels. + +[^62]: Some countries continue to use a tighter rule where 5 is the + maximum number of missing days permitted in a month, or 3 + consecutive days. + +[^63]: If the checkbox is not (yet) enabled, then press Ok for the + existing summary. Use the dialogue again, make date the element and + choose Minimum. This has given the column called min_date in Fig. + 19.3h. \ No newline at end of file diff --git a/Chapter_2_More_Practice_with_RInstat.qmd b/Chapter_2_More_Practice_with_RInstat.qmd new file mode 100644 index 0000000..94ee4ca --- /dev/null +++ b/Chapter_2_More_Practice_with_RInstat.qmd @@ -0,0 +1,702 @@ +# More Practice with R-Instat +## Introduction + +To use climatic data fully it is important to be able to deliver +products. The two examples in this chapter describe the steps and the +endpoint in this process. Data are supplied in the right form for the +analysis. The objectives are specified, and your task is to prepare the +tables and graphs for a report and a presentation. + +Some familiarity with R-Instat is assumed. There are two initial +tutorials and following those is enough preparation. If you have already +used a statistics package before, then the examples below may be +sufficient for you, even without the tutorials. This chapter is also +designed to provide practice with R-Instat. + +The first problem builds on a study in Southern Zambia. This is the most +drought-prone area of the country. Everyone knew that there is \'climate +change\'! Some farmers were emigrating North, citing climate change as +their reason. However, a local non-governmental organization (NGO) +called the Conservation Farming Unit, questioned this reasoning for the +rainfall data. They are not convinced that any climate change has +necessarily affected the farming practices. They, therefore, +commissioned a study that used daily climatic data from several stations +in Southern Zambia. The results were supplied as a report, and +presentations of the results were also made to the NGO and to the local +FAO Officers. The results confirmed evidence of climate change in the +temperature data, but not in the rainfall. The key conclusions were +later made into short plays that were broadcast on local radio and +played at village meetings. + +Here we use data from Moorings, a site in Southern Zambia. The daily +data, on rainfall, are from 1922 to 2009. Here, partly for simplicity, +we largely use the monthly summaries. + +For the work, we draw an analogy with the preparation of a meal. The +first key requirement is that you have the food, which here is the +climatic data. In a real meal, the food may be supplied in a form that +is ready for cooking, or it may need preparation prior to cooking. Here +the data are in pre-packed form, so the analysis can proceed quickly. + +You also need the right tools. In a kitchen, they are the saucepans, +etc, while here they are just the computer, together with the required +software. + +You need some general cooking skills. These are the basic computing +skills, plus initial skills of R-Instat, at least from the tutorial. + +Finally, your objectives must be clear. This corresponds to having a +specific meal in mind so that a recipe can be used. Of course, you may +have to adapt slightly as you go along. You might find some oddities in +the data, just as cooks must improvise if they suddenly find that one of +the ingredients is not available. + +If everything is well organized, the cook can prepare the meal very +quickly. This is just what is done in the products in this chapter. This +leaves time to make sure the dishes, for us the results, are presented +attractively. Then users will enjoy consuming what is presented. + +Section 2.2 describes the data for this first task. Trends in the +rainfall are examined in Section 2.3. A second problem, in Section 2.4, +examines whether satellite data on sunshine hours resembles +corresponding station data. Daily data from Dodoma, Tanzania, are used. + +The data for each of these case studies are in the R-Instat library. The +presentation is designed so users can repeat the analyses on their +laptops. + +Graphs are produced in each of these sections and the general methods +for graphics in R-Instat is outlined in Section 2.5. Section 3.5 then +adds a warning. R-Instat provides an easy-to-use click and point way of +using the R programming language. It should help users to solve may +problems. But a click-and-point system is not the right tool for all +problems. We describe a problem that may require more programming +skills, at least if you wish to prevent your computer from laughing at +you! + +This chapter demonstrates R-Instat as a simple general statistics +package and the File, Prepare and Describe menus are used. It +illustrates that a general statistics package is an appropriate tool for +many climatic problems. It is also designed to consolidate your +experience in using R-Instat. The special climatic menu is introduced in +chapter 4. + +## The Moorings data + +Monthly data are used in this part of the chapter. Daily data are the +starting point in most of this guide because many of the objectives +require daily data. But here the emphasis is on objectives for which the +monthly data are suitable. + +The data are already in an R-Instat file. Hence, they can be opened from +the library in R-Instat library. + +From the opening screen in R-Instat, select ***File \> Open From +Library*** as shown in Fig. 2.2a. Choose ***Load From Instat +Collection***, Then ***Browse*** to the ***Climatic*** directory then to +***Zambia***. ***Select*** the file called ***Moorings_July.rds*** to +give the screen shown in Fig. 2.2b. Press ***Ok***. + ++----------------------------------------+-----------------------------+ +| ***Fig. 2.2a File \> Open from | ***Fig. 2.2b Ready to | +| Library*** | import Moorings.RDS*** | +| | | +| ***(Climatic \> Zambia \> | | +| Moorings.RDS)*** | | ++========================================+=============================+ +| ![](media/image | ![](media/image1409.png){ | +| 1404.png){width="3.3584514435695536in" | width="2.430002187226597in" | +| height="3.0461209536307963in"} | hei | +| | ght="2.7552777777777777in"} | ++----------------------------------------+-----------------------------+ + +The resulting data are shown in Fig. 2.2c. There are 2 data frames. The +one called Moorings has daily data. + +***Move to the second data frame*** as shown in Fig. 2.2c which shows +the monthly totals. They are the total rainfall in mm and the total +number of rain days. A rain day was defined as a day with more than +0.85mm[^1]. + ++---------------------------------+------------------------------------+ +| ***Fig. 2.2c The Moorings | ***Fig. 2.2d Boxplot dialogue on | +| monthly data*** | the Describe menu*** | +| | | +| | ***Describe \> Specific \> | +| | Boxplot*** | ++=================================+====================================+ +| ![](media/image1423.pn | ![](media/image141 | +| g){width="1.8441360454943132in" | 6.png){width="3.095645231846019in" | +| height="3.4743996062992126in"} | height="2.329336176727909in"} | ++---------------------------------+------------------------------------+ + +Rainfall in Southern Zambia is from November to April. Hence, we analyze +the data by season, rather than by year. There are 88 seasons from 1922 +to 2009 and 1056 monthly values, as indicated in Fig. 2.2c. + +The task is to write a short report that describes the patterns of +rainfall. One aim is to assess whether there is obvious evidence of +change in the pattern of rainfall. This evidence might justify +requesting the data from multiple stations, to undertake a more detailed +study. The first step is to explore the data, and then consider how +appropriate results could be presented. To explore we start with a +boxplot to show the seasonal pattern of the rainfall totals. + +Choose the Boxplot dialogue from the Describe menu, with ***Describe \> +Specific \> Boxplot***, as shown in Fog. 2.2d. Complete the dialogue as +shown in Fig. 2.2e. The resulting graph is shown in Fig. 2.2f[^2]. This +shows the total rainfall was typically 200mm in each of December to +February. There was always some rain in each of these months, and the +records were over 500mm. + ++-----------------------------------+----------------------------------+ +| ***Fig. 2.2e Completed boxplot | ***Fig. 2.2f Boxplot of monthly | +| dialogue*** | rainfall totals*** | +| | | +| ***Describe \> Specific \> | | +| Boxplot*** | | ++===================================+==================================+ +| ![](media/image1413 | ![](media/image1424.p | +| .png){width="3.101418416447944in" | ng){width="2.9661537620297462in" | +| height="3.5402176290463694in"} | height="3.0952646544181976in"} | ++-----------------------------------+----------------------------------+ + +Change the variable from rain to ***raindays*** in Fig. 2.2e to give the +corresponding boxplots for the number of raindays in the month, Fig. +2.2g. This shows that typically one day in two are rainy in December to +February. Occasionally most of the days are rainy. + +Boxplots are essentially a 5-number summary of the data, (with potential +outliers also shown). The ***Prepare \> Column: Reshape \> Column +Summaries, Fig. 2.2h,*** dialogue can provide the same summaries +numerically. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 2.2g The number of rain days*** ***Fig. 2.2h Summary dialogue on the Prepare menu*** + ------------------------------------------------------- ------------------------------------------------------ + ![](media/image1408.png){width="3.2808048993875767in" ![](media/image1421.png){width="2.724430227471566in" + height="3.43955271216098in"} height="2.6912051618547683in"} + + -------------------------------------------------------------------------------------------------------------- + +Summarise both the monthly totals and the number of raindays, with the +month as the factor, as shown in Fig. 2.2i. Then choose the Summaries +button and complete the sub-dialogue as shown in Fig. 2.2j. + ++-------------------------------------+--------------------------------+ +| ***Fig. 2.2i The Summary | ***Fig. 2.2j Summaries | +| dialogue*** | sub-dialogue*** | +| | | +| ***Prepare \> Column: Reshape \> | | +| Column Summaries*** | | ++=====================================+================================+ +| ![](media/image107 | ![](media/image1065.png | +| 9.png){width="3.2056266404199474in" | ){width="2.7337193788276464in" | +| height="3.343377077865267in"} | height="3.6745319335083115in"} | ++-------------------------------------+--------------------------------+ + +The results are in a third data frame. It just has 12 rows as shown in +Fig. 2.2k. The summaries are clearer if they are in order (which we did +already for Fig. 2.2k). + +***Right-click in the name field*** of this data frame and choose the +option to ***Reorder columns***, Fig. 2.2l. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 2.2k Resulting summary data*** ***Fig 2.2l Right-click menu to reorder columns*** + ------------------------------------------------------- ------------------------------------------------------ + ![](media/image1078.png){width="3.5167333770778653in" ![](media/image1074.png){width="2.419306649168854in" + height="2.4429199475065615in"} height="2.4641087051618547in"} + + -------------------------------------------------------------------------------------------------------------- + +In the Reorder dialogue, use the ***arrow keys*** to change the position +of the columns in the data frame. + +With the summaries in a sensible order, they are now transferred to the +results (output) window. + ++-----------------------------------+----------------------------------+ +| ***Fig. 2.2m Reorder the | ***Fig. 2.2n Simplify column | +| resulting columns*** | names*** | +| | | +| ***Right-Click \> Reorder | ***Right-click \> Rename | +| Column(s)*** | Column*** | ++===================================+==================================+ +| ![](media/image1080. | ![](media/image1077.p | +| png){width="3.0982819335083116in" | ng){width="3.0263024934383203in" | +| height="2.21875in"} | height="2.083488626421697in"} | ++-----------------------------------+----------------------------------+ + +Before this, we renamed some of the columns to give shorter names. This +again used the ***right-click*** menu, Fig 2.2l. The rename dialogue is +shown in Fig. 2.2n. + ++-------------------------------+--------------------------------------+ +| ***Fig. 2.2o View Data | ***Fig. 2.2n The Monthly number of | +| dialogue*** | rain days*** | +| | | +| ***Prepare \> Data Frame \> | | +| View Data*** | | ++===============================+======================================+ +| ![](media/image1091.png) | ![](media/image1 | +| {width="2.7121620734908136in" | 075.jpg){width="3.378299431321085in" | +| height="2.720417760279965in"} | height="2.301573709536308in"} | ++-------------------------------+--------------------------------------+ + +Now use the ***Prepare \> Data Frame \> View Data*** dialogue, Fig. +2.2o, to transfer the rainfall totals and then the number of rain days +to the results window. The results for the number of rain days are shown +in Fig. 2.2p. + +## The objectives + +Section 2.2 explored the data and examined the seasonal pattern of the +rainfall at Moorings. It also made use of the three menus, File, Prepare +and Describe and well as the right-click menu. The main objective, +however, was to see if there is evidence of rainfall change rather than +to investigate the seasonal pattern. + +We first examine the annual totals and the total number of rain days. +These are the totals from July to June, so they cover each season. + +Some "housekeeping" is a preliminary. The 3^rd^ data-frame is no longer +needed. Right-click on the bottom tab a and choose the option to delete, +Fig. 2.3a. The dialogue shown in Fig. 2.3b opens. Just press ok. + + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 2.3a Right-click on the bottom tab*** ***Fig. 2.3b Delete a data frame*** + ----------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------- + ![](media/image1086.png){width="2.15288823272091in" ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTML1e674805.PNG](media/image1081.png){width="3.8076443569553806in" + height="1.6875863954505688in"} height="2.3232436570428696in"} + + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Use ***Prepare \> Column: Reshape \> Column Summaries*** and complete +the dialogue and sub-dialogue as shown in Fig. 2.3c and Fig. 2.3d to +produce the seasonal totals. + ++------------------------------------+---------------------------------+ +| ***Fig. 2.3c Produce the annual | ***Fig. 2.3d The Summaries | +| totals*** | sub-dialogue*** | +| | | +| ***Prepare \> Column: Reshape \> | | +| Column Summaries*** | | ++====================================+=================================+ +| ![C:\\Users\\R | ![](media/image1048.pn | +| OGERS\~1\\AppData\\Local\\Temp\\SN | g){width="2.8312390638670166in" | +| AGHTML1b0bb1d.PNG](media/image1057 | height="3.8056135170603675in"} | +| .png){width="3.1936745406824145in" | | +| height="3.340392607174103in"} | | ++------------------------------------+---------------------------------+ + +The results are shown in Fig. 2.3 e after the steps explained below. +First, notice in Fig. 2.3e that there were only 4 months in the first +season, and the annual summary was therefore set to missing[^3]. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 2.3e Resulting annual data*** ***Fig. 2.3f Menu for a text substring*** + ------------------------------------------------------- ------------------------------------------------------ + ![](media/image1092.png){width="2.9407163167104113in" ![](media/image1053.png){width="3.027933070866142in" + height="3.521816491688539in"} height="2.8126443569553805in"} + + -------------------------------------------------------------------------------------------------------------- + +A numeric column for the year (season) is needed for the time series +graphs. Hence, as shown below, we produce the second column, called +s_yr, also shown in Fig. 2.3e. + +Use ***Prepare \> Column: Text \> Transform***, Fig. 2.3f. Complete the +resulting dialogue, as shown in Fig. 2.3g, to give just the starting +year of the season. The resulting variable is shown in Fig. 2.3e. + ++----------------------------------------+-----------------------------+ +| ***Fig. 2.3g The Substring Option*** | ***Fig. 2.3h Convert Column | +| | to Numeric*** | +| ***Prepare \> Column:Text \> | | +| Transform*** | | ++========================================+=============================+ +| ![](media/imag | ![](media/image1076.png){ | +| e1056.png){width="3.459864391951006in" | width="2.003675634295713in" | +| height="3.0012171916010497in"} | hei | +| | ght="2.8906255468066493in"} | ++----------------------------------------+-----------------------------+ + +Use the ***right-click*** menu, Fig. 2.3h to convert the resulting s_yr +column to numeric. + +After a little further housekeeping from the right-click menu, to +***rename***, ***re-orde***r and ***delete*** columns, the annual data +are as shown in Fig. 2.3e above. + +Now for the time-series graphs. They can be produced using the +***Describe \> Specific \> Line Plot*** dialogue, but this type of graph +is just what is needed for the PICSA-style rainfall graphs, so we use +the special climatic menu for the first time. + +Use ***Climatic \> PICSA \> Rainfall Graph***. Complete as shown in Fig. +2.3i. Press the **PICSA Options** button and complete the Lines ab as +shown in Fig. 2.3j to add (and label) a horizontal line for the mean. + ++--------------------------------+-------------------------------------+ +| ***Fig. 2.3i PICSA Rainfall | ***Fig. 2.3j Add a line showing the | +| graph dialogue*** | mean*** | +| | | +| ***Climatic \> PICSA \> | | +| Rainfall Graph*** | | ++================================+=====================================+ +| ![](media/image1059.png | ![](media/image10 | +| ){width="2.7957239720034996in" | 55.png){width="3.263653762029746in" | +| height="2.519543963254593in"} | height="2.31790135608049in"} | ++--------------------------------+-------------------------------------+ + +The resulting graph is shown in Fig 2.3k[^4]. ***Return to the +dialogue*** and put ***raindays*** as the y-variable to give the results +in Fig. 2.3l. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 2.3k Seasonal rainfall totals*** ***Fig. 2.3l Number of rain days*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image1058.png){width="3.017334864391951in" ![](media/image1064.png){width="2.871992563429571in" + height="1.5016458880139982in"} height="1.4293143044619423in"} + + ------------------------------------------------------------------------------------------------------------- + +These graphs indicate large inter-annual variability, but they don't +seem to show a trend. That is important because, if you can attribute +your farming problems to climate change, then there may be nothing you +can do. But coping with the variability is what farmers have always had +to do. + +With results such as shown in Fig. 2.3k and 2.3l you can start comparing +risks for different options in your farming and in other enterprises. +That sort of idea is discussed in PICSA workshops. + +Some may find the graph shown above to be convincing evidence that, with +rainfall, the pressing problem is variability, rather than change. We +stress that there IS climate change, and similar graphs with temperature +data show a trend. If the temperatures have changed, then the "system" +has changed, and it follows that other elements including rainfall will +be affected. Currently, however, with this sort of analysis, it is +usually not yet possible to determine which way the pattern of rainfall +may change. It is difficult to detect a small change when the +inter-annual variability is so large. And, even if a change is detected, +coping as well as possible with the variability must be a good thing to +do. + +Some people are not convinced by graphs such as are shown above. A +common statement is that the annual totals that might still be similar, +but the season is shorter, because planting is delayed, etc. We examine +this in more detail in Chapter 7. There the daily data are used to +define the start, end and length of the season as well as to examine dry +spells and extremes during the season. With the monthly total, the +examination can start by repeating the analysis above, but just for +November and December, when the season starts. + +***Return to the monthly data frame*** and ***filter*** to examine just +those months. So, make sure you are on the monthly data. ***Right +click*** as usual and choose ***Filter***, Fig. 2.3m + + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 2.3m Right-click for Filter*** ***Fig. 2.3n The filter dialogue*** + ------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------ + ![](media/image1104.png){width="2.8858759842519683in" ![](media/image1106.png){width="6.944444444444444e-3in" height="6.250328083989501e-2in"}![](media/image1106.png){width="6.944444444444444e-3in" + height="3.6586843832021in"} height="6.250328083989501e-2in"}![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTML1993cb5.PNG](media/image1107.png){width="3.2437456255468065in" + height="3.2540988626421696in"} + + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +In Fig. 2.3n, click to ***Define new Filter***. Complete the +sub-dialogue as shown in Fig. 2.3o. The steps are as follows: + +1) ***Choose the month*** column + +2) ***Select Nov and Dec*** as shown in Fig. 2.3p + +3) Click to ***Add Condition*** + +4) Press ***Return*** + + --------------------------------------------------------------------------------------------------------------- + ***Fig. 2.3o Defining the filter*** ***Fig. 2.3p The filtered data*** + ------------------------------------------------------- ------------------------------------------------------- + ![](media/image1135.png){width="3.9919324146981627in" ![](media/image1131.png){width="2.0555741469816273in" + height="2.857508748906387in"} height="2.975057961504812in"} + + --------------------------------------------------------------------------------------------------------------- + +Back on the main filter dialogue, just ***press Ok***. The data are now +as shown in Fig. 2.3p. The first column is in red and this shows a +filter is in operation. Also, at the bottom of the data frame, you see +there are now 176 rows (months) of data to analyse, out of the original +1062 rows. + +The other data have not gone away. If ever you wish to return, then just +press right-click as before, Fig. 2.3m and choose the last option to +***Remove Current Filter***. + +Now it is quick to repeat the steps above for this analysis. It is +simpler to recall the last dialogues as shown in Fig. 2.3q. + + --------------------------------------------------------------------------------------------------------------- + ***Fig. 2.3q Recall the last dialogues*** ***Fig. 2.3r The Column Statistics dialogue*** + ------------------------------------------------------- ------------------------------------------------------- + ![](media/image1112.png){width="2.6035640857392828in" ![](media/image1130.png){width="3.3151476377952758in" + height="2.746363735783027in"} height="3.457603893263342in"} + + --------------------------------------------------------------------------------------------------------------- + +The Column Statistics dialogue and sub-dialogue remain completed from +before, Fig. 2.3r. So just ***press Ok***. + +The new columns have added to the existing annual sheet. So, go straight +to the PICSA Rainfall Graphs dialogue again. ***Choose the new +variable*** for the November-December totals and press OK. The mean is +now 286mm for the 2 months. Repeat for the number of rain days to give +the graphs for the filtered data, see Fig. 2.3s and 2.3t. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 2.3s Rainfall totals Nov-Dec*** ***Fig. 2.3t Number of rain days Nov-Dec*** + ----------------------------------------------------- ------------------------------------------------------- + ![](media/image1136.png){width="2.96668416447944in" ![](media/image1120.png){width="3.0319685039370077in" + height="1.4764413823272091in"} height="1.5089304461942257in"} + + ------------------------------------------------------------------------------------------------------------- + +One feature of the data in Fig. 2.3s is that had the record started in +1981, then it might have given an impression of an upward trend in the +rainfall total. The longer record shows that this sort of conclusion +should be treated with considerable caution! + +These graphs start to satisfy the objective of examining the rainfall +data in Southern Zambia for trends. The results should be considered as +provisional if only because they are from just a single station and only +use the monthly data. We suggest they make a case for a more complete +analysis with multiple stations. + +## Comparing satellite and station data + +Our proposed objective is to report on the feasibility of using +satellite estimates of sunshine hours to supplement the information from +station data. The station network for sunshine or radiation is sparse in +many countries. Where it exists the records often have many missing +values. + +Estimates of daily hours of sunshine are also available from the +EUMETSAT CMSAF (Climate Monitoring Satellite Application Facility) for +about 5km square pixels. The data are available from 1983 and may be +downloaded free of charge. These data are in NetCDF files and examples +from a few locations have been downloaded and are the R-Instat library. + +Data from Dodoma, Tanzania was analysed in the second tutorial and the +same dataset is used here. In this exercise, these data are merged with +the corresponding satellite data and the two variables are then +compared. + +As in the tutorial use ***File \> Open From Library***. Choose the +***Instat collection***. Browse to the ***Climatic directory*** and +choose the ***Original Climatic Guide datasets***. Choose just the +***Dodoma*** sheet, Fig. 2.4a. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 2.4a Importing the Dodoma data*** ***Fig. 2.4b Add a Date column*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image1083.png){width="3.179580052493438in" ![](media/image1101.png){width="2.830372922134733in" + height="2.681396544181977in"} height="2.695404636920385in"} + + ------------------------------------------------------------------------------------------------------------- + +Once imported use ***Prepare \> Column: Date \> Make Date***, Fig. 2.4b +to construct a date column from the Year, Month, Day columns. Name the +resulting column as ***Date***, see Fig. 2.4b. + +Now use ***File \> Import and Tidy NetCDF File***, Fig. 2.4c. Choose the +option ***From Library*** and the file that starts ***CMSAF_SDU*** (for +sunshine duration). This file contains just the data from the nearest +pixel to the Dodoma station data. + + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + ***Fig. 2.4c Import the CMSAF satellite data*** ***Fig. 2.4d Change the name to Date*** + ---------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------- + ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTML2bdf480.PNG](media/image1088.png){width="2.9877384076990374in" ![](media/image1085.png){width="3.0399321959755032in" + height="1.7811504811898513in"} height="1.7735804899387577in"} + + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + +Once imported, ***right-click*** to change the name of the last column +from ***time_date*** to ***Date***, i.e. to the same name as in the +station data, Fig. 2.4d[^5]. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 2.4e The Merge dialogue*** ***Fig. 2.4f Sub-dialogue to add just SDU*** + ------------------------------------------------------ ------------------------------------------------------- + ![](media/image1111.png){width="3.111791338582677in" ![](media/image1093.png){width="3.2452384076990377in" + height="2.5076716972878392in"} height="2.2773534558180226in"} + + -------------------------------------------------------------------------------------------------------------- + +Use ***Prepare \> Column: Reshape \> Merge*** and complete the dialogue +as shown in Fig. 2.4e. It chooses to match on the Date columns, which is +what we want. That is why we gave them the same name in the two data +frames[^6]. + +The SDU column is all we need from the satellite data. So, press the +***Merge Options*** button in Fig. 2.4e. Use the ***Columns to +Include*** tab and complete as shown in Fig. 2.4f. Press ***Return*** +and then Ok. + +Now check, using ***Describe \> One Variable \> Summarise*** on the +merged data. Choose all the columns and press Ok. The results are in +Fig. 2.4g. + ++-------------------------------------+--------------------------------+ +| ***Fig. 2.4g Results from One | ***Fig. 2.4h Generate columns | +| Variable Summarise*** | from the Date*** | +| | | +| ***From Describe \> One Variable \> | ***Prepare \> Column: Date \> | +| Summarise*** | Make Date*** | ++=====================================+================================+ +| ![](media/image10 | ![](media/image1096.pn | +| 97.png){width="3.249407261592301in" | g){width="2.799818460192476in" | +| height="2.516402012248469in"} | height="3.594505686789151in"} | ++-------------------------------------+--------------------------------+ + +An encouraging sign in Fig. 2.4g is that summary statistics for the Sunh +(from the station) and SDU (from the satellite) are almost identical. +The maximum of 16 hours for SDU is a little concerning, because that is +probably longer than the maximum day length at Dodoma. + +Some "housekeeping" is useful, because the results in Fig. 2.4g also +show there are some missing values in the year and day of month +column[^7]. + +***Right-click*** and ***delete the first 3 columns***. Then generate +them again (without missing values) using ***Prepare \> Column: Date \> +Use Date*** dialogue, Fig. 2.4h. Then use Describe \> One Variable \> +Summarise again to confirm the new columns do not have missing values. + + --------------------------------------------------------------------------------------------------------------- + ***Fig. 2.4i Resulting merged data*** ***Fig. 2.4j Correlations dialogue*** + ------------------------------------------------------- ------------------------------------------------------- + ![](media/image1095.png){width="3.2849989063867016in" ![](media/image1108.png){width="2.7924835958005247in" + height="2.7602055993000874in"} height="2.8119094488188976in"} + + --------------------------------------------------------------------------------------------------------------- + +***Right-Click*** and choose ***Reorder Column(s)***. The resulting data +should be like that shown in Fig. 2.4i. + +We are now ready to compare the satellite data (SDU) with the station +values (sunh). + + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + ***Fig. 2.4k Correlations sub-dialogue*** ***Fig. 2.4l Results*** + ---------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------- + ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTML3dae776.PNG](media/image1162.png){width="2.9056058617672793in" ![](media/image1186.png){width="3.0944444444444446in" + height="3.124498031496063in"} height="3.0944444444444446in"} + + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + +Use ***Describe \> Multivariate \> Correlations***. and enter SDU and +sunh, Fig. 2.4j. Click on ***Options*** and choose ***Scatter Matrix***. +Fig. 2.4k. The results are in Fig. 2.4l. + +The results in Fig. 2.4l look promising. The shape of the satellite +(bottom right) and station data (top left) look similar and the +correlation is a reasonably satisfactory 0.87. + +What is next? These data (both sunh and SDU) are time series. Time +series have seasonality, and this should usually be reflected in the +analysis. + +So, return to the ***correlations dialogue*** and sub-dialogue, Fig. +2.4k and ***add the month factor***. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 2.4m Including months in the analysis*** ***Fig. 2.4n The Histogram dialogue*** + ------------------------------------------------------- ------------------------------------------------------ + ![](media/image1164.png){width="2.9305555555555554in" ![](media/image1177.png){width="3.064351487314086in" + height="2.9305555555555554in"} height="2.493587051618548in"} + + -------------------------------------------------------------------------------------------------------------- + +The results in Fig. 2.4m show that the shape of both variables depends +on the month. In particular (as expected) there is often less sun in the +rainy season (November to April) and the correlations are then higher. +The display, in Fig. 2.4m, is also confusing as there are now too many +groups to see clearly what is happening. + +It is time to split up the components of the results in Fig. 2.4m to +compare the satellite and station data in more detail. + +Use ***Describe \> Specific \> Histogram***, Fig. 2.4n. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 2.4o A set of density graphs*** ***Fig. 2.4p Include facets in the graph*** + ------------------------------------------------------- ------------------------------------------------------ + ![](media/image1176.png){width="2.8561548556430445in" ![](media/image1178.png){width="3.222419072615923in" + height="2.821793525809274in"} height="2.8333595800524933in"} + + -------------------------------------------------------------------------------------------------------------- + +Change the button at the top of Fig. 2.4o to Density and click on Plot +Options. + +In the sub-dialogue, Fig. 2.4p tick the checkbox to include facets and +include the month factor. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 2.4q Multiple variables*** ***Fig. 2.4r Resulting graphs*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image1169.png){width="1.83832895888014in" ![](media/image1182.png){width="4.200391513560805in" + height="1.875511811023622in"} height="2.0904232283464568in"} + + ------------------------------------------------------------------------------------------------------------ + +Return to the main dialogue, and click to include multiple variables, +Fig. 2.4q. Include Sunh and SDU and press Ok. The graphs from Fig. 2.4m +are now overlaid, so they can easily be compared, and displayed +separately for each month. Fig. 2.4r shows the pattern is similar in +each month. We also see the sharp peaks in the dry months, particularly +from June to October, when most days have about 10 hours of sunshine per +day. + +Fig. 2.4r shows the pattern of sunshine is similar from the satellite +and station data. It does not, however, show whether a day in any month +with more sunshine at the station (sunh), also had more sunshine from +the satellite data (SDU). For this, we look at the scatterplot from Fig. +2.4m again broken into the monthly facets. + +Use ***Describe \> Specific \> Scatterplot*** and complete the dialogue +as shown in Fig. 2.4s. Press on ***Plot Options*** and include the +months as facets, Fig. 2.4t, just as earlier in Fig. 2.4p. + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 2.4s Scatterplot dialogue*** ***Fig. 2.4t Plotting sub-dialogue*** + --------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------ + ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTML6ce7e6e.PNG](media/image1181.png){width="3.050495406824147in" ![](media/image1187.png){width="2.944646762904637in" + height="2.892821522309711in"} height="2.4655577427821522in"} + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +The resulting set of graphs is shown in Fig. 2.4u. + + ----------------------------------------------------------------------- + ***Fig. 2.4u Scatterplots for each month*** + ----------------------------------------------------------------------- + ![](media/image1163.png){width="6.131447944006999in" + height="3.0514577865266843in"} + + ----------------------------------------------------------------------- + +Our initial objective was to examine whether the satellite estimates may +be useful in Tanzania to supplement the station data. The results are +promising, but this just the start. There are many possible next steps, +including an examination of the occasions when the two variables differ +substantially. The analysis should also be extended to multiple +stations. We also need more numerical summaries to measure how close the +two variables are. Chapter 10 considers this subject in more detail. + +## In conclusion + +[To be added]{.mark} \ No newline at end of file diff --git a/Chapter_3_Using_RInstat_effectively.qmd b/Chapter_3_Using_RInstat_effectively.qmd new file mode 100644 index 0000000..d272285 --- /dev/null +++ b/Chapter_3_Using_RInstat_effectively.qmd @@ -0,0 +1,673 @@ +# Using R-Instat effectively +## Introduction + +R-Instat is simply a front end to the R programming language, Wikipedia +(2019). R started in the 1990s and consists of a relatively small core, +that is maintained by the R development core team. There are then also +over 12 thousand packages that extend R's capabilities. About 200 of +these packages are included (behind the scenes) in R-Instat. + +The front end in R-Instat is written in Visual Basic.Net. This front end +provides the menus and dialogues that are used to run R-Instat. The +default view of R-Instat is shown in Fig. 3.1a. It has 2 windows, one +showing part of the data and the other is for the results or output. + + --------------------------------------------------------------------------------------------------------------------- + ***Fig. 3.1a*** + --------------------------------------------------------------------------------------------------------------------- + ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTMLc875082.PNG](media/image1134.png){width="6.158751093613298in" + height="3.271836176727909in"} + + --------------------------------------------------------------------------------------------------------------------- + +R-Instat looks a little like a spreadsheet package, but there are +differences. One, shown in Fig. 3.1, is that the results are in a +separate window, rather than on successive sheets. Also, the data shown +in Fig. 3.1a are stored in an R data frame (behind the scenes) and what +you see is often only a small part of these data. + +Current spreadsheets have a limit of about 1million rows. This not a +limit in R, (or therefore in R-Instat) where your machine's memory +imposes a limit that is usually larger. However, the effort of +continually copying all the data to the front end would slow R-Instat +and hence (by default) we just show the first 1000 rows of data and the +first 30 columns[^8]. + +One way to see all the data in the current data frame[^9] is shown in +Fig. 3.1b. Just ***right-click*** on the tab at the bottom and choose +***View Data Frame,*** Fig. 3.1c. + + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + ***Fig. 3.1b*** ***Fig. 3.1c*** + ------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- + ![](media/image1149.png){width="2.1374267279090113in" ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTMLc9d2c55.PNG](media/image1146.png){width="3.9064785651793525in" + height="2.0438856080489938in"} height="2.8405096237970255in"} + + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + +The same result could alternatively be done through ***Prepare \> Data +Frame \> View data*** as shown in Fig. 3.1d. This gives a dialogue. From +here, as shown in Fig. 3.1e, you can choose any of the open Data Frames. +Then click Ok to again show the data in R, Fig. 3.1c. + + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + ***Fig. 3.1d*** ***Fig. 3.1e*** + ------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- + ![](media/image1148.png){width="2.9987478127734035in" ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTMLc9b3538.PNG](media/image1160.png){width="2.9707206911636046in" + height="2.4772265966754157in"} height="2.9802416885389325in"} + + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + +The menu and dialogue in Fig. 3.1d and 3.1e are all part of the +"front-end" of R-Instat. When you click Ok, R-Instat constructs an R +command and sends it to R. The results are then returned to the +front-end. + +The output (results) window shows the R command that has been sent, as +well as the output, if any. ***Right-click*** in the ***Output +Window***, Fig. 3.1f, if you wish to turn this off for future commands. + +In the data window ***right-click in the name field*** to provide some +common options, Fig. 3.1g. Alternatively, each of these options is +available from the ***Prepare Menu***. + + --------------------------------------------------------------------------------------------------------------- + ***Fig. 3.1f*** ***Fig. 3.1g*** + ------------------------------------------------------- ------------------------------------------------------- + ![](media/image1174.png){width="3.0241666666666664in" ![](media/image1151.png){width="2.9767508748906386in" + height="2.0632163167104114in"} height="2.69in"} + + --------------------------------------------------------------------------------------------------------------- + +The data and output windows are the most important in R-Instat. There +are four more windows. The use of the two metadata windows is described +in Section 3.2 and the Log plus Script Windows are described in Section +3.3. + +## Column and data frame metadata + +The R data frames used through R-Instat contain data together with some +metadata. The name of each variable is part of the metadata as is a +label for each variable. R-Instat has data in a set of +***data-sheets***. An R-Instat ***data sheet*** is an R data frame with +added metadata. The added information includes information on key +columns together with links to other sheets. This helps R-Instat keep +track of multiple data frames that are connected, such as the monthly +summaries calculated from the daily data. A data sheet also keeps +information on objects that have been produced and saved, such as graphs +and models. + + ----------------------------------------------------------------------- + ***Fig. 3.2aThe toolbar and View menu*** + ----------------------------------------------------------------------- + ![](media/image1179.png){width="5.884278215223097in" + height="2.321505905511811in"} + + ----------------------------------------------------------------------- + +Use the ![](media/image1147.png){width="0.32342629046369203in" +height="0.29291447944007in"} icon on the toolbar, (Fig. 3.2a) or ***View +\> Column Metadata*** to see the metadata currently associated with each +open data frame. An example is in the top left in Fig. 3.2b. + + --------------------------------------------------------------------------------------------------------------------- + ***Fig. 3.2b*** + --------------------------------------------------------------------------------------------------------------------- + ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTML5265ebf.PNG](media/image1152.png){width="6.193180227471566in" + height="3.7589031058617675in"} + + --------------------------------------------------------------------------------------------------------------------- + +As with Excel you can open multiple data frames when using R-Instat. The +column metadata shown in Fig. 3.2b has tabs at the bottom, just like the +data (also shown in Fig. 3.2b), so you can check on the metadata for any +data frame. An R-Instat ***data book*** is the set of open ***data +sheets.*** + +Using ***View \> Data Frame Metadata***, Fig. 3.2b (top right) opens +another window in which each row shows the metadata on a data sheet. The +information in Fig. 3.2b includes the name of the sheet, an optional +descriptive label, and the number of columns currently in the sheet. + +If you use ***File \> Save As \> File Data As,*** Fig. 3.2c, at any +stage, then R-Instat saves the whole data book, i.e. all the data +frames, together with all the associated meta data, into a single file. +This file has the extension RDS and this data book can later be +re-opened in R-Instat[^10]. Good practice is usually to work on a single +topic in each data book, i.e. the different data sheets are usually +interconnected. As with Excel, there is nothing stopping you having all +sorts of unconnected data sheets in the same book, but this usually +complicates your work. + +Some tasks are made simpler through the Column Metadata window, Fig. +3.2d. You can double-click in the name field of any column to change the +name. You can add or change the label in the same way, Fig. 3.2. For +numeric columns R chooses the number of significant figures to display. +That is also shown in the metadata and can be changed[^11]. In addition, +as shown in Fig. 3.2c, right clicking on the left-hand side gives the +same popup menu of common tasks as is available from the data view. + + --------------------------------------------------------------------------------------------------------------- + ***Fig. 3.2c*** ***Fig. 3.2d*** + ------------------------------------------------------- ------------------------------------------------------- + ![](media/image1137.png){width="2.7479910323709538in" ![](media/image1226.png){width="3.1687871828521437in" + height="2.1073818897637797in"} height="3.7432458442694663in"} + + --------------------------------------------------------------------------------------------------------------- + +Each Window button in the toolbar, Fig. 3.2e and the Options in the View +Menu, Fig. 3.2f act like an on-off switch. So now use the curly arrow to +reset to the default of the data and output windows side by side. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 3.2e*** ***Fig. 3.2f*** + ------------------------------------------------------- ------------------------------------------------------ + ![](media/image1225.png){width="2.7795439632545933in" ![](media/image1219.png){width="2.180667104111986in" + height="2.5554516622922137in"} height="2.7015277777777778in"} + + -------------------------------------------------------------------------------------------------------------- + +In this section we have added more of the 6 Windows available in +R-Instat. The opposite is also useful. Once in the default layout, +switching off the Data Window gives just the Output (Results) Window. Or +switch off the Output Window to look at more columns of data. However, +in that case remember to switch on the Output window to see any further +results. + +## Graphs + +Base R has a comprehensive graphics system, and this is used by many R +packages. The grammar of graphics, Wilkinson (2005) is an influential +book and has led to the exciting ggplot package (gg for grammar of +graphics) and graphics system in R. One challenge we had in constructing +R-Instat was to make the ggplot system easy to use. Almost all the +graphs in this guide use this system. One example that does not, is the +adjusted boxplot shown in Fig. 3.5i. + +In this section we describe key concepts of the ggplot system and of our +implementation. + +One concept is "facets". Fig. 2.4u is an example of a facetted graph, +where there is one facet for each month. The default is for the x and y +scales to be the same for each graph[^12], so the months can be compared +easily. Also, you are not diverted by lots of axis scales for each +month. + +Some multiple graphs show different information in each pane, as was +seen in Fig. 2.4m. + +Within a graph you can have multiple layers. So, there are 2 layers in +Fig. 2.4r, one for the station and the other for the satellite data. In +Chapter 10 one layer in a map shows the districts in a country and +another shows the position of each climatic station. + +In each layer there is a geometric shape, or geom. A geom may be a +point, a line, a boxplot etc. + +In R-Instat the common geoms have their own dialogue as shown in Fig. +3.3a. We choose a boxplot in Fig. 3.3b for Tmax at Dodoma by month. + + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 3.3a*** ***Fig. 3.3b*** + ------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------- + ![](media/image1224.png){width="2.7233081802274715in" ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTMLa085dd4.PNG](media/image1222.png){width="2.960900043744532in" + height="2.9685115923009624in"} height="3.381676509186352in"} + + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Every graphics dialogue includes the option to save the resulting graph, +by giving it a name. In Fig. 3.3b we called the graph Tmax_boxplot. This +ggplot graph is now saved as part of the metadata associated with the +Dodoma data frame. + +If you don't give a name, then the default name of last_graph is given +automatically. But, of course, that name is overwritten when you do the +next graph. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 3.3c*** ***Fig. 3.3d*** + ------------------------------------------------------ ------------------------------------------------------- + ![](media/image1230.png){width="3.014453193350831in" ![](media/image1239.png){width="3.0348807961504813in" + height="2.811914916885389in"} height="2.83132217847769in"} + + -------------------------------------------------------------------------------------------------------------- + +Double-click in the graph, Fig, 3.3d to turn it blue. This also produces +the popup menu and the graph can be copied to the clipboard. + +An alternative is shown in Fig. 3.3e. ***Click*** on graph icon +![](media/image1236.png){width="0.315670384951881in" +height="0.25253608923884513in"} in the toolbar to show the last graph in +R's viewer. This only shows a single graph, but the Window can be +resized and, as shown in Fig. 3.3e, there are now many options to save +the graph, or to copy it to the clipboard. + +This toolbar option is only for the most recent graph. The ***Describe +\> View Graph*** dialogue, Fig. 3.3f provides the option to view any of +the saved graphs in this way[^13]. + + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 3.3e The R graph viewer*** ***Fig. 3.3f Options for viewing graphs*** + --------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- + ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTMLa31a91e.PNG](media/image1213.png){width="2.933834208223972in" ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTMLa3be5f8.PNG](media/image1235.png){width="3.0407852143482064in" + height="3.179398512685914in"} height="2.081327646544182in"} + + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +We use the dialogue in Fig. 3.3f to show a third way to examine graphs; +one that makes use of the excellent plotly package. This is called the +Interactive Viewer in Fig. 3.3f. This opens the graph in a browser +(though you don't need to be online) as shown in Fig. 3.3g. + + ----------------------------------------------------------------------- + ***Fig.3.3g The (plotly) interactive viewer for ggplot graphs*** + ----------------------------------------------------------------------- + ![](media/image1218.png){width="6.0783005249343836in" + height="3.5125656167979002in"} + + ----------------------------------------------------------------------- + +In Fig. 3.3g the data for October are shown. This demonstrates that the +boxplot shows the median (30.6°C), the quartiles, etc. In addition, you +can hover over any point to find its value and zoom if a part of the +plot is of special interest. This is a system worth exploring, so we add +a second example. This also shows the value of facets in a graph. + +Use ***Describe \> Specific \> Scatterplot*** to examine Tmax as the Y +variable against Tmin as the X, Fig. 3.3h. + ++------------------------------------+---------------------------------+ +| ***Fig. 3.3h Initial use of | ***Fig. 3.3i Resulting graph*** | +| scatterplot (geom point)*** | | +| | | +| ***Describe \> Specific \> Scatter | | +| Plot*** | | ++====================================+=================================+ +| ![](media/image1192 | ![](media/image1202.p | +| .png){width="3.1297145669291337in" | ng){width="2.701648075240595in" | +| height="2.9541699475065615in"} | height="2.9195220909886266in"} | ++------------------------------------+---------------------------------+ + +The resulting graph is relatively uninformative, except to demonstrate +there is a lot of data. And you don't need a special graphics system for +a single graph like this. It does show there are a few outlying points +that require closer investigation. + +More concerning, as a principle, is that these are time series data. One +property of time series is the seasonality and we could allow for this +by looking separately at each month. + +Return to the dialogue in Fig. 3.3h. Click on ***Plot Options*** and add +the ***month*** factor as a facet, Fig. 3.3j. Press Return on the +sub-dialogue. Then make the ***By Variable*** also the ***month*** +factor and the L***abel Variable*** the ***Date***. Click OK to produce +the result shown in Fig. 3.3k. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 3.3j Plot options sub-dialogue*** ***Fig. 3.3kTmax v Tmin by month*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image1201.png){width="2.646576990376203in" ![](media/image1209.png){width="3.072049431321085in" + height="2.242176290463692in"} height="3.263601268591426in"} + + ------------------------------------------------------------------------------------------------------------- + +One feature of the graph in Fig. 3.3k is that there is the same x and y +scales for each graph. This is appropriate here and has then the big +advantage that the graph is not cluttered with many axes, so the data +are more easily compared. + +As with the overall graph in Fig 3.3i, one aspect to be investigated, +from Fig. 3.3k, is the outliers. This is easily done via the interactive +viewer. So, return to ***Describe \> View Graph*** and choose the last +graph, possibly called scatter_Tmax.Tmin from Fig. 3.3h (or just +last_graph if no name was given). + + ----------------------------------------------------------------------- + ***Fig 3.3l Interactive view*** + ----------------------------------------------------------------------- + ![](media/image1210.png){width="6.161750874890639in" + height="2.648064304461942in"} + + ----------------------------------------------------------------------- + +The new feature in Fig. 3.3l is that you can now hover over any point +and see the values in more detail. The example shown in Fig. 3.3l is +that on 9 October 1989 both Tmax and Tmin were 15.6°C. Worth checking! +From the graph 15.6°C is very sensible for Tmin but not for Tmax[^14]. + +Other dialogues also provide useful graphs. As an example, use +***Describe \> Multivariate \> Correlations***, Fig. 3.3m as in Chapter +2. + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 3.3m*** ***Fig. 3.3n*** + ------------------------------------------------------ --------------------------------------------------------------------------------------------------------------------- + ![](media/image1216.png){width="2.706126421697288in" ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTMLaa5e48d.PNG](media/image1200.png){width="3.306842738407699in" + height="1.9848436132983378in"} height="3.208082895888014in"} + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Complete the dialogue as shown in Fig. 3.3n. Click on the Options button +and complete the sub-dialogue as shown in Fig. 3.3o. The resulting +display is in Fig. 3.3p. + +For the data this indicates that both Tmax and Tmin have roughly normal +distributions each month. The correlations are quite low. As with the +other graphs more detail can be found from the plotly interactive +display. + + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 3.3o Correlations sub-dialogue*** ***Fig. 3.3p Distributions, scatterplot and + correlations*** + ---------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------ + ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTMLaa7a41f.PNG](media/image1184.png){width="2.6294061679790026in" ![](media/image1189.png){width="3.326188757655293in" + height="2.8274879702537183in"} height="3.118300524934383in"} + + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +This is an example of a graphical display where the different panes show +different types of display. Indeed, one pane is numeric. We used to +think that a display in a graph was distinct from displaying tables of +results. But Fig. 3.3p is like a 2 by 2 table, one cell of which +contains numbers, while the others contain graphs. + +Finish this section with a little "housekeeping". Several objects +(graphs) have been produced and perhaps are now no longer needed. Use +***Prepare \> R Objects \> Delete***, Fig. 3.3q. + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 3.3q Menu to manage R objects*** ***Fig. 3.3r Delete objects no longer needed*** + ------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------- + ![](media/image1197.png){width="2.2876793525809274in" ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTMLb0219a7.PNG](media/image1203.png){width="3.70708552055993in" + height="2.877690288713911in"} height="2.5941666666666667in"} + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +We choose to delete all the objects, Fig. 3.3r. + +## The log and script windows + +The final two Windows in R-Instat are for the Log Window and the Script +Window. + +The R programming language is very powerful, but with a relatively steep +learning curve. R-Instat gives easy access to a subset of R. However, a +click-and-point system always has limitations. We consider here some +options if these limitations are ever a constraint. + +The log file keeps a record of all the R-commands that have been issued +during a session of R-Instat. Use the toolbar option +![](media/image1276.png){width="0.288507217847769in" +height="0.2764862204724409in"}, Fig. 3.2e, or ***View \> Log Window*** +to open the log file. + +In the Log file, the ***right-click menu*** gives various options, Fig. +3.4a, including saving the log file. That action is the same as using +***File \> Save As \> Save Log As***, shown earlier in Fig. 3.2c. + + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 3.4a The Log Window*** ***Fig. 3.4b The Filter Dialogue*** + ------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------- + ![](media/image1293.png){width="3.025767716535433in" ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTML6b171e8.PNG](media/image1280.png){width="2.9556944444444446in" + height="1.6994028871391076in"} height="2.965126859142607in"} + + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +The Log file keeps an exact record of what you have done so far in your +R-Instat work. That is useful. If, later, you ever had to justify how +you produced results, then this is your record of what was done. + +If you need to ask for help, then we will usually want to relate +anything extra to the best you have been able to do so far. A skilled R +user can see exactly what was done through the log file. + +If R is used directly, then we suggest it be used through RStudio. The +log file can be run in RStudio and should produce the same results. +Hence, an analysis could start in R-Instat and then continue in RStudio +if further results are needed that cannot be done through R-Instat. + +Sometimes a dialogue can almost do an analysis, but not quite. If small +changes are needed to a command then they can be done, in R-Instat, with +the Script Window + +A guide called "Reading, Tweaking and Using R Commands", +[reference]{.mark} allows users to adapt the commands behind any +dialogue. This situation is illustrated with an example. + +We show how to use adjusted boxplots (Hubert & Vandervieren, 2008) for +each month with the rainfall data from Dodoma. This is first illustrated +with the ordinary boxplots that are available (and very useful). +However, for the rainfall we would like to have adjusted boxplots +because of the skewness of the data. They are available in the R +package, called ***robustbase*** [reference]{.mark} that is already used +by R-Instat. But adjusted boxplots are not yet available -- at least +when this guide was first written. + +First the data are filtered for just the rain days. Then the boxplots +are produced. + +With the Dodoma data, as used in Chapter 2, use the ***right-click*** +menu (or ***Prepare \> Data Frame \> Filter***) to give the Filter +dialogue, Fig. 3.4b. Note, in Fig. 3.4b, that the Ok button is not yet +enabled. There is also a Script button on the bottom right of the +dialogue, and this is also disabled. Every dialogue has the same set of +five buttons at the bottom. Hence, every dialogue has a ***Script*** +button and here we show how it can be used. In Fig. 3.4b, press on the +***Define New Filter*** button to open the Filter sub-dialogue. In the +sub-dialogue, Fig. 3.4c. + + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 3.4c The filter sub-dialogue*** ***Fig. 3.4d The filter dialogue completed*** + ------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------- + ![](media/image1305.png){width="3.1675339020122486in" ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTML6c2cda1.PNG](media/image1283.png){width="2.766781496062992in" + height="2.7031200787401577in"} height="2.775612423447069in"} + + ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +In the sub-dialogue, choose the ***Rain*** variable and make the +condition as ***Rain \> 0.85***. Then click the ***Add Condition*** +button, then press the ***Return*** button. A filter has now been +selected and hence the Ok button is now enabled. We don't need the To +Script button at this stage, but note that it has also been enabled. + +Now use the ***Describe \> Specific \> Boxplot*** dialogue and complete +it as shown in Fig. 3.4e. + + ----------------------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 3.4e The boxplot dialogue*** ***Fig. 3.4f Boxplots with width + proportional to the number of rain days*** + ---------------------------------------------------------------------------------------------------------------------- ------------------------------------------ + ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTML6cfc546.PNG](media/image1273.png){width="2.8051170166229222in" ![](media/image1330.png){width="3.125in" + height="3.203753280839895in"} height="3.125in"} + + ----------------------------------------------------------------------------------------------------------------------------------------------------------------- + +The results are in Fig. 3.4f. They are useful, and pleasantly colourful, +but the number of outliers shows that the ordinary boxplot is not ideal +for data that are as skew as daily rainfall. + +So, return to the boxplot dialogue in Fig. 3.4e and press the ***To +Script*** button. The commands are as shown in Fig. 3.4g + ++-----------------------------------------------------------------------+ +| ***Fig. 3.4g Script window for the boxplot commands*** | ++=======================================================================+ +| 1. Dodoma \<- data_book\$get_data_frame(data_name=\"Dodoma_merge\") | +| | +| 2. last_graph \<- ggplot2::ggplot(data=Dodoma_merge, | +| mapping=ggplot2::aes(y=Rain, x=month)) + | +| ggplot2::geom_boxplot(varwidth=TRUE, outlier.colour=\"red\") + | +| theme_grey() | +| | +| 3. data_book\$add_graph(graph_name=\"last_graph\", graph=last_graph, | +| data_name=\"Dodoma\") | +| | +| 4. data_book\$get_graphs(data_name=\"Dodoma\", | +| graph_name=\"last_graph\") | +| | +| 5. rm(list=c(\"last_graph\", \"Dodoma\")) | ++-----------------------------------------------------------------------+ + +The second line -- that starts last_graph is the only line that needs to +change. The equivalent command, from the robustbase package, is as +follows: + +last_graph \<- robustbase::adjbox(Rain \~ month, data =Dodoma_merge, +col=\"red\", varwidth=TRUE). + + ----------------------------------------------------------------------- + ***Fig. 3.4h*** + ----------------------------------------------------------------------- + ![](media/image1304.png){width="6.059426946631671in" + height="2.582607174103237in"} + + ----------------------------------------------------------------------- + +So paste or type that command into the Script Window, which should then +look as shown in Fig. 3.4h. To run the commands from the Script Window +click on the Run All button at the top of Fig. 3.4h. + +If there is an error, then correct the typing into Fig. 3.4h. Now, to be +cautious, right-click, see Fig. 3.4h and this permits you to run the +commands one line at a time. It is highly likely that line 2 is the +problem so first go to line 1 and then run line 1, using Run Current +Line, or pressing \ + \. Do the same for line 2. If that +works then continue with the rest of the lines and the graph, shown in +Fig. 3.4i should appear. + + ----------------------------------------------------------------------- + ***Fig. 3.4i Skew boxplot*** + ----------------------------------------------------------------------- + ![](media/image1323.png){width="3.0629844706911635in" + height="2.541402012248469in"} + + ----------------------------------------------------------------------- + +This example has used the Script Window for a new command. More often +the script window is for more modest changes, where an option is added +or changed for an existing command. + +If the command above were in a new package, that was not currently +loaded into R-Instat, then the code in line 2 would not be recognised. +In that case you would have add an extra line at the top of the script +window to load the package, e.g. ***install.packages(\"robustbase\").*** +This assumes you are connected to the internet. It also only need be +done once. This package is then installed in R and can be used on +subsequent occasions in R-Instat without that line being added. + +## Don't let the computer laugh at you! + +R-Instat is designed to facilitate the analysis of climatic data. This +may be through using the general facilities (File, Prepare, Describe and +Model menus), or through using the special climatic menu that is +introduced in Chapter 4. + +R-Instat is simply a click and point front-end to the R programming +language. It is particularly for users who do not wish to spend time +mastering the R language. There is also a special guide for those who +would wish to start with R-Instat and then consider migrating to using R +"properly". + +All software has limitations and it is important to recognise when using +R-Instat, or perhaps your favourite spreadsheet package is not the +correct solution for your work. We give an example below. Otherwise you +may fall into the "copy-paste" trap. This is where you do a very routine +job repeatedly, e.g. copy \> paste, copy \> paste, .... Humans are not +good at boring and repetitive jobs and they make mistakes. + +Computers, on the other hand, can be programmed to handle repetitive +tasks brilliantly and very quickly. That's why, if the computer watches +you doing copy \>paste, copy \> paste etc, while it has little to do -- +then it is probably laughing at you! + +Here is an example. It is of a type we discuss in more detail in Chapter +4. Here it is mainly designed to help you to recognise when your +software, and perhaps your skill set is insufficient for the task in +hand. + +Climatic data from Garoua, Cameroon have been provided by the Cameroon +Met Service and are now available in the R-Instat library, Fig. 3.5a. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 3.5a Garoua data in R-Instat*** ***Fig. 3.5b Maximum temperature data*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image1318.png){width="2.741365923009624in" ![](media/image1309.png){width="3.353319116360455in" + height="2.056022528433946in"} height="2.047866360454943in"} + + ------------------------------------------------------------------------------------------------------------- + +Fig. 3.5a shows the "standard" layout of the data for R-Instat climatic +analyses. Spreadsheet packages like Excel, recognise this as a +"list"[^15]. Each column in Fig. 3.5a is of a single "type" -- most are +numeric. The different elements each have their own column. In Fig. 3.5a +each row has the data for a single day. In this file there 21915 rows +(days) of data. + +The starting point for these data looked very different. Some of the +initial data for Tmax are shown in Fig. 3.5b. In Fig. 3.5b each day of +the month has its own column, so there are 31 columns in the sheet. We +find this to be a common "shape". One additional problem in Fig. 3.5b is +that each sheet has only about 3 years of data, so they are split across +16 different sheets. + +The rainfall is in a different "shape" to the temperatures as shown in +Fig. 3.5c and Fig. 3.5d. + + --------------------------------------------------------------------------------------------------------------- + ***Fig. 3.5c Rainfall data for Garoua*** ***Fig. 3.5d More of the year of rainfall data*** + ------------------------------------------------------- ------------------------------------------------------- + ![](media/image1296.png){width="3.0532458442694663in" ![](media/image1302.png){width="3.1601771653543307in" + height="1.6980621172353456in"} height="1.7202580927384077in"} + + --------------------------------------------------------------------------------------------------------------- + +For the rainfall, each year is in a separate sheet. At the bottom of +each sheet there are some monthly and annual totals. Hence the rainfall +is a mixture of data and summary values. + +There are three obvious ways you can proceed to change the shape of the +data from Fig. 3.5b, c and d into the shape shown in Fig. 3.5a. The +first is to use Excel (or another spreadsheet), the second is to use +R-Instat and the third is to write a program, using R commands -- or +another language, such as Python. + +What might you do with a spreadsheet? Here is a possible way: + +1) It would be good to have all the years of data in a single sheet. + Start with the first year, which is 1999 for the rainfall. Copy just + the data -- not the monthly summaries -- into a new sheet. + +2) Now go to the next year, i.e. 2000 and copy the data below those of + 1999. + +3) Now go to 2001 and copy and paste again. The computer is starting to + laugh, and you have a long way to go. + +4) You persevere and have all the years in your new sheet. + +5) Now you want to paste the February data below January, etc. This is + 11 more goes at copy \> paste. + +6) You are bored, so you look briefly at the temperature data in Fig. + 3.5d. You realise, in horror, that you will have 31 copy \> paste to + do there, with one column currently for each month. + +7) You give up, realising there must be a better way. That's partly + because you realise the computer is laughing hysterically! + +We took the third option and wrote a program in R. In Chapter 4 we +examine whether using R-Instat would be possible (without the computer +laughing at you too much). + +However, there is a general message. R-Instat is merely executing R +commands through a click-and-point environment. This approach will +always be limited, for some tasks, compared to using the command +language directly. So, should you find that an analysis requires a lot +of repetition from you, then check whether it is time to use R directly. + +When you start using R-Instat it does not mean you need to abandon using +a spreadsheet. Similarly using R directly does not necessarily mean +abandoning R-Instat. When you use R-Instat it automatically generates a +log file with the R commands. This file runs in RStudio. So, you could +then continue using R directly (through RStudio) for those tasks where +R-Instat has been found to be limiting. \ No newline at end of file diff --git a/Chapter_4_Getting_the_data_into_shape.qmd b/Chapter_4_Getting_the_data_into_shape.qmd new file mode 100644 index 0000000..3ef4ac7 --- /dev/null +++ b/Chapter_4_Getting_the_data_into_shape.qmd @@ -0,0 +1,915 @@ +# Getting the data into shape +## Introduction + +R-Instat provides a menu-driven front-end to R. It is designed to make +it easy to analyse any sort of data, including climatic data. The +climatic menu is designed to make many analyses of the historical +climatic records even easier. Most of this guide uses the various menus +and dialogues in this special climatic menu. + +If your analysis is not practical using the special climatic menu it may +still be possible using the general menus in R-Instat. After all many +climatic analyses are done with other statistical software and they do +not have a special climatic menu. + +"Click and point" systems all have limitations, or they would lose the +simplicity of use that is a major driving force in their production. If +your analyses cannot be done using R-Instat, then one strategy would be +to use R itself. The "tweaking" guide shows how R-Instat can be +extended, but you may also find that using RStudio is not as hard as you +feared. + +This Chapter introduce the climatic menu in R-Instat and shows how +climatic data is arranged for analysis. + +## Climatic data that is "ready" + +In Chapters 2 and 3 we examined data from Moorings, Zambia and Dodoma in +Tanzania that were both in the right "shape" for an immediate analysis. +Here we illustrate with more examples that are "ready". In the following +sections of this chapter we show how the Climatic menu, or the general +Prepare menu can help to organise data into the same shape. + +If your data are already in the same shape as the examples below then +much of the content from Section 4.4 can be omitted. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 4.2a Importing a csv file*** ***Fig. 4.2b Data for 2 stations from Guinea*** + ------------------------------------------------------- ------------------------------------------------------ + ![](media/image1303.png){width="2.8748140857392825in" ![](media/image1299.png){width="3.189455380577428in" + height="2.917489063867017in"} height="2.27875in"} + + -------------------------------------------------------------------------------------------------------------- + +Go to ***File \> Open from Library***. Choose ***Load From Instat +Collection***, then ***Browse***. Go to the ***Climatic directory*** and +then ***Guinea***. The data we require are in 2 forms, both an R file +with the RDS extension and a csv file that can be read into Excel. + +***Use*** the file ***Guinea2.csv***. + +The new feature, compared to the data in Chapter 2, is that there are +multiple stations. Right-click in the first Column, Fig. 4.2c, and +choose the Levels/Labels dialogue. The result, in Fig 4.2d shows there +are 2 stations, Kankan with about 24 thousand rows (days) and Koundara +with about 16 thousand days. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 4.2c Choose Levels/Labels*** ***Fig. 4.2d The Levels/Labels dialogue confirms 2 + stations*** + ------------------------------------------------------- ------------------------------------------------------ + ![](media/image1306.png){width="2.1535017497812774in" ![](media/image1275.png){width="3.772503280839895in" + height="3.25292104111986in"} height="2.585647419072616in"} + + -------------------------------------------------------------------------------------------------------------- + +A second data file is from Western Kenya. Go back to the ***File \> Open +From Library*** dialogue. ***Browse*** again to the ***climatic*** +directory. Choose ***Kenya*** and then the file ***WesternKenya.RDS***. + +This opens 3 data frames in R-Instat, 2 of which are shown in Fig. 4.2e +and Fig. 4.2f. + + --------------------------------------------------------------------------------------------------------------- + ***Fig. 4.2e Name and location of each station*** ***Fig. 4.2f Rainfall data*** + ------------------------------------------------------- ------------------------------------------------------- + ![](media/image1281.png){width="3.9066469816272966in" ![](media/image1271.png){width="2.2107206911636044in" + height="2.779728783902012in"} height="2.814510061242345in"} + + --------------------------------------------------------------------------------------------------------------- + +Fig. 4.2e gives details of each station. The locations are included, +which will be useful, in Chapter xxx when we draw maps. Fig. 4.2f gives +the rainfall data for just over 50 stations. There are over 600 thousand +rows (days) of data in total. + +The third example is again from the ***Instat files*** in the +***Climatic directory***. Choose ***Original Climatic Guide Datasets***, +which is an Excel file. R-Instat can import multiple sheets together, +but here we just need the single sheet called ***Bulmonth***, Fig. 4.2g. +The data are monthly from Bulawayo in Zimbabwe from 1951. + + --------------------------------------------------------------------------------------------------------------- + ***Fig. 4.2g Importing monthly data from Bulawayo*** ***Fig. 4.2h Monthly data*** + ------------------------------------------------------- ------------------------------------------------------- + ![](media/image1254.png){width="3.0052121609798776in" ![](media/image1246.png){width="3.0768536745406823in" + height="2.779524278215223in"} height="2.6771259842519686in"} + + --------------------------------------------------------------------------------------------------------------- + +The final example is from an R package. From ***File \> Open From +Library*** use the ***Open from R*** option, Fig. 4.2i. This gives +access to all the datasets provided with the R packages that are in +R-Instat. Scroll down the ***From Package*** list to the ***OpenAir*** +package. There is only one data set. Open it to give the data shown in +Fig. 4.2j + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 4.2i Choosing the openair package*** ***Fig. 4.2j Hourly data*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image1238.png){width="3.040103893263342in" ![](media/image1240.png){width="2.886120953630796in" + height="2.7375568678915134in"} height="2.9988998250218724in"} + + ------------------------------------------------------------------------------------------------------------- + +These examples show what is assumed in R-Instat to analyse the data. +Data for multiple elements and from multiple sites can be in a single +data frame. The multiple elements are in successive variables, i.e. they +"go across", while the multiple stations "go down". The station name or +ID is a factor column. + +The dates are also needed, either in a single variable, Fig. 4.2j or in +multiple variables as in Fig. 4.2h and Fig. 4.2f. + +## The R-Instat Climatic System + +Analyses usually proceed using the following general menus: + +1. The ***File menu*** is used to read the data + +2. The ***Prepare menu*** is to organise the data ready for analysis + +3. The ***Describe menu*** is for descriptive statistics, i.e. graphs + and tables. + +4. The ***Model menu*** fits and examines statistical models for the + data + +This is shown by the structure of the R-Instat menus shown in Fig. 4.3a. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 4.3a The R-Instat menus*** ***Fig. 4.3b The Climatic menu*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image237.png){width="2.932736220472441in" ![](media/image230.png){width="2.949284776902887in" + height="1.6180610236220472in"} height="3.438086176727909in"} + + ----------------------------------------------------------------------------------------------------------- + +The same applies to climatic data and hence the special climatic menu is +arranged in the same order, Fig. 4.3b. We now examine some of the +initial menu items in turn. + + --------------------------------------------------------------------------------------------------------------- + ***Fig. 4.3c The Climatic \> File menu*** ***Fig. 4.3d The Climatic \> Tidy and Examine menu*** + ------------------------------------------------------- ------------------------------------------------------- + ![](media/image1234.png){width="2.9021456692913388in" ![](media/image1288.png){width="3.1925765529308836in" + height="1.3064479440069992in"} height="2.466251093613298in"} + + --------------------------------------------------------------------------------------------------------------- + +Fig. 4.3c shows the ***Climatic \> File*** menu. Often the data will be +loaded using the main File menu as for all the examples in Section 4.2 +above. This used the ***File \> Open from Library*** dialogue, but the +***File \> Open*** dialogue is often used for the data files. + +Some options in Fig. 4.3c, such as the importing of NetCDF files are in +both menus. Others, like Climsoft are just in this menu. Climsoft is a +data management system specially to manage climatic data. It was +described in general in Section 1.7 and importing from Climsoft is +described in Section 4.5. + +Fig. 4.3d shows the ***Tidy and Examine*** menu. The first dialogue is +used to "tidy" climatic data that are not yet in the shape of those in +the examples shown in Section 4.2. The idea of Tidy data is useful and +is described well by [Wickham 2014.]{.mark} He gives a variety of +examples, with the most complex being climatic data. The remaining items +in the menu in Fig. 4.2b are all also in the main Prepare menu. They may +be needed if the tidying is too tricky for the special ***Tidy Daily +Data*** dialogue. They are also for further checks. For example, for +daily data there should be no duplicate days in the record for the same +station. Section 4.8 gives an example where this is not the case. + + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + ***Fig. 4.3e The Climatic \> dates menu*** ***Fig. 4.3f The dialogue to define a data frame as climatic*** + ------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------- + ![](media/image1287.png){width="2.4016754155730533in" ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTMLf1001c1.PNG](media/image1300.png){width="3.6607972440944883in" + height="1.3685028433945756in"} height="4.270929571303587in"} + + ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + +Next in the preparation is to check that the file has date columns that +are ready for the subsequent analyses, Fig. 4.3e. This menu is a copy of +the ***Prepare \> Column: Date*** menu which can be used instead. + +This leads to the ***Define Climatic Data*** dialogue shown in Fig. +4.3f. The example in Fig. 4.3f is for the 2 stations in Guinee, but +using the second copy of the file, called Guinee2.rds. This was prepared +earlier and saved as an RDS file. The fact it is ready for analysis is +saved as part of the metadata for this data frame. + +The subsequent dialogues in the climatic menu all assume the data have +been defined as climatic, i.e. have used the dialogue in Fig. 4.3f. +That's the "climatic system" in R-Instat. + +Some readers may be concerned that they are in a rush to analyse their +data and were not prepared for these initial steps. However, if your +data are in "good shape" then they take only a few minutes. If not, then +in many analyses these "organising of data" steps do take the time. Once +this has been done the analyses can proceed quickly. + +These organising steps are only done the first time you use the data. +Then save the data using ***File \> Save As \> Save Data As*** so the +climatic information is remembered. You can therefore continue later, +with these data, going straight to the subsequent items in the climatic +menu. + +If you choose, instead, to save the data frame using ***File \> Export +\> Export Dataset*** this has the advantage that you can view and use +the data in other software. The only problem is that the special +climatic information from Fig. 4.3f isn't saved. So, when you resume, +then start with the ***Define Climatic Data*** dialogue. + +## Tidying the Data + +You can ignore this section if your data are already in the shape +discussed in Section 4.2. Often this is not the case. + +The first example was previously prepared for the original Instat. It is +56 years of daily data from Samaru in Northern Nigeria. Use ***File \> +Open from Library***. Choose ***Instat data***, B***rowse*** to the +***Climatic directory,*** choose ***Original Climatic Guide Datasets***. +There untick the first option and choose the sheet called +***Samaru56***, Fig. 4.4a. + ++----------------------------------+-----------------------------------+ +| ***Fig. 4.4a Open Samaru56*** | ***Fig. 4.4b The "shape" of the | +| | Samaru56 data*** | +| ***File \> Open from Library \> | | +| Instat \> Browse \> Climatic*** | | ++==================================+===================================+ +| ![](media/image1262.p | ![](media/image1278. | +| ng){width="2.9889523184601923in" | png){width="3.0898140857392824in" | +| height="2.9002613735783025in"} | height="2.9266207349081363in"} | ++----------------------------------+-----------------------------------+ + +The data are shown in Fig. 4.4b. They are from 1928 and each year is in +a separate column. All columns are of length 366, in Fig. 4.4b, and +there is a special code for February 29^th^ in non-leap years. + ++-------------------------------------+--------------------------------+ +| ***Fig. 4.4c Tidying the Samaru | ***Fig. 4.4d Issues in the | +| data*** | data -- no surprises*** | +| | | +| ***Climatic \> Tidy and Examine \> | | +| Tidy Daily Data*** | | ++=====================================+================================+ +| ![](media/image1 | ![](media/image1270.p | +| 279.png){width="3.17121719160105in" | ng){width="2.49872375328084in" | +| height="3.300761154855643in"} | height="2.5170286526684165in"} | ++-------------------------------------+--------------------------------+ + +Use ***Climatic \> Tidy and Examine \> Tidy Daily Data*** and complete +the dialogue as shown in Fig. 4.4c. This will not work, because we know, +from Fig. 4.4b, that there are values on invalid dates, i.e. on Feb 29 +in non-leap years. The results are in Fig. 4.4d. We see that day 60 +(which we knew about) is the only problem. So we can proceed. + +Return to the dialogue in Fig. 4.4c, ***tick the option above to ignore +data on invalid dates***. Press ***Ok*** again. + ++------------------------------+---------------------------------------+ +| ***Fig. 4.4e Samaru data | ***Fig. 4.4f Using the date | +| reshaped*** | variable*** | +| | | +| | ***Climatic \> Dates \> Use Date*** | ++==============================+=======================================+ +| ![](media/image1269.png) | ![](media/image | +| {width="2.555686789151356in" | 1260.png){width="3.007804024496938in" | +| he | height="3.889673009623797in"} | +| ight="3.7988068678915137in"} | | ++------------------------------+---------------------------------------+ + +The results are in Fig. 4.4e. The tidy data now has 20454 rows (days). +Also, as shown in Fig. 4.4e is that there is no longer any need for a +special code for February 29^th^ in non-leap years. + +The date column has been included in the data in Fig. 4.4e. The next +step is the ***Climatic \> Dates \> Use Date*** dialogue, completed as +in Fig. 4.4f. This adds 4 new columns to the data file. We then do some +housekeeping, with ***Right-Click*** and ***Reorder Columns*** to give +the data as shown in Fig. 4.4g. + ++-------------------------------+--------------------------------------+ +| ***Fig. 4.4g Data ready to be | ***Fig. 4.4h Defining the data as | +| defined as climatic*** | climatic*** | +| | | +| | ***Climatic \> Define Climatic | +| | Data*** | ++===============================+======================================+ +| ![](media/image1277.png | ![](media/image12 | +| ){width="2.641606517935258in" | 08.png){width="3.0199562554680663in" | +| h | height="3.5843416447944008in"} | +| eight="2.5361253280839895in"} | | ++-------------------------------+--------------------------------------+ + +Now use ***Climatic \> Define Climatic Data***. The dialogue fills +automatically which is a good sign. The Check Unique also indicates the +Date column can be a key field. Press Ok and the data are now ready for +the analysis in R-Instat. They can be saved as an RDS file and/or +exported as a csv file. + +These steps should not have taken long. But this was a single element +(rain) from a single station. + +A second example is data from Garoua, Cameroon. The rainfall first, and +initially in Excel, Fig. 4.4i. + + ----------------------------------------------------------------------- + ***Fig. 4.4i Rainfall data from Garoua*** + ----------------------------------------------------------------------- + ![](media/image1211.png){width="5.617016622922135in" + height="2.673465660542432in"} + + ----------------------------------------------------------------------- + +There are (at least 4 complications with these data, compared to the +shape we would like. + +1. There are some trace values, given as TR in the data, Fig. 4.4i + +2. Each year is on a separate Excel sheet. + +3. There are summary values, i.e. there are daily data and analysed + data together in Fig. 4.4i. + +4. The months "go across". + +We change the trace issue in Excel. They are rare and only up to 2005. +R-Instat does not (yet) cope with trace[^16]. We choose to replace the +TR by 0 in each sheet. This is easily done in Excel. The data are saved +as "Garoua Daily Rainfall data 1999-July2013NOTR.xlxs". + +In R-Instat save any files you wish, then use ***File \> Close Data +File*** to clear your data. + +Then use ***File \> Open from Library \> Instat file, Browse, Climatic, +Cameroon***. ***Open the Garoua rainfall file with the TR removed***, +Fig. 4.4j***.*** + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 4.4j Importing the Garoua rainfall*** ***Fig. 4.4k Complete the importing dialogue*** + ------------------------------------------------------ ------------------------------------------------------- + ![](media/image1199.png){width="3.012716535433071in" ![](media/image1212.png){width="3.0955194663167105in" + height="3.050082020997375in"} height="3.032146762904637in"} + + -------------------------------------------------------------------------------------------------------------- + +***Click to select all the sheets***, and to import only the first ***31 +data rows***, Fig. 4.4k. Press ***Ok***. + +The 15 Excel sheets have imported into 15 R data frames, Fig. 4.4l and +we check quickly that each has the 31 rows and 13 columns. Also, that +all the columns are numeric. All seems alright. The next step is to +append the years together. + ++--------------------------------+-------------------------------------+ +| ***Fig. 4.4l The Garoua | ***Fig. 4.4m Appending the years*** | +| rainfall data imported*** | | +| | ***Climatic \> Tidy and Examine \> | +| | Append*** | ++================================+=====================================+ +| ![](media/image1206.png | ![](media/image1 | +| ){width="2.7554286964129484in" | 204.png){width="3.26417760279965in" | +| height="2.5474726596675414in"} | height="2.4939785651793525in"} | ++--------------------------------+-------------------------------------+ + +Use ***Climatic \> Tidy and Examine \> Append*** and use ***all the +sheets***, Fig. 4.4m. Press ***Ok***. + +The 15 years of data are now in a single data frame, Fig. 4.4n, and the +Append dialogue has added an extra variable that contains the Year. We +need the year, but it is "hidden" inside X2013.Stats", etc. The next +dialogue is in Prepare, rather than Climatic. + +Use ***Prepare \> Column: Text \> Transform*** and complete the dialogue +as shown in Fig. 4.4o + ++--------------------------------+-------------------------------------+ +| ***Fig. 4.4n Data in a single | ***Fig. 4.4o Extract the Year | +| data frame*** | number*** | +| | | +| | ***Prepare \> Column: Text \> | +| | Transform*** | ++================================+=====================================+ +| ![](media/image1221.png | ![C:\\Users\ | +| ){width="2.7817443132108486in" | \ROGERS\~1\\AppData\\Local\\Temp\\S | +| height="2.539852362204724in"} | NAGHTML109fd672.PNG](media/image119 | +| | 8.png){width="3.1949234470691166in" | +| | height="2.772106299212598in"} | ++--------------------------------+-------------------------------------+ + +This adds a new column called yr, Fig. 4.4p. + ++---------------------------------+------------------------------------+ +| ***Fig. 4.4p The year is now | ***Fig. 4.4q Sort the data using | +| available*** | the year column*** | +| | | +| | ***Right-click \> Sort or Prepare | +| | \> Data Frame \> Sort*** | ++=================================+====================================+ +| ![](media/image1188.pn | ![C:\\Users\\R | +| g){width="2.9009897200349957in" | OGERS\~1\\AppData\\Local\\Temp\\SN | +| height="2.3619094488188974in"} | AGHTML10a74ad5.PNG](media/image119 | +| | 3.png){width="3.099902668416448in" | +| | height="3.013610017497813in"} | ++---------------------------------+------------------------------------+ + +Nearly there. Use ***Climatic \> Tidy and Examine \> Tidy Daily Data*** +as shown in Fig. 4.4r. Earlier, in Fig. 4.4c, each year was in a column. +Now each month is in its own column. Complete Fig. 4.4r as shown. As +with the first run earlier (Fig. 4.4c) we first check on any errors, +rather than simply ignoring them. + ++----------------------------------------+-----------------------------+ +| ***Fig. 4.4r Tidy the daily data*** | ***Fig. 4.4s An error is | +| | reported. The yr column | +| ***Climatic \> Tidy and Examine \> | should be numeric*** | +| Tidy Daily Data*** | | ++========================================+=============================+ +| ![](media/image | ![](media/image1229.png) | +| 1233.png){width="3.4139971566054244in" | {width="2.59626968503937in" | +| height="3.800272309711286in"} | hei | +| | ght="0.6789588801399825in"} | ++----------------------------------------+-----------------------------+ + +There is an error! This can happen. Reading the message is says the +"year column must be numeric". + +Looking back to Fig. 4.4p we see the year column is given as yr (c), so +it is a character, or text column. So ***right-click*** and ***change it +to numeric.*** Then ***return to the dialogue*** in Fig. 4.4r and press +***Ok*** again. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 4.4t Some issues with the data*** ***Fig. 4.4u The tidy Garoua data -- at last!*** + ------------------------------------------------------- ----------------------------------------------------- + ![](media/image1237.png){width="2.9636832895888015in" ![](media/image1228.png){width="2.65291447944007in" + height="2.599909230096238in"} height="3.4515660542432194in"} + + ------------------------------------------------------------------------------------------------------------- + +The results are in Fig. 4.4t. Our troubles are not over, because we +learn there are 8 non-existent days with rainfall. Fortunately, most +have zero and this was probably just a simple error. But the data shows +there was 13.7mm on 31 September 2006, and this is a puzzle. +Unfortunately, we have no way of checking this value now. So, we return +to the dialogue in Fig. 4.4r and change the options to ignore these +days. The result is in Fig. 4.4u. + +If you now wish to proceed with the analysis of the rainfall data, then +the next steps are just the same as for the Samaru data, i.e. first the +***Climatic \> Dates \> Use Date*** dialogue, Fig. 4.4f and then the +***Climatic \> Define Climatic Data***, Fig. 4.4h. However, we may first +want to reorganise the Tmax and Tmin data, and then merge the 3 +elements, before defining the climatic data. We leave this largely as an +exercise but provide a few hints below. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 4.4v Garoua Tmax data*** ***Fig. 4.4w A problem with the data*** + ------------------------------------------------------- ------------------------------------------------------ + ![](media/image1223.png){width="3.0163976377952757in" ![](media/image1183.png){width="2.942357830271216in" + height="2.7246872265966755in"} height="2.448571741032371in"} + + -------------------------------------------------------------------------------------------------------------- + +Part of the Tmax data are shown in Excel in Fig. 4.4v. There are again +multiple sheets and this time each column is a day of the month. So, +there are now 31 columns of data. This is the third option, when using +the ***Climatic \> Tidy and Examine \> Tidy Daily Data*** dialogue. For +the Samaru data, the years were in separate columns in Fig. 4.4c, and +the months in Fig. 4.4r. This time it is the day of the month. That is +quite a common layout. + +On importing all the data for Tmax there is a common problem on the +sheet called Page 10. The immediate indication is that some values in +X25 (25^th^ of the month) have many decimals. This is because the column +name is X25 (c), so it is a character or text column and not numeric. +This is because one value is given as 35.B. Perhaps it should be 35.8? + +Hence note all the columns in Page 10 that are text columns. These are +easily corrected in Excel. Then the tidying of the data follows similar +steps to that for the rainfall. + +Once the Tmax and Tmin data have been tidied, the ***Climatic \> Tidy +and Examine \> Merge*** dialogue is used to merge the elements into a +single data frame. + +## Transferring data from Climsoft + +Climsoft is a comprehensive system for the entry and management of +climatic data. The main menu is shown in Fig. 4.5a. It is designed for +the entry (or transfer) of climatic data of any sort. It is also +particularly useful for capturing and managing data from automatic +stations. + +It also includes facilities for the scanned paper records and hence +facilitates the checking of the computerised data against the originals. + +CLIMSOFT has its own products but is also designed to work smoothly with +R-Instat. Hence R-Instat can produce products and applications for +CLIMSOFT. + + ----------------------------------------------------------------------- + ***Fig. 4.5a The main CLIMSOFT menu*** + ----------------------------------------------------------------------- + ![](media/image1227.png){width="4.769510061242345in" + height="3.358102580927384in"} + + ----------------------------------------------------------------------- + +There are two ways to transfer data from Climsoft into R-Instat. If +Climsoft is on your machine, or is available from your machine, then +R-Instat can read the Climsoft database directly. Otherwise Climsoft can +export tidy data that is in the form that is easily used by R-Instat. +Both methods are shown here. + +Use ***Climatic \> File \> Climsoft*** to transfer data directly from a +Climsoft database, Fig. 4.5b. + ++-------------------------------------+--------------------------------+ +| ***Fig. 4.5b Import data from | ***Fig. 4.5c Connect to the | +| Climsoft*** | database*** | +| | | +| ***Climatic \> File \> Climsoft*** | | ++=====================================+================================+ +| ![C:\\Users\ | ![C:\\Users\\ROGERS\~1\\App | +| \ROGERS\~1\\AppData\\Local\\Temp\\S | Data\\Local\\Temp\\SNAGHTML117 | +| NAGHTML117998d8.PNG](media/image123 | f6eae.PNG](media/image1217.png | +| 2.png){width="3.1856747594050745in" | ){width="2.3774759405074364in" | +| height="3.1720319335083116in"} | height="2.4924475065616796in"} | +| | | +| | ![C:\\Users\\ROGERS\~1\\App | +| | Data\\Local\\Temp\\SNAGHTML118 | +| | 11950.PNG](media/image1207.png | +| | ){width="2.7705063429571304in" | +| | height="0.6207775590551181in"} | ++-------------------------------------+--------------------------------+ + +In Fig. 4.5b ***Click*** on the ***Establish Connection*** button to +give the screen shown in Fig. 4.5c. This is already set to the main +database, so you probably do not need to change that name. We chose to +add \_test\_, Fig. 4.5c to use the tutorial database. Then click on +***Enter Password*** and enter your Climsoft password shown at the +bottom of Fig. 4.5c. + +The sub-dialogue now says ***Connected***, Fig. 4.5d and you can press +***Return***. + + --------------------------------------------------------------------------------------------------------------- + ***Fig. 4.5d Connected*** ***Fig. 4.5e Transfer just the station data*** + ------------------------------------------------------- ------------------------------------------------------- + ![](media/image1167.png){width="2.6251345144356955in" ![](media/image1157.png){width="3.3453958880139982in" + height="2.7640310586176726in"} height="3.291350612423447in"} + + --------------------------------------------------------------------------------------------------------------- + +The main dialogue, in Fig. 4.5e now has all the station identifiers. We +choose them all and press Ok. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 4.5f Station data imported from Climsoft*** ***Fig. 4.5g Add observation data*** + ------------------------------------------------------ ------------------------------------------------------- + ![](media/image1145.png){width="2.707234251968504in" ![](media/image1156.png){width="3.2457753718285214in" + height="2.139587707786527in"} height="3.18499343832021in"} + + -------------------------------------------------------------------------------------------------------------- + +This gives the station information in Fig. 4.5f for all 122 stations in +the tutorial database. + +Now return to the Climsoft dialogue and tick the box for the observation +data. Now the Elements are chosen, and we have selected Tmax, Tmin and +rainfall in Fig. 4.5g. The Start Date and End Date are left blank so all +the data is transferred. + ++-------------------------------------+--------------------------------+ +| ***Fig. 4.5h The data are | ***Fig. 4.5i Add a Date | +| imported*** | column*** | +| | | +| | ***Climatic \> Dates \> Make | +| | Date*** | ++=====================================+================================+ +| ![](media/image115 | ![](media/image1166.png | +| 5.png){width="3.1908967629046368in" | ){width="2.8087740594925634in" | +| height="2.257316272965879in"} | height="2.605239501312336in"} | ++-------------------------------------+--------------------------------+ + +The data in R-Instat are in Fig. 4.5h. There are 6 columns, first the +station, then the element given in 3 different ways, then the date and +finally the data. + +The date column is a date-time variable, because the data may be +sub-daily. Use the ***Climatic \> Dates \> Make Date*** dialogue as +shown in Fig. 4.5i. This adds an R date column. + +Had we exported just a single element then the data would now be almost +ready. As in Section 4.4, just use ***Climatic \> Dates \> Use Date*** +and then ***Climatic \> Define Climatic Data***. + +However, as we imported 3 elements (Tmax, Tmin and Rain) we have one +further step, because they are currently all in a single column. They +need to be in separate columns. + +First use Right-click on one of the element columns, Fig. 4.5j, and +convert it to a factor column. + ++-------------------------------+--------------------------------------+ +| ***Fig. 4.5j Make the Element | ***Fig. 4.5k Unstack the data on the | +| column a factor*** | 3 elements*** | +| | | +| | ***Climatic \> Tidy and Examine \> | +| | Unstack*** | ++===============================+======================================+ +| ![](media/image1153.png) | ![C:\\Use | +| {width="2.6682010061242343in" | rs\\ROGERS\~1\\AppData\\Local\\Temp\ | +| h | \SNAGHTML120afa21.PNG](media/image11 | +| eight="2.0810804899387576in"} | 43.png){width="3.2150010936132984in" | +| | height="3.11830927384077in"} | ++-------------------------------+--------------------------------------+ + +Use ***Climatic \> Tidy and Examine \> Unstack*** and complete the +dialogue as shown in Fig 4.5k. The data are in Fig. 4.5m and are in just +the right "shape" for R-Instat. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 4.5l The data ready for R-Instat*** ***Fig. 4.5m Climsoft dialogue to export data*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image1154.png){width="3.026971784776903in" ![](media/image1129.png){width="2.93706583552056in" + height="2.7565004374453195in"} height="2.774326334208224in"} + + ------------------------------------------------------------------------------------------------------------ + +The second way is for data to be exported from Climsoft that can then be +imported into R-Instat. + +For this option the CLIMSOFT user starts with the ***Products option*** +in Fig. 4.5a. The products menu is shown in Fig 4.5m. Select ***Data*** +as the Product category and ***Daily***, as shown in Fig. 4.5m. + + ----------------------------------------------------------------------------------------------------------------------- + ***Fig. 4.5n Screen to export daily data from Climsoft*** + ----------------------------------------------------------------------------------------------------------------------- + ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTML15618e97.PNG](media/image1180.png){width="6.1309044181977255in" + height="3.1893930446194227in"} + + ----------------------------------------------------------------------------------------------------------------------- + +The resulting screen in Climsoft is shown in Fig. 4.5n. Complete it as +shown and then press to ***Start Extraction,*** Fig. 4.5n. The resulting +data are shown in Fig. 4.5o. + + ----------------------------------------------------------------------------------------- + ***Fig. 4.5o Ooops!*** + ------------------------------------------------------- --------------------------------- + ![](media/image1190.png){width="3.1422430008748905in" + height="2.184351487314086in"} + + ----------------------------------------------------------------------------------------- + +## Satellite data + +## What can go wrong? + +Nothing may go wrong in organising your data ready for analysis. Even +so, it is often frustrating, particularly to those who are relatively +inexperienced in these tasks, that the organising stage takes so long, +and is also often quite difficult. What can we say except perhaps +"Welcome to the real world"! + +But it is annoying that these steps come first and may be more difficult +and time-consuming that the subsequent analyses. These problems are +general and are not limited to climatic data, but that may be small +comfort as you hoped to proceed quickly and then have more time for +other activities! + +In addition, things may take longer, because of additional problems in +the data. We look at some examples in this section. You need to become a +super-critical data detective. Here we show how and why. + +The first problem is very common. It was earlier shown in Fig. 4.4w and +we repeat it in Fig. 4.7a. A column that should be numeric has a (c) +after it, in R-Instat. + + -------------------------------------------------------------------------------------------------------------- + ***Fig. 4.7a Numeric data imports as character ***Fig. 4.7b Filter in Excel to see the problem*** + (text)*** + ------------------------------------------------------ ------------------------------------------------------- + ![](media/image1183.png){width="2.942357830271216in" ![](media/image1165.png){width="2.2510772090988627in" + height="2.448571741032371in"} height="3.288844050743657in"} + + -------------------------------------------------------------------------------------------------------------- + +This indicates it is a character, or text, column. The "cure" is usually +to return to Excel and correct the error there. In Excel, once you know +where to look, then one way is to set up a filter and then check on the +column that R-Instat has shown has the problem. In Fig. 4.7b we filter +on column Z for the 25^th^ and find the bottom entries are not in order. +A more careful look shows the bottom value to be 38.B when it possibly +should have been 38.8. Other character columns on this same sheet were +when a number was typed with a space and no decimal, e.g. 38 6 instead +of 38.6 on the 10^th^ of the month. + +A check that is often useful is Climatic \> Tidy and Examine \> One +Variable Summaries. This is the Examining part of this menu. To show its +use, look again at the Dodoma data that was introduced in Chapter 2. So, +***File \> Open from Library \> Instat Data \> Browse \> Climatic +Directory \> Instat Guide datasets \> Dodoma***. + +The data are shown in Fig. 4.7c. On ***row 120 make a deliberate +mistake***, i.e. double click on April 30 and change the ***30 into +31***. That's not a possible day! + ++-----------------------------+----------------------------------------+ +| ***Fig. 4.7c Dodoma with an | ***Fig. 4.7d Add a date column*** | +| error added*** | | +| | ***Climatic \> Dates \> Make Date*** | ++=============================+========================================+ +| ![](media/image1175.png){w | ![](media/image | +| idth="2.5625590551181103in" | 1170.png){width="3.4776574803149605in" | +| he | height="2.7455194663167104in"} | +| ight="2.680066710411199in"} | | ++-----------------------------+----------------------------------------+ + +Add a date column using ***Climatic \> Dates \> Make Date*** and +complete the dialogue as shown in Fig. 4.7d. + ++--------------------------------+-------------------------------------+ +| ***Fig 4.7e Examine the | ***Fig. 4.7f Resulting summaries*** | +| data*** | | +| | | +| ***Climatic \> Tidy and | | +| Examine \> One Variable | | +| Summarise*** | | ++================================+=====================================+ +| ![](media/image1161.pn | ![](media/image11 | +| g){width="2.727936351706037in" | 72.png){width="3.288003062117235in" | +| height="2.4675043744531933in"} | height="1.9241557305336834in"} | ++--------------------------------+-------------------------------------+ + +Use ***Climatic \> Tidy and Examine \> One Variable Summarise*** as +shown in Fig. 4.7e. The results are in Fig. 4.7f. + +Examine these results for each column in turn. The results are +encouraging. The Year goes from 1935 to 2013. The day of the month is +from 1 to 31 -- which is fine. + +The rainfall is from 0 (zero) to 119.8. Sometimes it is from -9999 in +which case the missing values need to be recoded[^17]. Here they seem +fine, and it is encouraging tht there are less than 100 missing values +overall. Similarly, the limits for Tmax, Tmin and Sunh all seem +reasonable. + +The last column is the Date and there is one missing value -- as we +know, because this time we caused it! There should not be missing values +in the date column. You need to do something about it. + +The first step in solving the problem (assuming we don't know it) is to +filter the data, choosing just the days when Date1 == NA. To do this, +right-click in any column and choose Filter, Fig, 4.7g. + ++----------------------------------+-----------------------------------+ +| ***Fig. 4.7g Filter to locate | ***Fig. 4.7h The Filter | +| the problem*** | sub-dialogue*** | +| | | +| ***Right-click \> Filter*** | | ++==================================+===================================+ +| ![](media/image1173. | ![](media/image1194. | +| png){width="2.901389982502187in" | png){width="3.0803193350831144in" | +| height="3.3789851268591424in"} | height="2.3552165354330707in"} | ++----------------------------------+-----------------------------------+ + +In the Filter dialogue, choose the button to Define New Filter, and +complete the sub-dialogue as shown in Fig. 4.7h. Click to Add Condition +then ***Return*** and ***Ok***. + +The filtered data, Fig. + + ----------------------------------------------------------------------- + ***Fig. 4.7i The filtered data*** + ----------------------------------------------------------------------- + ![](media/image1098.png){width="5.618597987751531in" + height="1.294780183727034in"} + + ----------------------------------------------------------------------- + +This shows it is row 120 that is causing the problem. The correction can +be made immediately, or you may like to remove the filter first and then +check that there was no value on April 30 in that year. + +Data from Thaba Tseka in Lesotho initially seemed easy to process. Use +***File \> Open from Library \> Instat \> Browse \> Climatic \> +Lesotho*** and the file ***Thaba_Tseka_Original***. + + ----------------------------------------------------------------------- + ***Fig. 4.7j The Thaba-Tseka rainfall data*** + ----------------------------------------------------------------------- + ![](media/image1109.png){width="5.528430664916885in" + height="2.338526902887139in"} + + ----------------------------------------------------------------------- + +The data have been exported from a previous version of Climsoft (see +Sections 1.6 and 4.5). They include a lot of station details but seem in +exactly the right shape to make quick progress. + ++------------------------------+---------------------------------------+ +| ***Fig. 4.7k Add a date | ***Fig. 4.7l Define Climatic Data*** | +| column*** | | +| | ***Climatic \> Define Climatic | +| ***Climatic \> Dates \> Make | Data*** | +| Date*** | | ++==============================+=======================================+ +| ![](media/image1102.png){ | ![](media/image1 | +| width="2.5451115485564304in" | 087.png){width="2.6707239720034996in" | +| h | height="3.1690671478565178in"} | +| eight="3.125343394575678in"} | | ++------------------------------+---------------------------------------+ + +Define a date column from ***Climatic \> Dates \> Make Date, Fig. +4.7k,*** and then check, with ***Climatic \> Tidy and Examine \> One +Variable Summarise***, as in Fig. 4.7e. All seems fine so far. + +So, the last step. Use ***Climatic \> Define Climatic Data*** as in Fig. +4.7l. Complete the year, month, day fields, as the names are not +recognised automatically. Also, obs is the rain column. + +Finally check for uniqueness, Fig. 3.7m. + ++----------------------------------+-----------------------------------+ +| ***Fig. 4.7m A problem - | ***Fig. 4.7n Check on the | +| duplicates*** | Duplicates*** | +| | | +| | ***Climatic \> Tidy and Examine | +| | \> Duplicates*** | ++==================================+===================================+ +| ![](media/image1094. | ![C:\\Users\\ROGE | +| png){width="2.859336176727909in" | RS\~1\\AppData\\Local\\Temp\\SNAG | +| height="2.021839457567804in"} | HTML199cd2c0.PNG](media/image1103 | +| | .png){width="3.061738845144357in" | +| | height="3.214241032370954in"} | ++----------------------------------+-----------------------------------+ + +The message in Fig. 4.7m indicates a problem. There are apparently +duplicate values in the data. + +As suggested in Fig. 4.7m use ***Climatic \> Tidy and Examine \> +Duplicates*** and complete as shown in Fig. 4.7n. This produces a new +logical column, that is first examined through ***Climatic \> Tidy and +Explore \> One Variable Summarise***, Fig. 4.7o. + ++----------------------------------+-----------------------------------+ +| ***Fig. 4.7o Find how often | ***Fig. 4.7p The results*** | +| there are duplicates*** | | +| | | +| ***Climatic \> Tidy and Examine | | +| \> One Variable Summarise*** | | ++==================================+===================================+ +| ![](media/image1099. | ![](media/image1082. | +| png){width="2.949659886264217in" | png){width="3.0340715223097114in" | +| height="2.6671434820647417in"} | height="1.0911526684164479in"} | ++----------------------------------+-----------------------------------+ + +If there were no duplicates, then this column would be FALSE all the +time. We learn, from the result in Fig. 4.7p that it is TRUE on 364 +rows. There are then at least 2 values for each day, so up to 182 days +have duplicate values. + ++--------------------------------+-------------------------------------+ +| ***Fig. 4.7r Filter | ***Fig. 4.7s The filtered data*** | +| sub-dialogue*** | | +| | | +| ***Right Click \> Filter \> | | +| Define New Filter*** | | ++================================+=====================================+ +| ![](media/image1089.p | ![](media/image109 | +| ng){width="2.78961832895888in" | 0.png){width="3.2141513560804897in" | +| height="1.4765748031496062in"} | height="3.3251870078740158in"} | ++--------------------------------+-------------------------------------+ + +Use the ***right-click and Filter*** dialogue. Then Define new Filter +and complete the sub-dialogue as shown in Fig. 4.7r. Then ***Return***, +and ***Ok*** to show the filtered data in Fig. 4.7s. + +The possible problem becomes clearer from an examination of the data +from the first 4 days. They are consecutive, from 18^th^ to 21^st^ +January 1987. It looks as though a value might have been put on one day, +and then corrected to the previous day. But both versions of the data +have been exported from Climsoft, and without any indication of which +version is the more recent. + +Now, having been a data detective -- it is probably time to go back to +the source of the data. This could be to check against the paper copy, +or to see whether the data could be exported without the +duplicates[^18]. + +## What's next? + +[I would like to describe some of the sets of software to be used in +later chapters -- in addition to those so far. In particular I am +looking for examples from countries (in addition to Kenya) where there +could be quite a number of stations. One possibility is Rwanda, where we +have permission to use 4 stations. I wonder about Germany -- partly +because of its potential for comparing satellite and station data. +Lesotho -- I could ask, and Guyana. Later possibly Haiti, but the data +aren't quite ready yet. Maybe Ghana, we currently have permission to use +2 stations.]{.mark} \ No newline at end of file diff --git a/Chapter_5_Quantity_and_quality.qmd b/Chapter_5_Quantity_and_quality.qmd new file mode 100644 index 0000000..bd00872 --- /dev/null +++ b/Chapter_5_Quantity_and_quality.qmd @@ -0,0 +1,562 @@ +# Quantity and quality? +## Introduction + +Starting from this Chapter, we assume the data for analysis are "tidy" +and are defined as a climatic data frame in R-Instat. + + ----------------------------------------------------------------------------------------- + ***Fig. 5.1a The Check Data menu*** + ------------------------------------------------------ ---------------------------------- + ![](media/image1116.png){width="3.071272965879265in" + height="2.6721817585301837in"} + + ----------------------------------------------------------------------------------------- + +This chapter shows different ways to now look at the data. For many +applications this stage can be done quickly, and the work then proceeds +with the analyses described in the following chapters. But omit this +stare at your peril. We often find users have gone immediately to the +analyses they need, only to have to return later to look more critically +at their data. + +From now on, in this guide, we will also assume that you are reasonably +comfortable in your use of R-Instat. In Section 5.2 we outline what that +means. + +Section 5.3 shows how to get a quick inventory of the data. We also +consider how to tabulate and graph the primary, usually daily, data. +Then Section 5.3 examines the data via boxplots. Boxplots are primarily +an exploratory tool, but can also be used for presentation graphs. + +Finally, we consider some formal quality control checks on the data. +What oddities might be in the data and what can be done about them. + +## An inventory -- what data do I have? + +Open the Rwanda workshop data, Fig. 5.2a. This is from 4 stations and +has already been defined as climatic data as described in Chapter 4. + +Use the first menu item in the ***Climatic \> Check Data*** menu, Fig. +5.1a to choose an ***Inventory*** plot, Fig. 5.2b. + +In Fig. 5.2b the Data and the Station receivers are completed +automatically. This is because the data frame was defined as Climatic +with these components. If not, then usually: + +a. The data frame was not yet defined as climatic. + +b. You are in the wrong data frame -- change it in the data selector in + the dialogue in Fig. 5.2b. + ++-----------------------------------+----------------------------------+ +| ***Fig. 5.2a Rwanda workshop | ***Fig. 5.2b Inventory | +| data*** | Dialogue*** | +| | | +| ***File \> Open from Library \> | ***Climatic \> Check Data \> | +| Instat \> Climatic \> Rwanda \> | Inventory*** | +| Rwanda Workshop Data.RDS*** | | ++===================================+==================================+ +| ![](media/image1139. | ![](media/image1150. | +| png){width="3.0161132983377077in" | png){width="2.973377077865267in" | +| height="3.0676706036745407in"} | height="2.575567585301837in"} | ++-----------------------------------+----------------------------------+ + +In Fig. 5.2b, add the 3 data columns for TMAX, TMIN and PRECIP and press +Ok. The resulting inventory is in Fig. 5.2c. + + --------------------------------------------------------------------------------------------------------------- + ***Fig. 5.2c Default inventory plot*** ***Fig. 5.2d Facet by element*** + ------------------------------------------------------- ------------------------------------------------------- + ![](media/image1144.png){width="2.9092760279965004in" ![](media/image1110.png){width="3.0269050743657044in" + height="2.830469160104987in"} height="2.839443350831146in"} + + --------------------------------------------------------------------------------------------------------------- + +Experiment with the display. For example, in Fig. 5.2d the ***Facet +By***, in Fig. 5.2b has been set to be the ***Element***, rather than +the ***Station***. + +One oddity in the data in Fig. 5.2c and 5.2d was the gap in the rainfall +records in the 1980s at 2 of the stations. It is quite common to have +rainfall records in the database without the corresponding temperature +records, but the reverse is odd. The data were exported from the +Clinsoft database and it was not clear why these data were absent. That +is the idea of being able to produce an inventory. + +The value of the inventory presentation is that the information on many +stations and elements can be shown together. However, the graphs show +just when data was present or absent. They do not show the actual +values. + +They can be supplemented by simple time series plots[^19]. + + ----------------------------------------------------------------------- + ***Fig. 5.2e Rwanda temperature data*** + ----------------------------------------------------------------------- + ![](media/image1128.png){width="6.066142825896763in" + height="3.02500656167979in"} + + ----------------------------------------------------------------------- + +These plots give a useful indication of the data for analysis. One +period in Kamembe Airport is marked in Fig. 5.2e as a cause for concern. +In Fig. 5.2f the interactive plotting, using ***Describe \> View +Graph*** is used to examine this part of the graph in more detail. + + ------------------------------------------------------------------------------------------- + ***Fig. 5.2f Examine the temperature data in more + detail*** + ------------------------------------------------------- ----------------------------------- + ![](media/image1138.png){width="2.9750185914260716in" + height="3.30957895888014in"} + + ------------------------------------------------------------------------------------------- + +Fig 5.2g shows the same time series graph for the rainfall data at each +site. There is a dry period in the year and hence the different years +are clearly visible in these graphs. + + ----------------------------------------------------------------------- + ***Fig. 5.2g Rainfall data at the four stations*** + ----------------------------------------------------------------------- + ![](media/image1126.png){width="6.052942913385826in" + height="2.9319149168853893in"} + + ----------------------------------------------------------------------- + +The next dialogue is ***Climatic \> Check Data \> Display Daily***, Fig. +5.2h. This produces a lot of output, so we first choose the filter the +data to just the first station, Gisenyi[^20]. + +When using this dialogue the items on the right (from Station down to +Year) are completed automatically. If not, then you are probably in the +wrong data frame + ++-------------------------------+--------------------------------------+ +| ***Fig. 5.2h Examining daily | ***Fig. 5.2i One year of the data*** | +| values*** | | +| | | +| ***Climatic \> Check Data \> | | +| Display Daily*** | | ++===============================+======================================+ +| ![](media/image1105.png) | ![](media/image1 | +| {width="2.6560739282589676in" | 100.png){width="3.337146762904637in" | +| height="3.423170384951881in"} | height="3.400753499562555in"} | ++-------------------------------+--------------------------------------+ + +. Complete the dialogue in Fig. 5.2h as shown. We have chosen to recode +zero rainfalls to "---". This is an option so the rainy days are +displayed more clearly in Fig. 5.2i. It indicates the dry period in the +year is usually June and July. The dry period was a feature of Fig. +5.2g. + +We have now almost come "full circle". In Fig. 4.4i the rainfall data +from Garoua, Cameroon, were supplied for analysis arranged in a similar +way to the data now shown in Fig. 5.2i. This is a very clear and +sensible layout for the data, but to examine, not to analyse. + +The second tab in the same ***Climatic \> Check Data \> Display Daily*** +dialogue gives a simple graphical display of the data "by year". An +example of the resulting display is in Fig. 5.2j. The results show both +the missing periods as well as the dry parts of the year. + + ----------------------------------------------------------------------- + ***Fig. 5.2j. Daily rainfall for one station*** + ----------------------------------------------------------------------- + ![](media/image698.png){width="6.105915354330708in" + height="2.9670450568678914in"} + + ----------------------------------------------------------------------- + +## Using boxplots to check and present data + +Open the Dodoma data, using the RDS file from the Climatic \> Tanzania +directory. This is already set as a climatic data frame as described in +Chapter 4. It shows data from a single site, with multiple elements. + +Most of the examples in this Section use the special ***Climatic \> +Check Data \> Boxplot*** dialogue. Boxplots are also available through +the main Describe menu (Describe \> Specific \> Boxplot). The results +are the same, but the Climatic Boxplot dialogue is usually simpler to +complete. + ++-----------------------------------+----------------------------------+ +| ***Fig. 5.3a Climatic boxplot | ***Fig. 5.3b Seasonal pattern of | +| dialogue*** | sunshine hours*** | +| | | +| ***Climatic \> Check Data \> | | +| Boxplot*** | | ++===================================+==================================+ +| ![](media/image700 | ![](media/image695.p | +| .png){width="3.146314523184602in" | ng){width="2.9883934820647418in" | +| height="3.020275590551181in"} | height="3.016061898512686in"} | ++-----------------------------------+----------------------------------+ + +The results, in Fig. 5.3b Show only one value, in September, is odd in +being longer than the day length. Most days in the year have many +sunshine hours, and the median is more than 10 hrs in the data for 6 +months, from June to November. + +Finding just a single obvious oddity in Fig. 5.3b out of the 20,450 +observations is a measure of the high quality of these data. We look in +more detail at how to check for outliers in Sections 5.4 and 5.5. As a +practical measure, setting the value to missing, would hardly affect the +results and may be sensible if the non-computerised records are not +easily available. + +As well as being a very useful exploratory method, boxplots are also +often used in the methods section of reports and papers, to present the +data being analysed. Thus they can be presentation as well as +exploratory graphs. + +Fig. 5.2b shows the seasonal pattern for the sunshine data. Two simple +changes to the dialogue in Fig. 5.3c show the time series, and hence a +possible trend, is shown in Fig. 5.3d. The second change in Fig. 5.3c is +to use the ***Variable Width*** option, to see which years have many +missing values. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 5.3c Change to show the time series*** ***Fig. 5.3d*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image707.png){width="3.0568897637795276in" ![](media/image697.png){width="2.9790977690288716in" + height="3.0768055555555556in"} height="3.0134984689413824in"} + + ------------------------------------------------------------------------------------------------------------- + +It is possible to show both the seasonality and the time-series +together, as shown in Fig. 5.3e. The resulting figure is a bit crowded +if months are used, so the graph is displayed for each of 4 +quarters[^21]. + + ----------------------------------------------------------------------- + ***Fig. 5.3e*** + ----------------------------------------------------------------------- + ![](media/image694.png){width="6.056246719160105in" + height="2.9328455818022747in"} + + ----------------------------------------------------------------------- + +An example in Chapter 2, Section 2.4, compared the Dodoma station data +on sunshine hours with the estimated values from the satellite data. It +is important to check the quality of the data, whatever the source. +Hence Fig. 5.3f shows the seasonal pattern of the satellite estimates of +sunshine hours. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 5.3f Satellite estimates of sunshine at ***Fig. 5.3g Suspect values mainly in early years*** + Dodoma*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image693.png){width="2.9552602799650045in" ![](media/image692.png){width="2.954428040244969in" + height="2.915323709536308in"} height="2.9476049868766405in"} + + ------------------------------------------------------------------------------------------------------------ + +Comparing Fig. 5.3f with Fig. 5.3b (the station data) shows +encouragingly that the distributions seem very similar. However, there +are also a number of values that are clearly longer than the day length +at Dodoma. From discussion with the providers of the data (EUMETSAT) we +learned that the early years may have radiation values (and hence +sunshine hours) that are less reliable. This is confirmed through the +time series plot for the satellite data, in Fig. 5.3g. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 5.3hBoxplots for the rainfall*** ***Fig. 5.3i Rainfall on rain days*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image696.png){width="3.0212062554680665in" ![](media/image691.png){width="2.9721916010498686in" + height="3.0562204724409447in"} height="2.9926902887139106in"} + + ------------------------------------------------------------------------------------------------------------- + +Boxplots can be used for the rainfall data, as shown in Fig. 5.3i. The +data plotted are just for rain days, with the variable width of each box +indicating the number of rain days. The plot shows the unimodal pattern +of the rainfall from November to April[^22]. + ++----------------------------------+-----------------------------------+ +| ***Fig. 5.3j Adding a second | ***Fig. 5.3k Tmax and Tmin | +| layer to the plot*** | plotted together*** | +| | | +| Plot Options \> Layers \> Add | | ++==================================+===================================+ +| ![](media/image894. | ![](media/image891 | +| png){width="2.992442038495188in" | .png){width="2.970890201224847in" | +| height="2.7443383639545056in"} | height="3.033581583552056in"} | ++----------------------------------+-----------------------------------+ + +The Dodoma data includes Tmax and Tmin and these can, if required, be +shown together on the same graph. An example is in Fig. 5.3k and one of +the sub-dialogues to facilitate this graph is shown in Fig. 5.3j[^23] +One feature in Fig. 5.3k is the larger variability of the Tmax data in +the rainy season, i.e. from November to April. + +Graphs, once saved, can be also combined, using Describe \> Combine +Graphs, as shown in Fig. 5.3l, with all 4 elements shown in Fig. 5.3m + ++--------------------------------+-------------------------------------+ +| ***Fig. 5.3l Combining | ***Fig. 5.3m The 4 elements in | +| graphs*** | Dodoma*** | +| | | +| ***Describe \> Combine Graphs | | +| \> Options*** | | ++================================+=====================================+ +| ![](media/image918.pn | ![](media/image129 | +| g){width="2.758496281714786in" | 0.png){width="3.1666666666666665in" | +| height="2.707830271216098in"} | height="3.1666666666666665in"} | ++--------------------------------+-------------------------------------+ + +Other displays of these data are also possible. In Fig. 5.3k we observed +the larger variation of the Tmax data in the rainy months (compared to +both Tmin, and to Tmax in the dry months). This feature is shown more +clearly through density plots as seen in Fig. 5.3p. This uses a dialogue +from the ordinary Describe menu. The results in Fig. 5.3p indicate a +roughly normal-type shape for the data, though with a slightly longer +tail for Tmax in the rainy season[^24]. + ++-------------------------------+--------------------------------------+ +| ***Fig. 5.3o Producing | ***Fig. 5.3p Density plots for Tmax | +| density plots*** | and Tmin by month*** | +| | | +| ***Describe \> Specific \> | | +| Histogram*** | | ++===============================+======================================+ +| ![C:\\Users\\ROGERS\~1\\A | ![](media/image8 | +| ppData\\Local\\Temp\\SNAGHTML | 96.png){width="3.3430457130358704in" | +| 98d61a3.PNG](media/image880.p | height="3.8018930446194226in"} | +| ng){width="2.7408552055993in" | | +| h | | +| eight="2.7116983814523183in"} | | ++-------------------------------+--------------------------------------+ + +Often the data frame will include data from more than one station. This +is illustrated briefly with the Rwanda data, from the library, that is +from 4 stations. An example is shown in Fig. 5.3q. It shows relatively +little seasonality, because Rwanda is close to the equator. One feature +of the data is the higher variability and lower temperatures at the +4^th^ stations, which is at a higher altitude compared to the other 3. +For this presentation, in the ***Climatic \> Check Data \> Boxplot*** +dialogue, the option is then used to facet by the Station. + + ----------------------------------------------------------------------- + ***Fig. 5.3q Example for multiple stations, Tmin for 4 stations in + Rwanda*** + ----------------------------------------------------------------------- + ![](media/image887.png){width="6.1667082239720035in" + height="3.0204975940507435in"} + + ----------------------------------------------------------------------- + +## Quality control of temperature (and other) data + +The graphical displays in the previous 2 sections have indicated +observations that need checking. The dialogue Climatic \> Check Data \> +Temperatures, Fig. 5.4a, is designed to facilitate this checking. It has +been designed specifically for temperature records, but with a +flexibility to permit it to be used also for other elements. + +Fig. 5.4 has been completed for the Dodoma data. Initially with a single +element (Tmax). + ++------------------------------------+---------------------------------+ +| ***Fig. 5.4a*** | ***Fig. 5.4b*** | +| | | +| ***Climatic \> Check Data \> QC | | +| Temperatures*** | | ++====================================+=================================+ +| ![C:\\Users\\ | ![](media/image881.pn | +| ROGERS\~1\\AppData\\Local\\Temp\\S | g){width="2.8671358267716536in" | +| NAGHTML13ef1d27.PNG](media/image88 | height="2.7212642169728785in"} | +| 4.png){width="3.123163823272091in" | | +| height="3.504679571303587in"} | | ++------------------------------------+---------------------------------+ + +From the previous Section, Fig. 5.3k, Tmax at Dodoma is rarely less than +20°C, and could usefully be checked each time. So, the first +illustration of the dialogue uses the limits 20 and 40 for Tmax. + +The results are in Fig. 5.4b. R-Instat has filtered the Dodoma data and +copied the "problem" rows into a new data frame. It shows there were +just 13 occasions with Tmax \<=20 in the record. As shown in Fig. 5.4b, +they include 9^th^ October 1989, when Tmax was equal to Tmin at 15.6°C. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 5.4c The available checks*** ***Fig. 5.4d Checking for consecutive values*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image893.png){width="2.7496237970253716in" ![](media/image834.png){width="3.316666666666667in" + height="1.6854516622922135in"} height="2.6708147419072614in"} + + ------------------------------------------------------------------------------------------------------------ + +More checks on the data are available, as shown in Fig. 5.4c. They are +considered in turn: + +- ***Acceptable range*** for each element, as shown in Fig. 5.4a + and b. This is very simplistic, because it does not allow for + seasonality in the data. + +- ***Same*** examines consecutive days and, with the default setting, + indicates whenever 4 days or more have the same value. The idea is + that when many consecutive values are identical, it is possible they + were simply copied in, and not measured on each day. An example of + the results is in Fig. 5.4e. + +- ***Jump*** notes whenever 2 consecutive days are different by more + that the threshold amount. The default is that any difference (jump) + of more than 10°C deserves further examination. + +- ***Difference*** is only available when 2 elements have been + included, usually Tmax and Tmin. The default is to note whenever + Tmax \<= Tmin, but the difference could be altered. + +- ***Outlier*** is the most complex and relates the value to the + boxplot outliers. A boxplot is conceptually fitted for each month at + each station and the outliers are then noted. The traditional limit + for boxplots has a coefficient of 1.5[^25], as used in all the + figures in Section 5.3. We find, with the large samples in climatic + data, this gives too many outliers, many of which are not + particularly surprising. We therefore usually use 2.5 or 3 (instead + of 1.5) as the multiplying value. + +You may choose to do multiple checks at the same time. We consider them +in turn. Each time the dialogue is used, it produces a new data frame. + +In Fig. 5.4d we specify the ***Same*** check, for both Tmax and Tmin +together. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 5.4e Results from the Same check*** ***Fig. 5.4f Jump of more than 10°C*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image846.png){width="2.9792082239720035in" ![](media/image860.png){width="3.028753280839895in" + height="2.8092530621172354in"} height="2.7992268153980753in"} + + ------------------------------------------------------------------------------------------------------------ + +The results are in Fig. 5.4e. The first occurrence was in July 1965 when +Tmax was 26.0°C on 4 consecutive days, while in October 1969 Tmin was +consecutively 17.4°C. The results, in Fig. 5.4e also include further +columns to note how many consecutive days and whether they were for Tmax +or Tmin. In this case there were only 7 occurrences of the event, giving +28 rows in total, so these extra columns are not so important. + +Fig. 5.4f shows the results from the test for jumps of more than 10°C. +Here the logical column was always TRUE for Tmax, i.e. this event did +not occur for Tmin. Sometimes Tmax drops because of rainfall, and this +column is automatically included in the filtered data. The results in +Fig. 5.4f include the size of the jump. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 5.4g Tmax within 1°C of Tmin*** ***Fig. 5.4h Outiers from corresponding boxplots*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image845.png){width="2.6875459317585304in" ![](media/image832.png){width="3.334831583552056in" + height="1.1320406824146982in"} height="2.499064960629921in"} + + ------------------------------------------------------------------------------------------------------------ + +In the next check, the limit is set to 1°C. There are then, Fig. 5.4g, +just 4 days when Tmax is within 1 degree of Tmin. + +The final check is equivalent to the boxplot outliers. The threshold in +producing Fig. 5.4h was set to 2.5 and there were still 150 outliers to +investigate. There are effectively 4 tests here, i.e. whether either +Tmax or Tmin are too low, or too high. These correspond to the settings +of the logical columns in Fig. 5.4h. Thus the first 3 rows all indicate +a low value of Tmax, while the 4^th^ row is a low value for Tmin. + +Readers may be concerned in having to check 150 values. Our view is that +these data are of high quality. This is 150 values out of more than +40,000 (i.e. over 20,000 days for each of Tmin and Tmax), so less than +0.5% of the values to be checked! Not bad. + +## Quality control for rainfall records + +The system for checking rainfall data is similar to that for the +temperatures, described in Section 5.4. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 5.5a*** ***Fig. 5.5b*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image833.png){width="3.053068678915136in" ![](media/image836.png){width="2.846933508311461in" + height="2.969220253718285in"} height="3.6387970253718285in"} + + ----------------------------------------------------------------------------------------------------------- + +We continue with the Dodoma data. Two checks are undertaken in the +dialogue in Fig. 5.5a. First is to note all values more than 100mm and +second is to note when any 2 consecutive non-zero values are the same. + +Some of the results (after reordering columns for clarity) are in Fig. +5.5b. There are 83 rows of data, from 6 occasions with more than 100mm +(all look plausible) and 38 occasions when 2 consecutive days had the +same rainfall. Looking at the results in Fig. 5.5b, perhaps the low +values e.g. 0.3mm on 2 consecutive days is not so surprising, but 19.2mm +on both the 5^th^ and 6^th^ January 1967 deserves further investigation. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 5.5c Same values after a filter*** ***Fig. 5.5d Checking for dry months*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image831.png){width="2.9309733158355207in" ![](media/image842.png){width="3.0435115923009626in" + height="3.479775809273841in"} height="3.0732534995625547in"} + + ------------------------------------------------------------------------------------------------------------- + +The data in Fig. 5.5b are just in an ordinary data frame, so we check +more closely by filtering out the values of 1mm or less. The results are +in Fig. 5.5c. There are just 16 occasions, most of which are shown in +Fig. 5.5b with exactly the same amount on 2 days. One way this arises is +when the data are computerised initially on the wrong day. They are then +transferred to the previous day, but the original is not deleted. A +check with the paper records is all that is needed. + +The next option in Fig. 5.5a is called "Consecutive". This checks on the +number of consecutive rain days. In some places a large number is rare. +But sometimes temperature columns may be entered mistakenly. This then +appears as many consecutive "rain" days, with relatively similar amounts +on the successive days. + +The next option is called Dry Month and is shown in Fig. 5.5d. The +explanation is given for Dodoma, where the rainy season is from November +to April. The other months may be totally dry. If January (in the middle +of the rainy season) is totally dry, then probably it was missing and +recorded mistakenly as zero each day. What is more complicated is +November (the usual start of the season) and April (the usual end). If +November is totally dry, then it could be true and a late start to the +season. Or the data are missing. The same goes for April. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 5.5e*** ***Fgi. 5.5f*** + ---------------------------------------------------- ------------------------------------------------------ + ![](media/image835.png){width="3.11877624671916in" ![](media/image874.png){width="2.7583595800524936in" + height="3.303284120734908in"} height="3.0145352143482063in"} + + ----------------------------------------------------------------------------------------------------------- + +The results are in Fig. 5.5e. Right-click on the month column and use +the Levels/Labels dialogue, Fig. 5.5f to give the results in Fig. 5.5g. +This shows the zeros are primarily in November, but December is zero in +2 years. There are no zero months in January to April. + +One way to find which years to investigate, is the make the year column +in Fig. 5.5e into a Factor and then use the same Levels/Labels dialogue. +The results are in Fig. 5.5h, showing the first years are 1935. 1936, +1943, while the frequency of 31 in 1952 idicates that was one of the +years when December was zero. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 5.5g It is a November/December problem*** ***Fig. 5.5hThese are the years*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image865.png){width="2.5220581802274715in" ![](media/image869.png){width="2.729306649168854in" + height="3.516259842519685in"} height="3.521013779527559in"} + + ------------------------------------------------------------------------------------------------------------ + +The final option is the outliers, using the limits from the skew +boxplot. In Fig. 5.5i we omit the zero values and set the skewness +weight to 3. This has identified just 3 possible outliers, and each is +only just above the corresponding limit, see Fig 5.5j. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 5.5i Settings for the rainfall outliers*** ***Fig. 5.5j Possible outliers from skew boxplot*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image859.png){width="2.978626421697288in" ![](media/image890.png){width="3.272315179352581in" + height="1.497422353455818in"} height="0.9956594488188977in"} + + ----------------------------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/Chapter_6_Preparing_summaries.qmd b/Chapter_6_Preparing_summaries.qmd new file mode 100644 index 0000000..4e5b1a4 --- /dev/null +++ b/Chapter_6_Preparing_summaries.qmd @@ -0,0 +1,999 @@ +# Preparing summaries +## Introduction + +In this chapter and the next, we use the ***Climatic \> Prepare*** menu +to summarise data into a form ready for analysis and then present the +results as graphs and tables. Here we consider monthly and annual +summaries of rainfall, temperature and other elements. The next chapter +uses similar ideas for more specialised summaries of the rainfall data, +such as the start and length of the season. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 6.1aThe main climatic summary menu*** ***Fig. 6.1b Presenting the summary*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image868.png){width="2.9830041557305336in" ![](media/image850.png){width="3.092963692038495in" + height="2.510556649168854in"} height="2.541311242344707in"} + + ------------------------------------------------------------------------------------------------------------ + +In Section 6.2 data from Ghana are used to illustrate the summary of +rainfall data. + +[To be continued]{.mark} + +## Preparing the data + +In the second tutorial (reference/link) we showed how to plot annual +temperature data, after starting from the daily records. That was +without making use of the special climatic menu. These ideas are +repeated here and extended for rainfall. The climatic menu is used, and +the example is with data from 2 stations. The first step is to prepare +the data. + +Use ***File \> Open from Library \> Instat \> Browse \> Climatic \> +Ghana*** and open the file called ***ghana_two_stations.rds***, Fig. +6.2a. The data are from Saltpond, which is on the coast, with a bimodal +pattern of rainfall, and Tamale, which is further North, and with +unimodal rainfall. The rainfall starts in 1944 for each station. Other +elements, Fig. 6.2a, start later. + ++-------------------------------------+--------------------------------+ +| ***Fig. 6.2a Data from 2 | ***Fig. 6.2b*** | +| stations*** | | +| | | +| ***File\>Open from | | +| Library\ | | +| >Instat\>Browse\>Climatic\>Ghana*** | | ++=====================================+================================+ +| ![](media/image8 | ![](media/image864.pn | +| 63.png){width="3.290274496937883in" | g){width="2.968218503937008in" | +| height="3.2845319335083114in"} | height="1.3167279090113735in"} | ++-------------------------------------+--------------------------------+ + +The data is in the right shape and already has a date column. + +First use ***Climatic \> Dates \> Infill***, Fig. 6.2b, to check there +are no missing dates. Some files simply omit the days when all data are +missing. + ++-----------------------------------+-----------------------------------+ +| ***Fig. 6.2c Infill missing | ***Fig. 6.2d Results from | +| dates*** | infilling*** | +| | | +| ***Climatic \> Date \> Infill*** | | ++===================================+===================================+ +| ![](media/image852 | ![](media/image800. | +| .png){width="3.011919291338583in" | png){width="3.0440813648293963in" | +| height="2.6333103674540683in"} | height="0.746661198600175in"} | ++-----------------------------------+-----------------------------------+ + +Complete the dialogue as shown in Fig. 6.2c and press Ok. The number of +rows in the data increases slightly to 53297 and the output window +states that just under 300 rows have been added. + +Use ***Climatic \> Tidy and Examine \> One Variable Summarise*** and +complete the dialogue as shown in Fig. 6.2e. The results are in Fig. +6.2f. They show no missing values for the date column (which is good and +a relief), and very few missing rainfall days. Most of those were +infilled. The other variables have reasonable values. Hence we proceed. + ++------------------------------+---------------------------------------+ +| ***Fig. 6.2e Checking the | ***Fig. 6.2f Results*** | +| data*** | | +| | | +| ***Climatic \> Tidy and | | +| Examine \> One Variable | | +| Summarise*** | | ++==============================+=======================================+ +| ![](media/image803.png){ | ![](media/image | +| width="2.6116010498687663in" | 812.png){width="3.4144444444444444in" | +| h | height="1.937435476815398in"} | +| eight="2.139025590551181in"} | | ++------------------------------+---------------------------------------+ + +Use ***Climatic \> Date \> Use Date***, Fig. 6.2g. Then it is convenient +to reorder the columns to put the date variables before the climatic +data, Fig. 6.2h. + ++------------------------------+---------------------------------------+ +| ***Fig. 6.2g Generate | ***Fig. 6.2h Data*** | +| further date variables*** | | +| | ***After Right-click \> Reorder | +| ***Climatic \> Date \> Use | columns*** | +| Date*** | | ++==============================+=======================================+ +| ![](media/image796.png) | ![](media/image | +| {width="2.626457786526684in" | 806.png){width="3.3682863079615046in" | +| he | height="2.546360454943132in"} | +| ight="4.1896883202099735in"} | | ++------------------------------+---------------------------------------+ + +Finally, in this preparation, use ***Climatic \> Define Climatic +Data***. The dialogue should fill automatically as shown in Fig. 6.2i. +Check that the data are unique and press Ok. + ++-----------------------------------+----------------------------------+ +| ***Fig. 6.2*** | ***Fig. 6.2j A count column*** | +| | | +| ***Climatic \> Define Climatic | ***Climatic \> Prepare \> | +| Datai*** | Transform*** | ++===================================+==================================+ +| ![](media/image802. | ![](media/image810.p | +| png){width="3.0969564741907263in" | ng){width="2.9782939632545933in" | +| height="3.6375339020122484in"} | height="4.019535214348206in"} | ++-----------------------------------+----------------------------------+ + +Finally, a new step, because we would like to analyse the number of rain +days as well as the rainfall totals. A new column, giving whether a day +was rainy-or-not, is generated. We show two ways this new column can be +generated. + +The first way is simple, but it generates a complicated R command, +because it is a special case of a more general function. Use ***Climatic +\> Prepare \> Transform***, and complete the dialogue as shown in Fig. +6.2j. This produces a new column, which takes the value 1 for each rain +day, and 0 otherwise. We have explained in Chapter 2 why we use the +seemingly odd value of 0.85mm as a threshold for rain[^26]. + +Now try the second method, which generates a very simple R command. It +uses R-Instat's powerful calculator, from ***Prepare \> Column: +Calculate \> Calculations***, Fig. 6.2k + ++-----------------------------------+----------------------------------+ +| ***Fig. 6.2k Using the | ***Fig. 6.2l Using the | +| calculator*** | additional logical keyboard*** | +| | | +| ***Prepare \> Column: Calculate | | +| \> Calculations*** | | ++===================================+==================================+ +| ![](media/image807. | ![](media/image798. | +| png){width="3.0777515310586177in" | png){width="2.968632983377078in" | +| height="2.546943350831146in"} | height="1.8799464129483814in"} | ++-----------------------------------+----------------------------------+ + +The resulting data are shown in Fig. 6.2m. The calculator has produced a +logical column, while the transformation using Prepare \> Transform has +a column of 0 for dry and 1 for rain. There are the same in R as it +interprets TRUE as a 1 and False as a zero. + +They are now not both needed, so delete one of them. We have kept the +logical column. + ++-----------------------------------------------------------------------+ +| ***Fig. 6.2m Data*** | +| | +| ***After Right-click \> Reorder columns*** | ++=======================================================================+ +| ![](media/image817.png){width="3.800120297462817in" | +| height="2.891173447069116in"} | ++-----------------------------------------------------------------------+ + +## Annual summaries + +The data are now ready to produce annual (or other) summaries. So, use +***Climatic \> Prepare \> Climatic Summaries***. It should initially be +as shown in Fig. 6.3a. (If not, then you might be in a different data +frame, or you may not have followed the steps in the section above.) + +We are going to produce the annual totals. Fig. 6.3a also indicates it +is equally easy to produce the totals for any subset of the year. + ++-----------------------------------+----------------------------------+ +| ***Fig. 6.3a The climatic summary | ***Fig. 6.3b The summaries | +| dialogue*** | sub-dialogue*** | +| | | +| ***Climatic \> Prepare \> | | +| Climatic Summaries*** | | ++===================================+==================================+ +| ![](media/image821 | ![](media/image826.p | +| .png){width="3.101706036745407in" | ng){width="2.9698425196850393in" | +| height="3.6587226596675415in"} | height="3.166195319335083in"} | ++-----------------------------------+----------------------------------+ + +In Fig. 6.3a add the rainfall column and then press the Summaries +button. In the sub-dialogue ***untick the N Total***, and keep the ***N +Non Missing*** and the ***Sum*** as shown in Fig. 6.3b. Then press +***Return*** and ***Ok***. + +Now return to the dialogue and use the Rainday column instead of +rainfall. + +Also Press on the Summaries button again and untick the N Non Missing +checkbox from Fig. 6.3b. Press Return and Ok again. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 6.3c*** ***Fig. 6.3d*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image814.png){width="2.6389851268591427in" ![](media/image815.png){width="3.254145888013998in" + height="2.938444881889764in"} height="3.783175853018373in"} + + ------------------------------------------------------------------------------------------------------------ + +The results are in Fig. 6.3d. These data are now at the "year" levels +and there are 146 rows, i.e. years, from the 2 sites together. We see +that at Saltpond in 1944 the total rainfall was 724mm from 69 rain days. +So, the mean rain per rain day is over 10mm and sometimes considerably +so. For example, again from Fig. 6.3d in 1951 there was a total of +1428mm from 85 rain days. + +There were some missing values in the data, but we defer a discussion of +this topic to the next section. Here we have been conservative in that +the annual totals have been set to missing if there were any days +missing in that year. + +Graphs of the data can now be produced. The PICSA project includes +discussing time-series graphs with farmers. They must be simple to +produce, but also very clear. The special dialogue for this is +***Climatic \> PICSA \> Rainfall Graph***, Fig. 6.3e. + +In Fig. 6.3e, check you are using the correct (yearly) data frame and +complete it as shown. In the sub-dialogue, opt to add the mean line, but +(at this stage) without a label. + +In the sub-dialogue, click also on the Y-axis tab and set the lower +limit to 0 (zero). + ++-------------------------------------+--------------------------------+ +| ***Fig. 6.3e PICSA-style rainfall | ***Fig. 6.3f Sub-dialogue to | +| graphs*** | add lines*** | +| | | +| ***Climatic \> PICSA \> Rainfall | | +| Graph*** | | ++=====================================+================================+ +| ![](media/image81 | ![](media/image813.png | +| 9.png){width="3.3122484689413825in" | ){width="2.7570866141732284in" | +| height="3.08748687664042in"} | height="2.6320800524934382in"} | ++-------------------------------------+--------------------------------+ + + ----------------------------------------------------------------------- + ***Fig. 6.3g PICSA-style graph for 2 stations*** + ----------------------------------------------------------------------- + ![](media/image816.png){width="6.065343394575678in" + height="2.9547211286089237in"} + + ----------------------------------------------------------------------- + +It can be very useful for researchers and also intermediaries, to see +results from multiple stations. This is easy with R-Instat, where they +can be in the same data frame. Fig. 6.3h therefore shows another +example, with a facetted graph for 12 stations from xxx. + + ----------------------------------------------------------------------- + ***Fig. 6.3hPICSA-style rainfall graph for 12 stations from xxx*** + ----------------------------------------------------------------------- + + ----------------------------------------------------------------------- + +[Graph to add]{.mark} + +However, most farmers are particularly interested in the results from a +single station that is as close as possible to their location. Hence +once you have the appropriate graph for multiple stations, you can then +filter the data to look at each station in turn. Filtering is either +done from the right-click menu or from within each dialogue. + +Return to the ***previous PICSA dialogue*** and choose ***Data +Options*** to give the sub-dialogue shown in Fig. 6.3i + ++------------------------+---------------------------------------------+ +| ***Fig. 6.3i Define a | ***Fig. 6.3j Choose a single station*** | +| filter*** | | +| | | +| ***Climatic \> PICSA | | +| \> Rainfall Graph \> | | +| Data Options*** | | ++========================+=============================================+ +| ![](medi | ![](media | +| a/image818.png){width= | /image808.png){width="3.9102220034995625in" | +| "2.0657567804024497in" | height="2.5876093613298337in"} | +| height=" | | +| 2.5604385389326336in"} | | ++------------------------+---------------------------------------------+ + +Choose to define a new Filter and complete the resulting sub-dialogue as +shown in Fig. 6.3j. As shown in Fig. 6.3j, give the filter the same name +as the station. That will make it easy later. + +Now return to the PICSA dialogue. Choose the ***sub-dialogue*** and +change the lines to give ***terciles with labels.*** The resulting graph +for just Saltpond is in Fig. 6.3k. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 6.3k Single station with terciles*** ***Fig. 6.3l Graph for the second station*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image809.png){width="2.961254374453193in" ![](media/image788.png){width="2.897379702537183in" + height="2.9208737970253718in"} height="2.897379702537183in"} + + ----------------------------------------------------------------------------------------------------------- + +Repeat the filtering exercise above to ***set a filter for Tamale***. +The resulting graph with the line for the mean is in Fig. 6.3l. + +Similar graphs for the number of rain days is also sometimes needed for +PICSA. They are now very easy to produce. + +Return to the Climatic \> PICSA \> Rainfall Graph dialogue, and simply +change the Y-variable, + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 6.3m*** ***Fig. 6.3n*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image783.png){width="2.777380796150481in" ![](media/image779.png){width="3.2896248906386703in" + height="2.7827416885389327in"} height="3.2821511373578303in"} + + ------------------------------------------------------------------------------------------------------------ + +***Return to the dialogue*** again, press ***Data Option*** and choose +the filter you called ***Saltpond***, Fig. 6.3o. You don't need to +define the filter as that was done earlier. You can just keep using it. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 6.3o*** ***Fig. 6.3p*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image770.png){width="2.454096675415573in" ![](media/image789.png){width="3.489805336832896in" + height="2.736826334208224in"} height="3.489805336832896in"} + + ----------------------------------------------------------------------------------------------------------- + +Finally, in this section, we stress that the idea of the climatic menu +is simply to make it even easier to do common climatic analyses. By +"even easier" we mean easier than using the main dialogues in R-instat. +If what you would like to do is not (yet) possible with the climatic +menu it may still be possible with the ordinary use of R-Instat[^27]. It +is important that you remain in charge and are not limited by the +particular dialogues. As an example, suppose you would like to fit a +trend line to the rainfall data. The PICSA graphs permit horizontal +lines, but not trend lines. Perhaps the last graph, Fig. 6.3p has a +downward slope? + ++----------------------------------+-----------------------------------+ +| ***Fig. 6.3q Graph with | ***Fig. 6.3r Saltpond annual | +| "ordinary" dialogue*** | rainfall with trend line*** | +| | | +| ***Describe \> Specific \> Line | | +| Plot*** | | ++==================================+===================================+ +| ![](media/image768.p | ![](media/image775 | +| ng){width="2.9803674540682414in" | .png){width="3.053941382327209in" | +| height="2.744633639545057in"} | height="3.1782305336832897in"} | ++----------------------------------+-----------------------------------+ + +One way to check this possibility is through the "ordinary" graphics +dialogues in R-Instat. So, use ***Describe \> Specific \> Line Plot*** +and complete the dialogue as shown in Fig. 6.3q. The results are in Fig. +6.3t. They perhaps hint at a possible trend[^28]. If there is a trend + ++---------------------------------+------------------------------------+ +| ***Fig. 6.3s Analysis for | ***Fig. 6.3t Cumulative or | +| rainfall totals*** | Exceedance Graph*** | +| | | +| ***(Change Variable to | ***Climatic \> PICSA \> | +| sum_rainfall in Fig. 6.3q)*** | Cumulative/Exceedance Graph*** | ++=================================+====================================+ +| ![](media/image767.pn | ![](media/image764 | +| g){width="2.8972101924759404in" | .png){width="3.1671128608923884in" | +| height="3.0358169291338584in"} | height="3.575345581802275in"} | ++---------------------------------+------------------------------------+ + +If there is a trend at Saltpond, perhaps it should also be evident in an +analysis of the annual totals. Fig. 6.3s shows this is not the case. + +Our aim in the above discussion is primarily to discuss the value of the +"ordinary" R-Instat dialogues, so users do not restrict all their +analysis to the climatic menu. We return to trend analysis in Section +6.6, when we process the temperature data. + +Time series are not the only way to display the annual summaries. Use +***Climatic \> PICSA \> Cumulative/Exceedance Graph***, and complete the +dialogue as shown in Fig. 6.3t. If the filter is still operating, then +remove it by including ***Data Options*** and choosing ***no_filter*** +in the resulting subdialogue, Fig. 6.3u. The resulting graph is in Fig. +6.3v. + ++----------------------------------+-----------------------------------+ +| ***Fig. 6.3u Removing a | ***Fig. 6.3v Cumulative | +| filter*** | distributions*** | +| | | +| ***(Data Options from | | +| dialogue)*** | | ++==================================+===================================+ +| ![](media/image769.p | ![](media/image797. | +| ng){width="2.9515409011373577in" | png){width="3.0426082677165356in" | +| height="3.9029779090113736in"} | height="3.2070734908136482in"} | ++----------------------------------+-----------------------------------+ + +Statisticians like cumulative distributions, but many users prefer +exceedance graphs. If that is your wish, then return to the dialogue in +Fig. 6.3t and tick the box for an ***Exceedance Graph***. The result is +in Fig. 6.3w. + +These are just the inverse of each other. Starting with an amount -- on +the x-axis, you can read the probability of the total rainfall being +less than this amount (cumulative graph) or greater than this amount +(exceedance graph). So, if you need 800mm for a particular crop, then +the exceedance graph informs you there is about a 75% chance of getting +this amount, or more, at Saltpond and about a 90% chance at Tamale. The +cumulate graph would show a 25% or 10% chance of failure, i.e. of +getting less than this amount. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 6.3w Exceedance graph*** ***Fig. 6.3x Exceedance graph for rain days*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image824.png){width="2.8365912073490813in" ![](media/image799.png){width="2.862159886264217in" + height="2.9799201662292214in"} height="3.0429265091863518in"} + + ------------------------------------------------------------------------------------------------------------ + +Finally change the variable in the dialogue in Fig. 6.3t to the number +of rain days, to give the graph in Fig. 6.3x. The shapes are the same. +The steeper the graphs the smaller the variability and Fig. 6.3v, w and +x all show the totals are slightly more variable at Saltpond, compared +to Tamale. This can be confirmed numerically using Describe \> Specific +\> Summary Tables. Results are in Fig. 6.3y. + + ----------------------------------------------------------------------- + Fig. 6.3y Numerical results + ----------------------------------------------------------------------- + ![](media/image804.png){width="3.020988626421697in" + height="3.3265594925634296in"} + + ----------------------------------------------------------------------- + +The standard deviation of the annual totals is 273mm at Saltpond +compared to 193mm at Tamale, while the means are relatively close. +Similarly the standard deviation for the number of rain days is 13 days +at Saltpond compared to 9 days at Tamale. + +This points to looking at the data in more detail. Hence monthly +summaries are examined in the next section. + +## More detailed summaries - rainfall + +For many applications it is important to know about the seasonality of +the data. In this section we therefore consider monthly (rather than +annual) totals. + +In Fig. 6.2g [(link)]{.mark} we used the Climatic \> Dates \> Use Date +dialogue to add the months to the daily data and these are used in this +section. Other possibilities with this dialogue are to produce quarters, +dekads (10-day periods), pentades or weeks. Any of these periods can be +used instead. + +Use ***Climatic \> Prepare \> Climatic Summaries***. It was used +initially in Fig. 6.3a to produce the annual summaries. + + ------------------------------------------------------------------------------------------------------------ + ***Fig.6.4a*** ***Fig. 6.4b*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image801.png){width="3.604351487314086in" ![](media/image780.png){width="2.3751224846894137in" + height="4.090487751531058in"} height="3.6876891951006123in"} + + ------------------------------------------------------------------------------------------------------------ + +In Fig. 6.4a change the tab at the top to Annual + Within and complete +as shown. Click on Summaries and choose just the 2 statistics shown in +Fig. 6.4b. Then press Return and Ok. + +Now change from rainfall to Rainday in Fig. 6.4a and use the Summaries +to just get the Sum, i.e. untick the N Non Missing. + +The resulting data frame is shown in Fig. 6.4c. There are 1751 rows of +data, i.e. the 141 years for the 2 stations, times 12, because the data +are now monthly. For example, at Saltpond, January 1944 had a total of +41mm from 2 rain days, whie June of the same year had 22 rain days and a +total of 256mm. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 6.4c*** ***Fig. 6.4d*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image793.png){width="3.071080489938758in" ![](media/image792.png){width="2.824102143482065in" + height="3.2467333770778652in"} height="3.2376738845144355in"} + + ----------------------------------------------------------------------------------------------------------- + +One way to show the seasonal pattern is through boxplots. Use +***Describe \> Specific \> Boxplot*** and complete the dialogue as shown +in Fig. 6.4d. Use the ***Plot Options***, Fig. 6.4e, to include the +stations as facets and give the results as in Fig 6.4f[^29]. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 6.4e*** ***Fig. 6.4f*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image781.png){width="2.658153980752406in" ![](media/image774.png){width="3.3286668853893264in" + height="2.7355227471566055in"} height="3.287153324584427in"} + + ------------------------------------------------------------------------------------------------------------ + +In Fig. 6.4d, change the variable to ***sum_Rainday*** to also give the +graph in Fig.6.4g. + +Both graphs show the different seasonal pattern at the 2 sites. June is +the peak month of the rainy season at Saltpond and there is one year +where the monthly total exceeded 800mm. In June, Fig. 6.4g also shows on +average about half the days are rainy at Saltpond and that is similar to +the number of rain days in Tamale in September. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 6.4g*** ***Fig. 6.4h*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image776.png){width="3.1435793963254595in" ![](media/image751.png){width="2.916351706036745in" + height="3.0935706474190727in"} height="2.7955577427821523in"} + + ------------------------------------------------------------------------------------------------------------ + +Line plots can show the seasonal and time-series nature of the data +together. As an example, use ***Describe \> Specific \> Line*** and +complete as shown in Fig. 6.4h. In the Plot Options, use the Month as +the factor for the facets, to give the graph as shown in Fig. 6.4i[^30] + + ----------------------------------------------------------------------- + ***Fig. 6.4i*** + ----------------------------------------------------------------------- + ![](media/image759.png){width="6.0539687226596675in" + height="2.929728783902012in"} + + ----------------------------------------------------------------------- + +The results in Fig. 6.4i show the interesting nature of the June +rainfall totals at Saltpond and that the extreme monthly total was in +1962. It also shows the way Tamale consistently has more rainfall than +Saltpond in July to September. + +The same type of graph can also be produced for the number of raindays, +see Fig. 6.4j for a different layout[^31]. It also shows that the +initial analysis of rainfall trends using the annual rainfall totals may +have been over-simplistic. If trends do exist, then the next step could +be to examine whether they are consistent, or not, during the year, i.e. +for the different months. Thus, if rainfall seems to be decreasing, then +is that in all months/seasons, or just in a part of the year. This issue +is examined further in Section 6.6 when analysing the temperature +records. + + ----------------------------------------------------------------------- + ***Fig. 6.4j Time series graphs for the 2 stations by month*** + ----------------------------------------------------------------------- + ![](media/image757.png){width="6.067823709536308in" + height="2.9034930008748905in"} + + ----------------------------------------------------------------------- + +In reports it can be useful to include the daily data for a sample of +the years. Fig. 6.2k shows the daily data for Saltpond in 1962[^32], +when June had exceptionally high rainfall. + + ----------------------------------------------------------------------- + ***Fig. 6.2k Daily data for Saltpond for 1962*** + ----------------------------------------------------------------------- + ![](media/image790.png){width="2.9407699037620296in" + height="4.576652449693788in"} + + ----------------------------------------------------------------------- + +There is nothing obviously wrong with the June data, but they look +sufficiently curious, that a check back to the paper records and perhaps +with nearby stations would seem sensible. + +## Options for Missing values + +Analyses need to be able to take account of missing values in the data. +Statistical packages are usually "sensible" in their handling of missing +values and R is no exception. However, defining how they are to be +handled in each circumstance is the responsibility of the user and we +consider here the options in R and R-Instat. + +To illustrate the problem Fig. 6.5a gives an inventory plot for the +Ghana data. It shows there is hardly a problem for the rainfall data. +The measurement of the other elements started later and there is a +slightly greater proportion of missing values. + ++----------------------------------+-----------------------------------+ +| ***Fig. 6.5a*** | ***Fig. 6.5b Default annual | +| | summaries of rainfall*** | +| ***Climatic \> Check Data | | +| Inventory*** | ***From \> Climatic \> Prepare \> | +| | Climatic Summaries*** | ++==================================+===================================+ +| ![](media/image744.p | ![](media/image708. | +| ng){width="3.0282392825896762in" | png){width="3.0918077427821524in" | +| height="3.141479658792651in"} | height="3.154325240594926in"} | ++----------------------------------+-----------------------------------+ + +Fig. 6.5b shows some of the annual totals that were used for analysis in +Section 6.3. A column in Fig. 6.3b shows also the number of missing +values each year. It shows there were missing values in the last 2 years +and the annual summary has therefore been set to missing. This is "safe" +but it may be disappointing as the last 2 years totals have therefore +been set to missing, and have therefore been excluded from the analysis. + +Repeating this point, the default in R, and hence in R-Instat, is that +when there are any missing values (even just one day in the year) then +the summary is set to missing. + +The opposite approach is also simple to undertake. This is where all the +missing days are omitted, and the summary is then calculated using the +remaining data. This uses the same ***Climatic \> Prepare \> Climatic +Summaries*** dialogue, but check the box labelled ***Omit Missing +Values***. + ++----------------------------------+-----------------------------------+ +| ***Fig. 6.5c Data with both | ***Fig. 6.5d Years with missing | +| summaries*** | values*** | +| | | +| | ***Use Right-click \> Filter with | +| | (Total == NA)*** | ++==================================+===================================+ +| ![](media/image748. | ![](media/image746 | +| png){width="2.973963254593176in" | .png){width="3.130285433070866in" | +| height="3.0356014873140857in"} | height="1.9515627734033245in"} | ++----------------------------------+-----------------------------------+ + +The results are in the last 2 columns of Fig. 6.5c. They show the total +rainfall to be 665mm in Tamale in 2015 from 53 rain days -- quite low +compared with other years. In 2016 the values are 998mm with 67 rain +days. + +R-Instat has added intermediate options described below. Before that, we +consider what more can be done with just these 2 extremes. + +Fig. 6.5d shows the annual data for those years where there are missing +values. There are just 9 years overall, 5 at Saltpond and 4 at Tamale. +Hence, with data from 1944 to 2016, this leaves over 60 years of data at +each site. Hence, one option is to accept the omission of those years +and proceed, which is what was done in Section 6.3. + +A second possibility results from the observation, Fig. 6.5d, that in 3 +of the 9 years there was just a single day missing in the year. Perhaps +it is reasonable to accept the totals in those years and then just have +6 missing years overall. + +To go further we now look in more detail at the daily data. One +coincidence is that both sites have missing data in 1949 and an +examination is that this is for the same 3 months, i.e. from October to +December. We don't like coincidences and wonder why. + +More generally, the other years have just one or two months missing. If +that were between November and February -- when there is usually little +rain, then perhaps the total could be accepted. In this case that is not +the case. For example August 2015 is missing in Tamale, and this perhaps +explains why the total and number of rain days was low in that year. +Omitting it, as we did, in Section 6.3, was sensible. + +A more major possibility is that Saltpond collects data every 3 hours +and Tamale collects hourly data. So perhaps the Met service has more +detailed records that could help to infill the missing daily values. + +To see further options for missing values, return to the ***Climatic \> +Prepare \> Climatic Summaries*** dialogue. Choose the ***Summaries*** +button and the ***Missing Options*** tab, Fig. 6.5e. The setting we +chose of 27 means that any year with a month or more missing, gives a +missing summary. In this case, as shown in Fig. 6.5f, it has just given +the annual totals for the 3 years with just a single missing day. + +In some examples the third option in Fig. 6.5e becomes important. +Sometimes the data, as supplied, starts, or ends during a year. In this +instance the first and/or the last year may be incomplete. For example +the Tamale data in 1944 start in February, rather than January. This was +not an issue, because January is relatively dry, but had they started in +July 1944 that would have been different and should have been allowed +for. + +In Fig. 6.5e this corresponds to setting the Option Not Missing to about +340 (days) rather than the Missing Days to 27. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 6.5e*** ***Fig. 6.5f*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image773.png){width="2.6578444881889762in" ![](media/image772.png){width="3.4301706036745405in" + height="2.0866196412948383in"} height="2.027972440944882in"} + + ------------------------------------------------------------------------------------------------------------- + +A different, and more major, operation is to try to "infill" or complete +the data, where there are missing values. There is a wide variety of +methods, ranging from input of the mean value from that day of the year +to using estimates from a neighbouring station, or from satellite +observations. They are considered in [Chapter xxx]{.mark}. + +## Processing temperature data + +The ***Climatic \> Prepare \> Climatic Summaries*** dialogue applies to +any element. With the Ghana data the annual temperature summaries can +therefore be added to those of the rainfall calculated in Section 6.3. + ++-----------------------------------+----------------------------------+ +| ***Fig. 6.6a*** | ***Fig. 6.6bInclude temperature | +| | extremes*** | +| ***Climatic \> Prepare \> | | +| Climatic Summaries*** | | ++===================================+==================================+ +| ![](media/image778. | ![](media/image782. | +| png){width="3.0125404636920385in" | png){width="2.936470909886264in" | +| height="3.210363079615048in"} | height="2.6364774715660544in"} | ++-----------------------------------+----------------------------------+ + +Complete the dialogue as shown in Fig. 6.6a and then the Summaries +sub-dialogue as shown in Fig. 6.6b. This produces the annual mean and +the annual extremes of the daily minimum temperatures. + +Then use the Missing Options tab, shown in Fig. 6.6b and complete it as +shown earlier in Fig. 6.5e. This will give the annual summaries if there +are a few missing days, but not if a month or more is missing. + +Once you have these summaries, return to the dialogue in Fig. 6.6a and +replace the minimum by the maximum temperatures. + +The measurement of temperatures started in 1960, hence the summary data +are now filtered, prior to producing graphs. + ++------------------------------------+---------------------------------+ +| ***Fig. 6.6c Annual temperature | ***Fig. 6.6d*** | +| data*** | | +| | ***Describe \> Specific \> Line | +| ***Following Right-click \> Filter | Plot*** | +| \> (Year \> 1959)*** | | ++====================================+=================================+ +| ![](media/image752 | ![](media/image760.pn | +| .png){width="3.1401574803149606in" | g){width="2.8428937007874016in" | +| height="2.157737314085739in"} | height="2.385305118110236in"} | ++------------------------------------+---------------------------------+ + +Use the ***Describe \> Specific \> Line Plot*** dialogue, and complete +as shown in Fig. 6.6d. In the plot options, choose to ***Facet by the +station***[^33]. + + ----------------------------------------------------------------------- + ***Fig. 6.6e*** + ----------------------------------------------------------------------- + ![](media/image765.png){width="5.985853018372703in" + height="3.079802055993001in"} + + ----------------------------------------------------------------------- + +In Fig. 6.6e the data on the extremes must be treated with caution, +because they are the values on a single day each year. There does appear +to be a trend in the mean for Tmax, particularly at Tamale. This can be +confirmed using the ***Model \> Three Variables \> Fit Model*** +dialogue, which is described in more detail in Chapter xxx. The results +show an estimated increase of 2.3°C for Tamale. The estimated increase +for Saltpond was just 0.4°C and that was not statistically significant. + +The graph can be repeated for the minimum temperatures (not shown). +Instead, Fig. 6.6 shows Tmax and Tmin together. The estimated trend in +Tmin is an increase of 2.0°C per 100 years and is almost the same at the +two sites. Fig. 6.6f also shows clearly the much greater diurnal range +at Tamale, compared to Saltpond. + + ----------------------------------------------------------------------- + ***Fig. 6.6f*** + ----------------------------------------------------------------------- + ![](media/image753.png){width="6.064581146106737in" + height="3.0027263779527558in"} + + ----------------------------------------------------------------------- + +In Fig. 6.6f (and earlier in Fig. 6.6e) the mean line for Saltpond looks +odd. In this Chapter the quality control steps, discussed in Chapter 5, +have been omitted and, as usual, that was not a good idea! Fortunately, +the daily data are available, so we return to these and do a simple time +series plot of the daily records, Fig. 6.6g. This indicates an oddity in +the data in about 1974. + ++-------------------------------------+--------------------------------+ +| ***Fig. 6.6g Tmax for Saltpond | ***Fig. 6.6h Monthly means for | +| daily data by Date*** | Tmax*** | +| | | +| ***From Describe \> Specific \> | | +| Line Plot*** | | ++=====================================+================================+ +| ![](media/image7 | ![](media/image777.png | +| 50.png){width="3.320465879265092in" | ){width="2.7201159230096237in" | +| height="2.6814621609798777in"} | height="1.5in"} | ++-------------------------------------+--------------------------------+ + +This is confirmed in Fig. 6.6h, where the monthly means for Tmax at +Saltpond are displayed for the 1970s[^34]. They show a drop of about 2 +degrees from May 1974. + +The next step in this small investigation is to display the daily +records, as shown in Fig. 6.6i. Looking at the daily data it became +clear they were originally recorded in degrees Fahrenheit and (at least +usually) just to the nearest degree. Hence, for clarity, the Tmax data +were transformed back into Fahrenheit[^35] and then displayed, as shown +in Fig. 6.6i. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 6.6i*** ***Fig. 6.6j*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image771.png){width="2.698963254593176in" ![](media/image749.png){width="3.2956649168853893in" + height="4.114812992125985in"} height="3.85672353455818in"} + + ------------------------------------------------------------------------------------------------------------ + +Fig. 6.6i confirms the change was in May 1974, or possibly 30 April. In +most years temperatures in May are about 0.5°C lower than April, or +about 1°F. In the 1974 record it is 4 or 5 degrees Fahrenheit lower. + +Fig. 6.6j therefore repeats the analysis, shown earlier in Fig. 6.6e, +but just from 1975. The results are now consistent with the data from +Tmin at Saltpond and with the Tamale data. The trend for the mean is +slightly higher at 3.2°C per 100 years. + +Analyses of the temperature records, like the above, are common. There +is an immediate follow-up question that is often omitted, namely is the +trend in the temperatures consistent through the year, or is it perhaps +different in the rainy and dry seasons? + +As in Section 6.4 for the rainfall, we therefore extend the analysis and +examine the monthly data. + +## More detailed summaries - temperatures + +We examine the possible trends in Tmin and Tmax, at the two stations, +monthly. A specific question is whether there is evidence for a +different trend in some months, compared to others. + +For simplicity, given the inhomogeneity of Tmax at Saltpond, the daily +data are first filtered so only the data from 1975 are analysed, Fig. +6.7a. + ++--------------------------------+-------------------------------------+ +| ***Fig. 6.7a Filter the data | ***Fig. 6.7bMonthly summaries*** | +| (optional)*** | | +| | ***Climatic \> Prepare \> Climatic | +| ***Right-click \> Filter \> | Summaries*** | +| Define new*** | | +| | ***Only summary is the mean*** | ++================================+=====================================+ +| ![](media/image701.png | ![](media/image70 | +| ){width="2.7416404199475064in" | 6.png){width="3.1761122047244092in" | +| height="2.041117672790901in"} | height="3.4447670603674543in"} | ++--------------------------------+-------------------------------------+ + +Then use ***Climatic \> Prepare \> Climatic Summaries***, Fig. 9.7b. In +Fig. 9.7b click on ***Summaries*** and just choose the ***mean***. + +Then repeat for Tmax, to give the data as in Fig. 6.7c. + ++-----------------------------------+----------------------------------+ +| ***Fig. 6.7c Monthly means for | ***Fig. 6.7d*** | +| Tmin and Tmax*** | | +| | ***Describe \> Specific \> Line | +| | Plot*** | +| | | +| | ***(Also use Plot Options with | +| | Month a Facet)*** | ++===================================+==================================+ +| ![](media/image747. | ![](media/image704. | +| png){width="3.0479516622922134in" | png){width="2.974469597550306in" | +| height="3.2115999562554682in"} | height="2.6106496062992126in"} | ++-----------------------------------+----------------------------------+ + +Then ***Describe \> Specific \> Line Plot***, as shown in Fig. 6.7d +indicates a reasonably consistent slope at both sites, for each of the +months, Fig. 6.7e. + + ----------------------------------------------------------------------- + ***Fig. 6.7e Trends by month for the two stations*** + ----------------------------------------------------------------------- + ![](media/image705.png){width="6.119820647419073in" + height="2.979225721784777in"} + + ----------------------------------------------------------------------- + +However, this does not quite answer the question posed, namely that the +trend is independent of the month, i.e. it is the same in each month. + +The modelling dialogues are needed to address this hypothesis. The menu +is shown in Fig. 6.7f. + ++-------------------------+--------------------------------------------+ +| ***Fig. 6.7f The Model | ***Fig. 6.7g Filter by Station*** | +| menu*** | | +| | ***Right-click \> Filter \> Define New*** | ++=========================+============================================+ +| ![](m | ![](media/ | +| edia/image745.png){widt | image703.png){width="3.8126957567804025in" | +| h="2.062606080489939in" | height="2.2848392388451444in"} | +| height= | | +| "2.4237357830271216in"} | | ++-------------------------+--------------------------------------------+ + +In the modelling menu, Fig. 6.7f, the ***One Variable*** sub-menu +permits a wide variety of distributions to be fitted to a single +variable, i.e. a single column of data. + +Moving down in Fig. 6.7f the Two Variables sub-menu is designed to model +a single y (dependent) variable against one x (independent) variable. An +example would be Tmax against the year. That would be ok if we had +annual data, as in Section 6.6, but we have the monthly data. + +In our case we need at least three variables. The dependent is initially +Tmax and this is modelled as a function of both the year and month, i.e. +we have a total of 3 variables. + +Once you use the modelling dialogues as a routine, then the General +dialogues are usually used, or (below the line in Fig. 6.7f) the even +more general Model dialogue, where you just give an R command. + +To simplify the modelling, first filter for a single station, Fig. 6.7g. +Call the filter ***Saltpond*** (rather than Filter1). + ++----------------------------------+-----------------------------------+ +| ***Fig. 6.7h Make a new data | ***Fig. 6.7i*** | +| frame*** | | +| | ***Model \> Three Variables \> | +| | Fit Model*** | ++==================================+===================================+ +| ![](media/image702.p | ![](media/image699 | +| ng){width="2.9819280402449695in" | .png){width="3.089155730533683in" | +| height="2.9965923009623796in"} | height="2.7298272090988625in"} | ++----------------------------------+-----------------------------------+ + +Return. to the main dialogue and opt to ***Apply as Subset***, Fig. +6.7h. + +Now, for the first model. Use ***Model \> Three Variables \> Fit +Model*** with the new Saltpond data frame and complete it as shown in +Fig. 6.7i. Initially you have a '\*' between the year and month +variables. This fits a different slope for each month, as shown earlier, +for Saltpond, in Fig. 6.7e. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 6.7j*** ***Fig. 6.7k*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image564.png){width="3.3083158355205597in" ![](media/image572.png){width="2.707610454943132in" + height="1.2852865266841644in"} height="1.6346784776902887in"} + + ------------------------------------------------------------------------------------------------------------ + +A lot of results are produced. Key information is the ANOVA table shown +in Fig. 6.7j. This shows that there is a clear ***trend (year***) and +***seasonality (month_abbr)***. It also shows that there is no evidence +of the interaction, i.e. the ***year:month_abbr*** explains very little +variation in the data, and what it explains is not statistically +significant. + +Hence, the separate slopes each month are not needed. A parallel line +model is adequate. + +So, return to the dialogue in Fig. 6.7i and change the '\*' into a '+'. +At the same time, click on the Display Options and choose to Save the +Fitted Values, Fig. 6.7k. + +Before examining the results there is one small (optional) change that +sometimes simplifies the interpretation. With the year as given, i.e. +starting in 1975, the origin is almost 2000 years ago. Instead you could +make 1975 as the origin, using ***Prepare \> Column: Calculations \> +Calculate*** and making a new column, say ***yr \<- year -1975***. Then +use ***yr*** instead of year in the model. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 6.7l*** ***Fig. 6.7m*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image563.png){width="2.4777220034995624in" ![](media/image570.png){width="3.5530839895013124in" + height="2.535048118985127in"} height="2.508620953630796in"} + + ------------------------------------------------------------------------------------------------------------- + +Interpreting the model in Fig. 6.7l the trend (yr coefficient) is a +possibly disturbing 3.4 degrees per 100 years. For the seasonality, the +mean temperature in January 1975 was estimated as 29.9°C. February and +March were each estimated to be an average of 0.6°C higher, i.e. about +30.5 degrees, while August had the lowest average temperatures. + +In some stations there is "local warming" where the station surroundings +are more built up. Hence this should be checked, before assuming the +large trend per year is a feature of global warming. + +A similar analysis for Tmin, again shows no evidence that a different +trend is needed each month. Saving those fitted values also, as shown in +Fig. 6.7m permits the parallel lines to be plotted, using ***Describe \> +Specific \> Line Plot***, as shown in Fig. 6.7n + + ----------------------------------------------------------------------- + ***Fig. 6.7n Observed and fitted temperatures at Saltpond*** + ----------------------------------------------------------------------- + ![](media/image565.png){width="6.061395450568679in" + height="2.9729440069991253in"} + + ----------------------------------------------------------------------- \ No newline at end of file diff --git a/Chapter_7_Tailored_Products.qmd b/Chapter_7_Tailored_Products.qmd new file mode 100644 index 0000000..476ac15 --- /dev/null +++ b/Chapter_7_Tailored_Products.qmd @@ -0,0 +1,1399 @@ +# Tailored Products +## Introduction + +Products by NMSs include regular reports, such as climate normal and +10-day bulletins through the rainy season. It is useful if they also +produce "tailored products" that correspond to the specific demands of +users. + +In many countries, one such product is the "start of the rains". This is +usually not a single fixed definition but may depend on factors such as +the crop being planted and the type of soil. The results in this chapter +are mainly based on an analysis of the daily rainfall data. + +In early years on this type of work, e.g. (Stern, Dennett, & Dale, 1982) +some researchers questioned the need for the daily (rainfall) data. This +was often because sufficient results could be obtained through an +analysis of monthly totals supplemented, when needed, with 10-day +(dekads) or weekly totals. + +This was partly due to a mis-understanding that the analysis would use +the daily values directly. Instead, the daily values are simply used in +an initial step to calculate appropriate summaries and these are on a +yearly basis. The results are then presented in the same ways as the +rainfall totals and total number of rain days in Chapter 6. + +## Getting ready + +One of the examples used in this Chapter is from Moorings in Southern +Zambia. This has rainfall data from early 1922. Use ***Open From Library +\> Instat \> Browse \> Climatic \> Zambia*** and open the file called +***Moorings.rds***. + ++-----------------------------+----------------------------------------+ +| ***Fig. 7.2a*** | ***Fig. 7.2b*** | +| | | +| ***Climatic \> Dates \> Use | | +| Date*** | | ++=============================+========================================+ +| ![](media/image562.png){w | ![](media/imag | +| idth="2.5082042869641294in" | e561.png){width="3.4951345144356956in" | +| he | height="3.6876377952755908in"} | +| ight="3.754517716535433in"} | | ++-----------------------------+----------------------------------------+ + +A feature of Moorings, like many stations in Southern Africa, is that +the rainy season is from November to April. (This is roughly the mirror +image of the Sahel, where the rains are from May to October.) Hence the +year is "shifted" and we choose to start from August, Fig. 7.2a. + +Use the ***Climatic \> Dates \> Use Date*** dialogue, Fig. 7.2a, and +complete as shown in Fig. 7.2b. Set the starting month to August. + +The resulting data, after reordering the columns, is shown in Fig. 7.2b. + +In Fig. 7.2b 1^st^ March 1922 is given as the season starting in 1921. +The year variable has also been given as a factor, to emphasise it is +the 1921-1922 season. The variable s_doy (shifted day of year) is 214 on +1^st^ March. It is the day number in the season starting from 1^st^ +August as day 1. + +Finally, in Fig. 7.2b, there seems nothing different about the +***month*** variable. But ***right-click*** on the column and choose +***Levels/Labels***, Fig. 7.2c. This shows, Fig. 7.2d, that the months +are now labelled from August, so all tables and graphs will now appear +from August to July, rather than from January to December. ***Close*** +the ***Levels/Labels*** dialogue. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 7.2c Choose Levels/Labels*** ***Fig. 7.2d Factor levels start from August*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image556.png){width="2.129636920384952in" ![](media/image560.png){width="3.157333770778653in" + height="2.9701476377952756in"} height="2.952107392825897in"} + + ----------------------------------------------------------------------------------------------------------- + +Now use the ***Climatic \> Define Climatic Data*** dialogue. + ++---------------------------------+------------------------------------+ +| ***Fig. 7.2e Define Moorings as | ***Fig. 7.2f The Climatic \> | +| climatic*** | Prepare menu*** | +| | | +| ***Climatic \> Define Climatic | | +| Data*** | | ++=================================+====================================+ +| ![](media/image557.p | ![](media/image54 | +| ng){width="2.620744750656168in" | 5.png){width="3.168616579177603in" | +| height="3.44834864391951in"} | height="2.981884295713036in"} | ++---------------------------------+------------------------------------+ + +This dialogue should fill automatically, as shown in Fig. 7.2e. Check +that the dates define ***unique rows,*** Fig. 7.2e, and press ***Ok***. + +We now assume use of the ***Climatic \> Check Data*** dialogues, +described in Chapter 5, and go straight to the ***Climatic \> Prepare*** +menu, Fig. 7.2f***.*** Start with the ***Climatic \> Prepare \> +Transform*** dialogue, Fig. 7.2g. Complete it as shown to produce a new +variable, called rainday, see Fig. 7.2h, that facilitates the analysis +of the number of rain days. A rain day is defined as one with more than +0.85mm. You can choose a different threshold if you wish. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 7.2g*** ***Fig. 7.2h*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image539.png){width="2.4147583114610676in" ![](media/image531.png){width="3.542851049868766in" + height="3.2575568678915134in"} height="3.2051870078740157in"} + + ------------------------------------------------------------------------------------------------------------ + +Now use the ***Climatic \> Prepare \>*** ***Climatic Summaries*** +dialogue, Fig. 7.i + ++-----------------------------------+----------------------------------+ +| ***Fig. 7.2i Getting annual | ***Fig. 7.2j Annual level data | +| summaries*** | frame*** | +| | | +| ***Climatic \> Prepare \> | ***(Then also just sum for | +| Climatic Summaries*** | variable raindays)*** | +| | | +| ***Summaries: N not missing and | | +| sum*** | | ++===================================+==================================+ +| ![](media/image523. | ![](media/image553. | +| png){width="2.9917727471566056in" | png){width="2.510919728783902in" | +| height="3.5300656167979003in"} | height="3.577926509186352in"} | ++-----------------------------------+----------------------------------+ + +Most of the dialogue, in Fig. 7.2i, should have completed automatically. +If not, then either the data frame was not defined as climatic, or you +are on the wrong data frame. + +In Fig. 7.2i, include the ***rain*** variable. Press the ***Summaries*** +button and choose just the ***Number not Missing*** and the ***Sum***. +The result should be a new annual data frame with 3 columns. + +In Fig. 7.2i, change the variable to ***rainday*** and this time, just +get the ***sum*** as the only summary. + +The resulting annual data frame is shown in Fig. 7.2j. The results show, +for example, that the 1922/23 season had a total of 853mm from 75 rain +days. Further columns will now be added, that give the start of the +rains each year, etc. + +## **Start of the rains** + +Return to the daily data and use ***Climatic \> Prepare \> Start of the +Rains***, see Fig. 7.2f. + +The dialogue is shown in Fig. 7.3a. If it is not automatically completed +as in Fig. 7.2i, then either you did not define the data as climatic +(Fig. 7.2e), or you are on the wrong data frame. + ++-----------------------------------------------------------------------+ +| ***Fig. 7.3a Start of the rains dialogue*** | +| | +| ***Climatic \> Prepare \> Start of the Rains*** | ++=======================================================================+ +| ![](media/image537.png){width="5.065784120734908in" | +| height="4.630577427821522in"} | ++-----------------------------------------------------------------------+ + +This is the first "tailored" product, i.e. there is no fixed definition. +What is needed is a definition that corresponds as closely as possible +to something used by farmers -- perhaps for a specified crop. + +The first decision is the earliest possible planting date. If there were +rain in Moorings on 1^st^ October it would almost certainly be ignored, +because it would probably be followed by a long dry spell. + +As an example, we suggest 15^th^ November as the earliest date. Then +also 15^th^ January as the latest date, i.e. after then it would not be +worth planting. + +In Fig. 7.3a, press the Day Range button and complete the sub-dialogue +as shown in Fig. 7.3b. + +After returning to Fig. 7.3a change the ***2 days to 3 days*** and +choose to also ***save the Date*** column. Then press ***Ok***. The full +definition is then: + +***Event 1:*** "The first occasion from 15^th^ November with more than +20mm within a 3-day period." + +The resulting data are in Fig. 7.3c. The Start of the rains dialogue has +added 2 more columns to the yearly data frame, one giving the day number +(from 1 August) and the other giving the date. In the 1922/23 season the +day was 119 or 27 November, while it was also in late November for the +following two seasons. + +The start_doy column is used in the further analysis. The start_date +column is just to assist interpretation. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 7.3b*** ***Fig. 7.3c*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image526.png){width="3.0814129483814523in" ![](media/image521.png){width="3.0145188101487315in" + height="2.829251968503937in"} height="3.4613035870516184in"} + + ------------------------------------------------------------------------------------------------------------- + +With the start date, or even with the totals from Section 7.2, you could +proceed straight to a PICSA-type graph. + +Use ***Climatic \> PICSA \> Rainfall Graph***. Include the +***start_doy*** variable, and then the ***PICSA options*** Fig. 7.3d. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 7.3d*** ***Fig. 7.3e Sub-dialogue*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image541.png){width="3.0023589238845143in" ![](media/image522.png){width="3.0185444006999127in" + height="2.9970253718285216in"} height="2.2601170166229223in"} + + ------------------------------------------------------------------------------------------------------------- + +The sub-dialogue in Fig. 7.3e is used to display the ***Y-axis*** as +dates, rather than day numbers. Use also the ***Lines*** tab to add a +line for the mean, and possibly also the ***X-Axis*** to untick the +angle for the labels. The resulting graph is in Fig. 7.3f. + +The graph shows the mean starting day was 28^th^ November. There was +just one year with a starting date in January. There were also 10 years +where the starting date was on the lower limit of 15^th^ November. +Perhaps the earliest date should have been even earlier? + +As a small investigation, change the names of the two columns +(***right-click, Rename***). Then use the ***Climatic \> Prepare \> +Start of the Rains*** dialogue again, changing the earliest start date +to 1^st^ November[^36]. The definition is now: + +***Event 2:*** "The first occasion from 1^st^ November with more than +20mm within a 3-day period." + +Then the PICSA rainfall graph is run again (unaltered) giving the graph +in Fig. 7.3g. The mean is now 9 days earlier. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 7.3f Start of the rains from 15 November*** ***Fig. 7.3g Start from 1^st^ November*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image546.png){width="2.985117016622922in" ![](media/image547.png){width="3.0534448818897637in" + height="2.325653980752406in"} height="2.330170603674541in"} + + ------------------------------------------------------------------------------------------------------------ + +There are other components of the Start of the Rains dialogue that can +optionally be used. For example, in India a definition (for the Summer +monsoon) is of the form: + +***Event 3:*** First occasion from 1 June with more than 25mm in 5 days, +or which at least 3 days are rainy. + +This uses the Number of Rainy Days checkbox in Fig. 7.3a. + +The third checkbox in Fig. 7.3a is called Dry Spell. Events 1 and 2 can +be considered as defining planting opportunities, while if a dry spell +condition is added, this might define a successful planting. + +***Rename*** the last columns that were produced -- so they are not +overwritten. + +Then return to the ***Climatic \> Prepare \> Start of the Rains*** +dialogue and check the ***Dry Spells*** checkbox, Fig. 7.3h. The +definition is now: + +***Event 4:*** First occasion from 1^st^ November with more than 20mm in +3 days, and no dry spell of more than 9-days in the next 3 weeks (21 +days). + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 7.3h*** ***Fig. 7.3i*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image600.png){width="2.9236253280839897in" ![](media/image548.png){width="3.1584995625546806in" + height="1.2810498687664043in"} height="3.1205599300087488in"} + + ------------------------------------------------------------------------------------------------------------- + +The data resulting from Events 1, 2 and 4 are shown in Fig. 7.3i. They +show that in 1965, with Event 2, there was a planting opportunity on 13 +November, but that was not successful. The date of the successful +planting was 20^th^ December. + +There was just one year, namely 1972, where there was no successful +planting by the imposed limit of 15 January. + +Event 2 and Event 4 can be compared. Use ***Prepare \> Column: Calculate +\> Calculations*** and subtract the date of Event 2 from Event 4, Fig. +7.3j. + ++---------------------------------+------------------------------------+ +| ***Fig. 7.3j Difference from | ***Fig. 7.3k Exceedance graph for | +| including a dry spell*** | 3 definitions*** | +| | | +| ***Prepare \> Column: Calculate | ***Climatic \> PICSA \> | +| \> Calculation*** | Cumulative/Exceedance graph*** | ++=================================+====================================+ +| ![](media/image542.p | ![](media/image536 | +| ng){width="2.807392825896763in" | .png){width="3.1474496937882765in" | +| height="3.2033048993875766in"} | height="3.2067639982502185in"} | ++---------------------------------+------------------------------------+ + +The results are also shown in the last column in Fig. 7.3i. Where the +value in this last column is zero the first planting was successful. +Otherwise the value shows the delay, before the date of the successful +start. Looking down this column, or ***filtering***, or using ***Prepare +\> Column: Reshape \> Column Summaries*** shows there were 22 non-zero +values, a risk of 1 year in 4. + +If this risk is too high, then one way to reduce it, might be to omit +the early planting dates and start later. Changing Event4 to start on +15^th^ November, and comparing those results with Event 1, changes the +risk to 12 years or about 14%. + +Conservation farming is encouraged in Southern Zambia and one component +is water conservation, using planting in small hollows. The promoters +estimate this gives an extra 3 days, that seedlings could withstand +drought. So, keeping to 1 November in Event 4, and changing the 9 days +to 12 days could also be considered. This halves the risk, as there are +then just 10 years when replanting was needed. + +The data may also be plotted as exceedance graphs, as is shown in Fig. +7.3k for the Events 1, 2 and 4. + +## The end and length + +A common definition for the end of the rainy season is based on a simple +water balance model. This has been adequate in the unimodal stations in +West Africa, but has problems with stations, like Moorings in the +Southern hemisphere. + +Hence, we first look quickly at a site in Northern Nigeria, before +returning to discuss the end and length of the season at Moorings. + +Use ***File \> Open from Library \> Instat \> Browse \> Climatic \> +Nigeria*** and open the file called ***Samaru.rds***. The data frame +called Samaru56t has 56 years of daily data from 1928, Fig. 7.4a. + ++----------------------------------+-----------------------------------+ +| ***Fig. 7.4a Samaru daily | ***Fig. 7.4b Start of rains for | +| data*** | Samaru*** | +| | | +| ***File \> Open from Library \> | ***Climatic \> Prepare \> Start | +| Instat \> Browse \> Climatic \> | of the Rains*** | +| Nigeria \> Samaru.rds*** | | +| | ***(Day range from 1 April to 30 | +| | June)*** | ++==================================+===================================+ +| ![](media/image554.p | ![](media/image54 | +| ng){width="2.9693438320209973in" | 3.png){width="2.98371719160105in" | +| height="3.036609798775153in"} | height="2.003601268591426in"} | ++----------------------------------+-----------------------------------+ + +This data frame is already defined as climatic, so proceed directly to +the ***Climatic \> Prepare \> Start of the Rains*** dialogue. + +These data are from January. In this dialogue, set the earliest date as +***1st April*** and the latest as ***30 June***. Use ***Event 5*** as +shown in Fig. 7.4b: + +***Event 5***: First occasion from ***1st April*** with more than +***20mm in 3 days*** and no dry spell longer than ***9 days*** in the +next ***21 days***. + +As in the previous section, get the starting day of year and the +corresponding date. + ++----------------------------------+-----------------------------------+ +| ***Fig. 7.4c End of rains/Season | ***Fig. 7.4d The season length*** | +| dialogue*** | | +| | ***Climatic \> Prepare \> | +| ***Climatic \> Prepare \> End of | Length*** | +| the Rains*** | | +| | | +| ***(Day Range from 15 August to | | +| 15 December)*** | | ++==================================+===================================+ +| ![](media/image549.p | ![](media/image540 | +| ng){width="2.7529779090113737in" | .png){width="3.010003280839895in" | +| height="3.6972845581802276in"} | height="2.409067147856518in"} | ++----------------------------------+-----------------------------------+ + +Now use ***Climatic \> Prepare \> End of the Rains*** and complete the +dialogue as shown in Fig. 7.4c + +The water balance "model" is like a simple "bucket". It is empty in the +dry season. It is then filled by the rainfall and loses a constant +amount of 5mm per day, due to evaporation. The capacity of the bucket, +in Fig. 7.4c, is 100mm. Any excess, when the bucket is full, is assumed +lost to runoff. + +In the middle of the season (August), the bucket is usually quite full. +The end of the season is defined, in Fig. 7.4c, as the first time, after +15^th^ August, that the bucket is effectively empty. + ++---------------------------------+------------------------------------+ +| ***Fig. 7.4e Samaru summary | ***Fig. 7.4f Time-series graphs*** | +| data*** | | +| | ***Describe \> Specific \> Line*** | ++=================================+====================================+ +| ![](media/image544.p | ![](media/image5 | +| ng){width="2.875333552055993in" | 03.png){width="3.27461176727909in" | +| height="2.702120516185477in"} | height="2.7685083114610674in"} | ++---------------------------------+------------------------------------+ + +The length of the season is then, from ***Climatic \> Prepare \> +Length,*** simply the difference between the end and the start dates, +Fig. 7.4d. + +The resulting annual data are shown in Fig. 7.4e. Various graphs are +possible. The time series graph in Fig. 7.4f indicates clearly the +smaller inter-annual variability of the end of the season, compared to +the start. This graph was produced using ***Describe \> Specific \> Line +Plot***. An alternative would have been the ***Climatic \> PICSA \> +Rainfall Graph***. + ++-------------------------------+--------------------------------------+ +| ***Fig. 7.4g Exceedance | ***Fig. 7.4h Length of the season at | +| plots*** | Samaru*** | +| | | +| ***Climatic \> PICSA \> | | +| Cumulative/Exceedance*** | | ++===============================+======================================+ +| ![](media/image505.png) | ![](media/image5 | +| {width="2.5142836832895887in" | 08.png){width="3.2541535433070865in" | +| height="3.160087489063867in"} | height="3.2136154855643047in"} | ++-------------------------------+--------------------------------------+ + +An alternative display is with exceedance graphs, Fig. 7.4g. Here the +greater steepness of the line for the end of the season, corresponds to +the lower variability. The ***Prepare \> Column: Calculate \> +Calculations*** can be used to show the standard deviation of the start +is about 17 days (over 2 weeks), while it is about 9 days (just over 1 +week) for the end of the season. + +Fig. 7.4h shows the length of the season, using the ***Climatic \> PICSA +\> Rainfall Graphs*** dialogue. Terciles have been added to show that +about 1/3 of the years had a season length of less than 152 days, i.e. 5 +months, and 1/3 had more than 172 days -- almost 6 months. + +Now return to the Moorings data in the Southern hemisphere[^37]. The +start was considered in Section 7.3 and we choose the definition 4, i.e. +from 1 November, but with no dry spell of more than 12 days. In +principle it simply remains to get the end of the season, and then the +length, as above. + ++----------------------------+-----------------------------------------+ +| ***Fig. 7.4i End of the | ***Fig. 7.4j*** | +| season dialogue*** | | +| | | +| ***Climatic \> Prepare \> | | +| End of the Rains*** | | ++============================+=========================================+ +| ![](media/image509.png){wi | ![](media/ima | +| dth="2.5004582239720037in" | ge501.png){width="3.6275896762904636in" | +| heig | height="2.6182830271216098in"} | +| ht="2.9221620734908136in"} | | ++----------------------------+-----------------------------------------+ + +To illustrate the problem first try the same analysis as for Samaru, +Fig. 7.4i. Make the day range 15^th^ February to 15^th^ June, as the +equivalent of 15^th^ August to 15^th^ December for Samaru. The results +are in Fig. 7.4j and a few of the problems are highlighted. + +In some years the season appears to end in February, and sometimes on +the precise day (15^th^ February) that is the lower limit. This never +happened at Samaru as the water balance was always full (or close to +full) throughout August. So, August, in the Sahel, has reliable rain. +This isn't the case at Moorings, where there can be a long dry spell at +any time in the season. + +We would still prefer to consider issues in February as a problem during +the season -- which is covered in Section 7.6, - rather than necessarily +a very early end of the season. + +In an analysis of 5 stations in Zimbabwe, (Mupamgwa, Walker, & Twomlow, +2011) proposed a different type of definition for the end of the season. +This was the ***last day with more than 10mm*** between 1 January and 30 +June. This type of definition has been added to the ***Climatic \> +Prepare \> End of the Rains*** dialogue, Fig. 7.4k. + +For Moorings we have used the last day with more than 10mm up to the end +of April, Fig. 4.7k. + +In using this definition some meteorology staff complained that this was +clearly the end of the rains and they would prefer the end of the +season. + +What is therefore also available in R-Instat is to use the above +definition for the end of the rains and then to start the water-balance +definition from that date -- which is a different date each year. Return +to ***Climatic \> Prepare \> End of Rains***, select the ***End of +Season*** and then the ***Day Range*** again, Fig. 7.4l. + +In Fig. 7.4l choose ***Variable Day*** and select the ***end_rains*** +variable from the summary data. Keep the end date as ***Fixed Day***, +and choose 30 June. + ++---------------------------------+------------------------------------+ +| ***Fig. 7.4k*** | ***Fig. 7.4l Day Range on End of | +| | Rains*** | +| ***Climatic \> Prepare \> End | | +| of Rains*** | | ++=================================+====================================+ +| ![](media/image484.pn | ![](media/image50 | +| g){width="2.8328587051618546in" | 2.png){width="3.160076552930884in" | +| height="3.822027559055118in"} | height="2.9263724846894137in"} | ++---------------------------------+------------------------------------+ + +Return to the main dialogue, Fig. 7.4m and set as shown. The results are +shown in Fig. 7.4n and are more reasonable. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 7.4m*** ***Fig. 7.4n*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image512.png){width="2.603765310586177in" ![](media/image511.png){width="3.490068897637795in" + height="2.949931102362205in"} height="2.434850174978128in"} + + ----------------------------------------------------------------------------------------------------------- + +Now use ***Climatic \> Prepare \> Length of Season***, as shown for +Samaru in Fig. 7.4d, to give the length. + +The start and end of the season are plotted in Fig. 7.4o. Unlike Samaru, +they are approximately equally variable, and each has a standard +deviation of just over 2 weeks. The cumulative frequency graph +illustrates the same point, with each of the start, end_rains and +end_season having roughly equal slopes and with each having a range of +about 2 months (i.e. roughly 4 times the standard deviation). + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 7.4o*** ***Fig. 7.4p*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image515.png){width="3.1805818022747157in" ![](media/image516.png){width="2.9403291776027998in" + height="3.0530741469816274in"} height="3.0423261154855643in"} + + ------------------------------------------------------------------------------------------------------------- + +Fig. 7.4q plots the season lengths. Here about 1/3 have a length less +than 4 months, while the longest third has a duration of five months or +more. + + ----------------------------------------------------------------------- + ***Fig. 7.4q*** + ----------------------------------------------------------------------- + ![](media/image442.png){width="5.721399825021872in" + height="4.006120953630796in"} + + ----------------------------------------------------------------------- + +## Coping with censored and missing data + +Censoring occurs in many areas of application of statistics. The topic +is particularly important in the analysis of medical data. There the +survival times of patients may be recorded for a study up to 3 years. +Those who survive longer are the censored observations. We know the +survival is more than 3 years, but don't know exactly how long. + +In hydrology the height of a river may be measured. At times of flooding +the height may be more than the measuring instrument, but the exact +value isn't known. + +In climatology a heavy wind may destroy the measuring equipment. In that +case the exact censoring point is unknown, but we do know that a large +value occurred. + +There is also possible censoring with the start and end of the season in +Sections 7.3 and 7.4. + +To illustrate, use the ***Climatic \> Prepare \> Start of the Rains*** +dialogue again, Fig. 7.5a. This time we deliberately choose a small +planting window, Fig. 7.5b. The latest planting date is designed to be +the date beyond which a farmer would not think it would be sensible to +plant for that season. That is not likely to be 30 November, but we +choose that early date to illustrate the issue of censoring. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 7.5a*** ***Fig. 7.5b*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image510.png){width="3.6063549868766405in" ![](media/image513.png){width="2.412521872265967in" + height="3.5927974628171477in"} height="1.9594477252843394in"} + + ------------------------------------------------------------------------------------------------------------ + +In Fig. 7.5a the variable names for the results are also changed, to +avoid overwriting the previous variables. The results are in Fig. 7.5c, +together with the previous ones. In the 1925/26 season the earliest +planting opportunity was 3^rd^ January. This is now too late and hence +is now given as a missing value. The same is done in the following +season when the earliest date was 8^th^ December. + +In the subsequent analysis we should examine the number of occasions +that planting was not possible. One way is to use the ***Climatic \> +Tidy and Examine \> One Variable Summarise*** dialogue, Fig. 7.5d. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 7.5c*** ***Fig. 7.5d*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image518.png){width="3.2000076552930885in" ![](media/image519.png){width="2.7899529746281715in" + height="3.4125951443569553in"} height="2.5082305336832897in"} + + ------------------------------------------------------------------------------------------------------------- + +The results, in Fig. 7.5e, indicates there were 17 seasons in which the +new starting date was censored. However, the problem is that there was +already one season for which the original definition was missing. That +was not due to censoring, but because there were also missing values in +the first season. + + ------------------------------------------------------------------------------------- + ***Fig. 7.5e*** ***Fig. 7.5f*** + ---------------------------------------------------- -------------------------------- + ![](media/image517.png){width="3.32001968503937in" + height="1.4180129046369203in"} + + ------------------------------------------------------------------------------------- + +So, there were, 16 years when no planting was possible in November. That +is interesting information itself. But the main problem is that the +summaries are missing for 2 different reasons, namely either because +there were days with missing data, or because planting was not possible, +i.e. there was censoring. + +To proceed we fist explain how R-Instat handles missing values, i.e. +days when the rainfall was not recorded. There are various options when +producing (say) monthly summaries that were discussed earlier. But what +happens with the start and end of the rains. + +For the start of the rains the summary is set to missing if any day is +missing in the period calculated. For example in Fig. 7.5c the start in +1922/23 was on 27^th^ November. + +- Had any value been missing between 1^st^ and 27^th^ November 1922, + then the result would have been set to missing. + +- If there were a missing day on 1^st^ December 1922 the result would + be given, i.e. it would not be set to missing, because the rains had + already started. + +- One detail is that the result would also be set to missing if either + 30^th^ or 31^st^ October 1922 were missing, because then the 3-day + total on 1^st^ November cannot be calculated. + +The same idea is true for the end of the rains, i.e. if a missing value +is encountered in the period when it calculates the end of the rains, +then the result is set to missing. Otherwise it is given. + +For the Moorings data there is only one missing day in the record, once +it has started in early 1922. This was on 10^th^ March 2004. The end of +the rains was defined to be last occasion with more than 10mm between 1 +January and 30 June. This missing value is within the period, but the +calculation has "worked backwards" and found the last day on 23^rd^ +March 2004. The missing value did not affect this calculation and hence +the value is given. + +The calculation is more complicated for the water balance definition. If +there are missing water-balance values in the period of calculation, +then the summary is set to missing. If the rainfall is ever missing, +then the water balance is set to missing. Once the rainfall is no longer +missing the water balance may still be missing, because it does not know +what the state was, just after the rainfall data resumed. Hence, the +analysis is doubled, starting with both a full and an empty balance +(i.e. the two extremes). While these are different, the water balance is +still set to missing. Once they are the same, the water balance +calculation resumes. + +These decisions on missing values are strict and some users may feel +that a single missing day should not set the summary for that year, or +season, to be missing. In that case consider infilling the data, +discussed in chapter [xxx]{.mark}. + +We now return to the censoring problem. Return to the ***Climatic \> +Prepare \> Start of the Rains*** dialogue in Fig. 7.5a and tick the +third option for saving columns, called ***Occurrence***. This adds a +logical column to the summaries that can be used to distinguish between +missing and censored seasons. + + ----------------------------------------------------------------------- + ***Fig.7.5g*** ***Fig. 7.5h*** + ----------------------------------- ----------------------------------- + + + ----------------------------------------------------------------------- + +[To be continued once status variable sorted.]{.mark} + +## During the season + +This section considers examples of risks during the rainy season. + +Chapter 6 examined rainfall totals and rain days throughout the year. +Now they are examined for the season. + +The simplest is to consider fixed periods. At Moorings the rainy season +is from November to April. Use ***Climatic \> Prepare \> Climatic +Summaries***, as shown in Fig. 7.6a. + +In Fig. 7.6a press ***Summaries*** and choose just the ***N +non-missing*** and the ***Sum***. Click on ***Day Range*** and choose +***1 November to 30 April***. + ++---------------------------------+------------------------------------+ +| ***Fig. 7.6a Summaries for | ***Fig. 7.6b Rename the resulting | +| Moorings*** | columns*** | +| | | +| ***Climatic \> Prepare \> | ***Right-click \> Rename Column*** | +| Climatic Summaries*** | | ++=================================+====================================+ +| ![](media/image514.p | ![C:\\Users\\ | +| ng){width="2.830631014873141in" | ROGERS\~1\\AppData\\Local\\Temp\\S | +| height="3.031419510061242in"} | NAGHTML59463e8.PNG](media/image520 | +| | .png){width="3.1565660542432195in" | +| | height="2.169508967629046in"} | ++---------------------------------+------------------------------------+ + +Once run, change the ***rain*** variable in Fig. 7.6a, to +***raindays,*** and this time just get the ***Sum***. You may have found +that the variables overwrote the ones produced earlier for the full +year. To ensure this does not happen in the future, rename the 3 +columns, Fig. 7.6b. It is also useful to add an explanatory label as +shown in Fig. 7.6b. + ++----------------------------------+-----------------------------------+ +| ***Fig. 7.6c Day Range | ***Fig. 7.6d Main climatic | +| sub-dialogue*** | summaries dialogue*** | +| | | +| ***From Climatic \> Prepare \> | | +| Climatic Summaries*** | | ++==================================+===================================+ +| ![](media/image476.p | ![](media/image474. | +| ng){width="2.8821183289588803in" | png){width="2.9964971566054244in" | +| height="2.308405511811024in"} | height="2.283847331583552in"} | ++----------------------------------+-----------------------------------+ + +The totals can also be calculated for the rainy season each year. Return +to the ***Climatic \> Prepare \> Climatic Summaries*** dialogue. Use the +***rain*** variable and then press ***Day Range***. Complete as shown in +Fig. 7.6c, where the total is now from the ***start doy*** to the +***end-season***. This is confirmed on the ***return*** to the main +dialogue, Fig. 7.6d. + +In Fig. 7.6d click on Summaries and choose the Count Non Missing and the +Sum. Once produced, ***right-click*** and ***rename*** the Sum variable +as ***rainSeason***. The ***Count Non Missing*** column is now the +season length. This is another way to get the length! + +A third possibility is to produce the total (or the number of rain days) +for a fixed period following the start. Return once more to the +***Climatic \> Prepare \> Climatic Summaries*** and change the ***Day +Range*** as indicated in Fig. 7.6e, i.e. for ***120 days from the +start***. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 7.6e*** ***Fig. 7.6f*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image472.png){width="3.0676574803149608in" ![](media/image469.png){width="2.9292443132108485in" + height="2.317785433070866in"} height="2.886791338582677in"} + + ------------------------------------------------------------------------------------------------------------- + +This would be for a 120-day crop. The approximate water requirement of +many crops is known, so the results are the first step in calculating +the risks of not having enough water for a specified (20 day) crop in +the period following planting. + +The summary columns produced are shown in Fig. 7.6f. + +The results are presented as exceedance probabilities in Fig. 7.6g and +as time series in Fig. 7.6h. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 7.6g Exceedance graphs of rainfall totals*** ***Fig. 7.6hTime-series graphs*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image468.png){width="2.965719597550306in" ![](media/image470.png){width="2.9133048993875765in" + height="2.869301181102362in"} height="2.893001968503937in"} + + ------------------------------------------------------------------------------------------------------------ + +The three totals are sufficiently similar that plotting the 3 lines on a +single time-series graph in Fig. 7.6h would be confusing, so they are +plotted as facets[^38].... + +The same ideas are now considered for spell lengths. In the tropics, +drought is a problem and hence we consider the occurrence of long dry +spells. The same dialogue could equally be used for hot, or cold, spells +in temperature data, etc. + +The simplest is to find the longest spell length within the main months +of the rainy season. Continuing with the Moorings data, use ***Climatic +\> Prepare \> Spells***, Fig. 7.6i. + +Use the Day Range sub-dialogue to specify ***January 1 to March 31*** as +the range of days. The results, shown in Fig. 7.6j give the longest +dry-spell length within this 3-month period. It shows the longest number +of consecutive days with rain less than 0.85mm on any day. + ++-------------------------------------+--------------------------------+ +| ***Fig. 7.6i Spells dialogue*** | ***Fig. 7.6j Spell lengths | +| | Jan-Mar & Apr*** | +| ***Climatic \> Prepare \> Spells*** | | +| | - | +| ***(Day range from January 1 to | | +| March 31)*** | | ++=====================================+================================+ +| ![C:\\User | ![](media/image460.png | +| s\\ROGERS\~1\\AppData\\Local\\Temp\ | ){width="2.8059109798775155in" | +| \SNAGHTMLac9f3a1.PNG](media/image46 | height="3.2692727471566054in"} | +| 4.png){width="3.3136023622047244in" | | +| height="3.7084175415573055in"} | | ++-------------------------------------+--------------------------------+ + +To clarify the results, use ***Climatic \> Check Data \> Display +Daily***[^39]. Data for 4 early years are in Fig. 7.6k to be compared +with the results in Fig. 7.6j. + +In Fig. 7.6j the longest spell in 1924 is 19 days. Fig. 7.6k shows that +this is a spell from 13^th^ February to 2^nd^ March. In 1925 the longest +spell was just 6 days and was at the end of March. This included days +with small rainfalls, but each was lower than the 0.85mm threshold. + +The 7-day spell in 1926 was also at the end of March. In 1927 there was +also a long dry spell (14 days) at the end of March, and this also shows +that just the longest spell is given. That year also had 13 consecutive +dry days in January. If more detail is needed, then the three months +could be considered individually. + +It sometimes causes confusion that the longest spell in a month can be +longer than the month itself. We illustrate by calculating the longest +spell length in April. The results are also given in the last column in +Fig. 7.6j. They show that the longest dry spell in April 2024 was 43 +days. This is confirmed from Fig. 7.6k, because 1^st^ April 2024 +"inherited" a dry spell from March, of 13 days, i.e. from 19^th^ March. +So, 1^st^ April was already the 14^th^ consecutive dry day and this had +become 43 days by the ned of April. There is an option in the dialogue +if you only wish to consider April itself. This option is used in +Section 7.7. + + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 7.6k Data for January to April for 4 years*** + ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ ------------------------------------------------------ + ![](media/image467.png){width="1.4180938320209975in" ![](media/image462.png){width="1.4605686789151355in" ![](media/image504.png){width="1.5606780402449694in" ![](media/image482.png){width="1.3485892388451444in" + height="3.531596675415573in"} height="3.5555686789151357in"} height="3.604420384951881in"} height="3.430777559055118in"} + + --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +As with the rainfall totals, it is sometimes useful to find the longest +dry spell in the rainy season, (i.e. between the day of the start and +the end) or in part of the season. As with the rainfall totals this uses +the start and end dates each year. In the ***Climatic \> Prepare \> +Spells*** dialogue, change the day range as was shown for the rainfall +totals in Fig. 7.6c and Fig. 7.6e. + +Fig. 7.6l shows the results for the season, i.e. between the date of the +start of the rains and the end of the season. The median value for the +longest spell length is 14 days (2 weeks). The terciles are also given, +showing that one year in 3 has a longest spell length of 12 days or +less. But also a third of the years has a spell length of 18 days or +more. + +Fig. 7.6m shows the longest spell lengths for the 120 days following +planting. The results are similar, but without the longest spells shown +in Fig. 7.6l. + + ---------------------------------------------------------------------------------------------------------- + ***Fig. 7.6l Longest dry-spell in the season*** ***Fig. 7.6m Longest spell in the first 120 days*** + ---------------------------------------------------- ----------------------------------------------------- + ![](media/image480.png){width="3.01744750656168in" ![](media/image478.png){width="3.041823053368329in" + height="3.0595516185476814in"} height="3.041823053368329in"} + + ---------------------------------------------------------------------------------------------------------- + +Many crops are particularly sensitive to dry spells during the flowering +period. This is typically about 20 days (3 weeks). Suppose a crop that +reaches the start of flowering 50 days after planting. Calculating the +risk is currently a 2-stage process in R-Instat. First produce the new +column, for the start of flowering, Fig. 7.6n. This is an instance where +you can also transform the start_date as is shown in Fig. 7.6o. + ++----------------------------------+-----------------------------------+ +| ***Fig. 7.6n Calculate the start | ***Fig. 7.6o*** | +| of flowering*** | | +| | | +| ***Prepare \> Column: Calculate | | +| \> Calculation*** | | ++==================================+===================================+ +| ![](media/image477. | ![](media/image475 | +| png){width="2.945898950131234in" | .png){width="2.898616579177603in" | +| height="3.30875656167979in"} | height="3.2563954505686787in"} | ++----------------------------------+-----------------------------------+ + +The resulting data are in Fig. 7.6p. The ***flower_date*** variable +shows that the flowering period often starts late in December or in +early January, but it is occasionally also in February. + +The ***Climatic \> Prepare \> Spells*** dialogue is now used from the +***start_flower*** day for ***20 days***. The resulting variable is also +shown in Fig. 7.6p and is seen often to be quite short. For example, the +longest spell from early 2024 for the next few years is usually just 2 +or 3 consecutive dry days. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 7.6p*** ***Fig. 7.6q*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image481.png){width="2.9749759405074365in" ![](media/image483.png){width="2.927165354330709in" + height="2.5203543307086615in"} height="2.893520341207349in"} + + ------------------------------------------------------------------------------------------------------------ + +The results are plotted in Fig. 7.6q using ***Climatic \> PICSA \> +Rainfall Graph*** again. Only in 1/3 of the years is there a dry spell +of one week or more. However, in 13 of the 77 years, i.e. one year in +six, there was a dry spell of 10 days or more. + +The graph in Fig. 7.6q is from a variable date. In a particular year, +once you know the planting date, or also from crops that are photoperiod +sensitive, the dates are fixed. Once calculated, if the risk is high, +then perhaps remedial action can be taken, such as planning for some +irrigated water to be available for this period. + +A third aspect that can cause a problem during the season is a climatic +extreme. This may be drought, as considered in the dry spells above. It +could also be an extreme wind, or excessive rainfall causing flooding. +Extremes are considered in detail in Chapter 11, hence only a single +example is given here. + +A question posed in relation to rainfall in Niger, was the risk of more +than 100m rain within a 3-day period. The argument was that while a +single day with more than 100mm would be a problem, so would, say 40mm, +on each of 3 days. + +Three day running totals were already used "behind the scenes" in +calculating the start of the rains. Now these totals are needed +explicitly. Use ***Climatic \> Prepare \> Transform***, as shown in Fig. +7.6r. + ++--------------------------------+-------------------------------------+ +| ***Fig. 7.6r Transform | ***Fig. 7.6s Resulting data | +| dialogue*** | totalled over 3 days*** | +| | | +| ***Climatic \> Prepare \> | | +| Transform*** | | ++================================+=====================================+ +| ![](media/image479.pn | ![](media/image4 | +| g){width="2.765544619422572in" | 71.png){width="3.288202099737533in" | +| height="3.6314173228346456in"} | height="3.0874376640419947in"} | ++--------------------------------+-------------------------------------+ + +The resulting daily data, in Fig. 7.6s, show an instance in February +1923 where the total is more than 100mm. + +Now the ***Climatic \> Prepare \> Climatic Summaries*** dialogue may be +used again, as shown in Fig. 7.6t. The summaries are from ***January to +March*** and the only summary is the ***Maximum***, Fig. 7.6u. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 7.6t*** ***Fig. 7.6u Just get the maximum*** + ---------------------------------------------------- ------------------------------------------------------ + ![](media/image473.png){width="2.90619750656168in" ![](media/image439.png){width="2.5900973315835523in" + height="3.158471128608924in"} height="2.9131627296587927in"} + + ----------------------------------------------------------------------------------------------------------- + +The resulting summary data can now be plotted as shown in Fig. 7.6v and +Fig. 7.6w. From Fig. 7.6w there is 100mm or more in about 4 years in 10. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 7.6v Time series of 3-day extremes*** ***Fig. 7.6w Cumulative distribution*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image441.png){width="3.2525470253718285in" ![](media/image459.png){width="2.5978171478565177in" + height="3.2487839020122484in"} height="3.46375656167979in"} + + ------------------------------------------------------------------------------------------------------------- + +## It rained yesterday. Should I plant? + +For Moorings, in Zambia, the definition for the start of the rains was +the first occasion from 1 November with more than 20mm in 3 days. + +For successful planting the condition was added that there should not be +a dry spell of more than 9 (consecutive) dry days in the next 21 days. +In Section 7.3 the two columns (with and without the dry-spell +condition) were compared, showing that replanting would be needed in 1 +year in 4. + +That is an overall risk, because sometimes a planting opportunity was +early and in other years there was no opportunity until December. If the +data are examined more closely, they show that planting was possible by +6^th^ November in 14 of the years. However, replanting was needed (i.e. +the dry spell condition wasn't satisfied) in 7 of these years. That is a +risk of 1 year in 2 when very early planting was possible. Perhaps 1^st^ +November is too early to consider planting, unless you are willing to +entertain the high risk. + +This question can be turned around. Suppose, in a particular year, there +is a potential planting date on 7^th^ November. What is the risk from +planting then? + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 7.7aDry spell risk after planting*** ***Fig. 7.7b Result from 8 Nov and 8 Dec*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image454.png){width="2.881582458442695in" ![](media/image434.png){width="2.830893482064742in" + height="3.3937401574803148in"} height="3.4122856517935256in"} + + ----------------------------------------------------------------------------------------------------------- + +In Fig. 7.7a the ***Day Range*** is from 8 November for 21 days. Another +change is that 7^th^ November is assumed to be rainy, i.e. not in a dry +spell. So, the ***checkbox "Assume condition not satisfied at the +start"*** is ticked. + +The results, in Fig. 7.7b indicate that planting early is quite risky. +Four years have a dry spell of 10 days or more, even in the few years +shown in Fig. 7.7b. If you change the dates in Fig. 7.7a by a month, +then the same analysis shows just a single year now gives a problem. +Interestingly that year was not a problem with the early planting. + +Summarising the two columns[^40] shows 32 years, about 1 year in 3, had +a dry spell of more than 9 days with the early planting, compared with +just 11 years, or 1 year in 8, from the later planting date + +What we lose on risk from early planting, we potentially gain by having +a longer season length. In Section 7.4 the season length was + +***Length = end_season -- start_doy.*** + +The results were shown in Fig. 7.4q and showed that about 1/3 of the +years had a season length of less than 4 months, etc. This figure is +repeated as Fig. 7.7c + +Now that we know the start is on day 100 (8^th^ November) and hence the +length is, instead, found from: + +***Length =*** ***end_season -- 100*** + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 7.7c*** ***Fig. 7.7d*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image442.png){width="3.1445713035870515in" ![](media/image455.png){width="2.862133639545057in" + height="2.201829615048119in"} height="2.2399857830271217in"} + + ------------------------------------------------------------------------------------------------------------ + +Comparing the information in Fig. 7.7c and 7.7d shows that with early +planting, on day 100, there are virtually no years with a season length +of less than 4 months. This is compared to 1/3 of the years overall +(Fig. 7.7c). The variability is also considerably reduced, because the +start is now fixed. The variability is now only because of the +uncertainty of the end. + +With this early planting we could therefore perhaps plan for 120-day +crop. That would have almost no risk in terms of season length. If the +proposed crop needs (say) 600mm of water, we could now find the +proportion of years with at least that total. That uses the ***Climatic +\> Prepare \> Climatic Summaries*** dialogue, as shown in Fig. 7.7e. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 7.7e*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image437.png){width="2.2509109798775153in" ![](media/image435.png){width="3.585155293088364in" + height="2.7010925196850395in"} height="2.7200470253718287in"} + + ------------------------------------------------------------------------------------------------------------ + +The resulting totals can then be examined in various ways. The +time-series graph, Fig. 7.7f, is one option. This indicates quite a high +risk of less than 600mm. A crop needing only 500mm would have a much +lower risk. There are only a few years with much less than 500mm. + +An alternative, with this early planting, could be to aim for a +short-duration cereal crop, e.g. 90 days and then to try for a +short-season legume, that might be planted as the cereal is close to +maturity. Fig. 7.7d indicates that this would often have had enough time +for fodder, and occasionally would have long enough to mature. + +## Reduce risks + +In the previous section risks were calculated relative to a proposed +planting date. In this section we examine the seasonal pattern of the +risks. This enables a study of the following types of problem. + +- For Moorings the risk of replanting was about one year in three if + planting on 8^th^ November. (Assuming replanting is needed if there + is a dry spell of 10 days or longer in the following 21 days.) How + does this risk depend on the date of planting? Does the risk ever + approach zero? + +- For the option of a 120-day crop that needs (say) at least 600mm of + water, when would be the best days to plant? + +The method is similar for these two -- and for other similar problems. +For simplicity the 120-day total is considered first. There is no +special dialogue, so the analysis proceeds step-by-step. + +First use the ***Climatic \> Prepare \> Transform*** dialogue as shown +in Fig. 7.8a. This transforms the rainfall data into 120-day moving +totals. The resulting data are shown in Fig. 7.8b after reordering the +columns. They show that in the 1922/23 season there was more than 600mm +if planting was before 11^th^ January. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 7.8a*** ***Fig. 7.8b*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image461.png){width="2.8864490376202974in" ![](media/image463.png){width="2.631972878390201in" + height="3.535900043744532in"} height="3.3305041557305337in"} + + ------------------------------------------------------------------------------------------------------------ + +These data re now summarised over the years, this time to get a value +for each day of the year. This uses the ***Climatic \> Prepare \> +Climatic Summaries*** dialogue, Fig. 7.8c. Use the ***Within Year*** +option in Fig. 7.8c and complete the dialogue as shown. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 7.8c*** ***Fig. 7.8d*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image456.png){width="3.071239063867017in" ![](media/image453.png){width="2.854338363954506in" + height="3.2887182852143484in"} height="2.9252132545931757in"} + + ----------------------------------------------------------------------------------------------------------- + +In the Climatic Summaries sub-dialogue use the ***More*** tab as shown +in Fig. 7.8d. + +This produces a new data frame shown in Fig. 7.8e. + +Repeat the dialogue in Fig. 7.8c, changing the 600mm to 450mm + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 7.8e*** ***Fig. 7.8f*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image457.png){width="2.3958114610673666in" ![](media/image466.png){width="3.147263779527559in" + height="3.309788932633421in"} height="3.328632983377078in"} + + ------------------------------------------------------------------------------------------------------------ + +It now just remains to graph the results. This uses the ***Describe \> +Specific \> Line Plot*** dialogue, Fig. 7.8f. The results are in Fig. +7.8g[^41]. + +In Fig 7.8g the higher (red) line is for 600mm. It shows the minimum +risk corresponds to a planting on about 15^th^ November and is then +about 0.3 (30%). The lower line, for 450mm, is below 1 year in 10, for +plantings from 1 November to about 10 December. + + ------------------------------------------------------------------------------------------------------------- + ***Fig.7.8g*** ***Fig. 7.8h*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image500.png){width="3.5475896762904635in" ![](media/image440.png){width="2.5728630796150482in" + height="3.200142169728784in"} height="3.1953313648293964in"} + + ------------------------------------------------------------------------------------------------------------- + +One improvement in the presentation would be to smooth the lines given +in Fig. 7.8g. They are quite smooth already, as there were 88 years of +data. With shorter records the need for smoothing becomes greater. + +Moving averages are the simplest way of smoothing. Use ***Climatic \> +Prepare \> Transform*** as shown in Fig. 7.8h. This adds the 2 smoothed +columns to the data frame. + +Note also that the risks are (of course) very high from March onwards. +Hence filter the data on the day of year. The 1^st^ March is s_doy = +214. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 7.8i*** ***Fig. 7.8j*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image465.png){width="2.931535433070866in" ![](media/image452.png){width="2.9926859142607176in" + height="2.9797069116360455in"} height="3.023222878390201in"} + + ------------------------------------------------------------------------------------------------------------ + +Fig. 7.8i shows plots of the data together with the smoothed lines. R +and hence R-Instat has many other methods of smoothing data. One +alternative method is shown below in Fig. 7.8q. + +The same ideas can be used to examine the risks of a long dry spell at +different points in the season. We first consider the risk of a dry +spell after a planting occasion, i.e. after a rain day. This uses the +special ***Multiple Spells*** tab in the ***Climatic \> Prepare \> +Transform*** dialogue. In Fig. 7.8j the maximum spell length is taken +over 21 days, and that can, of course, be changed as required. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 7.8k*** ***Fig. 7.8l*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image438.png){width="3.018669072615923in" ![](media/image430.png){width="2.9690758967629045in" + height="2.3882228783902013in"} height="1.9140452755905513in"} + + ------------------------------------------------------------------------------------------------------------ + +The next step, as before, uses the ***Climatic \> Prepare \> Climatic +Summaries*** dialogue, Fig.7.8k to calculate the proportion of years +with a dry-spell ***longer than 9 days*** in the 21 days, following +planting, i.e. to correspond to the default values in the ***Start of +the Rains*** dialogue. + +Once calculated, repeat the operation with 7 days (for a more sensitive +crop) and 12 days, perhaps to correspond to the extra days following a +conservation farming strategy. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 7.8m*** ***Fig. 7.8n*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image432.png){width="2.5843143044619423in" ![](media/image431.png){width="3.183617672790901in" + height="3.321859142607174in"} height="3.687192694663167in"} + + ------------------------------------------------------------------------------------------------------------ + +The data are shown in Fig. 7.8m where, for variety, we have used +percentages rather than proportions. + +The dry-spell risks are shown in Fig. 7.8n. They show that, in early +November, it is quite advantageous, in terms of risk, to have the +12-days, rather than the 9 days assurance for the dry spells. By early +December all 3 curves have "flattened out", hence there is no point in +delaying planting -- the risks are not getting lower. + +The messages would be clearer if the data in Fig. 7.8n are smoothed. +This can be done in the same way as for the rainfall totals, shown +earlier in Fig. 7.8h. + +Many crops are sensitive to a long dry spell round flowering. The +calculation is slightly different to the one above, which assumed rain +for planting on day zero. This time we need the unconditional risks, +i.e. a dry spell might have started before the flowering period and have +continued. + +Use the ***Climatic \> Prepare \> Transform*** dialogue again, with the +***Spell*** tab, as shown in Fig. 7.8o. Then, with the same dialogue, +use the ***Moving*** tab, Fig. 7.8p, to get the maximum over 20 days. +This assumes that the flowering period is of 20 day's duration. + ++-----------------------------------+----------------------------------+ +| ***Fig. 7.8o Ordinary spell | ***Fig. 7.8pMaximum over 20 | +| lengths*** | days*** | +| | | +| ***Climatic \> Prepare \> | ***Climatic \> Prepare \> | +| Transform*** | Transform (again!)*** | ++===================================+==================================+ +| ![](media/image428. | ![](media/image433. | +| png){width="3.0257491251093613in" | png){width="2.630612423447069in" | +| height="2.940517279090114in"} | height="2.998286307961505in"} | ++-----------------------------------+----------------------------------+ + +The next steps are just as before, i.e. in Fig. 7.8k to Fig. 7.8n. They +use the ***Climatic \> Prepare \> Climatic Summaries*** dialogue to get +the percentage of years each day, with a longer dry spell than 7 or 9 +days. The resulting percentages are then plotted, as before, using the +***Describe \> Specific \> Line Plot*** dialogue. + + ---------------------------------------------------------------------------------------------------------- + ***Fig. 7.8q Adding a loess smoother*** ***Fig. 7.8r*** + ----------------------------------------------------- ---------------------------------------------------- + ![](media/image427.png){width="2.816068460192476in" ![](media/image429.png){width="2.97377624671916in" + height="3.2467618110236223in"} height="3.6244203849518812in"} + + ---------------------------------------------------------------------------------------------------------- + +This time, for illustration, the smoothing has been done "on the fly", +as additional layers in the plot. Local smoothing has been used with +loess, as explained in more detail in Chapter 8. + +The percentages are (as would be expected[^42]) slightly higher in Fig. +7.8r, compared with Fig. 7.8n. They show a minimum risk if the start of +the flowering period is towards the end of January. + ++----------------------------+-----------------------------------------+ +| ***Fig. 7.8s*** | ***Fig. 7.8t Plot the cumulative | +| | data*** | +| | | +| | ***Describe \> Specific \> Line Plot*** | ++============================+=========================================+ +| ![](media/image424.png){w | ![](media/ima | +| idth="2.312619203849519in" | ge436.png){width="3.2892607174103237in" | +| heig | height="2.838529090113736in"} | +| ht="3.1737740594925636in"} | | ++----------------------------+-----------------------------------------+ + +The final example examines the cumulative rainfall distribution each +year, or season. This starts, again, with the ***Climatic \> Prepare \> +Transform*** dialogue, this time using the ***Cumulative*** button, Fig. +7.8s. + +This adds a column, called cumsum, Fig. 7.8s, giving the accumulated +rainfall each year. + +Now use the ***Describe \> Specific \> Line Plot*** dialogue to graph +the cumulative data against the day of the year, Fig. 7.8t. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 7.8u Facet sub-dialogue -- by year*** ***Fig. 7.8v Filter to choose the first 20 complete + years*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image261.png){width="2.5613046806649167in" ![](media/image278.png){width="3.4806069553805776in" + height="2.625959098862642in"} height="2.5952230971128607in"} + + ------------------------------------------------------------------------------------------------------------- + +In Fig 7.8t, use ***Plot Options*** to put the different years each in +their own graph (facet), Fig. 7.8u. Then use the ***Data Options*** +button, which is on each dialogue, and is another way to get to the +filtering system. Choose the first 20 years of data, Fig. 7.8u as 89 +years are too many graphs to show together. + +The resulting graph is in Fig. 7.8w. Each graph starts at zero and rises +to the annual (seasonal) total. So, for example 1938-39 was a year with +over 1000mm, while 1933-34 had only about half that total. + +Vertical lines, in Fig. 7.8w, correspond to high rainfall and horizontal +lines to dry spells. The 1932-33 season looked like a "bumpy year". + + ----------------------------------------------------------------------- + ***Fig. 7.8w Cumulative rainfall for 20 years at Moorings*** + ----------------------------------------------------------------------- + ![](media/image258.png){width="6.006608705161855in" + height="2.944076990376203in"} + + ----------------------------------------------------------------------- + +If you remove the facets from the graphs specified in Fig. 7.8t and +instead put the year factor in the main dialogue in ***Factor +(Optional)***, then the resulting graph is in Fig. 7.8x. This type of +display can be useful for monitoring, as you can super-impose the +current year. An example is shown below. + + ---------------------------------------------------------------------------------------------------------- + ***Fig. 7.8x Single graph of cumulative rainfall ***Fig. 7.8y*** + (mm).*** + ----------------------------------------------------- ---------------------------------------------------- + ![](media/image259.png){width="1.863001968503937in" ![](media/image270.png){width="4.23174978127734in" + height="2.067361111111111in"} height="2.080711942257218in"} + + ---------------------------------------------------------------------------------------------------------- + +These graphs can be taken further. As an example, in Fig. 7.8y the green +lines indicate the start of the rains each year, while the red lines +show the date of the end of the season. The early and late starts, and +ends, are therefore indicated. A long season is one where the lines are +far apart, and so on. We explain, in Chapter 8, how these features can +be added. + +Boxplots can alternatively be used to display the cumulative data. A +challenge is to plot them at the end of each 10-day period. This is the +first example of the use of the ***dekads*** in this guide, so return to +the ***Climatic \> Dates \> Use Date*** dialogue and complete it as +shown in Fig. 7.8z. The year is shifted, so the dekads start in August. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 7.8z*** ***Fig. 7.8aa*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image255.png){width="2.3831791338582677in" ![](media/image256.png){width="3.590676946631671in" + height="2.13535542432196in"} height="2.3581496062992127in"} + + ------------------------------------------------------------------------------------------------------------ + +First get a logical column, which is TRUE on the last day of each dekad, +and FALSE otherwise[^43]. This uses the calculator, ***Prepare \> +Column: Calculate \> Calculations.*** Complete it as shown in Fig. +7.8aa. + +Now ***filter*** so just the rows when the ***dek_diff*** variable is +TRUE are used. The data are shown in Fig. 7.8 ab. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 7.8ab Filtered for the last day of each ***Fig. 7.8ac*** + dekad*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image292.png){width="3.213293963254593in" ![](media/image257.png){width="2.8236472003499564in" + height="2.695550087489064in"} height="2.6775962379702536in"} + + ------------------------------------------------------------------------------------------------------------ + +Now use ***Describe \> Specific \> Boxplot***, Fig. 7.8ac. The results +are in Fig. 7.8ad[^44]. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 7.8ad Boxplots showing the cumulative rainfall ***Fig. 7.8ae A new year*** + at Moorings*** + ------------------------------------------------------ ---------------------------------------------------- + ![](media/image265.png){width="4.3325426509186356in" ![](media/image245.png){width="1.69586176727909in" + height="2.375553368328959in"} height="2.4454811898512685in"} + + ----------------------------------------------------------------------------------------------------------- + +Fig. 7.8ad shows the progression of the cumulative rainfall for the +season towards the final totals. These had a median of 800mm, with a +minimum less than 500mm and a maximum of well over 1000mm. + +One use of this type of plot is to monitor a new year. As an example, +Fig. 7.8ae provides data, where the total has now risen to 340mm by the +end of February. This information can now be super-imposed on the +boxplots, as shown in Fig. 7.8ae with the blue points[^45]. This example +shows a great cause for concern. The totals are very low, compared to +the earlier 88 years of data. + + ----------------------------------------------------------------------- + ***Fig. 7.8ae Adding the current year to the boxplots*** + ----------------------------------------------------------------------- + ![](media/image250.png){width="4.862142388451444in" + height="2.726807742782152in"} + + ----------------------------------------------------------------------- \ No newline at end of file diff --git a/Chapter_8_Efficient_use_of_RInstat_and_R.qmd b/Chapter_8_Efficient_use_of_RInstat_and_R.qmd new file mode 100644 index 0000000..e4cdc73 --- /dev/null +++ b/Chapter_8_Efficient_use_of_RInstat_and_R.qmd @@ -0,0 +1,160 @@ +# Efficient use of R-Instat and R +## Introduction + +In this guide Chapters 2 and 3 largely made use of the general +facilities in R-Instat, shown in Fig. 8.1a. They were dialogues from the +File, Prepare and Describe menus. Chapters 4 to 7 used the climatic menu +shown in Fig. 8.1b + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 8.1a The R-Instat menus*** ***Fig. 8.1b The Climatic menu*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image237.png){width="3.070092957130359in" ![](media/image230.png){width="2.949284776902887in" + height="1.693844050743657in"} height="3.438086176727909in"} + + ----------------------------------------------------------------------------------------------------------- + +The Climatic menu, Fig. 8.1b, mirrors the general menus, Fig. 8.1a in +that parts of this menu correspond to the facilities in the File, +Prepare, Describe and Model menus. Thus you start by getting the File +with the data. Then there is usually a Prepare stage, where the data are +organised and checked, ready for analysis. This stage often includes a +"reshaping" of the data, where daily records are summarised to a monthly +or yearly basis. + +Then the initial analyses are usually descriptive, so use the Describe +section of the Climatic menu or the Describe menu itself. The materials +in Chapters 4 to 7 were all devoted to descriptive analyses. + +When descriptive methods are not enough there is the Model menu to fit +and examine statistical models. + +For users who are starting their climatic analyses with R-Instat we +distinguish between four or five "levels". These different "levels" are +discussed in this chapter. + +1. If your analyses are "standard", then you may find all you need is + in the climatic menu. That is the idea of the special menu. + +2. If you need more, then the general R-Instat menus may be used. The + Prepare menu is sometimes needed for more of the initial data + manipulation than is in the climatic menu. The powerful ggplot2 + graphics system is also available through the Describe menu. + +3. R-Instat includes some "halfway" dialogues, that we discuss in + Section 8.3. These are dialogues where you have essentially to write + a single R command. That's quite easy and can be a stepping-stone to + using R directly. + +4. Sometimes a dialogue does not do quite what is needed for an + analysis. The ***To Script*** button, is on each dialogue and copies + the relevant R command to a special script window. You can then + "tweak" the resulting command(s) to produce the appropriate + analysis. This is described in Section 8.4. + +5. Finally, you may be ready to use R "properly"! This is either + because the analysis you need is not available in R-Instat, or + because the click and point method is becoming tedious and you would + like to work more efficiently. One option is then still to start in + R-Instat. Then produce the log file, which has a record of all the + commands you have used. This may be transferred and should run just + the same in RStudio. Then you can continue the analyses using R + directly. This process is described in Section 8.5. + +Most of the ideas in this chapter and also discussed in more detail in +the R-Instat guide called "Reading, Tweaking and Using R Commands". + +[Solving problems rather than learning to use R-Instat.]{.mark} + +Possibly discuss loops for successive analysis of data for multiple +stations + +## Using the "ordinary" R-Instat + +[Could show smoothing with loess and splines]{.mark}, though a bit of +that in Chapter 7. Could refer back + +[Mention export of graphs for an editor: \"I\'d suggest exporting the +figure from R as a vector graphic file (.svg) then adding your labels in +a vector graphic software. I use **Inkscape** +[[software]{.underline}](https://inkscape.org/about/) because it can be +downloaded for free and its fairly intuitive to learn.\"]{.mark} + +[Also discuss data sheet and data book -- though also in Chapter +3.]{.mark} + +[And the metadata windows, including changing names and also altering +precision.]{.mark} + +[Could perhaps be a good place to discuss the Tools \> Options dialogue +-- though maybe that deserves its own section?]{.mark} + +On tasks in this section include summary of hourly to daily data +probably with the example from the openair package? + +## The halfway dialogues + +[Mention the risks that using these commands brings. Can make mistakes. +Good to make some mistakes intentionally so that you are ready for +them.]{.mark} + +[Use an example of infilling data and the calculate dialogue - +transform. Could use infilling of temperatures to work towards a +complete record.Could install chillR partly because they have an +interesting data set where they have introduced missing values. Also +because their ideas on infilling will be generally useful for R-Instat +in the future.]{.mark} + +[Then also the model and use model menu. This could include modelling +extremes.]{.mark} + +## The script window + +[Add an R package:]{.mark} + +[install.packages('packagename')]{.mark} + +[Tried Install.packages("finalfit") -- which gives an error? Wrong +quotes! Use +Install.packages(]{.mark}***\"***[finalfit]{.mark}***\"***[)]{.mark} + +[To use data without needing to give the full name include +attach("dataframename")]{.mark} + +library() lists all available packages + +library(dplyr) makes the package available, so can give the commands +without dplyr:: at the start. + +Move the example here from Chapter 3 of adding a skew boxplot. + +## The log window and R + ++-----------------------------------------------------------------------+ +| ***Code to add date to an x-variable*** | ++=======================================================================+ +| \# Code generated by the dialog, Line Plot | +| | +| Moorings_by_s_doy \<- | +| data_book\$get_data_frame(data_name=\"Moorings_by_s_doy\", | +| stack_data=TRUE, id.vars=\"s_doy\", | +| measure.vars=c(\"prop120.lt.600\",\"prop120.lt.450\")) | +| | +| [Moorings_by_s_doy \<- Moorings_by_s_doy %\>% | +| mutate(s_doy=as.Date(s_doy, origin = \"2015-07-31\"))]{.mark} | +| | +| last_graph \<- ggplot2::ggplot(data=Moorings_by_s_doy, | +| mapping=ggplot2::aes(x=s_doy, y=value, colour=variable)) + | +| ggplot2::geom_line() + theme_grey() + | +| ggplot2::theme(axis.text.x=ggplot2::element_text()) + | +| ggplot2::scale_y_continuous(limits=c(0, 1))[+scale_x_date(date_labels | +| = \"%d %b\", date_breaks=\"1 month\")]{.mark} | +| | +| data_book\$add_graph(graph_name=\"last_graph\", graph=last_graph, | +| data_name=\"Moorings_by_s_doy\") | +| | +| data_book\$get_graphs(data_name=\"Moorings_by_s_doy\", | +| graph_name=\"last_graph\") | +| | +| rm(list=c(\"last_graph\", \"Moorings_by_s_doy\")) | ++-----------------------------------------------------------------------+ \ No newline at end of file diff --git a/Chapter_9_Gridded_Data.qmd b/Chapter_9_Gridded_Data.qmd new file mode 100644 index 0000000..546969e --- /dev/null +++ b/Chapter_9_Gridded_Data.qmd @@ -0,0 +1,729 @@ +# Gridded Data +## Introduction + +There are various sources of gridded data for climatic elements. Those +considered here are from the European Organisation for the Exploitation +of Meteorological Satellites, Satellite Application Facility on Climate +Monitoring (EUMETSAT CM SAF), the Copernicus Climate Change Service +(C3S) Climate Data Store and the International Research Institute for +Climate and Society (IRI) Data Store. + +All data are freely available. You need to register to access data from +CM SAF, and also for the C3S Climate Data Store. The IRI Data Store does +not require registration. The CM SAF data considered here are from +stationary satellites and are available for all of Europe and Africa and +possibly more, e.g. Middle East and Caribbean. Sunshine and radiation +data are illustrated here. They are available daily (some hourly) on a +grid of about 4km and are from 1983. Other elements, e.g. ground +temperature are available hourly, from the early 1990s. They will later +become available from the 1980s. + +We consider the ERA5 reanalysis data from the C3S Climate Data Store. +ERA5 is global, from 1979 (soon to be 1950) with a large number of +elements available hourly on a grid of 0.25 by 0.25 degrees (about +30km). It is illustrated with precipitation (hourly) and with 2m +temperature (used to derive daily Tmax and Tmin). + +The IRI Data Store is a repository of climate data from a wide variety +of sources. We illustrate the IRI Data Store by accessing daily +precipitation estimates from CHIRPS and ENSO and sea-surface +temperatures, that are commonly used for seasonal forecasting. + +There are many possible uses and applications of these data. [To be +continued -- with examples of what can be done and is being +done.]{.mark} + +## Importing NetCDF files + +Show how to use the dialog first without changing options but still look +at details to check what is being imported. + +Then show the options for sub-areas, an individual station, or for +multiple stations. Can use Rwanda station locations and CHIRPS data from +IRI section. + +## EUMETSAT CM SAF + +The CM SAF website is shown in Fig. 9.2a. You are invited to sign-in or +register, though you are welcome to explore what is available without +this. You need to register to download any data. You are then able to +use these data freely. EUMETSAT would very much welcome any feedback on +how the data have been used, particularly if, for example, you have +compared your station data with their data. They may sometimes be +prepared to assist you with using the data. You can contact EUMETSAT +through their User Help Desk +[[https://www.cmsaf.eu/EN/Service/UHD/UHD_node.html]{.underline}](https://www.cmsaf.eu/EN/Service/UHD/UHD_node.html). + + ----------------------------------------------------------------------- + ***Fig. 9.2a*** + ----------------------------------------------------------------------- + ![](media/image234.png){width="6.268055555555556in" + height="2.9381944444444446in"} + + ----------------------------------------------------------------------- + +Choose Surface Radiation products from the Climate Data Records menu in +Fig. 9.2a. Choose daily sunshine duration, SDU, Fig. 9.2b. + +From Fig. 9.2c we see the data are available from 1 January 1983 to the +end of December 2017 (when this guide was written). There are other +products from EUMETSAT CM SAF if more recent data are required, but they +have not been through the homogenisation and quality control checks. + + ----------------------------------------------------------------------------------------------------------- + ***Fig 9.2b*** ***Fig. 9.2c*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image235.png){width="3.133465660542432in" ![](media/image220.png){width="2.911786964129484in" + height="2.4349464129483813in"} height="2.7217924321959757in"} + + ----------------------------------------------------------------------------------------------------------- + +Also indicated in Fig. 9.2c is that there is documentation on each +product. Consider downloading these guides if you decide to use the data +as they are very detailed and informative. + +On the same screen as Fig. 9.2c you see an ***Add to Order Cart*** +invitation. Ignore this for now, unless you want a huge file, with data +from about half the globe. + +Instead, scroll further down and click on the button that says ***Change +Projection / spatial resolution / domain***. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 9.2d*** ***Fig. 9.2e*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image242.png){width="2.1938396762904637in" ![](media/image227.png){width="3.9405238407699037in" + height="2.021411854768154in"} height="1.5502766841644795in"} + + ------------------------------------------------------------------------------------------------------------- + +If you are following this as an exercise, then change the coordinates in +Fig. 9.2e. + +Click, in Fig. 9.2e to proceed to the time range selection. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 9.2f*** ***Fig. 9.2g*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image244.png){width="3.1262707786526684in" ![](media/image247.png){width="2.9971336395450567in" + height="2.611187664041995in"} height="1.376020341207349in"} + + ------------------------------------------------------------------------------------------------------------- + +In the following screen, scroll down to confirm that the sub-domain, +part of Rwanda, has been included, Fig. 9.2f. Then press Add to Order +Cart, Fig. 9.2g. + +You return to the screen in Fig. 9.2h. It is disconcerting that in Fig. +9.2h it appears you are about to order a file of over 200 gigabytes, but +it is the size ignoring the sub-domain[^46]. Keep your nerve and place +the order, Fig. 9.2h. + + ----------------------------------------------------------------------- + ***Fig.9.2h*** + ----------------------------------------------------------------------- + ![](media/image253.png){width="6.152322834645669in" + height="2.709448818897638in"} + + ----------------------------------------------------------------------- + +You receive a confirmatory e-mail that the order has been placed on the +EUMETSAT server. Shortly afterwards there is confirmation that the data +have been extracted and are waiting to be downloaded, Fig. 9.2i + + ----------------------------------------------------------------------- + ***Fig. 9.2i*** + ----------------------------------------------------------------------- + ![](media/image249.png){width="6.101929133858268in" + height="2.9671358267716537in"} + + ----------------------------------------------------------------------- + +Follow the instructions in your equivalent of the message in Fig. 9.2i +to download the file. It is now, for the first time that you are made +aware of the file size, 341 Mbytes for this example. + +This downloads a single tar file, containing 12 thousand individual +NetCDF files, with one file for each day. + +This is continued, in Section 9.5, through the CM SAF toolbox and in +Section [xxx]{.mark} using R-Instat. + +## C3S Climate Data Store + +If you are not online, then the first part of this section is again for +reading only. + +The website is . This takes you to +the screen partly shown in Fig. 9.3a. You are invited to login or +register your account. So, do this. + +Once logged in you return to the screen in Fig. 9.3a. + + ----------------------------------------------------------------------- + ***Fig. 9.3a*** + ----------------------------------------------------------------------- + ![](media/image254.png){width="6.124782370953631in" + height="2.761784776902887in"} + + ----------------------------------------------------------------------- + +Then click on Datasets in Fig. 9.3a to give the screen starting in Fig. +9.3b. There are many different datasets available. In the search bar +type "ERA5 hourly" and from the results select, "ERA5 hourly data on +single levels". + +Click on this dataset to get further information, see Fig. 9.3c. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 9.3b*** ***Fig. 9.3c*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image252.png){width="3.026570428696413in" ![](media/image251.png){width="3.0448775153105863in" + height="1.5810192475940508in"} height="2.0040441819772528in"} + + ------------------------------------------------------------------------------------------------------------ + +The data are currently from 1979 (soon to be from 1950). They are +available for many elements including precipitation, temperature, +evaporation, radiation and wind speed and direction. + +They are hourly data and at a 0.25 by 0.25-degree (about 25km) +resolution. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 9.3d*** ***Fig. 9.3e*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image248.png){width="3.128680008748906in" ![](media/image243.png){width="2.8662554680664916in" + height="2.0612062554680666in"} height="2.2056594488188974in"} + + ------------------------------------------------------------------------------------------------------------ + +On your first visit to the site, continue, and click on ***Download +data*** in Fig. 9.3c. You then choose one or more elements, Fig. 9.3d +and decide on the years, months, days and hours to include. Finally, +select the sub-region to extract in the Geographical area section, Fig. +9.3f. Once the items in Fig. 9.3d, Fig. 9.3e and Fig. 9.3f are complete +you can click ***Submit Form*** to start the request. + +The running may take minutes (sometimes many) to complete. It also +sometimes fails. You can view the current status of your requests by +clicking ***Your requests*** from the menu bar shown in Fig. 9.3a. +Occasionally there is a single error 500, in which case just run again. +The other common error is that you have asked for too much data. If you +are requesting a complete time series i.e. for all hours, days, and +months, then the current limit appears to be approximately 5 years. This +limit seems to be the same, irrespective of the area. Hence, for 30 +years, make 6 separate requests, changing the years for each run. You do +not need to wait for a request to complete before starting another one. +Go to ***Your requests*** to see the status of each and download the +data once complete. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 9.3g Generate a toolbox request*** ***Fig. 9.3h Names for each element*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image246.png){width="3.0120089676290465in" ![](media/image241.png){width="3.0938626421697286in" + height="2.827140201224847in"} height="1.705543525809274in"} + + ------------------------------------------------------------------------------------------------------------- + +An alternative way to request data is through the Toolbox, shown in the +menu bar of the homepage in Fig. 9.3a. Previously, it was not possible +to select a sub-region through the interface described above, hence it +was necessary to construct a Python script to run the Toolbox in order +to do this. However, now that sub-region extraction is possible in the +interface, we suggest it is sufficient to use the interface if your main +interest is to download data for use in another software e.g. R or +R-Instat. + +An example Toolbox script to download hourly 2-metre temperature data +for sub-region covering in Rwanda for 5 years in shown Fig. 9.3i. The +Toolbox also includes functionality for processing, analysing and +displaying data, however this is not covered here as we will demonstrate +importing ERA5 data into R-Instat. + ++-----------------------------------------------------------------------+ +| ***Fig. 9.3i Sample toolbox code*** | ++=======================================================================+ +| **import cdstoolbox as ct** | +| | +| **\@ct.application(title=\'Retrieve Data\')** | +| | +| **\@ct.output.dataarray()** | +| | +| **def retrieve_sample_data():** | +| | +| **\"\"\"** | +| | +| **Application main steps:** | +| | +| **- retrieve 2m temperature of ERA5 from CDS Catalogue** | +| | +| **- specify the grid - year(s) - month(s) - day(s) - hour(s)** | +| | +| **- area is optional give N/W/S/E corners** | +| | +| **- recommended for local analysis** | +| | +| **- ask for netcdf format** | +| | +| **\"\"\"** | +| | +| **data = ct.catalogue.retrieve(** | +| | +| **\'reanalysis-era5-single-levels\',** | +| | +| **{** | +| | +| **\'variable\': \'2m_temperature\',** | +| | +| **\'grid\': \[\'0.25\', \'0.25\'\],** | +| | +| **\'product_type\': \'reanalysis\',** | +| | +| **\'year\': \[** | +| | +| **\'1981\','1982','1983','1984','1985'** | +| | +| **\],** | +| | +| **\'month\': \[** | +| | +| **\'01\', \'02\', \'03\', \'04\', \'05\', \'06\',\'07\', \'08\', | +| \'09\', \'10\', \'11\', \'12\',** | +| | +| **\],** | +| | +| **\'day\': \[** | +| | +| **\'01\', \'02\', \'03\', \'04\', \'05\', \'06\',\'07\', \'08\', | +| \'09\', \'10\', \'11\', \'12\',** | +| | +| **\'13\', \'14\', \'15\', \'16\', \'17\', \'18\',\'19\', \'20\', | +| \'21\', \'22\', \'23\', \'24\',** | +| | +| **\'25\', \'26\', \'27\', \'28\', \'29\', \'30\',\'31\'** | +| | +| **\],** | +| | +| **\'time\': \[** | +| | +| **\'00:00\',\'01:00\',\'02:00\',\'03:00\',\'04:00\',\'05:00\',** | +| | +| **\'06:00\',\'07:00\',\'08:00\',\'09:00\',\'10:00\',\'11:00\',** | +| | +| **\'12:00\',\'13:00\',\'14:00\',\'15:00\',\'16:00\',\'17:00\',** | +| | +| **\'18:00\',\'19:00\',\'20:00\',\'21:00\',\'22:00\',\'23:00\'** | +| | +| **\],** | +| | +| **\'area\': \[\'-1.5/30/-2.0/30.54\'\],** | +| | +| **\'format\' : \[\'netcdf\'\]** | +| | +| **})** | +| | +| **return data** | ++-----------------------------------------------------------------------+ + +The second stage is to read the resulting data into R-Instat. For those +who were not online, the six files have also been renamed and copied +into the R-Instat library. + +***Go into R-Instat*** and use ***File \> Open and Tidy NetCDF File*** +Fig. 9.3j. + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 9.3j Loading the data for 1981-5*** ***Fig. 9.3k Six files in R-Instat*** + ---------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------- + ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTML145541b7.PNG](media/image191.png){width="3.2002351268591425in" ![](media/image197.png){width="2.920479002624672in" + height="1.9078324584426947in"} height="2.9872025371828523in"} + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +In Fig. 9.3j, if you downloaded your own data, then choose ***Browse***, +otherwise choose ***From Library*** and ***use the file called +cds.Rwanda_1981_5.nc***. + +Then recall the last dialogue and include the other five files, up to +cds.Rwanda_2005_10. The resulting data are shown in Fig. 9.3k. There are +about 394,416 rows of data in each file (i.e. roughly 9 \* 24 \* 365 \* +5) + +The next step is to append the files to give the 30-year record. Use +***Climatic \>Tidy and Examine \> Append***, Fig. 9.3l. In Fig. 9.3l, +include all 6 data frame, then the ID column isn't needed and the +resulting data frame is named better than Append1. + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 9.3l Appending the 6 data frames*** ***Fig. 9.3m Temperatures into centigrade*** + --------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------ + ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTML14701350.PNG](media/image203.png){width="3.084857830271216in" ![](media/image196.png){width="2.7211132983377078in" + height="2.3588156167979in"} height="3.437498906386702in"} + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +The data column in Fig. 9.3k, called tas, is in degrees Kelvin. Use +***Climatic \> Prepare \> Transform*** to change them into centigrade +for comparison with the station data, Fig. 9.3m. + +ECMWF provides the time variable always in GMT (Greenwich Mean Time). +Rwanda is 2 hours ahead, so either, or both, the time variables in Fig. +9.3k need to be moved forward by 2 hours. To make this change the data +should first be in "station" order. Hence first ***Right-Click*** and +choose ***Sort*** (or use Prepare \> Data Frame \> Sort) to produce the +dialogue in Fig. 9.3n. + +Now use ***Prepare \> Column: Calculate \> Calculations*** as shown in +Fig. 9.3o. In the calculator the ***Transform*** keyboard includes the +***lead*** function. The function, from the dplyr package is: + +***dplyr::lead(time_full,2)***, to move to Rwanda time. Pressing the +***Try*** button in Fig. 9.3o shows the first value is now 2am GMT[^47]. + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 9.3n*** ***Fig. 9.3o*** + ---------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------- + ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTML14c5504c.PNG](media/image199.png){width="3.1133234908136482in" ![](media/image198.png){width="2.914620516185477in" + height="3.026656824146982in"} height="3.134375546806649in"} + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Now use ***Climatic \> Dates \> Make Date*** to make a new Date column +from the Rwanda hourly column, Fig. 9.3p. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 9.3p*** ***Fig. 9.3q*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image200.png){width="2.9332370953630797in" ![](media/image195.png){width="3.1684503499562555in" + height="2.824397419072616in"} height="2.5948917322834646in"} + + ------------------------------------------------------------------------------------------------------------- + +Finally generate Tmax and Tmin, on a daily basis, from the hourly +values, ready to use, or to compare with station data. First +***right-click*** and make the ***lon and lat columns into factors***. +The hourly data are now roughly as in Fig. 9.3q + +Complete the ***Prepare \> Column: Reshape \> Column Summaries*** +dialogue as shown in Fig. 9.3r. As these are temperatures the daily +maximum and minimum are calculated. The resulting worksheet, Fig. 9.3s, +has a more reasonable 100,000 rows of data at the 9 gridpoints. + ++------------------------------------+---------------------------------+ +| ***Fig. 9.3r*** | ***Fig. 9.3s Resulting daily | +| | data*** | +| ***Prepare \> Column: Reshape \> | | +| Column Summaries*** | | +| | | +| ***(Make max and min the | | +| summaries)*** | | ++====================================+=================================+ +| ![](media/image184 | ![](media/image186.pn | +| .png){width="3.1482884951881016in" | g){width="2.9195363079615047in" | +| height="3.011654636920385in"} | height="2.777613735783027in"} | ++------------------------------------+---------------------------------+ + +## The IRI Data Store + +A third source of gridded data considered here is the IRI Data Library. +IRI is the International Research Institute for Climate and Society +based in Colombia University, USA. The website for their data library is +[[http://iridl.ldeo.columbia.edu/]{.underline}](http://iridl.ldeo.columbia.edu/) +, Fig. 9.4a. The IRI Data Store is a large repository of climate data +from a wide variety of sources. In many cases, the IRI Data Store is not +the only, or primary, source of the data, however the IRI Data Store +provides a simple consistent way of freely downloading from a large set +of sources, and crucially allows for selecting sub-regions. + +As well as downloading from the website, R-Instat includes a dialog to +directly download and import some of the common data from the IRI Data +Store. We demonstrate both methods here, using the R-Instat dialog to +download CHIRPS daily rainfall estimates and the IRI Data Store website +to download information on ENSO and sea surface temperatures. + +### Downloading directly from R-Instat + +Climate Hazards Group InfraRed Precipitation with Station data (CHIRPS), +produced by Climate Hazards Center UC Santa Barbara, USA, is a +near-global gridded rainfall data set, available from 1981 to +near-present with a spatial resolution of 0.05°. It is constructed by +combining satellite imagery and in-situ station data, and is available +on a daily, dekad and monthly basis. It's website is here +[[https://www.chc.ucsb.edu/data/chirps]{.underline}](https://www.chc.ucsb.edu/data/chirps) +but the data is more easily available to download and subset from the +IRI Data Store. It is an example of one of the datasets available to +download directly from R-Instat. + +In R-Instat go to ***Climatic \> File \> Import from IRI Data +Library***, fig xxx. First select "UCSB CHIRPS" as the ***Source***. We +will download the daily data with the highest resolution available, +hence choose "Daily Precipitation 0.05 degree" as the ***Data***, fig +xxx. Source shows a limited set of data sources available in the IRI +Data Store which we think will be most commonly used by R-Instat users. +If there is a dataset from the IRI Data Store that you commonly use and +think we should add, please let us know and we can consider adding it to +the dialog. + +The next two sections of the dialog allow for choosing a subset of time +or location. By default, "Entire Range" is selected for the data range. +For CHIRPS, this means 1981 to near-present. We will use this option, +but if you want a shorter time period choose "Custom Range" and select +the "From" and "To" dates. The Location Range allows you to choose an +area defined by longitude and latitude limits, or a single point, which +will extract the nearest grid point to the location you provide. Let's +first choose a single point for Kigali, Rwanda at longitude 30.1 and +latitude -1.95, fig xxx. + +The dialog will connect to the IRI Data Library and download the +requested data to your machine as a NetCDF file (.nc), a common format +for gridded data (CM SAF and C3S Climate Data Store data are also +provided in this format). Click ***Browse*** to choose where the +download data will be saved to or accept the default of your Documents +folder. Choose an appropriate name for the new data frame. Now, click +***Ok*** to download and import the data into R-Instat. It may take some +time for the request to be processed (up to 30 minutes), particularly +for requests that are for a long time period since data are usually +stored in separate files for each time point. However, this does not +mean the download will be a large file and the time can vary depending +on how busy the IRI Data Library servers are. While waiting, you will +see the R-Instat waiting dialog and the download progress bar. Do not +worry if the progress bar does not move forward, this just means the +request is still being processed. Once the request has been processed, +the download will usually be small and take very little time. For +example, this request should result in a download file of size \~0.1MB. + +After finishing you will see the data imported into R-Instat, fig xxx. +The NetCDF file has been downloaded to the location chosen on the dialog +(Documents by default) and the file has been imported into a data frame +in R-Instat. The data frame has five columns. X and Y are the location +and this should be constant since we requested a single point. Notice +that the value in Y is not exactly what we request. It is -1.97 and we +request -1.95. This is because the closed grid point in the CHIRPS data +grid to the provided location is selected. .T is time as a number and +T_date is a more useful column that is created by R-Instat when +importing as a Date column. prcp is precipitation. We can confirm this +by looking at the column metadata: ***View \> Column Metadata***. Scroll +to the end to see the "standard_name" and "units" columns which confirm +what each column represents and its units, fig xxx. Click ***View \> +Column Metadata*** again to close the metadata. We can see that each row +in the data represents a single day, starting on 1981-01-01. Use +***Describe \> One Variable \> Summaries***, and select all columns to +see a summary of the data. The output is shown in fig xxx. We see that X +and Y are constant, as expected. .T is numeric and not that useful, but +T_date show the data ranges from 1981-01-01 to 2020-08-31 (as of October +2020, usually 1 or 2 months behind the current date). prcp shows a +sensible set of summaries for daily rainfall values. This is useful to +do to confirm that the request is as you expected. For example, if X and +Y are not constant but you wanted just a single point, then you may not +have done the request correctly. + +Notice that the data file is also stored on your machine in the folder +you chose. For example, in Documents my file is called +ucsb_chirps7f14482329.nc. If you need to import this data again, you can +now use the file directly, without requesting it again from the IRI Data +Store. See section xxx on how to import NetCDF files. + +This data is useful for comparison with a single station in Kigali. We +often have data from multiple stations and would wish to extract gridded +data at each of the station locations. One way to do this would be to +make separate requests for each station location using the Import from +IRI Data Library multiple times. However, this becomes time consuming +for many stations, particularly if the processing time is slow. Another +option is to do a single request and download data for an area that +covers all the station locations and then afterwards extract the data +for the required locations. + +So let's to this by download the same data for an area that covers +Rwanda instead of a single point. This will be a larger download file +\~280MB but should not take much longer to process. If you have an +internet connection able to download \~300MB of data then try the next +steps below. If not, then this is just for reading. + +Go back to the ***Import from IRI Data Library*** dialog. The +***Source***, ***Data*** and ***Date Range*** options remain the same. +Change the ***Location Range*** option from "Point" to "Area" and enter +the values: longitude: min 28.5, max 30.5, latitude: min -2.5, max -1.4. +This area covers the four stations in Rwanda found in the R-Instat +Library. Choose the location to save the download or use the same +location. Now, the data request is for approximately a 2 degrees by 1 +degree area, which will give approximately (2 / 0.05) x (1 / 0.05) = 40 +x 20 = 800 grid points, since the resolution is 0.05 degrees. We do not +want to directly import all 800 grid points into R-Instat as this would +be equivalent to 800 station records for 40 years. Instead, we want to +download the data and then extract only a few grid points of interest +afterwards. So we will check the option for "Don't import data after +downloading". This removes the new data frame name as it will not import +into R-Instat but will just download to your machine. Now click ***Ok*** +and it may take a similar amount of time to complete. + +After finishing you will not see any change in R-Instat but the file +will be downloaded to the chosen folder. We can now use the dialog at +***Climatic \> File \> Import & Tidy NetCDF*** to import a subset of the +grid points based on station locations. This is shown in section xxx. + +### Download from the IRI Data Store + +As examples, information on ENSO and sea surface temperatures are +accessed. The maproom also contains instructional information, so typing +ENSO into the search, Fig. 9.4a, provides useful information, including +the areas of the Pacific ocean associated with the NINO situations, Fig. +9.4b. Fig. 9.4b is accessed directly from +[[https://iridl.ldeo.columbia.edu/maproom/ENSO/Diagnostics.html]{.underline}](https://iridl.ldeo.columbia.edu/maproom/ENSO/Diagnostics.html) + + ------------------------------------------------------------------------------------------------------------ + ***Fig.9.4a IRI Data Library*** ***Fig. 9.4b NINO3.4*** + ------------------------------------------------------ ----------------------------------------------------- + ![](media/image211.png){width="3.8668733595800524in" ![](media/image221.png){width="2.130990813648294in" + height="2.70544072615923in"} height="2.7068285214348204in"} + + ------------------------------------------------------------------------------------------------------------ + +In Fig. 9.4a click on Data by Category, then on Climate Indices, Fig. +9.4c and choose Indices nino EXTENDED, Fig. 9.4d. + + ------------------------------------------------------------------------------------------------------------- + ***Fig. 9.4c*** + ------------------------------------------------------ ------------------------------------------------------ + ![](media/image229.png){width="2.6998807961504814in" ![](media/image228.png){width="3.4260433070866143in" + height="2.4705489938757657in"} height="2.2284437882764654in"} + + ------------------------------------------------------------------------------------------------------------- + +Choose ***nino34***, in Fig. 9.4e and then go straight to ***data +files***. The next screen shows a variety of output formats, including +NetCDF, which you choose. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 9.4e*** ***Fig. 9.4f*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image223.png){width="3.075055774278215in" ![](media/image201.png){width="2.899403980752406in" + height="3.0795778652668417in"} height="3.59878280839895in"} + + ----------------------------------------------------------------------------------------------------------- + +Now, in R-Instat, use File \> Open and Tidy NetCDF File. If you followed +the screens above, then browse for the file that was downloaded. +Otherwise there is a copy in the R-Instat library to March 2019, Fig. +9.4g. + + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ***Fig. 9.4g*** ***Fig. 9.4h*** + --------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------- + ![C:\\Users\\ROGERS\~1\\AppData\\Local\\Temp\\SNAGHTMLda15af6.PNG](media/image216.png){width="3.1782567804024495in" ![](media/image222.png){width="2.99167760279965in" + height="1.8947287839020122in"} height="2.0226049868766403in"} + + -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +The data are now imported into R-Instat, Fig. 9.4h. The time variable +has not been recognised as a date. You may wish to click on the I (for +information -- the metadata) and this will confirm that the column, +called T, is months since January 1960. If the fact that some values +appear the same in this column, then change the number of significant +figures in that column, from 3 to 5. + +The first value of T, in Fig. 9.4h is -1248. Dividing by 12 gives 104 +years, so the data start in January 1856! + +Use Climatic \> Dates \> Generate Dates, Fig. 9.4i. In Fig. 9.4i, change +the starting date to January 1856, the end date to March 2019 (if using +the library dataset), and the step to 1 Month. The resulting date column +is shown in Fig. 9.4j. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 9.4i*** ***Fig. 9.4j*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image217.png){width="2.841988188976378in" ![](media/image210.png){width="2.6477077865266843in" + height="2.867364391951006in"} height="3.06124343832021in"} + + ------------------------------------------------------------------------------------------------------------ + +Countries have their own definition of when the NINO3.4 implies a year, +or season is El Niño, or La Niña, see +[[https://en.wikipedia.org/wiki/El_Ni%C3%B1o]{.underline}](https://en.wikipedia.org/wiki/El_Ni%C3%B1o), +some use the NINO3.4 value and others use NINo3, or even NINO1 and 2. +The site +[[http://www.bom.gov.au/climate/enso/enlist/index.shtml]{.underline}](http://www.bom.gov.au/climate/enso/enlist/index.shtml) +gives a detailed description of El Niño events since 1900, Fig. 9.4k, +with a companion page for La Niña. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 9.4k*** ***Fig. 9.4l*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image127.png){width="3.470980971128609in" ![](media/image128.png){width="2.5918022747156604in" + height="2.1808070866141733in"} height="1.7213331146106736in"} + + ------------------------------------------------------------------------------------------------------------ + +The SSTs themselves are often used for seasonal forecasting. This is +illustrated with the SSTs for the Nino3.4 region. + +***Return to the main page***, Fig. 9.4a, then choose ***Data by +Category*** again, but this time, in Fig. 9.4c, choose ***Air-Sea +Interface***. In the resulting screen, choose the ***NOAA NCDC ERSST +version5***, Fig. 9.4l. + +In the resulting screen, Fig. 9.4m, choose ***anomalies*** and then +***Data Selection***. + + ------------------------------------------------------------------------------------------------------------ + ***Fig. 9.4m*** ***Fig. 9.4n*** + ----------------------------------------------------- ------------------------------------------------------ + ![](media/image156.png){width="2.991107830271216in" ![](media/image130.png){width="3.0622233158355208in" + height="2.34369750656168in"} height="2.5905457130358704in"} + + ------------------------------------------------------------------------------------------------------------ + +Set the ***time, attitude and longitude*** as shown in Fig. 9.4n and +then ***Restrict Ranges***. The part at the top of Fig. 9.4n should +change accordingly and you now press ***Stop Selecting***. + +Fig. 9.4m now has the three ranges added, in blue, Fig. 9.4o. Click on +Data Files to give the same as Fig. 9.4f, earlier. Choose the NetCDF +option again to download the file. + + ----------------------------------------------------------------------------------------------------------- + ***Fig. 9.4o*** ***Fig. 9.4p*** + ----------------------------------------------------- ----------------------------------------------------- + ![](media/image141.png){width="2.780994094488189in" ![](media/image183.png){width="3.290544619422572in" + height="1.8450831146106736in"} height="2.7998042432195978in"} + + ----------------------------------------------------------------------------------------------------------- + +Use the File \> Input and Tidy NetCDF File as in Fig. 9.4g. Then use the +Climatic \> Dates \> Generate Dates dialogue as shown in Fig. 9.4p. In +Fig. 9.4p, remember to change to the new data frame. Then set the +starting date to January 1921 and there are now 130 values (26 E-W, by 5 +N-S) at each time point. + +In Fig. 9.4p, if all is correct, the generated sequence should match the +length of the data frame. Once accepted, the resulting data frame is +shown in Fig. 9.4q. Here each pixel is a 2 degree square, so the first +row is the temperature anomaly round 120°W and 4°S for January 1921. + + ----------------------------------------------------------------------- + ***Fig. 9.4q*** + ----------------------------------------------------------------------- + ![](media/image102.png){width="2.993989501312336in" + height="3.175609142607174in"} + + ----------------------------------------------------------------------- + +## Using the CM SAF toolbox for NetCDF files + +The CM SAF toolbox is an R software package designed to process the +NetCDF files downloaded from EUMETSAT, Section 9.3. It is used on the +downloaded files from EUMETSAT (or from other organisations who have +NetCDF files). This may be all you need, if your interest is in some +products from the EUMETSAT data. Or it may be before using R-Instat if +your interest is in comparing station and satellite data. + +## Defining ENSO + +See +[[https://www.ncdc.noaa.gov/teleconnections/enso/indicators/sst/]{.underline}](https://www.ncdc.noaa.gov/teleconnections/enso/indicators/sst/) + +[Warm and cold phases are defined as a minimum of five consecutive +3-month running mean of SST anomalies +([[ERSST.v5]{.underline}](http://origin.cpc.ncep.noaa.gov/products/analysis_monitoring/ensostuff/ONI_v5.php)) +in the Niño 3.4 region surpassing a threshold of +/- 0.5°C]{.mark} \ No newline at end of file diff --git a/_book/Chapter_10_Comparing_Data_from_Different_Sources.html b/_book/Chapter_10_Comparing_Data_from_Different_Sources.html new file mode 100644 index 0000000..544e0da --- /dev/null +++ b/_book/Chapter_10_Comparing_Data_from_Different_Sources.html @@ -0,0 +1,788 @@ + + + + + + + + + +11  Comparing Data from Different Sources – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

11  Comparing Data from Different Sources

+
+ + + +
+ + + + +
+ + + +
+ + +
+

11.1 Introduction

+

The satellite and reanalysis data, discussed in Chapter 9, provides a wonderful resource that can supplement the historical station data that is described in this guide. The satellite data is usually from the early 1980s, while some of the reanalysis data is from 1950. Table 10.1 summarises some sources of rainfall data:

+ +++ + + + + + + + + + + +
Table 10.1
+

Some of these products also include other elements, including temperatures and ERA5 is for many elements.

+

These data are already used extensively. However, often users access only one type, i.e. either station or satellite/reanalysis. This is often either because that is what the researcher is comfortable with, or only one type is easily available. We consider here how station and satellite data can be compared and then perhaps used together. There are a range of possible objectives from these comparisons including the following:

+
    +
  1. The satellite/reanalysis data, from the same location as a ground station, can perhaps be considered as an additional station. As such, perhaps the data can be used to complete, or infill missing values in the station data.

  2. +
  3. Similarly, perhaps this new (satellite) station could be used to support the quality-control of the station data.

  4. +
+

These objectives may be more interesting for countries where there is a relatively sparse station network. Where the network is dense, neighbouring ground stations may be used for these objectives.

+
    +
  1. The bonus is that the satellite data does provide a dense network. For example, for CHIRPS the estimated daily rainfall data is on roughly a 5km square, so the equivalent of about 400 (pseudo) stations per square degree. Hence it provides estimated daily rainfall data for the whole of Africa, and beyond with a pseudo station that is always close to any given location.
  2. +
+

Comparisons between station and gridded data must recognise that they have not measured the same thing. Station data are measured at a point, while gridded data represent an area. The size of the area depends on the method with an example shown in Fig. 10.1a.

+

In Barbados, Fig. 10.1a the point shown is a station called Husbands, the site of a regional climate centre. CIMH. The largest pixel is for the ERA5 reanalysis data and the smallest is for CHIRPS. This figure also shows that the pixel in coastal sites can sometimes be largely over the ocean and hence a neighbouring pixel may be more relevant.

+ ++++ + + + + + + + + + + + + +
Fig. 10.1a Pixel size for 3 methods in Barbados

Fig. 10.1b Difference between gridded and point data for rainfall

+

(Figure with permission from H. Greatrex)

+
+

+
Chart Description automatically generated
+
+
+

Fig 10.1b illustrates a reason for possible differences between area and point data for rainfall. The sketch shows a cloud, and hence possibly rain in part of the pixel, but not at the station in the top left. Hence the station may be zero, while the gridded data notes some rain. Thus, unless the satellite data are adjusted, we would expect more rain days (and potentially less extreme values) than at a point. This feature is particularly for rainfall, but may also be shown for other elements, such as sunshine hours, where there may be zeros in the data.

+

The problem that is addressed in this chapter is essentially just the comparison of two variables, i.e. 2 columns of data, where the first is the station and the second is the satellite, or reanalysis data. This is essentially the same problem as in forecasting, where the forecast is compared with the actual data. Many of the methods are from software that was originally constructed for the forecasting problem.

+

From a statistical point of view this problem is just the same as comparing

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_11_Drawing_Maps.html b/_book/Chapter_11_Drawing_Maps.html new file mode 100644 index 0000000..d410717 --- /dev/null +++ b/_book/Chapter_11_Drawing_Maps.html @@ -0,0 +1,987 @@ + + + + + + + + + +12  Drawing Maps – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

12  Drawing Maps

+
+ + + +
+ + + + +
+ + + +
+ + +
+

12.1 Introduction

+

Climatic data is often presented in map form. Common examples include details of the stations in each country, plus further information about each station.

+

Preparing a map is usually a 2-stage process. The first stage, described in Section 10.2, uses a shape file to provide an outline of the country, and other general details. Then climatic details are added, as is described in Section 10.3.

+
+
+

12.2 Using a shape file

+

R-Instat does not currently have any shape files in the library, so they have to be downloaded. There are various sites that offer shape files and GADM (GADM, 2019) is comprehensive, Fig. 10.2a.

+ +++ + + + + + + + + + + +
Fig. 10.2a The GADM data page
+

C licking on country in Fig. 10.1a allows the input of a country name, as shown in Fig. 10.2b. For Kenya, as for most other formats, there are different ways to download the data.

+ ++++ + + + + + + + + + + + + +
Fig. 10.2b

Fig. 10.2c

+

Climatic > File > Open and Tidy Shapefile

{ width=“2.7050929571303586in” h eight=“2.183115704286964in”}
+

Data at level 0 is simply the country boundary, while level 1 gives the outline for each of Kenya’s 47 counties. Levels 2 and 3 provide even more detail.

+

In Fig. 10.2b the R(sf) option provides a file, with an rds extension, that can be opened into R-Instat through the File > Open dialogue. However, we suggest clicking on Shapefile in Fig. 10.2. This downloads a zip file that is about 20 Mbytes for Kenya and which contains data at all 4 levels, 0, 1, 2, 3.

+

Unzip this file. In R-Instat use Climatic > File > Open and Tidy Shapefile, Fig. 10.2c. Go to the unzipped files and open the Level 1 shapefile. There are 47 rows of data, shown in Fig. 10.2d, (after reordering the variables for clarity.)

+ ++++ + + + + + + + + + + + + +
Fig. 10.2dFig. 10.2e
+

Go to Climatic > Mapping. Part of this dialogue is shown in Fig. 10.2e. Choose the data frame with the shape file if it isn’t chosen automatically. Then just press Ok for the map shown in Fig. 10.2f.

+

What could be easier?

+

Return to the Climatic > Mapping dialogue and add the NAME_1 variable from Fig. 10.2d into the Fill field of Fig. 10.2e. The result is in Fig. 10.2g. The map is now nicely colourful. If there were, say, 10 regions, this would be fine, but with 47 counties the legend is taking too much space and can’t easily be associated with each county.

+ ++++ + + + + + + + + + + + + +
Fig. 10.2fKenya county mapFig. 10.2g
+

So, return to the Climatic > Mapping dialogue. Press Plot Options, then use the Theme tab and set the Legend to None, Fig. 10.2h.

+ ++++ + + + + + + + + + + + + +
Fig. 10.2hFig. 10.2i
+

The resulting map is shown in Fig. 10.2i.

+

Sometimes it is useful for an initial map to include the names of the districts as labels.

+

Return to the Climatic > Mapping dialogue and include the same data frame also on the right-hand side of the dialogue, Fig 10.2j.

+ +++ + + + + + + + + + + +
Fig. 10.2j
+

The initial results are in Fig. 10.2k. It shows that, with 47 labels we have given the software a considerable challenge to make all the labels visible. The geom is called geom_label_repel and has done its best, but perhaps it needs some help. Two possibilities are to make the labels smaller, Fig. 10.2l, or to omit the box round each label. This then uses geom_text_repel instead, Fig. 10.2m.

+ ++++ + + + + + + + + + + + + +
Fig. 10.2kFig. 10.2l
+

Finally, in this section, we go “down a level”. This uses the level 2 data, which has 310 rows. Then we filter to give just one district, choosing Kisumu. (A few neighbouring districts could be chosen.) The resulting map is shown in Fig. 10.2n.

+

The GADM site is limited to administrative data only. There are other sites, such as http://www.diva-gis.org/ with additional information, such as roads and elevation.

+ ++++ + + + + + + + + + + + + +
Fig. 10.2m Text, rather than labelFig. 10.2n
+
+
+

12.3 Adding station data

+

Adding station data to a map is just as easy as adding the county information in Section 10.2. If your data are in CLIMSOFT, and you have the necessary permissions, then transferring the data may be done with the Climatic > File > Import from Climsoft dialogue. Here we illustrate with the Kenya data from the Instat library.

+

Use File > Open from Library > Instat > Browse > Climatic > Kenya and open the file called western_kenya.rds. This has 3 data frames, including one called wkenya_stationinfo, Fig. 10.3a.

+ ++++ + + + + + + + + + + + + +
Fig. 10.3aFig. 10.3b
+

There are 52 stations, Fig. 10.3a, and the information includes the County as well as the latitude and longitude. An initial step is to examine how many counties have data. This uses the Right-Click from the top of the County column, and the Levels/Labels option, also shown in Fig. 10.3a.

+

The Levels/Labels dialogue shows there are data from 12 counties. The spelling is consistent with the County=level file, used in Section 10.2 except for Homabay, which we change, in this dialogue, to Homa Bay.

+

This initial check is important, as any spelling mistakes in the county name, when entering the data, will invent a new county!

+ ++++ + + + + + + + + + + + + +

Fig. 10.3d Filter the map file

+

Right Click > Filter > Define New Filter

Fig. 10.3e Map file for Western Kenya
+

Return to the level 1 map file, Right-Click and Filter to choose the same 12 counties, Fig. 10.3d. The data file should now have just 12 rows, to match the number of counties that will be mapped.

+

Return to the Climatic > Mapping dialogue. The map information is on the left-hand side of the dialogue and the new station information is now on the right, Fig. 10.3f.

+ +++ + + + + + + + + + + +
Fig. 10.3f
+

The result is shown in Fig. 10.3g with labels, and with the county given as a legend. Fig. 10.3h uses text and omits the legend. This is quite a challenging map, because so may stations are close together.

+ ++++ + + + + + + + + + + + + +
Fig. 10.3gFig. 10.3h
+

The results show there are at least 2 obvious errors in the data. The most obvious is Chemilil, which should be in Kisumu county, but is shown in the middle of Kajaido. And Akira, that should be in Kajaido is shown slightly outside any of the counties. It is tempting to correct these obvious errors. However, better is the message that there may be other errors and a strategy for checking the geographical information would be useful.

+

We wonder whether google maps could be used for checking? This aspect has become important, partly because of the potential of combining station and satellite information. However, the combining is only sensible if the locations of the station data are correct.

+
+
+

12.4 Information about the stations

+

To be added.

+
+
+

12.5 Further types of mapping

+

Contours, gridded data

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_12_Extremes.html b/_book/Chapter_12_Extremes.html new file mode 100644 index 0000000..e9c82d5 --- /dev/null +++ b/_book/Chapter_12_Extremes.html @@ -0,0 +1,1357 @@ + + + + + + + + + +13  Extremes – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

13  Extremes

+
+ + + +
+ + + + +
+ + + +
+ + +
+

13.1 Introduction

+

Starting with daily, or sub-daily data the analysis proceeds in two stages. The first is to get the extremes and the second is to analyse them. The data from two stations in Ghana are used for illustration. Use File > Open from Library > Instat > Browse > Climatic > Ghana and open the RDS file called Ghana two stations. From Fig 11.1a we see the data start in 1944, though the elements, other than rainfall start later.

+ ++++ + + + + + + + + + + + + +
Fig. 11.1a Two stations from GhanaFig. 11.1b
+

In the Climatic menu the data are already in the right “shape” and there is a date column, see Fig. 11.1a. So start by checking whether there are any missing dates to infill, Fig. 11.1b.

+ ++++ + + + + + + + + + + + + +
Fig. 11.1cFig. 11.1d
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTML177df15.PNG
+

In Climatic > Dates Infill Missing Dates, include the Station, Fig. 11.1c. The results, in Fig. 11.1d, indicate that there were 5 missing months in the record at Saltpond and four at Tamale. There are now 53297 rows of data.

+

Now use Climatic > Dates > Use Date, Fig. 11.1e, and complete as shown.

+

Then use Climatic > Define Climatic data. It should complete automatically. Check for uniqueness and then press OK.

+ ++++ + + + + + + + + + + + + +
Fig. 11.1eFig. 11.1f
+

Now use Climatic > Check Data > Inventory, Fig. 11.1g. Include the elements down to wind speed.

+ ++++ + + + + + + + + + + + + +
Fig. 11.1gFig. 11.1h
+

The results show the other elements started roughly in 1960. There are relatively few missing values in the rainfall, and the other elements are also reasonably complete.

+

The same Climatic > Check Data menu has options for quality control checks. These are assumed, as we proceed to examine the extremes.

+
+
+

13.2 Getting the extremes

+

In the Climatic > Prepare menu there are four dialogues that get extremes. They are considered briefly and then Climatic > Prepare > Extremes is examined in detail.

+

The Climatic > Prepare > Climatic Summaries, Fig. 11.2b has already been used extensively in this guide.

+ ++++ + + + + + + + + + + + + +
The ClimzaFig. 11.2aFig. 11.2b
+

In Fig. 11.2c we can choose the extremes, i.e. the minimum and/or maximum. These can be annual, as shown in Fig. 11.2b, or for a part of the year, or perhaps monthly.

+ ++++ + + + + + + + + + + + + +
Fig. 11.2cFig. 11.2d
+

Fig. 11.2d shows the Climatic > Prepare > Spells dialogue. This automatically gives the extreme, i.e. longest spell each year. This may be the longest dry spell for rainfall, or the longest hot (or cold) spell for temperatures, etc.

+

The Climdex system is covered in Sections 11.3 and 11.4. Hence now consider the Climatic > Prepare > Extremes dialogue, Fig. 11.2e.

+ ++++ + + + + + + + + + + + + +
Fig. 11.2eFig. 11.2f
+

To be continued

+
+
+

13.3 Climdex Indices - precipitation

+

A set of 27 climate change indices have resulted from WMO meetings and reports. They are described in http://etccdi.pacificclimate.org/list_27_indices.shtml and implemented through an R package called climdex.pcic. The pcic stands for Pacific Islands Impacts Consortium, but the indices are general.

+

Each index can produce an annual summary, and some offer the option of monthly summaries. The are a single dialogue in R-Instat. Sixteen of the indices are temperature-based. The other 11 are rainfall indices.

+

The Dodoma data from Tanzania are used for illustration. Use File > Open from Library > Instat > Browse > Climatic > Tanzania and open the file called Dodoma.rds. It is already defined as a climatic dataset. Hence the climatic dialogues can be used immediately.

+

The annual summaries from climdex are compared with those used in Chapters 6 and 7. Hence start with the Climatic > Prepare > Climatic Summaries, Fig. 11.3b.

+ ++++ + + + + + + + + + + + + +
Fig. 11.3aFig. 11.3b
+

Press Summaries on the main dialogue and choose the summaries indicated in Fig. 11.3c. Then choose the Missing Options tab to give Fig. 11.3d. The default in climdex is to set the summary to missing if more than 15 days in the year are missing, so the same is done here.

+ ++++ + + + + + + + + + + + + +
Fig. 11.3cFig. 11.3d
+

The result is two annual summaries, Fig. 11.3e, that are like two of the climdex indices. They are ready to draw graphs, fir trend lines and so on. The data frame, in Fig. 11.3e, has 79 rows, because there are 79 years of data

+

Use Climatic > Prepare > Climdex, Fig. 11.3f. The dialogue should fill automatically. If not, then check you are using the correct data frame.

+ ++++ + + + + + + + + + + + + +
Fig. 11.3eFig. 11.3f
+

In Fig. 11.3f click on Indices. Complete the settings as shown in Fig. 11.3g and then choose the precipitation tab. The numbers for each index match those given in http://etccdi.pacificclimate.org/list_27_indices.shtml . For illustration, tick everything there and press Return.

+ ++++ + + + + + + + + + + + + +
Fig. 11.3gFig. 11.3h
+

This results in 11 further columns, for each of the precipitation indices. They are added to the yearly data frame and shown in Fig. 11.3i. Each is described briefly, before continuing with the analysis.

+ +++ + + + + + + + + + + +
Fig. 11.3i
+

The indices are defined as shown in table 11.3a. In Fig. 11.3i the variable max_rain, from the Climatic > Prepare > Climatic Summaries is seen to be the same as Rx1day. We consider briefly how to get each of these indices using the other R-Instat dialogues.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 11.3a Precipitation indices from climdex
NumberNameDescription
17Rx1dayAnnual maximum
18Rx5dayMaximum from 5-day running totals
19SRIISimple intensity index, i.e. Annual total/Number of rain days
20R10mmAnnual number of rain-days with 10mm or more
21R20mmAnnual number of rain-days with 20mm or more
22RnnmmAnnual number of days with ≥ nn(mms). User chooses value of nn
23CDDLongest dry spell in the year (dry is <1mm)
24CWDLongest spell of successive rain days (rain is >=1mm)
25R95pAnnual total greater than 95th percentile in base period
26R99pDitto for 99th percentile
27PRCPTOTTotal annual rainfall (from days with ≥ 1mm)
+

This comparison is partly to help users understand exactly what each index is measuring. In addition the regular dialogues provide additional flexibility, if needed to examine the indices in more detail.

+

The second summary, produced earlier is the total annual rainfall, called sum_rain in Fig. 11.3i. This is almost the same as the climdex index 27, PRCPTOT. For example sum_rain = 523mm in 1935, compared to 514mm for PRCPTOT.

+

The small difference is because the sum_rain has totalled all the rain days, while PRCPTOT only considers those with at least 1mm.

+

Check this with Prepare > Column: Calculate > Calculation. With the Logical keyboard make a new column, called rain1, Fig. 11.3j, with:

+

rain1 <- ifelse(rain<1, 0, rain), or equivalently rain1 <- (rain>=1) * rain.

+

Then use Climatic > Prepare > Climatic Summaries with the new rain1 variable to check the annual totals now agree with those from climdex.

+ ++++ + + + + + + + + + + + + +
Fig. 11.3jFig. 11.3k
+

From the rain5 variable, the Climatic > Prepare > Extremes is an alternative dialogue to give the annual maxima, Fig. 11.3l. This gives the same results as the climdex Rx5day variable. It also gives a further the day in the year of the maximum. This could be used in a study to investigate whether there is any evidence for a trend in when the maximum occurs as well as its value.

+ ++++ + + + + + + + + + + + + +
Fig. 11.3l

Fig. 11.3m

+

Climatic > Prepare > Climatic Summaries
+with sub-dialogue

+

The “Simple intensity index”, SRII is essentially the mean rain per rain day, (just using the values of days with more than 1mm). In Fig. 11.3i it is just PRCPTOT/Rnnmm, because we chose 1mm as the threshold. For example, in 1935 there were 36 rain days with a total of 514mm. Hence

+

SRII1935 = 514/36 = 14.26mm

+

The next 2 indices, R10mm and R20mm are just the number days each year with 10mm, and 20mm or more, each year. They can also be given using the Climatic > Prepare > Climatic Summaries dialogue.

+

The indices CDD and CWD give the maximum dry-spell length and rain-spell lengths, where rain = 1mm. They are special cases of the Climatic > Prepare > Spells dialogue, Fig. 11.3n. The data in Fig. 11.3i show that the CDD index for the whole calendar year is probably of little interest, for this site, because the months of May to October are usually dry. Hence the longest dry-spell of 197 days, in 1935, is not a surprise. However, assessing evidence for trends in the longest dry-spell during the season, perhaps from 1 January to 31 March, may be useful.

+ ++++ + + + + + + + + + + + + +
Fig. 11.3n Spells dialogue to give CWD indexFig. 11.3o Filter sub-dialogue for rain days in baseline years
+

The final 2 precipitation indices are R95p and R99p. They are the total rainfall each year from heavy rain days. The definition of “heavy” is relative to the baseline years. The first step is therefore to find the thresholds. The process is as follows:

+
    +
  1. Filter the Dodoma data to the baseline years and just the rain days, Fig. 11.3.

  2. +
  3. Use the Prepare > Column: Calculate > Column Summaries, Fig. 11.3p, with the percentile summary, Fig. 11.3q, to give the 95% and 99% points of the rain variable. The 95% point, Fig. 11.3q, = 45.57mm and the 99% point = 67.3mm

  4. +
+ ++++ + + + + + + + + + + + + +
Fig. 11.3pFig. 11.3q

+

Result in the output window

+

+
    +
  1. Now filter to use just the days for the whole record where (rain > 45.57), Fig. 11.3r. .

  2. +
  3. Use Climatic > Prepare > Climatic Summaries to give the sum and number of observations, Fig. 11.3s

  4. +
+ ++++ + + + + + + + + + + + + +
Fig. 11.3rFig. 11.3s
+

The resulting data are in Fig. 11.3t. The new sum_rain variable gives the same values as the R95p. In the first year, the total was 210.3mm from 3 rain days.

+ +++ + + + + + + + + + + +
Fig. 11.3t
+
+
+

13.4 Climdex – Temperatures

+

The 16 temperature indices are shown in Table 11.4a.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 11.4a Temperature indices from climdex
NumberNameDescription
1FDNumber of frost days, when daily minimum temperature, Tn <0.
2SUNumber of “Summer” days, when daily maximum temperature, Tx > 25
3IDNumber of icing days, when Tx < 0
4TRNumber of tropical nights, when Tn > 20
5GSLGrowing season length. Number of days between first span of 6 consecutive days with daily Tmean > 5°C and first span of 6 days (after July 1st) with Tmean < 5°C. (July to June in Southern hemisphere.)
6TXxAnnual or monthly maximum of Tx
7TNxAnnual or monthly maximum of Tn
8TXnAnnual or monthly minimum of Tx
9TNnAnnual or monthly minimum of Tn
10TN10pPercentage of days when Tn < 10th percentile from the baseline
11TX10pDitto for Tx < 10th percentile
12TN90pDitto for Tn > 90th percentile
13TX90pDitto for Tx > 90th percentile
14WSDIWarm spell duration index, the annual number of day where at least 6 consecutive days are warmer than the 90th percentile
15CSDICold spell duration index, the annual number of days when at least 6 consecutive days are colder than the 10th percentile
16DTRMean temperature range, i.e. mean difference between Tx and Tn
+

They are again illustrated with the Dodoma data. Use Climatic > Prepare > Climdex, Fig. 11.4a and complete the Temperature sub-dialogue as shown in Fig. 11.4b.

+ ++++ + + + + + + + + + + + + +

Fig. 11.4a The Climdex dialogue

+

Climatic > Prepare > Climdex

Fig. 11.4b Climdex temperature sub-dialogue
![] (media/image1381.png){wid th=“2.3313899825021873in” heig ht=“2.152358923884514in”}
+

The results are in Fig. 11.4c. Some results are obvious; in particular in the later years, shown in Fig. 11.4c, there are about 30% of days per year in TN90p, i.e. with Tn higher than the 90% point from the 1961-90 baseline. And TN10p has very low values. The change in Tn is clearer than that of the maximum temperatures, Tx.

+ +++ + + + + + + + + + + +
Fig. 11.4c
+

As in Section 11.3, some of the temperature indices can be calculated through the Climatic > Prepare > Climatic Summaries dialogue. For example completing Fig. 11.4d and Fig. 11.4e as shown produces the indices TNn and TNx.

+ ++++ + + + + + + + + + + + + +

Fig. 11.4d

+

Climatic > Prepare > Climatic Summaries

Fig. 11.4e Choosing the max and min
+

The calculations for 6 of the indices is more complex. They are numbered 10 to 15 in Table 11.4a and depend on the temperatures in the baseline period, usually 1961 to 1990. In this case the 10% and 90% points are found, in turn, for each day of the year[^48] and these values are then compared with the temperature on that day for the record.

+
+
+

13.5 Using the climdex indices

+

To be completed

+
+
+

13.6 Extreme value analysis

+

Using the extRemes package

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_13_PICSA__Long_Before_the_season.html b/_book/Chapter_13_PICSA__Long_Before_the_season.html new file mode 100644 index 0000000..d42cfb3 --- /dev/null +++ b/_book/Chapter_13_PICSA__Long_Before_the_season.html @@ -0,0 +1,1951 @@ + + + + + + + + + +14  PICSA – Long Before the season – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

14  PICSA – Long Before the season

+
+ + + +
+ + + + +
+ + + +
+ + +
+

14.1 Introduction

+

PICSA (Participatory Integrated Climate Services for Agriculture) is an initiative to share climate information with small-scale farmers. It was described briefly in Chapter 1 and Fig. 12.1a is a repeat of Fig. 1.6a to show the different stages of the PICSA activity.

+ +++ + + + + + + + + + + +
Fig. 12.1a Stages of the PICSA project
+

PICSA has been used in many countries in Africa and beyond, including Tanzania, Malawi, Lesotho, Ghana, Guyana, Rwanda, Haiti and Bangladesh. At first glance it may seem like many other initiatives to share climate information with farmers. It has some distinguishing features, that explain its inclusion in this guide.

+

The first distinguishing feature is the large set of activities that are undertaken prior to the availability of the seasonal forecast. They build on the information from the historical climatic data. There is a detailed instruction guide, with 12 sections. The first 7 are shown in Fig. 12.1b and take place in the “Long-before-the- season”, step shown in Fig. 12.1a.

+ +++ + + + + + + + + + + +
Fig. 12.1b
+

The second distinguishing feature is that PICSA supports farmer’s activities in relation to crops, livestock or other livelihood activities. It identifies options and is not directed towards any particular crop or activity. This is indicated in Step d) of Fig. 12.1b.

+

Third is the emphasis on “options by context” that places the farmer (and not the “expert”) at the centre. Thus, PICSA does not make recommendations for the farmers. Instead it offers options, with the idea, shown in steps d and e, in Fig. 12.1b, that the farmers, or households, may wish to select those that particularly fit their circumstances. Fig. 12.1c shows an example of options related to livelihood activities.

+ ++++ + + + + + + + + + + + + +
Fig. 12.1cFig. 12.1d
0F15318A-1080-4C3C-AAB7-34B2C68B99B4
+

These options are not pre-selected but are constructed through dialogues between the farmers and extension workers. Farmers evaluate options via a set of participatory exercises. One is a resource allocation map (RAM), step a) in Fig. 12.1b, an example of which is in Fig. 12.1d.

+

Further information on PICSA is available via the website https://research.reading.ac.uk/picsa/, Fig. 12.1e. Information includes the field manual, from which Fig. 12.1b shows the first 7 sections. This is currently available in 4 languages, namely English, Bengali, French and Spanish.

+

The idea, in PICSA, is that by step g, in Fig. 12.1b, the farmer has provisional plans for the season. These could apply to any season. These plans may then be modified by the extra information for this season, from the seasonal forecast, discussed in Chapter 13.

+ +++ + + + + + + + + + + +
Fig. 12.1e The PICSA webpage
+

In this chapter we mainly consider Steps b and c from Fig. 12.1b. This is a discussion of the historical temperature and rainfall data, both in relation to climate change (Step b) and then to consider the risks from different options (Step c).

+
+
+

14.2 Climate change and variability

+

In PICSA it has been useful for farmers to examine and use the historical graphs themselves, e.g. Fig. 12.2a. Some have had little or no formal education, but almost all have been able to follow and interpret the ideas of these time series graphs.

+ +++ + + + + + + + + + + +
Fig. 12.2a
+

Step b, in Fig. 12.1b is one of comparing farmers (and extension workers) perceptions of climate change with the evidence from the historical climatic records.

+

Many farmers, NGO and extension staff already have strong views on climate change. However, most have never seen any of the time series graphs of the type shown in Fig. 12.2b and Fig. 12.2c.

+

Temperatures usually show a clear trend, illustrated by Tmin in Fig. 12.2b. For rainfall the message is usually one of variability, Fig. 12.2c, rather than trend, being the main concern. This is a surprise for some, who interprete climate change as implying a change in the pattern of rainfall. This is partly because rainfall is by far the most important climatic element for tropical agriculture.

+ ++++ + + + + + + + + + + + + +
Fig. 12.2b Tmax and Tmin, DodomaFig. 12.2c Total annual rainfall, Dodoma

+

+

Of course, if there is a trend in temperatures, then this is climate change. The climatic elements are interlinked, hence there must be a corresponding change in the other elements, including rainfall. However, rainfall is so variable from year to year, that any change is often not detectable. In addition, unlike temperatures, that are rising, the changes in the patterns of rainfall will not be so simple -some places will become wetter and others dryer.

+

Hence, in most sites where PICSA has been used, many of the activities, i.e. the options for farming households, are designed to manage the rainfall risks, (i.e. variability), rather than change.

+

There is an important corollary to this idea. It is easy to blame climate change “on the West” and hence assume it is a problem for others to solve. But rainfall variability, as shown in Fig. 12.2c, is a problem faced locally by successive generations. Hence discussing options to manage the risks is sensible for individual farmers to consider.

+

This type of discussion, within PICSA, is constructive for both the intermediaries (NGO and extension staff) and farmers in encouraging an openness to consider changes in their activities, i.e. to consider what options might be useful to manage the (rainfall) risks. This idea is well phrased in the ICRISAT study, (Cooper, et al., 2008). They claim that managing the current climate risks has a double benefit. It is useful itself, as well as preparing farmers for future climate change.

+

An initial one-week workshop is often used to introduce PICSA in a new country, or in a new district, within a country. The graphs, such as Fig. 12.2b and Fig. 12.2cc are usually part of the materials from the first day.

+
+
+

14.3 Producing the initial graphs - no data issues

+

Currently a key input in PICSA is a series of time-series graphs on aspects of the rainfall that are of direct interest, and support farmers in their choice of options. They don’t just look at the graphs, but also use them, as shown in Fig 12.2a, to calculate risks for themselves.

+

For many farmers, also for intermediaries, this is the first time they have seen this type of time-series graph. Hence, as mentioned above, it usually serves two purposes. The first is as a practical demonstration, that (for the rainfall) the main issue is one of variability, rather than change. Hence “the ball is in their court” to manage their climatic risks, rather than being part of the general topic of climate change. The second is as a tool to calculate the risks for alternative options.

+

These graphs are usually prepared by staff from the corresponding NMS. Currently the work is often by NMS headquarters staff, but perhaps LMS staff based locally may be able to do some of this work in the future. The production is simple when there are no “data issues” and is described in this section.

+

A checklist may useful, and an initial version is in Table 12.3a. Start with this list, and then edit to produce your own.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 12.3a Initial checklist
StepActionR-Instat Dialogue
1Read the data into R-InstatFile > Open from File
2Check the data as inputClimatic > Tidy and Examine >
+One Variable Summarise
3Make a date variableClimatic > Dates > Make Date
4Infill if dates are absentClimatic > Dates > Infill
5Make further date variables (possibly shifted)Climatic > Dates > Use Date
6Probably delete the initial year, month, day variables, plus further “housekeeping”Right-click, then Delete and Reorder variables
7Define the data as climaticClimatic > Define Climatic Data
8Omitting Check Data, because data are ok!Could add:
+Climatic > Check Data > Inventory,
+Climatic > Check Data > Display Daily,
+Climatic > Check Data > Boxplot, etc.
9Add rain-day variableClimatic > Prepare > Transform
10Save data as a R-fileFile > Save As
11Get annual/seasonal rainfall and rain day totalsClimatic > Prepare > Climatic Summaries
12Get annual/seasonal mean temperaturesClimatic > Prepare > Climatic Summaries
13Graph the max and min temperatureDescribe > Specific > Line Plot
14Graph the rainfall and rain day totalsClimatic > PICSA > Rainfall graphs
+

This checklist involves largely going systematically down R-Instat’s climatic menu, shown in Fig. 12.3a, from Tidy and Examine, to the PICSA menu for the graphs of the annual summaries.

+

The data used for illustration are from a single station, Dodoma, in Tanzania, but the checklist works equally well with data from multiple stations. If the data file only has rainfall, then omit steps 12 and 13.

+

The data from Tanzania were supplied as an Excel file as shown in Fig. 12.3b. This was exported from Clidata (Tolatz, 2019) and is in the “right shape” for R-Instat, i.e. each row of data is for one day and the four elements are in successive columns.

+ ++++ + + + + + + + + + + + + +
Fig. 12.3aFig. 12.3b
+

Use File > Open from File to input your data.

+

To practice with these data, use Open from Library > Instat > Browse > Climatic >Tanzania and open the Dodoma18.xlsx file, Fig. 12.3c.

+

We first make a deliberate mistake. If you are following the exercise, then we strongly recommend that you make this mistake also. It is very common!

+ ++++ + + + + + + + + + + + + +

Fig. 12.3c Importing from Excel

+

File > Open from File or Open from Library

Fig. 12.3d Data imported incorrectly
{ width=“2.6359897200349955in” h eight=“2.800184820647419in”}
+

In Fig. 12.3c the data frame preview indicates something is wrong, because there are m values present. This is not always so obvious, because only 10 lines are shown, which may not include missing values.

+

Press Ok to import that data. The problem is now shown, in R-Instat, by the (c) after SUNHRS(c) and TMPMIN(c) and TMPMAX(c). These variables are numeric but have been imported as character (text) variables, because there are some non-numeric characters in these columns.

+

You can correct this problem in R-Instat, but it is simpler to correct when you import the data, or in Excel. Here it is easy to correct when the data are imported.

+

So, use File > Close Data File[^49]. Then recall the last dialogue to give Fig. 12.3c again and insert m as the Missing Value String, Fig. 12.3c. The preview changes to show NA instead of m. Press Ok and the variables are imported correctly.

+

Use the climatic menu, Fig. 12.3e and item 2 in the checklist, see Table 12.3a. Start with the Tidy and Examine menu, Fig. 12.3e. The data here are already tidy, hence move straight to the One Variable Summarise Dialogue. If your data are in a “different shape” some of the other dialogues in this menu may be needed.

+ ++++ + + + + + + + + + + + + +
Fig. 12.3e The Tidy and Examine menu

Fig. 12.3f One Variable Summarise

+

Climatic > Tidy and Examine > Summarise

+

The results are in Fig. 12.3g. They are promising, because of the following:

+
    +
  1. There are no missing values in the Year, Month, Day variables. It would be a problem if there were.

  2. +
  3. Amazingly the rainfall variable is also complete. This is great, but rare. There are missing values in the other elements, partly because they started later than the rainfall.

  4. +
  5. However, the Station name was imported as a character, and not a factor variable.

  6. +
+ ++++ + + + + + + + + + + + + +
Fig. 12.3g Results from Summary – Step 2 in checklistFig. 12.3h Name as Factor
+

The Station name is not a problem here, because there is only one station. However, it is still made into a Factor variable for completeness, Fig. 12.3h. This is important when there are multiple stations in the same file.

+ ++++ + + + + + + + + + + + + +
Fig. 12.3iFig. 12.3j
+

The Climatic > Date menu, Fig. 12.3i is used for Steps 3 to 5 in the checklist, Table 12.3a. First calculate a single Date variable, i.e. a Variable of Type (D). Here it is calculated from the 3 variables, giving the YEAR, MONTH and DAY as shown in Fig. 12.3j.

+ ++++ + + + + + + + + + + + + +

Fig. 12.3k Infilling where dates are omitted

+

Climatic > Dates > Infill Missing Dates

Fig. 13 Adding variables from the date

+

Climatic > Dates > Use Date

+

Next – Step 4 - is to check for any gaps in the data, using Climatic > Dates > Infill Missing Dates, Fig. 12.3k. They are absent dates in the file, for example a year being absent. This is separate from the dates being complete, but with missing values in the data.

+

In this case the result was that there was nothing to infill. Proceed to Step 5 with Climatic > Dates > Use Date, Fig. 12.3l. Dodoma is in the southern hemisphere, with a single rainy season from November to April. Hence, in Fig. 12.3l, the year is shifted to start in July. Five variables are generated, as shown in Fig. 12.3l.

+

Now a little “housekeeping”, Step 6 in the checklist. Right-click and delete the 3 original YEAR, MONTH DAY variables and re-order the remaining variables, Fig. 12.3m, so the measurements are last. This is a convenient, and not an essential step.

+ ++++ + + + + + + + + + + + + +
Fig. 12.3mFig. 12.3n
+

The data are shown in Fig. 12.3n. They are now ready for Step 7, which is to define the data as climatic, as shown in Fig. 12.3o.

+ ++++ + + + + + + + + + + + + +

Fig. 12.3o Defining a data frame as climatic

+

Climatic > Define Climatic Data

Fig. 12.3p The Check Data menu

+

Climatic > Check Data

+

The Climatic > Define Climatic Data dialogue should largely be filled automatically. Check carefully this it has the variables you will be using in the future analyses. Check, especially, the variable for the Station names and those for the dates. Then press the Check Unique button.

+

In this check, green is a good colour as is shown in Fig. 12.3o. This check verifies that the combination of Station name and Date can become key fields in this data frame. If not, then it is likely that you have some duplicates in the data. Duplicates are days (rows) in the file where a date has been given twice. Then you need to return to the Climatic > Tidy and Explore menu as we discuss in Section 12.6.

+

In the checklist, Table 12.3a you now usually move to the Climatic > Check Data menu, Fig 12.3p. This is described in detail in Chapter 5, and we return to this menu in Section 12.6. It is omitted here to proceed quickly to the production of the variables and graphs needed for PICSA.

+ ++++ + + + + + + + + + + + + +
Fig. 12.3qFig. 12.3r
+

Hence, move to Step 9 in the checklist, i.e. the Climatic > Prepare menu, Fig. 12.3q. The Climatic > Prepare > Transform dialogue, Fig. 12.3r is used first as explained below.

+

Complete Fig. 12.3r as shown and press Ok. This produces a new variable, called rainday, that takes the value 1 when it is rainy – defined here as a day with more than 0.85mm. It is zero otherwise, as shown in Fig. 12.3s. This is used for graphs of the number of rain days.

+ ++++ + + + + + + + + + + + + +
Fig. 12.3s Saving the data

Fig. 12.3t Save the RDS file

+

File > Save As >Save Data As

+

These data are now saved as an R file, i.e. with an RDS extension. Use File > Save As > Save Data As, Fig. 12.3s to give the dialogue shown in Fig. 12.3t. Browse to where you want to save the data. Once you click Save on that dialogue, you return automatically to Fig. 12.3t and click Ok to make the Save.

+

Once the data are saved, then re-open these saved data, to continue the work on a future occasion. The first 10 steps do not have to be repeated

+

These steps, so far, have been described in detail. In practice, once they become routine, they typically take 5 minutes or less. If problems are found during the process, then we strongly recommend you consider making corrections in the database, or (less comfortably) in an Excel file, and then start the checklist again.

+

If you are following these steps with the Dodoma data, then it is time to substitute a further data set. The data used, so far, was of very good quality, but there were still some issues, that we discuss in Section 12.6. Hence use File > Open From Library > Instat > Browse > Climatic > Tanzania again and choose the file called Dodoma18c. The data are the same, except 2 more variables are added, with the corrected temperature data. These new variables are called Tmax and Tmin.

+ ++++ + + + + + + + + + + + + +

Fig. 12.3u Rainfall and temperature summaries

+

Climatic > Prepare > Climatic Summaries

Fig. 12.3v Day range sub-dialogue
+

The next steps, 11 and 12 in the checklist, both use the Climatic > Prepare > Climatic Summaries dialogue, Fig. 12.3u

+

Two important decisions are i) whether the summaries are to be for the whole (shifted) year, or perhaps just for the rainy season? Then ii) how you will handle missing values in the data.

+

In Fig. 12.3u we choose to get all summaries for the rain variable for the 6 months of the rainy season, from November to April. Hence click on the Day Range button in Fig. 12.3u.

+

In the sub-dialogue in Fig. 12.3v, choose the range to be November 1st to April 30th. After pressing Return you see that the day range is now 6 months, from the shifted day number 124 to day 305, i.e. about 182 days.

+

Now, in Fig. 12.3u, check the Omit Missing Values checkbox. Then click on the Summaries button, and then on the Missing Tab, Fig. 12.3w. Set it, as shown in Fig. 12.3w, to about 160 days. This permits a few missing values, but not a complete month missing.

+

Then, in the same sub-dialogue, click on the Summaries tab and just have the N-Non Missing and the Sum checked, as shown in Fig. 12.3x.

+ ++++ + + + + + + + + + + + + +
Fig. 12.3w Missing values tabFig. 12.3x Summaries calculated
+

Pressing Ok in the dialogue in Fig. 12.3u results in a new data frame with 4 variables and 85 rows, Fig. 12.3y, because there are 85 years (seasons) of data. The summary for the first year (1934/35 season) is missing. This may come as a slight surprise, because there are no missing values in the rainfall data. However, the record starts on 1 January 1935, which therefore does not have November or December of the 1934/35 season.

+ ++++ + + + + + + + + + + + + +
Fig. 12.3yFig. 12.3z
+

Return to the same dialogue (Climatic > Prepare > Climatic Summaries) to add 3 more summaries.

+
    +
  1. Change the rain to the rainday variable in the main dialogue, Fig. 12.3u. Press Ok.

  2. +
  3. Change the element to Tmin and change the Summary to the Mean, (rather than the Sum). Press Ok.

  4. +
  5. Change the element to Tmax. Press Ok.

  6. +
+

The results are in Fig. 12.3z. They show, for example, that in the 1962-63 season (November to April) there was a total of 422mm rain from 41 rain days, hence an average of just over 10mm per rain day. The value of Tmin could not be given, because there were only 147 non-missing days in that season. The mean for Tmax was 29.4˚C.

+

Finally, in this initial checklist, give the corresponding graphs. For the temperature data there is not yet a special climatic dialogue, so use Describe > Specific > Line Plot, as shown in Fig. 12.3aa.

+ ++++ + + + + + + + + + + + + +

Fig. 12.3aa

+

Describe > Specific > Line Plot

Fig. 12.3ab
+

In Fig. 12.3aa the Multiple Variables option is used to facilitate plotting Tmax and Tmin together. Points are added, as is a line of best fit. The Data Options button is also used to filter the data to just s_year > 1957.

+

The resulting graph is shown in Fig. 12.3ab. It indicates an increase of temperatures, with Tmin having a higher slope than Tmax. The analysis of the temperature data and the presentation of the corresponding PICSA graphs is considered further in Section 12.5.

+ ++++ + + + + + + + + + + + + +
Fig. 12.3ac Remove filterFig. 12.3ad The Climatic > PICSA dialogues
+

Before doing a rainfall graph use Right-click and the last option is to Remove Current Filter, Fig. 12.3ac.

+

Then use Climatic > PICSA > Rainfall Graph, Fig 12.3ad. Graph the variable called sum_rain, Fig. 12.3ae. Then use the PICSA Options button to add a horizontal line for the mean, Fig. 12.3af.

+ ++++ + + + + + + + + + + + + +

Fig. 12.3ae

+

Climatic > PICSA > Rainfall Graph

Fig. 12.3af
+

The resulting graph is shown in Fig. 12.3ag. Return to the Climatic > PICSA > Rainfall Graph dialogue and substitute the sum_rainday variable to give a similar graph of the seasonal number of rain-days.

+ +++ + + + + + + + + + + + + + +
Fig. 12.3ag PICSA graphs of the seasonal totals and number of rain days
+

The results are in Fig. 12.3ag. They show that the mean rainfall total was about 560mm from an average of just over 40 rain days. This is an average of about 7 rain days per month, roughly one day in 4. This is sufficiently low that it is likely that there are often long dry spells during the season.

+

We have produced our first “PICSA-style” graphs. Further graphs are produced in the next Section, together with ways of making the graphs appropriate for the extension staff and for farmers.

+
+
+

14.4 The rainy season

+

In this section we consider the production of further rainfall summaries with the Climatic > Prepare menu and the corresponding graphs from the Climatic > PICSA menu.

+

Usually between 6 and 8 graphs are prepared and discussed on the first day of the main PICSA workshop. They all have the same format as shown in Fig. 12.3ag and are designed to look consistent. The x-axis is the years (or seasons) and the y-axis is for something of interest. They usually include a rainfall total, Fig. 12.3ag together with the start, end and length of the rainy season. There are then one or two graphs of events within the season, for example the length of the longest dry spell or the most extreme daily rainfall.

+

Definitions can be changed easily. PICSA encourages “options by context” and this can apply to households and or crops having different definitions for the start of the rains, and for any other characteristic.

+

The graphs are also used on the “practice with farmers day”, during the workshop, usually day 4. Following the workshop, the agreed graphs are then used by the extension staff or farmer’s representatives to share with individuals or groups of farmers.

+

We continue with the data from Dodoma, used in Section 12.3.

+ ++++ + + + + + + + + + + + + +

Fig. 12.4a Start of the rains

+

Climatic > Prepare > Start of the Rains

Fig. 12.4b Adding a dry-spell condition
{ width=“2.573474409448819in” hei ght=“2.9682469378827645in”}
+

Use Climatic > Prepare > Start of the Rains, Fig. 12.4a. A range of definitions of the Start of the rains is discussed in Section 7.3. In 2019, in Malawi and Tanzania the definitions used were:

+
    +
  • Malawi: First occasion from 1 October with 25mm or more in 3 days.

  • +
  • Tanzania: First occasion from 15 November with 20mm in 4 days, of which 2 days were rainy.

  • +
+

We here use the same as Tanzania. Hence click on the Day Range in Fig. 12.4a and set the earliest date to 15 November. Make the latest date 29 February. Then complete the dialogue as shown in Fig. 12.4a and press Ok.

+

This generates 2 new variables, the first with the day number in the (shifted) year and the second giving the corresponding date.

+

Return to the Climatic > Prepare > Start of the Rains dialogue and add the dry-spells condition, Fig. 12.4b. Change the default of 9 days to 10 days as the maximum allowable spell[^50]. Also change the names of the resulting variables, or the events produced before will be overwritten.

+ ++++ + + + + + + + + + + + + +

Fig. 12.4c End of the rains

+

Climatic > Prepare > End of the Rains

Fig. 12.4d
+

In Chapter 7 we discuss the use of these alternative definitions of the start. Here we simply choose one of them – for the next PICSA graph. We quickly also get data on the end and length of the season.

+

In many countries we use a simple water-balance definition of the end of the rains/season. This does not work well in Southern Africa, as explained in Section 7.4. Hence here we use the method proposed by (Mupamgwa, Walker, & Twomlow, 2011).

+

So, complete the Climatic > Prepare > End of the Rains dialogue as shown in Fig. 12.4c. In the Day Range use 15 February to 30 June.

+

Then use Climatic > Prepare > Length of the Season, Fig. 12.4d and complete as shown.

+

The results have added variables to the annual data frame, Fig. 12.4e. The year indicated shows that in the 1937/38 season there was a planting opportunity on day 174, (i.e. 21 December). But, if the dry-spell definition is included then the start was on 23rd January. The last heavy rainfall was on 31st March, which was defined as the end of the rains/season, giving a season length of 101 days.

+

Graphs can be produced assuming the user accepts the definitions.

+ ++++ + + + + + + + + + + + + +
Fig. 12.4e The annual data frameFig. 12.4f A graph of the Start
+

Use Climatic > PICSA > Rainfall Graph for the variable start_rain and complete as shown in Fig. 12.4f. Then complete the PICSA options for the Y-axis and the Lines, as shown in Fig. 12.4g and 12.4h.

+ ++++ + + + + + + + + + + + + +
Fig. 12.4gFig. 12.4h
+

The resulting graph is in Fig. 12.4i. There can be similar graphs for the end of the rains and the length of the season.

+ ++++ + + + + + + + + + + + + +
Fig. 12.4i PICSA graph for the startFig. 12.4j The start with the dry-spell condition
+

Then it is time to reflect in three different ways:

+
    +
  1. Is this the right definition to use for the start? For example, should the 15 Nov be the earliest possible starting date, given that quite a lot of seasons had a starting opportunity very close to this earliest date. Or should the dry spell have been included.
    +It is easy to try the graph with the dry spell included. Just return to the Climatic > PICSA > Rainfall Graph dialogue, substitute the start_dry variable and press Ok to give the graph in Fig. 12.4j. The mean starting date is now about a week later and there are considerably more years that do not have a successful start until January. Which graph more closely reflects the farmer’s situation?

  2. +
  3. Does the graph indicate there may be problems with the data? Often the first results indicate possible data issues. In this case there is nothing that stands out, but to show what might be done, we examine the extreme value in Fig. 12.4i. This was a start only on 6th February in the 1960/61 season.

  4. +
+ +++++ + + + + + + + + + + + + + + +

Fig. 12.4k The start in the extreme year

+
    +
  • Climatic > Check Data > Display Daily*
  • +
Fig. 12.4l PICSA graph with options
![] (media/ima ge1284.png ){width=“0 .981046587 9265092in” height=“4 .193491907 261592in”}{widt h=“1.1892607 174103238in” heigh t=“4.1505664 91688539in”}
+

Use the Climatic > Check Data > Display Daily dialogue to give the results in Fig. 12.4k. This shows that November and December did have very poor rains in that season. With the definition of the start used in Malawi (25mm in 3 days) the start would have been on 23rd January, but the insistence, in the Tanzania definition, of at least 2 rain days ruled this out. Hence the start was indeed on 6th February.

+
    +
  1. Is the graph as clear as possible for the intended PICSA audience? This is what we address here.
  2. +
+

An example of a graph with additional options is in Fig. 12.4l. The elements changed, compared to the default, are shown in Fig. 12.4m.

+ +++ + + + + + + + + + + + + + + + + +
Fig. 12.4m Setting PICSA graph options
+
    +
  1. From the titles tab in Fig. 12.4m, a sub-title shows what has been plotted. The caption gives credit to TMA for supplying the data. The units are now specified on the y-axis.

  2. +
  3. On the x-axis the labels are given every 10 years.

  4. +
  5. On the y-axis the data start at zero. I like that!

  6. +
+

In Fig. 12.4n the x-axis labels have been changed to every 4 years. The minor-grid lines are now omitted (using the Panel tab in the sub-dialogue). The sub-title has also been moved to become part of the caption[^51].

+ ++++ + + + + + + + + + + + + +
Fig. 12.4nFig. 12.4o
+

Further “within the season” graphs can be given as needed. The season length was calculated earlier, Fig. 12.4e and is plotted in Fig. 12.4o. The median length at Dodoma was about 4 months and varies between 2 and 6 months.

+

The total rainfall within the season is sometimes requested. This is the rainfall between the start dates and the end dates. This again uses the Climatic > Prepare > Climatic Summaries, as shown in Fig. 12.4p.

+ + + + + + + + + + + + + +

Fig. 12.4p

+

Climatic > Prepare > Summaries

Fig. 12.4r Day Range from start to end
! {wi dth=“2.4361231408573927in” heig ht=“3.1956178915135607in”}
+

The difference here, from the summaries given earlier, is the choice of the dates, from the Day Range button in Fig. 12.4q. In Fig. 12.4r they are specified as Variable Day and use the summary data for the start and end of the rains, that was found earlier. In the dialogue, in Fig. 12.4q the missing values checkbox is now unticked to dis-allow any years when there are missing values for the rainfall during the season.

+ ++++ + + + + + + + + + + + + +
Fig. 12.4sFig. 12.4t
+

The results are in the last 2 variables of the summary data, shown in Fig. 12.4s. In this summary, the variable called count_rain is the number of days used for the sum and is almost the same as the length – which is also given in Fig. 12.4s. It should be the same, because it is simply counting the number of days used for that calculation, i.e. between the start and end dates. It is thus effectively another way of finding the length[^52].

+

The resulting graph is shown in Fig. 12.4t.

+

An attractive way these results can be used is shown in Fig. 12.4u. The data, from Fig. 12.4s, can be transferred to an interactive app which (unlike R-Instat) is available for a smart-phone. In Fig. 12.4u the user can move the slider, shown at 600mm to find the risks for any given seasonal rainfall required.

+ +++ + + + + + + + + + + +
Fig. 12.4u
+

It is an obvious graph and is often proposed for PICSA. However, it is complicated, as it is composed of three elements, namely the start, the end, and then the totals within this period, that varies from season to season. We often find it is not very different to the graph with fixed end points, such as Fig. 12.3ag that gave the totals from November to April.

+

These graphs, from the start to the end may be more relevant for sites where there is a bimodal pattern of rainfall. Even then that would be “in competition” with simpler graphs giving the totals for fixed periods, say from October to December and then for March to May.

+

We return to the possible use of the facility for variable dates in the Section 12.5.

+

This same facility for flexible choice of the starting and ending dates is available in other dialogues and the longest dry-spell length during the season is an obvious graph.

+

The Climatic > Prepare > Spells dialogue is shown in Fig. 12.4v. The Day Range is completed as shown earlier in Fig. 12.4r. The graph of the spell lengths, using Climatic > PICSA > Rainfall Graphs is then shown in Fig. 12.4 w. The median for the longest spell length in the season is 2.5 weeks and about 1 year in 7 has a dry spell of 25 days or more.

+ ++++ + + + + + + + + + + + + +

Fig. 12.4v Dry spells during the season

+

Climatic > Prepare > Spells

Fig. 12.4w Graph of maximum spell lengths
{ width=“2.5910148731408573in” he ight=“3.0473589238845142in”}
+

The Climatic > Prepare > Extremes dialogue facilitates a study of extreme events. It is used in Fig. 12.4x to find the maximum single day rainfall each year, together with when the maximum occurred.

+

The graph, in Fig. 12.4y shows the median is 66mm on a day and just a few years have a day with more than 100mm. The colours in Fig. 12.4y indicate which month the maximum value occurred, and indicate that it can be in any of the months of the rainy season[^53].

+ ++++ + + + + + + + + + + + + +

Fig. 12.4x

+

Climaitc > prepare > Extremes

Fig. 12.4y
{w idth=“2.415457130358705in” hei ght=“3.559381014873141in”}
+
+
+

14.5 More with the rainfall and temperature data?

+

With rainfall propose more detailed analyses and other types of presentation.

+

Vertical lines instead of joined lines[^54]?

+ +++ + + + + + +
+

Also do risks for temperatures, where no special facilities exist. First frost and last frost in Leshoto as examples. Also in more detail in Chapter 8.

+

Also ask about Bangladesh where the risks may be of too much rain, rather than too little?

+
+
+

14.6 Coping with data issues

+
+
+

14.7 Combining risks for different crops

+

Table 12.7a is taken from the PICSA Field Guide, (Dorward, Clarkson, & Stern, 2016) and shows the sort of results we are aiming for. The first step is for the Ministry of Agriculture or elsewhere to provide the information in the first 4 columns of Table 12.7a. This specifies various crops (options for PICSA farmers) together their length and water requirement. For example, the local variety of maize is a 120-day crop and needs 480mm water. Alternatively, a possible variety of sorghum is 110 days and needs 300mm.

+

The calculations in this section provide the risks from specified dates of planting. In the last column of Table 12.7a the chance of success from a late planting is just one year in 5 for the local maize, compared to 3 years in 5 for the sorghum.

+ +++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 12.7a Example crop table
CropVarietyDays to maturityCrop water need (mm)Chance of success if season starts:
on x (Early)on x (Middle)on x (Late)
MaizeLocal1204805/104/102/10
MaizePioneer xxx1003507/105/104/10
SorghumSeed Co xxx1103008/107/106/10
+

Overall, for a chosen planting date, there are 3 separate risks, as follows:

+
    +
  1. Planting may not be possible by that date, i.e. the season starts later.

  2. +
  3. There may not be time to grow the crop, i.e. the season ends too early

  4. +
  5. There may be insufficient water in the time needed for the crop.

  6. +
+

The crop will only be successful if none of these three risks occurs. We call this the “Overall risk”.

+

A second possibility is the calculation of the risk of success if there is a planting opportunity on day x. In that case, just risks 2 and 3 apply. This is the “Conditional risk”.

+

The example used is for Dodoma in Tanzania. Use File > Open from Library > Instat > Browse > Tanzania > Dodoma.

+

Use Climatic > Check Data > Boxplot as shown in Fig. 12.7a to show the seasonal pattern of rainfall. The results are in Fig. 12.7b. There July and August are omitted because there was no rain over the lower threshold of 0.85mm. The rainy season is seen to be from November to April.

+ ++++ + + + + + + + + + + + + +
Fig. 12.7aFig. 12.7b
+

As a second preliminary, Fig. 12.7c uses Climatic > Prepare > Climatic Summaries to show the seasonal totals. The summary data are in Fig. 12.7d.

+ ++++ + + + + + + + + + + + + +

Fig. 12.7c

+

Climatic > Prepare > Climatic Summaries

+

Summaries sub-dialogue for total and missing values

Fig. 12.7d Summary Data
{width=“2.008472222222222in” he ight=“3.5148261154855645in”}
+

The Climatic > PICSA > Rainfall Graph, Fig. 12.5e is then used to show the resulting data. This is in Fig. 12.7f, and shows the seasonal mean is just over 550mm.

+ ++++ + + + + + + + + + + + + +

Fig. 12.7e

+

Climatic > PICSA > Rainfall Graph

Fig. 12.7f
{widt h=“2.2830610236220474in” height =“2.6302777777777777in”}
+

The start and end of the rains are two of the building blocks for the crops dialogue. Hence these are now found. They will usually already be available from earlier calculations, see Section 12.3, but are also shown here for completeness of this section.

+ ++++ + + + + + + + + + + + + +

Fig. 12.7g

+

Climatic > Prepare > Start of the Rains

Fig. 12.7h

+

Climatic > Prepare > End of the Rains

+

The resulting data frame is shown in Fig. 12.7i and the start and end of the rains are shown graphically in Fig. 12.7j.

+

With these preparatory steps the scene is now set for the crops dialogue.

+ ++++ + + + + + + + + + + + + +
Fig. 12.7iFig. 12.7j
+

Use Climatic > PICSA > Crops. For clarity the dialogue is shown twice. In Fig. 12.7k the top controls are completed with the data frame for the daily data, i.e. dodoma.

+ ++++ + + + + + + + + + + + + +

Fig. 12.7k Crops with daily data

+

Climatic > PICSA > Crops

Fig. 12.7l Crops with start and end data
+

Then, as shown in Fig. 12.7l, the dates for the start and end of the rains are from the summary data, i.e. using the dodoma_by_s_year data frame. The details of the crop are then also specified.

+

For this first illustration a crop planted on day 185 (1 January) that needs 300mm water and has a growing season length of 90 days is used.

+

The results are in the output window and also in two new data frames, shown in Fig. 12.7m and Fig 12.7n. The overall summary is in Fig. 12.7m and shows that this combination has a chance of success of 0.412, about 4 years in 10.

+

The detailed results are in Fig. 12.7n. In the 1935/36 season there was a planting opportunity on day 177, i.e. before our day 185 requirement. The rainfall in the 90 days from day 185 was 357mm, which is sufficient and the end date of day 296 was also more than 90 days from the starting date.

+ ++++ + + + + + + + + + + + + +
Fig. 12.7m

Fug 12.7n

+

Redo when no zero in first year

{wi dth=“2.4111964129483816in” he ight=“2.10790135608049in”}
+

Hence all 3 conditions were TRUE and hence the final column, called overall_cond is also TRUE. This final variable is TRUE in xxx of the 77 years that did not have missing data, giving the overall result of 0.412. Change when corrected.

+

The 1947/48 season was one where the rainfall in the 90 days was just 244mm and hence was insufficient. In 1949/50 the season was not long enough and in 1950/51 there was no starting opportunity by January 1st. These years all contributed to the 6 years in 10 when the crop would have had problems.

+ ++++ + + + + + + + + + + + + +
Fig. 12.7oFig. 12.7p
+

Return to the Climatic > PICSA > Crops dialogue and specify planting dates from 1st December to mid-January as shown in Fig. 12.7o. There is also a range of crop water requirements, from 250 to 400mm) and crop durations from 75 to 120 days. At other sites crops with a greater water requirement and with longer season lengths could also be considered. For Dodoma, the initial graphs in Fig. 12.7b, 12.7f and 12.7j suggest the range of values given in Fig. 12.7o.

+

The results, in the output window, are shown in Fig. 12.7p. They can be interpreted here, but for presentation they are copied into Excel or to Calc (in Open Office). Copied from Fig. 12.7p they can be pasted into Excel, using the Import wizard. The results are shown in Fig. 12.7r

+ ++++ + + + + + + + + + + + + +
Fig. 12.7rFig. 12.7s
+

In Excel it is convenient to express the risks as fractions over 10 years as is shown in Fig. 12.7s. The results are in Fig. 12.7t. From Fig. 12.7t we see that a 75 day crop that needed 250mm and planted in 1st December would be OK in 6 years out of 10. Later planting would slightly increase the chance of success.

+ ++++ + + + + + + + + + + + + +
Fig. 12.7tFig. 12.7u Find the planting probabilities
+

A 90-day crop with this same modest water requirement would have a greater chance of success, if planted in December, but not if planting were delayed till January.

+

It would be useful to include the chance of being able to plant by the dates given in Fig. 12.7t. A possible exercise in a training workshop is to consider how many different ways this can be found in R-Instat[^55]. We choose a bizarre, but simple way using the Climatic > PICSA > Crops dialogue as shown in Fig. 12.7u. Complete the dialogue as shown in Fig. 12.7u. This is just for the first day of the crop, when we assume it needs no water. So the only risk is from the planting day.

+ ++++ + + + + + + + + + + + + +
Fig. 12.7vFig. 12.7w
+

The results are in Fig. 12.7v. They show, for example that there is a planting opportunity by 1 Jan in 9 years out of 10. This information is now added to the table of crop risks, Fig. 12.7w. The interpretation is that in 4 years in 10 there was a planting opportunity by 1st December. In a year when planting was possible on 1st December the proportion of successes for a 75-day crop needing 250mm water was 6 out of 10.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_14_The_Seasonal_forecast.html b/_book/Chapter_14_The_Seasonal_forecast.html new file mode 100644 index 0000000..6eca2b3 --- /dev/null +++ b/_book/Chapter_14_The_Seasonal_forecast.html @@ -0,0 +1,1152 @@ + + + + + + + + + +15  The Seasonal forecast – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

15  The Seasonal forecast

+
+ + + +
+ + + + +
+ + + +
+ + +
+

15.1 Introduction

+

Many countries produce a seasonal forecast. (Hansen, Mason, Sun, & Tall, 2011) provides a review for Sub-Saharan Africa. The forecast, for a given season, often results from a Regional Climate Outlook Forum (RCOF), updated and down-scaled by the National Meteorological Service (NMS). In some countries the forecast is a mixture of results from the global climate models (GCMs) and statistical methods relating historical climatic data to sea-surface temperatures. Fig. 13.1a and Fig. 13.1b give examples of the forecast from Ghana and the Caribbean.

+ ++++ + + + + + + + + + + + + +
Fig 13.1a Ghana rainfall forecast, April - June 2015Fig. 13.1b Caribbean rainfall forecast April – June 2015
+

When statistical methods are used, the Climate Predictability Tool (CPT) software is usually used to produce the forecast. CPT uses multiple regression with usually the rainfall as the y (dependent or predictand) variables and SSTs as the x’s (independent, or predictor) variables. There are usually many x (SST) variables and hence CPT offers the option of doing a principal component analysis first.

+

When there are also many y (rainfall) variables, a canonical correlation analysis may precede the multiple regression analysis.

+

R-Instat can export data for CPT. Hence one use of R-Instat is to prepare the y-variables (rainfall or temperature) for analysis with CPT. Traditionally these are 3-month rainfall totals, but any other summary is possible, for example 3-month total rain days, or the date of the start of the rains. The requirement is that there is one summary per year (per station) and the Climatic > Prepare menu provides many options. This is considered in Section 13.2.

+

The rainfall (or temperature data) are often station values, but they may also originate from other sources, e.g. reanalysis, or satellite or merged data. These are sometimes provided ready for CPT. Sometimes R-Instat could examine these data also and then prepare a subset for CPT. This option is considered in Section 13.3

+
+
+

15.2 The Y variables - Examining the rainfall data

+

One use we propose for R-Instat is to examine the rainfall data, before it is analysed with CPT. The first example is data from Ghana, already prepared for CPT. The data are in the R-Instat library, hence use File > Open from Library > Instat > Browse > Climatic > Ghana and open the file called rr-amj-1981-2014.txt. The data are shown in Fig. 13.2a.

+

The first 2 lines are the locations (Lat and Long) of each station. Then there are the rainfall data, the 3-month totals from April to June, for the 34 years from 1981 to 2014. They are from the 22 synoptic stations in Ghana.

+

We also need the locations of the station, but in a separate data frame. Return to the last dialogue and read the data again. This time read just the first 2 rows, Fig. 13.2b and give the file a new name.

+ ++++ + + + + + + + + + + + + +
Fig. 13.2aFig. 13.2b
+

The station data are now still the “wrong way round”. There is a dialogue to transpose, but it is simpler to use Prepare > Column: Reshape > Stack, Fig. 13.2c, as shown in Fig. 13.2d.

+

In Fig. 13.2d put all the columns, except the first to be stacked and put the STN column to be “carried”.

+ ++++ + + + + + + + + + + + + +
Fig. 13.2cFig. 13.2d
+

In the stacked data the column called STN now has the Lat and Long. Now, Fig. 13.2e, use the Prepare > Column: Reshape > Unstack, as shown to produce the location data as shown in Fig. 13.2f.

+ ++++ + + + + + + + + + + + + +
Fig. 13.2eFig. 13.2f
+

The rainfall data are first examined briefly (as usual) with Climatic > Tidy and Examine > One Variable Summaries. Use all the columns. The results are shown in Fig. 13.2g. There is a problem with the station WEN, where the minimum is -999.

+ ++++ + + + + + + + + + + + + +
Fig. 13.2gFig. 13.2h
+

This could have been changed to a missing value when the data were imported. Now the change is made with the dialogue Climatic > Tidy and Examine > Replace Values. Fig 13.2h.

+

Now stack the rainfall data using Climatic > Tidy and Examine > Stack, as shown in Fig. 13.2i.

+

Now use Describe > Specific > Line Plot, as shown in Fig. 13.2j. Include the Station as a facet.

+ ++++ + + + + + + + + + + + + +

Fig. 13.2i

+

Climatic > Tidy and Examine > Stack

Fig. 13.2j
+

The results are roughly as shown in Fig. 13.2k. (If you would like to get the results exactly as Fig. 13.2k, then either follow the note below[^56] or open the file that is better prepared – called ghana1981-2014.rds and use the Climatic > PICSA > Rainfall Graph dialogue.)

+ +++ + + + + + + + + + + +
Fig. 13.2k
+

The stations go from South to North in Fig. 13.2k. We see that the most Southerly station, Axim, is different to the other stations. The variability of the few stations in the North of Ghana is much less than those in the South. This is going to make the forecasting task much harder to expect much that is meaningful for the North.

+

Next examine the correlations. They use the original data, but unstacking the data with the Stations from South to North will put the resulting columns in the same order.

+

Hence (assuming you have the data in this order) use Climatic > Tidy and Examine > Unstack, as shown in Fig. 13.2l

+ ++++ + + + + + + + + + + + + +
Fig. 13.2lFig. 13.2m
+

Next use Climatic > Seasonal Forecast Support > Correlations. Fig. 13.2m. The results provide further “food-for-thought. The most Southerly station (bottom row in Fig 13.2m) and the most Northerly (column to the right in Fig. 13.2m) each have quite a lot of blue values, i.e. negative correlations. There are just 5 stations in the North of Ghana (latitudes between 9°N and 11°N and the correlations there are low. If 2 stations have a low or zero correlation, then logically they should have a separate seasonal forecast. However, Fig. 13.1a shows the whole of the North has a single forecast.

+

With this information we would be inclined to

+
    +
  1. Omit Axim as it seems so different

  2. +
  3. Consider only using the stations from the South.

  4. +
  5. Query including Akatsi, which is the furtherst to the Eaqst and has very low correlation with the other stations

  6. +
  7. Look for more rainfall stations from the North.

  8. +
+

If, instread, all the stations are used in CPT, then the finalo stage is a multiple regression on each y-variable separately, as a function of the set of x-variables, and they are usually the principal components. Then the interest would be more in the individual results at a station level – and these are given by CPT.

+ +++ + + + + + + + + + + +
Fig. 13.2n
+

Finally, in Climatic > Seasonal Forecast Support > Correlations (Fig. 13.2m) use just the 5 columns from the North, (from Bole to Navrongo) and opt for a pairwise plot. This shows the size of the correlations clearly and confirms that the whole of the North should not have a single forecast.

+ +++ + + + + + + + + + + +
Fig. 13.2o
+
+
+

15.3 Rainfall data with many stations

+

The second example is from Rwanda. The rainfall data are considered in this section. The data file is again in a form that reads directly into CPT. The file, in Excel, is shown in Fig. 13.3a. These data are again 3-month rainfall totals and are from March to May. They are for 37 years, from 1981 to 2017.

+

These are estimated rainfall from ENACTS. This is a merged product, combining station data with estimated rainfall from satellite observations (Siebert, et al., 2019). In Fig. 13.3a the first column gives the latitude and row 5 gives the longitude of each grid point. So, the estimated rainfall total at 1.05°S and 28.54°E in 1981 was 550mm.

+ ++++ + + + + + + + + + + + + +
Fig. 13.3a

Fig. 13.3b

+

File > Open

+

In the data in Fig. 13.3a the rectangle of data for 1981 is followed by an approximate repeat of lines 4 and 5, followed by the data for 1982. And so on to 2017.

+

If the data, from Excel are saved, then the default (by Excel) is to add the txt extension and this makes it easy to import into R-Instat.

+

In R-Instat use File > Open, Fig. 13.3b. Change the Lines to Skip to 4, so the first line is the longitudes.

+ ++++ + + + + + + + + + + + + +
Fig. 13.3c

Fig. 13.3d Setting the filter

+

(Omit level 1 and from 54 onwards)

+

These data, in Fig. 13.3c, need tidying. The first step is to delete the rows between each year. This uses a filter, so right click, choose Filter and then define a new filter on the first column. Part of the filter sub-dialogue is shown in Fig. 13.3d.

+

When you return to the main dialogue, Fig. 13.3e choose to make the filtered data a subset. If you feel bold, then give the new name the same as the old one, so the original file is overwritten.

+

There are now 1924 rows of data, i.e. 52 rows each year, for 37 years.

+

Now a year variable is added as shown in Fig. 13.3f. Check, Fig. 13.3f, that it will be the same length as the other columns of data.

+ ++++ + + + + + + + + + + + + +
Fig. 13.3e Making a subset

Fig. 13.3f Adding a year variable

+

Prepare > Column: Generate > Regular Sequence

{wi dth=“2.4592377515310586in” hei ght=“2.761431539807524in”}
+

Now all that remains is to stack the data, Climatic > Tidy and Examine > Stack, as shown in Fig. 13.3g. The re4sulting data are in Fig.13.3h. There are now 126984 rows of data, i.e. 37 years from 52 * 66 = 3432 equally spaced locations.

+ ++++ + + + + + + + + + + + + +

Fig. 13.3g

+

Climatic > Tidy and Examine > Stack

Fig. 13.3h The Rwanda ENACTS data so far
+

We outline further “housekeeping” steps on these data to make it simpler to examine and to export back to CPT when needed:

+
    +
  1. Use Prepare > Column: Text > Transform > Substring on the variable Lat into LatS from Start Value 2 to End Value

    +
      +
    1. +
  2. +
  3. Recall the last dialogue and put Lon into LonE from 2 to 6.

  4. +
  5. Select both these columns, (LatS and LonE), then right-click and make them Factors.

  6. +
  7. Use Prepare > Column: Factor: Factor > Combine Factors. Choose LatS and LonE, make the separator an underscore and make the New Column Name: Location.

  8. +
  9. Select LatS and LonE again. Right-click and Convert to Numeric columns.

  10. +
  11. Use Prepare > Column: Factor > Recode Numeric and make a new column from Lats into Lat6S, with 10 break points at about (1.03, 1.25, 1.48, 1.7,1.93, 2.15, 2.38, 2.6, 2.83, 2.98).

  12. +
  13. Recall the last dialogue and make LonE into Lon6E using (28.5, 28.74, 28.97, 29.2, 29.42, 29.64, 29.87, 30.1, 30.32, 30.54, 30.77, 31).

  14. +
  15. Right click to delete the 2 columns Lat, Lon.

  16. +
  17. Reorder the columns possibly as shown in Fig. 13.3i

  18. +
+ ++++ + + + + + + + + + + + + +
Fig. 13.3i ENACTS data for RwandaFig. 13.3j The locations
+

A Station (i.e. Location data frame is also needed for exporting back to CPT. From here:

+
    +
  1. Right-click and choose Filter on the year column and put just the first year (1981) into a new data frame called Location.

  2. +
  3. Delete the year and rain variables from the Location data frame.

  4. +
+

The resulting data frame is in Fig. 13.3j.

+

Now look at the at the data. Start with a given part of Rwanda. Right-click and filter the data file to the last set of stations in Lat6S and Lon6E, i.e. the South-East corner. This is a 30km square and there should be 880 rows of data, Fig. 13.3k.

+ ++++ + + + + + + + + + + + + +
Fig. 13.3k SE corner (24 locations)Fig. 13.3l
+

These data can now be graphed. The results from a Describe > Specific > Line Plot of rain against year by location is in Fig. 13.3l. (A facetted graph by LonE and LatS, after making them factors, is an alternative).

+

Fig. 13.3l the coherence (high correlation) between the different locations is clear. The last point (data from 2017) is a cause for concern. This is also indicated for 4 of the locations in Fig. 13.3k. This last year has less than half the rain of any of the other 36 years at most locations. That can greatly affect a regression model. Perhaps only fit using the data to 2016?

+

Next, use Climatic > Tidy and Examine > Unstack for the rain, by the location and carry the year. This gives the 24 stations in separate columns and Climatic > Seasonal Forecast Support > Correlations, gives the results in Fig. 13.3m. They are all coloured dark red (compare with Fig. 13.2n) as all correlations are more than 0.8.

+ +++ + + + + + + + + + + +
Fig. 13.3m
+

This can be repeated for further parts of Rwanda. We suggest that exporting the data from individual “blocks” of 24 or usually 36 stations for CPT, may enable separate local forecasts to be given?

+

Change the filter to choose 12 blocks over the country, possibly Lat6S = (1, 5, 9) and Lon6E = (1, 4, 7, 10).

+ + + + + + + + + + + + + +

Fig. 13.3n Choosing 12 blocks as a filter

+

Right-Click > Filter > Define New Filter

Fig. 13.3oFacet with 2 variables

+

Describe > Specific > Line Plot Options > Facet

! {wi dth=“2.402188320209974in” heigh t=“2.6810597112860894in”}
+ +++ + + + + + + + + + + +
Fig. 13.3p
+

The results in Fig. 13.3p show some part of the country, e.g. North-West – (top-left) with very high correlations, but also relatively little year-to-year variability to be explained, compared to other parts. (The blue set of graphs in the middle of Fig. 13.3p should be examined in more detail, as the large rainfall in about 1990 is just in a few locations – perhaps caused by data from a single station?). The low rainfall totals in 2017, mentioned above, is apparent in some parts of the country, but not all.

+

Plots of further combinations could be useful. Then 2 alternative strategies for CPT (in addition to the default of using the 3432 stations individually) could be:

+
    +
  1. Use data from single blocks of interest, i.e. usually 36 locations over a 30km by 30km grid, to examine the forecast for specific parts of the country.

  2. +
  3. Take the means (or medians) each year, for each of the blocks, so reducing the number of locations to 96 and use these data instead of the data individually for the 3432 locations.

  4. +
+
+
+

15.4 The X variables – Sea Surface Temperatures

+

Ghana data first.

+

Then Rwanda data!

+

For Rwanda data use http://iridl.ldeo.columbia.edu/SOURCES/.IRI/.Analyses/.ICPAC/.Models/.GFDL/.GFDL-CM2p5-FLOR-A06/.MONTHLY/.sst/index.html

+

The data were downloaded from this link http://iridl.ldeo.columbia.edu/SOURCES/.Models/.NMME/.GFDL-CM2p5-FLOR-A06/.MONTHLY/.sst/  However you may decide to choose any other model of your choice.  

+

Those Sea Surface Temperature (SST) are GCM outputs from different source (GFDL, CFS2, NASA etc). Initialization is the process of locating and using the defined values for variable data that is used by a model or system. For our model we choose February as the month forecasts (MAM) were initialized.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_15_Fitting_and_using_stochastic_models.html b/_book/Chapter_15_Fitting_and_using_stochastic_models.html new file mode 100644 index 0000000..9d2a82b --- /dev/null +++ b/_book/Chapter_15_Fitting_and_using_stochastic_models.html @@ -0,0 +1,724 @@ + + + + + + + + + +16  Fitting and using stochastic models – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

16  Fitting and using stochastic models

+
+ + + +
+ + + + +
+ + + +
+ + + + + +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_16_Withinday_data.html b/_book/Chapter_16_Withinday_data.html new file mode 100644 index 0000000..497de04 --- /dev/null +++ b/_book/Chapter_16_Withinday_data.html @@ -0,0 +1,724 @@ + + + + + + + + + +17  Within-day data – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

17  Within-day data

+
+ + + +
+ + + + +
+ + + +
+ + + + + +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_17_Circular_data_and_wind_roses.html b/_book/Chapter_17_Circular_data_and_wind_roses.html new file mode 100644 index 0000000..b50233b --- /dev/null +++ b/_book/Chapter_17_Circular_data_and_wind_roses.html @@ -0,0 +1,1556 @@ + + + + + + + + + +18  Circular data and wind roses – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

18  Circular data and wind roses

+
+ + + +
+ + + + +
+ + + +
+ + +
+

18.1 Introduction

+

Fig. 16.1a shows data from the R openair package. These are hourly data and the two columns called ws and wd are wind speed and direction. Fig. 16.1b shows a single wind rose and these are discussed in detail in Section 16.4. The wind rose is a circular stacked histogram that shows both wind speeds and wind directions on the same graph. They are a popular form of display by National Met Services (NMSs) for these data.

+ ++++ + + + + + + + + + + + + +
Fig. 16.1aFig. 16.1b
+

For reference the command was as follows:

+

last_graph <- clifro::windrose(speed=ws, direction=wd, speed_cuts=c(3,6,9,12,15,18), col_pal="Dark2", ggtheme="linedraw") + ggplot2::labs(title="", caption="", subtitle="")

+

Wind direction is an example of circular data and this type of data needs some special treatment. Circular variables are common in climatic data. The obvious example is wind direction, but there are many others:

+
    +
  • Time in hours at which rainfall starts. The circle is 24 hours.

  • +
  • The hour of the minimum temperature each day. The circle is again 24 hours.

  • +
  • Day of the year when the season starts. The circle is 366 days.

  • +
  • The month of maximum rainfall. The circle is 12 months.

  • +
+

Special methods are needed to cope with circular data. Sometimes they can be avoided, and we have done this often in this guide. For example, the date of the start of the rains may be from November to January. If the year is always defined from January, then these data mist be handled as circular. But the complexity can be avoided by shifting the year to start in August, as was shown in Chapter 7.

+

Section 16.2 considers the general idea of circular data and Section 16.3 shows some simple graphs. Then we return to wind roses in Section 16.4.

+
+
+

18.2 Circular data

+

Wikipedia (Wikipedia contributors) shows a small example of 10, 20, 30 degrees to illustrate circular data. The mean is obviously 20. Now subtract 15 degrees, so the mean becomes 5. The data are now 355, 5, 15, so the usual formula for the mean is (355 + 5 + 15)/3 = 125 – obviously wrong. With circular data, once we “go over” zero, the usual formulae no longer apply.

+

There are books on circular statistics, for example (Pewsey & D., 2013) and, of course, R packages. R-Instat mainly uses the circular package. (Agostinelli & Lund, n.d.).

+

An example from the circular package is called wind. This has 310 observations on wind direction. The data in File > Open from Library > R package > circular > wind, just has a single variable. The description states it is five 15-minute observations per day, for 62 days, from 3am to 4am. It is for a single site from 29 January to 31 March 2001.

+

Fig. 16.2a shows the data in R-Instat. The wind directions (column wind_dir) are in radians, i.e. they are an angle between 0 and 2pi (i.e. 2 * 3.14 = 6.28).

+ ++++ + + + + + + + + + + + + +
Fig. 16.2a Data from circular package

Fig. 16.2b Adding a date variable

+

Climatic > Dates > Generate Dates

{ width=“2.5966491688538933in” h eight=“3.298924978127734in”}
+

Directional data are often given in degrees. Hence also use Prepare > Column: Calculate > Calculations, with the formula:

+

wind_dir *360/(2*pi)

+

Data should be given with their “structure”. The dialogue Climatic > Dates > Generate Dates, Fig. 16.2b is used to add the date column, then Prepare > Column: Generate > Regular Sequence, Fig. 16.2c, to add the time column.

+

to give the directions in degrees. The results are all shown in Fig. 16.2a.

+ ++++ + + + + + + + + + + + + +
Fig. 16.2cFig. 16.2d
+

Start, as usual with a check on the data. Use Climatic > Tidy and Examine > One Variable Summarise to give the results in Fig. 16.2d. The summaries for the 2 wind variables are of course for linear, rather than circular data. The analysis can begin. One aspect that is simpler here is that there are no missing values in these data.

+

The structure of the data is ignored initially, to concentrate on the new summary statistics for circular data. Graphs are discussed in Section 16.3. A preview, in Fig. 16.2e indicates the data are reasonably concentrated near zero. From the graph we expect a mean just above zero, i.e. perhaps North-North-East, (where East = pi/2 = 1.57 in radians) and a standard deviation that indicates a good level of concentration of the data. Thus, we don’t expect the circular mean to be as large as 2.36 radians, or 135 degrees, as shown in Fig. 16.2d

+ ++++ + + + + + + + + + + + + +
Fig. 16.2e A circular histogram of the wind data

Fig. 16.2f The circular keyboard

+

Prepare > Column: Calculate > Calculations

{ width=“2.557014435695538in” hei ght=“2.6285608048993874in”}
+

Use Prepare > Column: Calculate > Calculations and open the Circular keyboard, Fig. 16.2f. The initial step is to define the two variables wind_dir and wind_deg in Fig. 16.2a as circular. For wind_dir, click on the circular button and add the variable, wind_dir. Save the result back into the same variable, Fig. 16.2g.

+

Then press Clear, and do the same for the wind_deg variable, Fig. 16.2h. In this case you need to replace the word “radians” by “degrees”.

+ ++++ + + + + + + + + + + + + +
Fig. 16.2gFig. 16.2h
+

It seems that nothing has happened. But now press the icon on the toolbar, Fig. 16.2i to confirm that the two variables are now defined as circular. Press to close the metadata window.

+ +++ + + + + + + + + + + +
Fig. 16.2i
+

Click Clear, then the mean button and add the wind_dir column as shown in Fig. 16.2j. Un-check Save so the result is in the Output window, Fig. 16.2k.

+ ++++ + + + + + + + + + + + + +
Fig. 16.2jFig. 16.2k
+

The mean direction is 0.2922 radians (or 0.2922*360/(2*pi) = 16.7 degrees.)

+

In the command in Fig. 16.2j the package name is given first, i.e.

+

circular::mean.circular(wind_dir)

+

Change the variable in Fig. 16.2j to wind_deg to give the result directly as 16.7 degrees, Fig. 16.2l.

+

This result for the circular mean of 17 degrees is consistent with the graph, given in Fig. 16.2e. It is a long way from the result in Fig. 16.2d that has ignored the circular nature of the data (and is wrong!)

+ ++++ + + + + + + + + + + + + +
Fig. 16.2lFig. 16.2m
+

Now examine the spread of the data. In the dialogue, Clear the expression again, and find the circular variance of the wind_dir variable. The result is seen to be 0.3443 from pressing the Try button. Pressing Ok puts this result into the output window.

+

Return to this dialogue and find the circular variance of the same data in degrees. The result is identical, i.e. 0.3443, despite the numbers being very different! Some explanation is needed, because with ordinary (linear) data, that is not the case.

+

Change the function to get the standard deviation, i.e. the sd key on the circular keyboard, rather than var. The formula is then

+

circular::sd.circular(wind_deg).

+

This gives the circular standard deviation as 0.9187, and again this is the same for the wind_dir variable.

+

However, in addition, the circular standard deviation is not the square root of the circular variance. The var = 0.3443 and √0.3443 = 0.5868 which is quite a long way from the result above.

+

The results for the variability (spread) of circular data require explanation, because they are so different to “ordinary” data.

+

We need a formula. With angles (in degrees), x1, x2,… xn define:

+

R = √((Σcos(xi))2 +(Σsin(xi))2)

+

R is called the resultant length, and r = R/n is called the mean resultant length. It is the rho key on the circular keyboard, with

+

circular::rho.circular(wind_dir) or circular::rho.circular(wind_deg)

+

In each case it gives the value of r = 0.6557 for these data.

+

The mean resultant length, r, is between 0 and 1 and values near to 1 correspond to low variation.

+

In the R circular package, and hence in R-Instat the var.circular = (1-r) = 0.3443 as found above. So, the circular variance is between 0 and 1 with 0 being no variation.

+

Then, sd.circular = √(-2log(r), to be consistent with the definition first given in (Mardia, 1972).

+

Also available in R-Instat is the angular.variance = 2 * (1-r) = 2 * var.circular.

+

For these data, the angular.variance is the ang.var key = 0.6886

+

And there is also the angular.deviation = √(angular variance)

+

The angular.deviation is the ang.dev key = √0.6886 = 0.8298.

+

To help with the interpretation, of these summaries, take a very simple example with 5 observations. In degrees take 10, 15, 20, 25 30, Fig. 16.2n. Round the circle they are not very spread out.

+ ++++ + + + + + + + + + + + + +

Fig. 16.2n

+

File > New Data Frame

Fig. 16.2o
+

Use Prepare > Column: Calculations > Calculate and produce data_rad = (data_deg/360)*2*pi.

+

In radians, these data are 0.175, 0.262, 0.349, 0.436, 0.524 as shown in Fig. 16.2o.

+

In Prepare > Column: Calculations > Calculate use the degrees and radians buttons to define each of these variables as circular.

+

Then, with the sd button, the sd.circular = 0.1235 for each variable.

+

The ordinary standard deviation for the data in radians is 0.138, i.e. is close. So, for circular data, with small spread the circular standard deviation can be interpreted roughly as the ordinary standard deviation, i.e. a typical distance from the circular mean (which is 0.349 radians), of the data – when measured in radians.

+

Let’s confirm this, with even smaller spread. Divide all the values (in radians) by 2. The new circular standard deviation = 0.617, which is half the previous value. Of course, the ordinary standard deviation also halves, so the interpretation is ok.

+

Now multiply the values by 10. In degrees, the values are now 100, 150, 200, 250, 300 so almost round the circle. This is therefore very large spread for the circular data. In radians this becomes 1.75, 2.62, 3.49, 4.36, 5.24. The maximum is 360 degrees = 2π = 6.28 radians.

+

For the data in radians, the ordinary standard deviation is 1.38 and the circular standard deviation is the same. Hence, a very spread-out circular dataset has a circular standard deviation of more than 1. (Otieno Sango & Anderson-Cook, 2003)

+

The wind data, analysed in this section, had a circular standard deviation of 0.92 (radians). So quite large as can be seen from the graph in Fig. 16.2e.

+

What of r and the circular variance = (1-r)? For the 5 values from 10, to 30 degrees, the circular variance = 0.0076. For large spread, e.g. the 5 values from 100 to 300 degrees the circular variance = 0.6123. So, the circular variance can be interpreted directly, with close to 0 being very concentrated data and close to 1 being very spread out – round the circle. The wind data had a spread – as measured by the circular variance of 0.3443, i.e. about 1/3.

+

Other summary statistics, including the median are also available, through the circular package, and hence through R-Instat. These are the median and the quantiles, including the quartiles, the “maximum” and “minimum” and the range. Most are intuitively obvious for data that are “concentrated”, i.e. have small variability, but are more difficult to consider where data can be anywhere round the circle. And general definitions are needed.

+

The median is defined by considering diameters that cut the circle in two. Look for the diameter with end-points P and Q, so that half the data points are in each semi-circle. Then the median is either P or Q and choose P, so that the data are more concentrated round it, compared to Q,

+

For the wind data the median is 9.5 degrees, so a little lower than the mean.

+

Once the median exists, the other quantiles, including the maximum and minimum, can go outwards from this point. The lower quartile is 355 degrees and the upper quartile is 37 degrees.

+

The range is defined as the extent of the circle, minus the biggest gap of data. This is usually (but not necessarily) the maximum minus the minimum!

+

The von Mises distribution is roughly the equivalent to the normal distribution for linear data, Fig. 16.2k. This has, similarly, 2 parameters and is symmetrical about the circular mean.

+ ++++ + + + + + + + + + + + + +
Fig. 16.2k Examples of von Mises distributionsFig. 16.2l

Prefer from R-Instat

+

+

The shape is dictated by the к parameter. К = 0 corresponds to the uniform distribution (round the circle) and large values of к correspond to a concentrated distribution, i.e. one with low variation.

+

Estimating к is done by setting r = A1(к) = I1(к)/I0(к) = 1 – var.circular, where I1 and I0 are modified Bessel functions. In the R-Instat circular keyboard the function A1(к) is available, Fig. 16.2l. With a little trial and error we see that, for the wind data the appropriate value of к = 0.734, i.e. the shape is just above the blue line in Fig. 16.2k.

+

Compared to the circular histogram, Fig. 16.2e it is not clear that a symmetrical distribution is appropriate. However, more important is that the wind data have structure that the above analysis has ignored. In particular, the data are 5 observations from each of 62 days. In any analysis this sort of structure should not be ignored.

+

Hence get the mean each day and then analyse the resulting daily data. This is the circular mean, and uses the Prepare > Column: Reshape > Column Summaries as shown in Fig. 16.2m and Fig. 16.2n.

+ ++++ + + + + + + + + + + + + + + + + +

Fig. 16.2m

+

Prepare > Column: Reshape > Column Summaries

Fig. 16.2n Circular sub-dialogue
+

These daily data have 62 records as shown in Fig. 16.2o. For example on 2nd February the mean wind direction was 355 degrees (or 6.19 radians). The 5 observations were all close in direction, with the minimum being 345 degrees and the maximum 0.5 degrees. The (circular) standard deviation was 0.1. The directions were much more variable on the next day, ranging from 303 degrees (roughly from the West) to 77 degrees (almost East) within the hour. The (circular) standard deviation was just over 1.

+ ++++ + + + + + + + + + + + + +
Fig. 16.2oFig. 16.2p
+

It is simply for illustration that the results, in Fig. 16.2o are given in both degrees and radians. As discussed above, the standard deviation is the same, whatever the units and the interpretation is similar to the ordinary standard deviation for the data in radians.

+

The resulting daily data can now be plotted and summarised. As an example, a circular histogram is shown in Fig. 16.2p.

+

These data are fine to illustrate the commands in the R circular package but not for real applications because they are all from a single year and the summaries, from January to March may also include some seasonality. In the following sections, we therefore largely consider data from multiple years.

+
+
+

18.3 Graphs for wind direction

+

The example used is from File > Open From Library > Open from R > R package > openair that was shown earlier in Fig. 16.1a and Fig 16.1b. Open the dataset called mydata. It is hourly data on pollution concentrations plus wind speed (ws) and wind direction (wd). There are 65,533 records, shown again in Fig. 16.3a. The data are from London for 7.5 years from January 1998 to June 2005.

+

Section 16.4 examines wind roses, that examine wind speeds and wind directions together. Here simpler plots are used to examine just the circular element, i.e. the wind directions in the variable called wd.

+ ++++ + + + + + + + + + + + + +
Fig. 16.3a Wind and pollution data

Fig. 16.3b Checking the wind data

+

Climatic > Tidy and Examine > One Variable Frequencies

+

First examine the wind direction data. One way uses the Climatic > Tidy and Examine > One Variable Frequencies dialogue, Fig. 16.3b.

+ ++++ + + + + + + + + + + + + +
Fig. 16.3c Different values in the wd variable

Fig. 16.3d Duplicating the wind variable

+

Right click (in wd variable) > Duplicate Column

+

Redo with new duplicate column dialogue

+

The results are in Fig. 16.3c. They confirm that the data are measured to the nearest 10 degrees. There is one possible oddity, namely that there are 37 different directions and not 36. There are 608 hours with North, i.e. 0 degrees and 1377 values at 360 degrees. One obvious reason for this feature is that there are calm days, i.e. zero wind speed, and hence no direction. This could reasonably be given the direction of zero. Use of the right-click and Filter however shows this is not the case.

+

There are 4 alternative next steps to resolve this oddity in the data:

+
    +
  1. Ignore it and see what happens

  2. +
  3. Omit one category, i.e. recode those observations as missing

  4. +
  5. Recode the value 0 to be 360, or 360 to become 0, so the frequencies are added

  6. +
  7. Contact the supplier to resolve the oddity.

  8. +
+

We tried option 4 first but had no response. The frequency at 360 degrees seems reasonable, compared to the values at 350 and 10 degrees, hence we adopt option 2, and set the zero-degree values to be missing.

+

First use the Right-click > Duplicate Column dialogue, Fig. 16.3d to avoid overwriting the original data in wd.

+ ++++ + + + + + + + + + + + + +

Fig. 16.3e Replace 0 by missing

+

Climatic > Tidy and Examine > Replace

Fig. 16.3f Results from summary of 4 variables

+

Climatic > Tidy and Examine > One Variable Summarise

![] (media/image872.png){wid th=“2.243173665791776in” heigh t=“2.243173665791776in”}
+

Now use Climatic > Tidy and Examine > Replace Values, Fig. 16.3e, to replace all instances of 0 by missing values. The result can be checked with the Climatic > Tidy and Examine > One Variable Summarise dialogue, the results of which are in Fig. 16.3f. The new wd1 variable now has 608 missing values and ranges from 10 to 360 degrees.

+

There isn’t yet a special climatic graph for these data, so the general graphics dialogues are used. Use Describe > Specific > Histogram with the variable wd1, Fig. 16.3g to give the result in Fig. 16.3h.

+

Before making this graph circular, note an oddity in the results in Fig. 16.3h. There are exactly 6 directions that stand out. This could either be a real feature in the data, or an oddity caused by the grouping of the data when the histogram is constructed. The default in the ggplot2 system is 30 bins, and we just have 36 different values in the data. So here the grouping for the histogram is probably to blame.

+ ++++ + + + + + + + + + + + + +
Fig. 16.3gFig. 16.3h
+

So return to the dialogue and click on the Histogram Options button to set the number of bins to 36, Fig. 16.3i. We make the histogram a little more colourful at the same time.

+ ++++ + + + + + + + + + + + + +

Fig. 16.3i Setting bins in the histogram

+

Describe > Specific > Histogram
+Then Histogram Options

Fig. 16.3j Ordinary histogram
{width=“2.63702646544182in” h eight=“3.539001531058618in”}
+

This is now ready to produce a circular plot. Return to the dialogue, use the Plot Options and the Y-axis tab, Fig. 16.3k. Set the axis limits for the y-axis as shown in Fig. 16.3k. Also press on the Coordinates tab in Fig. 16.3k and specify polar coordinates.

+ ++++ + + + + + + + + + + + + +

Fig. 16.3k

+

Describe > Specific > Histogram
+Then Plot Options > Y-Axis and Coordinates

Fig. 16.3l Histogram as a circular plot
+

The “trick” of starting the Y-Axis with a negative value in Fig 16.3k, gives the “hole” in the circular plot.

+

There is therefore a series of steps to constructing a circular plot in R-Instat. They could be avoided through using a special function, such as rose.diag in the circular package. One reason for continuing with the ggplot graphs is the ease with which multiple plots (facets) can be constructed.

+

This is illustrated by examining whether there are obvious differences in the pattern of the wind directions at different times of the day.

+

Use Prepare > Column: Calculate > Calculations, with the Dates keyboard, Fig. 16.3m and the hour key.

+

Check the calculation by using the Try button, Fig. 16.3m and save the result into a variable called hour.

+ ++++ + + + + + + + + + + + + +

Fig. 16.3m Making an hour variable

+

Prepare > Column: Calculate > Calculations

Fig. 16.3n Making a 3-hour variable

+

Prepare > Column: Calculate > Calculations

+

The hour variable is from 0 (midnight) to 23 (11pm). This can be used to give 24 plots, one for each hour. This is unnecessarily detailed, so combine the hours into blocks of 3. There are many ways this can be done in R-Instat. We choose the calculator again, with the DIV function, which is given by %/% in R and is on the Logical keyboard, Fig. 16.3n.

+

The formula: threehour <- (hour %/% 3) gives the values 0, 0, 0, 1, 1, 1,…,8,8,8 so multiplying by 3 and adding 1 gives the middle hour of each 3-hour period as shown in Fig. 16.3n.

+

Right-click and make the resulting variable into a factor. Then return to the histogram dialogue, Plot Options and use this variable as a facet, Fig. 16.3o. Also change the Y-axis limits to -600 to 600.

+ ++++ + + + + + + + + + + + + +

Fig. 16.3o

+

Describe > Specific > Histogram
+Plot Options > Facets and Y-axis

Fig. 16.3p Circular histogram with facets
{widt h=“2.160592738407699in” height =“2.357010061242345in”}
+

The resulting graph is shown in Fig. 16.3p. There is no obviously consistent pattern for different times of the day.

+

The next step is to summarise the hourly data to a daily basis. To enable this, use the Climatic > Dates > Make Date dialogue, Fig. 16.3q to make a Date column from the date-time column.

+ ++++ + + + + + + + + + + + + +

Fig. 16.3q

+

Climatic > Dates > Make Date

Fig. 16.3r Defining a variable as circular

+

Prepare > Column: Define > Circular

The new dialogue when ready
+

Now use the Prepare >Column: Define > Circular to set the wd variable as circular, Fig 16.4r.

+ ++++ + + + + + + + + + + + + + + + + + + + + +

Fig. 16.4s Calculating circular summaries

+

Prepare > Column: Reshape > Summarise

Fig. 16.4t
+

Then use the Prepare > Column: Reshape > Column Summaries, Fig 16.4s to give the circular mean and standard deviation, Fig. 16.4t. One complication is that there are missing values in these data. We choose, in Fig. 16.4t, to allow up to 3 missing hours in the day.

+

The resulting data frame has 2731 rows (days) of data, Fig. 16.4u. The summary in Fig. 16.4uhas a few missing daily values, when less than 21 hours are available.

+ ++++ + + + + + + + + + + + + +
Fig. 16.3uFig. 16.3v
+ ++++ + + + + + + +
+

The obvious extension of this plotting is to consider the seasonality, e.g. to produce the plot on a monthly basis. This is left largely as a challenge[^57]. This produces the plot in Fig. 16.3u. This shows the predominant wind direction is consistent in each month, but some have an indication of bimodality.

+ +++ + + + + + + + + + + +
Fig. 16.3u
+

Discuss further once it is easy to have percentages and proportions in histograms.

+
+
+

18.4 Wind roses

+

In this section we consider graphs of the wind speed and the wind direction together. This is simpler, because of the special wind-rose dialogue using the R clifro package. (reference).

+

The steps in the previous section are followed. First, produce a single wind rose of the two columns, wind speed (ws) and direction (wd) together using the hourly data.

+

Use Climatic > Describe > Wind Speed/Direction > Wind Rose, Fig. 16.4a. Ignore the Windrose Options to investigate the default results from the hourly data.

+ ++++ + + + + + + + + + + + + +

Fig. 16.4a Default wind rose

+

Climatic > Describe > Wind > Wind Rose

Fig. 16.4b Default wind-rose

+

(5 wind speeds, colours: Blues, Theme: Minimal)

{width=“2.7000404636920385in” height=“2.970044838145232in”}
+

Many wind roses will be produced, so a useful step is to fix on a suitable colour scheme and theme for the graphs.

+

Return to the dialogue and choose Windrose Options, Fig. 16.4c. This shows that 12 is the default number of directions for the graph – lucky for us as the wd1 variable has 36 distinct values. Change the theme to Classical. Then choose the Colours tab and try Red-Yellow-Blue.

+ ++++ + + + + + + + + + + + + +
Fig. 16.4c Windrose OptionsFig. 16.4d
+

The resulting wind rose is in Fig. 16.4e. Changing the theme to linedraw (Fig. 16.4c) and the colours to Qualitative > Dark2 gives Fig. 16.4f.

+ ++++ + + + + + + + + + + + + +
Fig. 16.4eFig. 16.4f
+

It is easy to add facets, and Fig. 16.4g shows the windspeeds and directions at different times of the day.

+ +++ + + + + + + + + + + +

Fig. 16.2g Time of day as facets

+

Climatic > Describe > Wind Speed/Direction > Wind Rose - three-hour as facet and 4 columns

+

As in the previous section, the data are now summarised to a daily basis. This uses the Prepare > Column: Reshape > Column Summaries dialogue. We add the daily values of both the mean wind speed and the maximum speed in the 24 hours to the daily data frame.

+

The daily data are shown in Fig. 16.4h.

+ ++++ + + + + + + + + + + + + +
Fig. 16.4hFig. 16.4i
+ +++ + + + + + + + + + + +
Fig. 16.4j
+
+
+

18.5 More displays for circular data

+

The wind roses, shown in Section 16.4 are essentially stacked histograms round a circle. As such they remain largely a circular plot, showing the wind direction and something of the wind speeds. If more detail is needed on the wind speeds, then boxplots may be useful. If necessary, they can also be displayed round a circle as is shown below.

+

The daily data from the previous section are used again. The 12 directions used in Section 16.4 seem appropriate, so these are constructed. These are 30 degrees per category, and the only complication is that the first category is conveniently 345 to 15 degrees. This is therefore a 2-step process. The first step uses the Prepare > Factor > Recode Numeric dialogue, Fig. 16.5a. The 14 break points are:

+

-1, 15, 45,75, 105, 135, 165, 195, 225, 255, 285, 315, 345, 361

+

This gives a factor column with 13 levels (not 12!). The second step is to use Prepare > Column: Factor > Recode Factor to combine the first and last levels. In Fig. 16.5b make the new first label into (345, 15] and do the same to the last level. Give the new column a sensible name, Fig. 16.5b.

+

If you prefer, then relabel each level in Fig. 16.5b to indicate the middle angle of that group, namely 0, 30, 60, 90,… , 0. Or you could use directions, i.e. N, NNE, etc.

+ ++++ + + + + + + + + + + + + +
Fig. 16.5aFig. 16.5b
+

Check, using Right-Click > Levels/Labels that the new Direction variable has 12 levels.

+

Use Describe > Specific > Boxplot, Fig. 16.5c, to get a boxplot of the wind speeds by these 12 directions.

+ ++++ + + + + + + + + + + + + +
Fig. 16.5cFig. 16.5d Maximum daily wind speeds, by direction
+

In Fig. 16.5c make the boxplots of variable width, so the width of each boxplot indicates the relative frequencies of each wind direction. One small problem in Fig. 16.5d is that the missing values are included as a 13th category. Use Right-Click > Filter (or Data Options in the Boxplot dialogue) to omit the missing values in the wind speed column and repeat the boxplot. At the same time you may wish to use Plot Options > Coordinates to make this into a circular plot, Fig. 16.5e.

+ ++++ + + + + + + + + + + + + +
Fig. 16.5eFig. 16.5f
+

There are alternative displays, from the Describe > Specific > Boxplot dialogue. Fig. 16.5f shows a violin plot(essentially a density plot instead of the boxplot[^58].

+

Fig. 16.5g, shows the boxplot without the red outliers of Fig. 16.5e, while Fig. 16.5h adds the jittered points to the diagram.

+ ++++ + + + + + + + + + + + + +
Fig. 16.5gFig. 16.5h
+

Usually it will be informative to have a set of graphs to investigate a further factor at the same time. These are usually the seasonality, or the station. Fig. 16.5i shows the data for the mean daily windspeed (rather than the maximums, shown above) for each month.

+ +++ + + + + + + + + + + +
Fig. 16.5i
+

Fig. 16.5i shows the data as linear plots and Fig. 16.5j as circular plots. We invite you to compare the two displays. The wind direction data are circular, so perhaps Fig. 16.5j is the more natural display. But, for some readers we suggest the comparisons between the months seem easier to make from Fig. 16.5i.

+ +++ + + + + + + + + + + +
Fig. 16.5j
+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_18_Temperatures.html b/_book/Chapter_18_Temperatures.html new file mode 100644 index 0000000..10f3b21 --- /dev/null +++ b/_book/Chapter_18_Temperatures.html @@ -0,0 +1,744 @@ + + + + + + + + + +19  Temperatures – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

19  Temperatures

+
+ + + +
+ + + + +
+ + + +
+ + + +
+

19.2 Comparing gridded and station data

+
+
+

19.3 Degree days

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_19_Drought_Indices__SPI.html b/_book/Chapter_19_Drought_Indices__SPI.html new file mode 100644 index 0000000..ac16291 --- /dev/null +++ b/_book/Chapter_19_Drought_Indices__SPI.html @@ -0,0 +1,856 @@ + + + + + + + + + +20  Drought Indices – SPI – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

20  Drought Indices – SPI

+
+ + + +
+ + + + +
+ + + +
+ + +
+

20.1 Introduction

+

The Standardised Precipitation Index (SPI) is acknowledged as an obvious index to monitor drought, e.g. (Keyantash & (Eds), 2018). It is described in the WMO guide (Svoboda, Hayes, & Wood, 2012).

+

There are various R packages to implement SPI and R-Instat includes the command from the SPEI package (Beguería & Vicente-Serrano, 2017). This permits the calculation of the SPI index, as described by WMO and an SPEI index that includes evapotranspiration, (Vicente-Serrano, Beguería, & López-Moreno, 2010).

+

The SPI index is promoted as being superior to the Palmer Drought Severity Index. This is based on an original index by (Palmer, 1965), generalised by (Wells, Goddard, & Hayes, 2004) and implemented in their R package, called scPDSI (Zhong, Chen, Wang, & Chengguang, 2018) to produce both the self-calibrating and the conventional Palmer index.

+
+
+

20.2 Using the SPI index

+

For illustration use the Nigerian data from Samaru, File > Open from Library > Instat > Browse > Climatic > Nigeria, Fig. 12.2a. The data frame, called samaru56t, has already been defined as climatic and has 56 years of daily rainfall data.

+ ++++ + + + + + + + + + + + + +
Fig. 18.2aFig. 18.2b
+

The SPI index is usually used on monthly data, though this is not essential. Hence use Climatic > Prepare > Climatic Summaries, as shown in Fig. 18.2b. On the Summaries sub-dialogue choose the Count not missing and the Sum. The monthly totals are shown in Fig. 18.2a.

+ ++++ + + + + + + + + + + + + +
Fig. 18.2cFig. 18.2d
+

Now use Climatic > Prepare > SPI, Fig. 18.2d. Complete the dialogue as shown in Fig. 18.2d, giving the resulting column the name spi1, because the index is for single months.

+

Then return to the SPI dialogue. Change the time scale to 3 (months) and the name of the resulting column to spi3.

+

Repeat again, changing the time scale to 12, i.e. to a full year and change the name to spi12.

+

The first years of the resulting data are shown in Fig. 18.2e. The results are interpreted and the graphed.

+

To help with the interpretation Fig. 18.2f shows boxplots of the monthly data.

+ ++++ + + + + + + + + + + + + +
Fig. 18.2e spi1, spi3 and spi12

Fig. 18.2f

+

Describe > Specific Boxplot: sum_rain by month

+

First examine March 1928, that has an spi1 index of +2. This has resulted from the rainfall total of 52.6mm. Fig. 18.2f shows that this is very large for March – it is the 2nd highest from the 56 years. Hence positive values of 2 (or more) indicate very rainy compared to the norm. March 1929 had 12.7mm, and the spi1 index of 1.06 indicates that even this value is quite large. Often the March total is zero.

+

August 1928 had a modestly negative value of spi1 = -0.456. This was from the August total of 233mm, and the boxplot indicated that this is slightly lower than average. In contrast, August 1929 had 356mm, which is higher than the average, and corresponds to the spi1 index of +1.

+

The spi3 index fist calculates the 3-month running sums. Hence it indicates how they compare with what is expected. For example, from Fig. 18.2e, April to June 1928 is all each individually higher than expected. Hence the April to June 1928 total is surprisingly high and has an spi3 index of +1.83.

+

The 12-month index gives information about the annual (running) totals. To investigate these, use the Climatic > Prepare > Climatic Summaries again. Change the top button in Fig. 18.2b to Annual to give a data frame with 56 values. Now use either Prepare > Column: Calculations > Calculate or Prepare Column: Calculate > Column Summaries on the sum_rain variable to show the annual mean is 1068mm and the standard deviation is 178.5mm.

+

The total in 1928 was 1262mm. This is higher than the mean of 1068mm and hence a positive spi12 value is expected for December 1928 in Fig. 18.2e. If we standardise the annual total, i.e. evaluate:

+

(1262 – mean)/sd = (1262 – 1068) /178.5 = +1.086, which is close to the spi12value of 1.074.

+

In 1929, the total was 1284mm and the standardised value was (1284 – 1068)/178.5 = 1.21, again close to the spi12 index for December 1929 in Fig. 18.2e, of 1.18.

+

The calculations to produce the spi index is relatively complex. A distribution is fitted to the data and then the equivalents from the normal distribution are found. For the annual totals, the distribution is already close to normal, as is shown by the density plot in Fig. 18.2g. Then the normal distribution is used, as in Fig. 18.2h, where the value for 1928 is indicated. The results are then standardised, which just changes the x-axis in Fig. 18.2h to go from roughly -2 to + 2. In fig 18.2h -2 corresponds to a value of 1068 – 2 * 178.5 = 711mm. A value of 711mm has a probability of 1 year in 40 (probability of about 0.025) of occurring and represents a severe drought. (Most readers will remember the value of ± 1.96, i.e. about ± 2 that gives the 5% points from the standard normal distribution.)

+ ++++ + + + + + + + + + + + + +

Fig. 18.2g Density graph of annual totals

+

Describe > Specific > Histogram with density

Fig. 18.2h Normal plot showing 1928 total

+

Model > Probability Distributions > Show Model

+

The indices from Fig. 18.2e can be plotted in a variety of ways. The “standard” time series graphs look cluttered, as they include the seasonality within the graph. Fig. 18.2i presents graphs of spi1 and spi12 separately for each of the months. It shows that spi1 is meaningless in the dry months (November to February). Lines at 0 and -2 have been added and show largely that any problem is towards the later years.

+ +++ + + + + + + + + + + +
Fig. 18.2i
+
+
+

20.3 The SPEI index

+

Need to add this section. It works “trivially” by giving a water-ba;ance variable instead of the rainfall. So, it could be within R-Instat that we just use the Climatic > Prepare > Transform dialogue first, to get the water balance, and then return to the SPI dialogue.

+
+
+

20.4 Palmer Drought Severity Index

+

Check first whether we add it to the dialogue, add another dialogue, or try to give it as a command.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_1_About_this_guide.html b/_book/Chapter_1_About_this_guide.html new file mode 100644 index 0000000..a1b50c9 --- /dev/null +++ b/_book/Chapter_1_About_this_guide.html @@ -0,0 +1,823 @@ + + + + + + + + + +2  About this guide – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

2  About this guide

+
+ + + +
+ + + + +
+ + + +
+ + +
+

2.1 Who is this guide for?

+

This guide is concerned with the analysis of climatic data. It is for four types of reader: The first is those concerned with the collection and subsequent use of their climatic data. This includes staff of national meteorological services, (NMSs) who are often the custodians of the historical climatic data for their country. There are many others who collect climatic data, for example schools and colleges, farms, agricultural institutes and many individuals.

+

Second is the users who need results from an analysis of historical climatic data. They may undertake analyses themselves, or, at least, need to know what is possible from the data. They are in many walks of life, including agriculture, health, flood prevention, water supply, renewable energy, building, tourism and insurance.

+

The other two groups are concerned more with teaching and learning statistics. Looking at climatic data is an application of interest to many people; partly because of the effects that climate has on many areas. Also because of the many issues of climate change.

+

So, the third group is those who teach statistics. This guide shows how simple statistical ideas are used in solving practical problems in one application area. The key concepts of sensible data handling are the same whatever the area of application.

+

The final group consists of those who have to learn statistics. Many people recognize that they need statistics skills for their work but sometimes find their statistics courses are difficult to relate to real-life applications. The materials here are complementary, by starting with the application and considering the statistical ideas that are needed to process the data.

+

These groups overlap. For example, many users of climatic data are also conscious of their need for further training in statistics.

+
+
+

2.2 Why is it needed?

+

Many organizations have devoted more effort to collecting climatic data than to their subsequent analysis. This is like other areas where monitoring data are collected routinely. One way that climatic data is perhaps different is that much of the data has an important immediate use. It is an input for the short-term forecasts and for other immediate monitoring of the current season. This might be termed a “spatial need” in that these applications benefit from lots of data from different places at the same time. These data are then stored, and this guide is for a “time series need”. Most of the analyses in this guide are for long records in time. They may be for one, or more, points in space.

+

Sometimes the excuse for the lack of analysis is that the quality of the data is suspect. This is not a good reason, because one way to improve data quality is to analyze the existing data to demonstrate their importance and shortcomings.

+

It is also useful if those who collect data can do their own analysis, or at least be involved in the analysis. This is highly motivating for staff and an excellent way to encourage good data quality.

+

Some familiarity with the use of software (under Windows) is assumed. Knowledge of statistics is useful, but not essential for most chapters. Indeed, though this guide cannot substitute for a conventional statistics book, users can learn many general ideas through seeing where different techniques are useful.

+
+
+

2.3 What software is used?

+

This guide uses the R Statistical system (R Core Team, 2018). It mainly uses R through a graphical user interface, called R-Instat. An earlier version of this guide (Stern, Rijks, Dale, & Knock, 2006) was for a simple statistics package, called Instat. Like the original Instat, R-Instat combines a general statistics package with a special additional menu to simplify the analysis of climatic data.

+

R-Instat is designed to support improved learning of statistics in general as well as providing a wide range of special dialogues to simplify, and hence facilitate, the analysis of climatic data.

+
+
+

2.4 What is in this guide?

+

Illustrations and ‘route maps’ are provided in all chapters for those who just wish to study particular topics. We hope that some users will enjoy the way the ideas unfold in successive chapters but do not assume that readers will wish to look at every chapter. Most chapters are in a “tutorial” style, so readers can follow, and practice at the same time. There is considerable repetition, to support users to “dip into” the chapters they need.

+

How much practice is needed, depends on the user’s current experience in statistical computing. Those who are relatively inexperienced, or have never used a statistics package, may be surprised at how easy the ideas and the software are. However, beginners need practice, so just reading the guide will not be so effective.

+

Those with experience of a statistics package should find that R-Instat is like many other statistics packages. Then practice is not so important, because they should be able to visualize the results from just reading the text.

+

We assume R-Instat has already been installed, see http://r-instat.org/index.html.

+

Chapters 2 and 3 provide practice of using R-Instat in general. Climatic data are used, but not the special climatic menu. They assume initial knowledge of R-Instat that could be from the two initial tutorials. Beginners should go through these tutorials, while others may just need to see the corresponding videos.

+

Chapters 4 to 7 show the use of the R-Instat climatic menu. The structure of the climatic menu mirrors the main menus. It has items in the order that is usually needed in an analysis. First is File, to input the data, then Prepare, to organise them for analysis, then Describe, to analyse the data without assuming a particular (statistical) model. Lastly, the menu includes some special modelling items.

+

If your need is to analyze your own climatic data as quickly as possible, then you may choose to omit Chapters 2 and 3 initially. Chapter 4 describes the R-Instat “climatic system”. This is then assumed in later chapters. Chapter 5 is on initial exploration of the data and on quality control. Chapter 6 produces and analyses “standard” summaries, such as rainfall totals, while Chapter 7 examines “tailored products” such as the start of the rains.

+

Chapter 8 examines further features of R-Instat, particularly for users of climatic data who may wish to migrate from R-Instat to using R itself. There are inevitable limits to the efficient processing of data with a menu-driven package. This idea is already introduced in Chapter 3 where Section 3.5 is titled “Don’t let the computer laugh at you”. Hence, for example, Chapter 8 considers how particular climatic analyses can be done, using tools in R that are currently absent from R-Instat.

+

The remaining chapters examine more specialised topics. Chapter 9 is on the input and analysis of gridded satellite and reanalysis data. Chapter 10 is on mapping and 11 introduces the important area of extremes.

+

The PICSA (Participatory Integrated Climate Services for Agriculture) project is described briefly in Section 1.6 and in more detail in Chapter 12.

+

The remaining chapters are on a range of further topics including the (statistical approach to) the seasonal forecast, the use of stochastic models, the processing of within-day data (e.g. from automatic stations) and the analysis of circular data, particularly for wind direction.

+

All the data sets used for illustration are supplied in the R-Instat “library”. Chapter 3 describes how the data are organized, so readers can substitute their own data for the examples in later chapters.

+

The analysis of the climatic records is often a two-stage process. The first stage reduces the raw, often daily, data to a semi-processed form with key summaries that correspond to users' needs. The second stage involves processing these summaries.

+

This two-stage process is typical of the processing of many types of data and is one reason why users often find their statistics training did not seem relevant to real-world problems. Many courses use only small sets of semi-processed data that are tailored to the topic being taught. However, the real world starts with primary data, and these are often quite large.

+
+
+

2.5 Climatology, statistics, and computing?

+

Readers who are not confident in statistics should recognize the three different subjects that are in this guide, namely climatology, statistics, and computing. The material becomes easier if you separate these subjects as far as possible.

+

R is a programming language and those who are already adept in R may find they do not need the R-Instat menus and dialogues but can use RStudio more efficiently for the same analyses. In contrast, beginners in R, sometimes find it difficult to use in their statistics courses. They are still trying to master the computing ideas, and this becomes mixed with the statistical objectives.

+

Computing ideas are raised at various points in this guide, because users sometimes limit the analyses they conduct, by not exploiting the software fully. So, we show how R-Instat can be used in different ways, to solve problems raised by users in their needs for data analysis. These sections should be recognized as largely computing topics and perhaps omitted initially by those who have less interest in using R itself.

+

Statistics and climatology have two features in common. Both are relevant to a wide range of applications and many specialists in those application areas treat both statisticians and climatologists as an unwelcome nuisance! Perhaps by working together, they can be welcomed more.

+
+
+

2.6 Climate Services for Agriculture

+

Many countries have projects on climate and agriculture. These projects often concentrate on sharing the information on the short-term and seasonal forecasts with producers. We outline one such project, called PICSA (Participatory Integrated Climate Services for Agriculture). More information on PICSA is here: https://research.reading.ac.uk/picsa/.

+

The different component of PICSA are shown in Fig. 1.6a

+ +++ + + + + + + + + + + +
Fig. 1.6a The PICSA project
+

A distinguishing feature of PICSA is the first panel in Fig. 1.6 and this is in addition to the forecasting activities. The first panel is on aspects that are based on an analysis of the historical climatic records, that are shared with small-scale farmers, before the seasonal forecast is available. The National Met Service (NMS) is a key partner in each country and provides analyses of the historical data. These analyses use the methods described in Chapters 6 and 7 of this guide and are from the climatic stations that are as close as possible to different groups of farmers. PICSA is described in Chapter 12.

+
+
+

2.7 The Climsoft Climate Data Management System

+

Climsoft is a free and open source system for the entry and management of primary climatic data. The initial screen is shown in Fig. 1.7a. It has facilities for the entry and checking of data from paper records, and for the transfer of data from previous systems, and from automatic stations. The data, and metadata are currently held in a mysql database.

+

Climsoft is designed particularly for National Met Services (NMSs), but can be used by any other organisation that has to manage historical climatic or other related data. A wide range of elements are pre-defined, but others can be added for hydrology, pollution or other aspects. Data can be at any scale, e.g. daily, 10-minute.

+

Climsoft includes some products, but not many. Instead, R-Instat can read data directly from Climsoft, or exported from Climsoft, and is designed as the products’ partner to Climsoft. In later versions of Climsoft the plan is for some of the R-routines in R-Instat to become part of Climsoft.

+ +++ + + + + + + + + + + +
Fig. 1.7a The main Climsoft menu
+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_20_Climate_Normals.html b/_book/Chapter_20_Climate_Normals.html new file mode 100644 index 0000000..7376fa8 --- /dev/null +++ b/_book/Chapter_20_Climate_Normals.html @@ -0,0 +1,1530 @@ + + + + + + + + + +21  Climate Normals – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

21  Climate Normals

+
+ + + +
+ + + + +
+ + + +
+ + +
+

21.1 Introduction

+

The calculation of climate normals in this chapter is based largely on (World Meteorological Organization (WMO), 2017). We also consider the adaptation of the guidelines to the calculations of the normals in the US, as described in (Arguez, et al., 2012).

+

A climatological standard normal now refers to the most recent 30-year period finishing in a zero, i.e. currently 1981-2010, and soon to be 1991-2020. In addition, the 1961-1990 period is retained as a standard reference period for assessing long-term climate change.

+

A distinction is made in (World Meteorological Organization (WMO), 2017), between “Principal Climatological Parameters” and “Secondary Parameters”. There are 8 primary parameters including monthly total rainfall (precipitation) and the total number of rain days, Table 19.1a.

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 19.1a WMO Principal Climatological Parameters
ParameterUnits
Precipitation totalmm
Precipitation days (Precip ≥ 1mm)days
Mean Tmax°C
Mean Tmin°C
Mean Tavg°C
Mean sea-level pressurehPa
Mean vapour pressurehPa
Total hours of sunshinehours
+

The quintile boundaries for rainfall (mm) and the mean number of days with more than 5, 10, 50, 100 and 150mm are secondary parameters. Temperature thresholds and extremes are also included.

+

These are intended as guidelines and are adapted by individual countries. Examples from the US are shown in Table 19.1b. This table is adapted from Table 5 in (Arguez, et al., 2012). The units have been changed to millimetres for rainfall and °C for temperatures (US uses inches and Fahrenheit.)

+ ++++++++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 19.1b Monthly and annual normals for a station in Chicago, from (Arguez, et al., 2012)
VariableJFMAMJJASONDAnn
Tmax (°C)-0.32.18.215.121.226.629.027.824.117.19.21.815.2
Tavg (°C)-4.0-1.83.810.216.121.724.423.419.112.35.3-1.710.8
Tmin (°C)-7.7-5.7-0.65.410.916.719.719.014.27.61.4-5.26.4
DTR (°C)7.47.88.89.710.39.99.38.89.99.57.87.08.8
Precip(mm)5249699210510310210184828765993
HDD6925644512491041712431943916203327
CDD00173411718816066900581
Days Tmax > 32.200000.63.16.33.81.200015.1
Days with Tmin < 101.42.910.623.530.53031313028.113.12.9235
Precip 25%292641546370535740494838
Precip 75%7566901191411241151431179313380
Precip > 0.2mm[^59]10.78.811.211.111.410.39.998.210.211.211.1123.1
Precip > 25mm0.20.20.30.911.311.30.70.80.80.59
+

One differences is for rainfall, where WMO suggests quintiles, i.e. 20%, to 80%, while the US uses quartiles (25% and 75%). Heating (HDD) and cooling degree days are also including. A heating degree day is defined as a value of Tavg above 18°C (65 degrees Fahrenheit), while CDDs are temperatures below that level.

+

The WMO lower threshold for rainfall is proposed as ≥ 1mm. We have largely used 0.85mm as a practical lower limit in this guide. We claim this is consistent with the WMO value of ≥1mm. For practical purposes, as data are recorded to 0.1mm the WMO value is effectively > 0.95mm. For consistency between stations (which is important for climate normals) the value of 0.85mm is about the same. But it allows for differences in rounding at different stations. This can occur in 2 ways. If data were originally in inches, then 0.01inch = 0.3mm. The value of 0.9mm is not possible, because 0.03inches = 0.8mm, while 0.04inches = 1mm.

+

In addition, some observers round data more than others. An observer who rounds 0.9mm to 1mm would have that day counted as rain, while the more precise observer, recording the same value as 0.9mm would have it omitted as dry.

+

For these reasons, we claim the proposed threshold value of 0.85mm is a practical was of implementing the WMO ≥1mm threshold.

+ ++++ + + + + + + + + + + + + +

Fig. 19.1a Inventory for Dodoma

+

Climatic > Check Data > Inventory

Fig. 19.1b Subset with 30 years

+

Right-click > Filter (to year from 1981 to 2010)

+

In principle, producing normals is straightforward as is shown in Section 19.2 with examples using rainfall data. Complications relate largely to the presence of missing values in the reference period and this is discussed in Section 19.3.

+

The Dodoma data are used as an example. File > Open from Library > Instat > Browse > Climatic > Tanzania > Dodoma.rds.

+

The data are already defined as climatic. An inventory is shown in Fig. 19.1a. IT shows there are virtually no missing values in the rainfall, either in the 30 years from 1961 or in the most recent period, from 1981 to2010. A subset of the data is produced as shown in Fig. 19.1b, and rainfall normals from 1981-2010 are shown in Section 19.2.

+

There are also relatively few missing values in the temperatures. They are considered in Section 19.3, where we also explain the WMO recommendations for coping with missing values.

+

The sunshine records only started in 1973, and so could not be used for 1961-90 normals. And there are far too many missing values for them to be used in 1981-2010, unless they can be merged with satellite data. This is considered in Section 19.4.

+

The examples here are for a single station. Usually they would be done for a whole set of stations in a single file, and that is no more work. The process, in R-Instat, currently involves three successive steps. There seems to be no R-package for this task. We expect to construct one for R and hence R-Instat, in the future.

+
+
+

21.2 Precipitation normals

+

From Fig. 19.1b the Dodoma data are now from 1981 to 2010. We have chosen to keep the year from January to December, though there could be a case for July to June, as that would mean each “year” would be a complete season. The rains in Dodoma are from November to April. In (World Meteorological Organization (WMO), 2017), mention is made of climate normals being for seasons rather than annual, but no details are given, In Tanzania part of the country is unimodal and part is bimodal, so comparisons of the normals between stations would be easier with a consistent definition and January to December therefore seems justified.

+

The first 2 normals in Table 19.1a are the precipitation totals and the number of rain days. As preparation, calculate the rain days as shown in Fig. 19.2a. In Fig. 19.2a the 0.85mm threshold has been used, which we claimed above, is consistent with the WMO definition of rain ≥ 1mm. (Use 0.95mm is you don’t agree!)

+ ++++ + + + + + + + + + + + + +

Fig. 19.2a Add a variable for raindays

+

Climatic > Prepare > Transform

Fig. 19.2b
+

The resulting daily data are in Fig. 19.2b. The rainday variable can be seen to be 1 on rain days, and 0 otherwise.

+

Getting the monthly normals is a 2-step process and the annual normals adds a 3rd step.

+

The first step uses the Climatic > Prepare > Climatic Summaries, as shown in Fig. 19.2c, to give the monthly rainfall totals for each year.

+ ++++ + + + + + + + + + + + + +

Fig. 19.2c

+

Climatic > Prepare > Climatic Summaries

Fig. 19.2d
+

Complete the dialogue as shown in Fig. 19.2c and choose just the 3 summaries from the sub-dialogue, as shown in Fig. 19.2d. This generates a new data frame with 30 (years) by 12 (months), i.e. 360 rows of data. It will be multiples of 360 rows if there is more than one station.

+

Return to the dialogue, change the variable, in Fig. 19.2c, to raindays and omit the Maximum and also the N Non Missing summary – it isn’t needed, because it is just the same as for the rain column.

+ ++++ + + + + + + + + + + + + +
Fig. 19.2e The resulting monthly dataFig. 9.2f
+

Check the resulting data frame, shown in Fig. 19.2e. For example, the first row shows there was a total of 26.4mm from 5 rain days in 1981[^60]. The maximum daily value was 14.4mm in January 1981. In Fig. 19.2e, check there are no missing months. With the setting for missing values unchecked in Fig. 19.2c, a month will be set to missing if there is even a single missing day in that month. We consider this issue at the start of Section 19.3.

+

The (World Meteorological Organization (WMO), 2017) describes four different parameters that can become monthly normals. From the daily data it may be a mean, or a sum, or a count or an extreme. In Fig. 19.2e there are 3 of these types. Thus, the rainfall totals are an example of a sum, the number of rain days is a count, and the maximum rainfall is an example of an extreme. Once temperature data are considered, there will also be examples of means.

+

The second step is to produce the climate normals from these monthly data. This uses the “ordinary” summary dialogue in R-Instat, from Prepare > Column: Reshape > Column Summaries, Fig 19.2f, rather than the special climatic summary. This time the only summary needed is the mean, Fig. 19.2g.

+

The results are a new data frame with just 12 rows, giving the monthly climate normals, Fig. 19.2h. With multiple stations this would be a data frame with 12 rows for each station. These can now be copied to a table or presented graphically. With multiple stations this would be in a facetted graph.

+ ++++ + + + + + + + + + + + + +
Fig. 19.2gFig. 19.2h The climate normals
+

Fig. 19.2i gives a simple graph of the mean monthly totals with the data from Fig. 19.2h as labels. Fig. 19.2j shows the rain days, where the months have been changed into the more natural seasonal order.

+ ++++ + + + + + + + + + + + + +
Fig. 19.2iFig. 19.2j
+

Secondary parameters for the rainfall, suggested by (World Meteorological Organization (WMO), 2017) are the extremes, the quintile boundaries and the number of rain days above defined thresholds.

+

The quintile boundaries are the 0%, 20%, 40%, 60%, 80%, 100% points, where the 0% and 100% are the monthly extremes. Countries are unlikely to need them all and this is where the US has chosen quartiles, i.e. 25% and 75% instead of quintiles.

+

In R-Instat either can be found from adapting the second stage of the calculations. If you would like the extremes and quartiles then use Prepare > Column: Reshape > Column Summaries again, Fig. 19.2f, but just for the sum_rain variable. In the summaries, Fig. 19.2g use the Minimum and Maximum for the extremes and the Lower and Upper Quartiles if they are what you wish.

+

If you prefer the quintiles (say 20% and 80% points), use the More tab, in Fig. 19.2g, to provide further summaries, Fig. 19.2k, where the 0.2 gives the 20% point. Currently only a single value is allowed, so use the dialogue a second time to add the 80% point.

+

Section 4.5 in (World Meteorological Organization (WMO), 2017) proposes a definition for the quintile boundaries. R, and hence R-Instat, have 9 alternative methods for the calculation of quantiles (including therefore quintiles). The default in R is method 7 and this, fortunately, coincides with the method proposed in (World Meteorological Organization (WMO), 2017).

+

Fig. 19.2l shows the normals for the mean, as in Fig. 19.2i, as a line plot. It is together with the minimum, 20%, 80% and maximums for the 1981-2010 period. Note that the minimums and maximums are for the monthly data, i.e. the maximum of the monthly totals. For the rainfall data it is also useful to have the daily maximums.

+ ++++ + + + + + + + + + + + + +
Fig. 19.2kFig. 19.2l
+

It is important to be clear on the differences between the two maximums. In January in Fig. 19.2m shows the largest monthly total was 331mm.

+ +++ + + + + + + + + + + +
Fig. 19.2m
+

Also, in January, the maximum daily rainfall in the 30 years was 113mm.

+

The quartile or quintile boundaries are calculated from the monthly summaries, (i.e. the second stage in the calculations). The mean number of days above different thresholds needs the daily data.

+

In Climatic > Prepare > Transform, Fig. 19.2a change the threshold from 0.85mm to 5mm, 10mm, etc and then summarise the resulting column(s) as described above.

+

In practice, decide on the thresholds at the start, and then produce the summaries together with the 1mm threshold.

+

The resulting normals are in Fig. 19.2m for 5mm, 10mm and 25mm.

+ ++++ + + + + + + + + + + + + +
Fig. 19.2nFig. 19.2o
+

Fig. 19.2n presents the normals of the number of rain days at Dodoma[^61]. It shows that there was an average of 10 rain days in January. Of these, just under half were between 1mm and 5mm and there were about 2 days per month, on average, with more than 25mm.

+

So far, we have considered monthly normals for the 1981-2010 rainfall data. The third stage is to produce annual normals. The (World Meteorological Organization (WMO), 2017) recommend producing them from the monthly normals, i.e. from the data in Fig. 19.2m, rather than from the monthly data, e.g. Fig 19.2e. If there are no missing values the results are essentially the same.

+

From the monthly normals in Fig. 19.2m use Prepare > Column: Reshape > Column Summaries again, Fig. 19.2o, with the five variables meanrain, rainday, rainday5, rainday10 and rainday25. In Fig. 19.2o press the Summaries sub-dialogue and just get the Sum. Also, in Fig. 19.2o, the results could be stored in another data frame if the calculations were for multiple stations. We choose here to give the results in the output window instead, Fig. 19.2p.

+

Now return to the dialogue in Fig. 19.2o. Use the variable maxrain instead and change the summary to just produce the maximum.

+

The annual results, in Fig. 19.2p show the mean annual rainfall was 595mm from 43 rain days, of which, on average 7 days has 25mm or more. So, the mean rain per rain day was on average 14mm and about one rain day in six had 25mm or more. The largest ever daily rainfall was 113mm.

+ ++++ + + + + + + + + + + + + +
Fig. 19.2p

Fig. 19.2q

+

Prepare > Column: Reshape > Column Summaries (after making year a factor)

+

The (World Meteorological Organization (WMO), 2017) recommendation of calculating the annual normals from the monthly values does not work for the quintiles. In the calculations above we have used the nice property that “the sum of the means is the same as the mean of the sums”. So, in the figures above, totalling the monthly values in Fig. 19.2e to give the 30 annual values and then taking the mean over the years, still gives the value of 595mm that we found doing it “the other way round”.

+

One limitation with this recommendation is that it is not possible to calculate the annual normal quintiles, i.e. the variables minrain, 20% (q20) , q80 and maxrain, see Fig. 19.2m, from their monthly counterparts. The same applies to the quartiles, see Table 19.1b above, from (Arguez, et al., 2012) where the annual quartiles have been omitted.

+

These quintiles, including the annual extremes, are useful. As there are no missing values in the data, they are calculated from the individual monthly values, shown in Fig. 19.2e.

+

With the monthly data frame, Fig. 19.2e, right-click in the year name and make the year into a factor column. Then use Prepare > Column: Reshape > Column Summaries again as shown in Fig. 19.2q, for the sumrain variable.

+

In the summaries sub-dialogue just get the Sum. The resulting data frame is shown in Fig. 19.2r.

+

Use the Prepare > Column: Reshape > Column Summaries in this new data frame. With the Summaries sub-dialogue give the Mean, Minimum, Maximum and the 0.2 percentile (on the More tab). Use the same dialogue again, and change 0.2 to 0.8 to give the 80% point.

+

The results are in Fig. 19.2s. The first value simply confirms that the mean is the same, whichever way it is calculated. The lowest year had a total of 330mm and the highest was 864mm. The 20% point for the annual rainfall total was 487mm and the 80% point was 717mm.

+ ++++ + + + + + + + + + + + + +
Fig. 19.2r

Fig. 19.2s Annual results

+

From Prepare > Column: Reshape > Column Summaries

{wid th=“2.3395986439195102in” heig ht=“2.445317147856518in”}
+
+
+

21.3 Missing values

+

Make a copy of the rainfall column, to illustrate how to cope with missing values.

+

Right-click in the rain variable, Fig. 19.3a and choose Duplicate Column. Call the resulting variable rainm, Fig. 19.3b.

+ ++++ + + + + + + + + + + + + +
Fig. 19.3aFig. 19.3b
+

In the resulting column, double-click on 7th, 8th and 9th January and make the values into NA. Scroll down and make 1st to 5th February 1981 into NA.

+

Then use Climatic > Prepare > Transform, Fig. 19.3c, to make a column called raindaym. The resulting data are shown in Fig. 19.3d.

+ ++++ + + + + + + + + + + + + +
Fig. 19.3cFig. 19.3d
+

The guidelines in (World Meteorological Organization (WMO), 2017) depend on what type of parameter you are calculating, i.e. sum, mean, count or extreme.

+ ++++ + + + + + + + + + + + + +
Fig. 19.3e

Fig. 19.3f

+

Redo when new option available

+

It is strict for a sum parameter, so here for the total monthly rainfall. If there are any missing values, it proposes the monthly sum be set to missing.

+

This is also one of the default settings in R, and hence in R-Instat. So, repeat the Climatic > Prepare > Climatic Summaries dialogue, from Fig. 19.2b, also shown in Fig. 19.3e, for the new rainm variable. Just get the sum.

+

The maximum daily rainfall is an extreme. When there are missing values in the month, the extreme is found for those that remain present. So, return to the Prepare > Column: Reshape > Column Summaries dialogue, tick the Omit Missing Values checkbox in the dialogue shown in Fig. 19.3e. Click the Summaries button and change the summary to give just the Maximum.

+

When the parameter is a count, like the number of rain days, (or a mean), there is an intermediate recommendation, shown in Fig. 19.3f. The monthly summary is set to missing if there are 11 or more missing days in the month, or if 5, or more, consecutive days are missing[^62].

+ ++++ + + + + + + + + + + + + +
Fig. 19.3gFig. 19.3h
+

Return to the Prepare > Column: Reshape > Column Summaries dialogue, Fig. 19.3e, yet again and use the raindaym variable. Click on the Summaries and choose N Non Missing and Sum. On the main dialogue also tick the Add Date Column[^63] checkbox.

+

The results are shown in Fig. 19.3h. With the missing values, the first 2 months in 1981 are set to missing for the rainfall total and neither month is missing for the maximum. For the number of rain days, the first month is summarised, because just 3 days were missing. The second has been set to NA, because 5 consecutive days were missing.

+

With missing values (World Meteorological Organization (WMO), 2017) propose one further adjustment for the count-type normals, that are here represented by the number of rain days. The first row of data in Fig. 19.3h shows there were 4 rain days in the 28 non-missing days in January 1981. There are 31 days in January and hence the value is multiplied by 31/28, which gives an estimate of 4.4 rain days in the full month.

+

To handle this adjustment, use Climatic > Date > Use Date as shown in Fig. 19.3i. Just choose the check-box for Days in Month. The resulting column is also shown in Fig. 19.3h. Now use Prepare > Column: Calculate > Calculations and complete it as shown in Fig. 19.3j. The resulting variable is also shown in Fig. 19.3h.

+ ++++ + + + + + + + + + + + + +

Fig. 19.3i Number of days in each month

+

Climatic > Date > Use Date

Fig. 19.3j
+

The second stage in the calculations is the summary of the normal for each month, as shown in Section 19.2. The recommendation is that the monthly normals should only be calculated where there are at least 80%, i.e. 24 of the 30 years that are not missing. In the example here, there is missing in only a single year. Hence the second and third stages can proceed as described in Section 19.2.

+

This same rule of needing 80% of the years also applies to the calculations of the monthly quintiles. The annual quintiles, unlike the other normal, can not be calculated from the monthly normal. Hence annual quintiles should not be calculated if there are missing months in the data.

+
+
+

21.4 Temperature normals

+

In (World Meteorological Organization (WMO), 2017) the monthly (and annual) mean values of the (daily) Tmax, Tmin and Tmean are in the list of Principal normals, Table 19.1a, while the monthly extremes and the count of the number of days that Tmax exceeds 25˚C, 30˚C, 35˚C and 40˚C are listed as secondary. The only equivalent threshold for Tmin is the count less than 0˚C, which is rarely useful in Africa. In (Arguez, et al., 2012) the count less than 10˚C is used, see Table 19.1b and that may be more relevant.

+

There are missing values in the temperature record. The inventory in Fig. 19.1a indicated that there are not many missing values, but a more accurate check may be useful. One way again uses Climatic > Check Data > Inventory, as shown in Fig. 19.4a, but with a different layout of the data. The result is in Fig. 19.4b.

+ + + + + + + + + + + + + +

Fig. 19.4a Detailed inventory

+

Climatic > Check Data > Inventory

Fig. 19.4b Results for Tmax and Tmin 1981-2010
! {wi dth=“2.362328302712161in” heig ht=“2.666806649168854in”}
+

This confirms that there are only a few missing values. A more precise result would be through a table. This is not currently an automatic option in R-Instat. However, it can easily be given as was shown in Chapter 8, giving the results in Fig. 19.4c. They show the thin red lines in Fig. 19.4b refer to isolated single missing days. There are just 2 years with at least a missing month for Tmax and one year for Tmin. The analysis can continue.

+ +++ + + + + + + + + + + +
Fig. 19.4c Count of missing values in Tmax, Dodoma 1981-2010
+

Tmin is used for illustration. The main dialogue is Climatic > Prepare > Climatic Summaries, Fig. 19.4d.

+ ++++ + + + + + + + + + + + + +
Fig. 19.4dFig. 19.4e
+ ++++ + + + + + + + + + + + + + + + + +
Fig. 19.4fFig. 19.4g
+

The results are shown in Fig. 19.4g. For example, in July 1984 the minimum of Tmin was 12.3˚C, the mean was 14.0˚C and the maximum was 15.8 ˚C. These were from 30 days, because one day was missing. 25 out of the 30 days were less than 15 ˚C. This count is adjusted as described in Fig. 19.3i, i.e. use Climatic > Dates > Use Date to add a variable giving the number of days in each month and then adjust the count of days less than 15 ˚C by:

+

Countlt15/count_non_missing * days_in month.

+

This gives the last variable shown in Fig. 19.4g.

+

The second stage is to average over the years. This uses Prepare > Column: Reshape > Column Summaries as for the rainfall normals, Fig. 19.4h.

+ ++++ + + + + + + + + + + + + +
Fig. 19.4hFig. 19.4i
+ ++++ + + + + + + + + + + + + +
Fig. 19.4jFig. 19.4k
+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_21_Various.html b/_book/Chapter_21_Various.html new file mode 100644 index 0000000..af07871 --- /dev/null +++ b/_book/Chapter_21_Various.html @@ -0,0 +1,742 @@ + + + + + + + + + +22  Various – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

22  Various

+
+ + + +
+ + + + +
+ + + +
+ + +
+

22.1 Evapotranspiration

+
+
+

22.2 Filling and homogenising data

+
+
+

22.3 Markov chains

+

Will refer to (Stern, Dennett, & Dale, The Analysis of Daily Rainfall Measurements to Give Agronomically Useful Results 2 - A Modelling Approach, 1982)

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_22_References.html b/_book/Chapter_22_References.html new file mode 100644 index 0000000..45dbd11 --- /dev/null +++ b/_book/Chapter_22_References.html @@ -0,0 +1,749 @@ + + + + + + + + + +23  References – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

23  References

+
+ + + +
+ + + + +
+ + + +
+ + +

Agostinelli, C., & Lund, U. (n.d.). R package 'circular': Circular Statistics, 0.4-93. Retrieved 2017, from https://r-forge.r-project.org/projects/circular/

+

Beguería, S., & Vicente-Serrano, S. M. (2017). SPEI: Calculation of the Standardised Precipitation-Evapotranspiration Index. R package version 1.7. Retrieved from https://CRAN.R-project.org/package=SPEI

+

Cooper, P. M., Dimes, J., Rao, K. P., Shapiro, B., Shiferaw, B., & Swomlow, S. (2008). Coping better with current climatic variability in the rain-fed farming systems of sub-Saharan Africa: An essential first step in adapting to future climate change? Agriculture, Ecosystems and Environment, 24-35.

+

GADM. (2019, 6 12). GADM. Retrieved from https://gadm.org/data.html

+

Hansen, J. W., Mason, S. J., Sun, L., & Tall, A. (2011). Review of Seasonal Climate Forecasting. Experimental Agriculture, 201-240.

+

Keyantash, J., & (Eds), N. C. (2018, August 7). The Climate Data Guide: Standardized Precipitation Index (SPI). Retrieved June 10, 2019, from NCAR/UCAR Climate Data Guide: https://climatedataguide.ucar.edu/climate-data/standardized-precipitation-index-spi

+

Mardia, K. V. (1972). Statistics of Directional Data. London: Academic Press.

+

Mupamgwa, W., Walker, S., & Twomlow, S. (2011). Start, end and dry spells of the growing season in semi-arid southern Zimbabwe. Journal of Arid Environments, 1097-1104.

+

Otieno Sango, B., & Anderson-Cook, C. M. (2003). A More Efficient Way Of Obtaining A Unique Median Estimate For Circular Data. Journal of Modern Applied Statistical Methods.

+

Palmer, W. C. (1965). Meteorological Drought. US Weather Bureau.

+

Pewsey, A. N., & D., R. G. (2013). Circular Statistics in R. Oxford: Oxford University Press.

+

R Core Team. (2018). R: A language and environment for statistical computing. Retrieved from https://www.R-project.org/.

+

Siebert, A., Dinku, T., Vuguziga, F., Twahirwa, A., Kagabo, D. M., delCorral, J., & Robertson, A. W. (2019). Evaluation of ENACTS‐Rwanda: A new multi‐decade, high‐resolution rainfall and temperature data set—Climatology. International Journal of Climatology, 3104-3120.

+

Stern, R. D., Dennett, M. D., & Dale, I. C. (1982). The Analysis of Daily Rainfall Measurements to Give Agronomically Useful Results 1 - Direct Methods. Experimental Agriculture, 223-236.

+

Stern, R. D., Dennett, M. D., & Dale, I. C. (1982). The Analysis of Daily Rainfall Measurements to Give Agronomically Useful Results 2 - A Modelling Approach. Experimental Agriculture, 237-253.

+

Stern, R. D., Rijks, D., Dale, I. C., & Knock, J. (2006). Instat Climatic Guide.

+

Svoboda, M., Hayes, M., & Wood, D. A. (2012). Standardized Precipitation Index User Guide. Geneva: WMO. Retrieved from http://library.wmo.int/pmb_ged/wmo_1090_en.pdf

+

Vicente-Serrano, S. M., Beguería, S., & López-Moreno, J. I. (2010). A Multiscalar Drought Index Sensitive to Global Warming: The Standardized Precipitation Evapotranspiration Index. Journal of Climate, 1696-1718. Retrieved from https://doi.org/10.1175/2009JCLI2909.1

+

Wells, N., Goddard, S., & Hayes, M. J. (2004). . A Self-Calibrating Palmer Drought Severity Index. Journal of Climate, 2335-2351.

+

Wikipedia contributors. (2019). R (programming language). Retrieved from Wikipedia, The Free Encyclopedia: https://en.wikipedia.org/w/index.php?title=R_(programming_language)&oldid=887219468

+

Wikipedia contributors. (n.d.). Mean of circular quantities. Retrieved May 14 , 2019, from https://en.wikipedia.org/w/index.php?title=Mean_of_circular_quantities&oldid=885307281

+

World Meteorological Organization (WMO). (2017). WMO guidelines on the calculation of climate normals. WMO. Retrieved from https://library.wmo.int/doc_num.php?explnum_id=4166

+

World Meteorological Organization, (., Zwiers, F. W., & Zhang, X. (2009). Guidelines on Analysis of extremes in a changing climate in support of informed decisions for adaptation. WMO. Retrieved from http://library.wmo.int/pmb_ged/wmo-td_1500_en.pdf

+

Zhang, X., Hegerl, G., Zwiers, F. W., & Kenyon, J. (2005). Avoiding Inhomogeneity in Percentile-Based Indices of Temperature Extremes. Journal of Climate, 1641-1651.

+

Zhong, R., Chen, X., Wang, Z., & Chengguang, L. (2018). scPDSI: Calculation of the Conventional and Self-Calibrating Palmer Drought Severity Index. Retrieved from https://CRAN.R-project.org/package=scPDSI

+ + + +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_23_Index.html b/_book/Chapter_23_Index.html new file mode 100644 index 0000000..ff29aee --- /dev/null +++ b/_book/Chapter_23_Index.html @@ -0,0 +1,721 @@ + + + + + + + + + +24  Index – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

24  Index

+
+ + + +
+ + + + +
+ + + +
+ + +

Zimbabwe, 123

+ + + +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_2_More_Practice_with_RInstat.html b/_book/Chapter_2_More_Practice_with_RInstat.html new file mode 100644 index 0000000..7a02ac0 --- /dev/null +++ b/_book/Chapter_2_More_Practice_with_RInstat.html @@ -0,0 +1,1376 @@ + + + + + + + + + +3  More Practice with R-Instat – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

3  More Practice with R-Instat

+
+ + + +
+ + + + +
+ + + +
+ + +
+

3.1 Introduction

+

To use climatic data fully it is important to be able to deliver products. The two examples in this chapter describe the steps and the endpoint in this process. Data are supplied in the right form for the analysis. The objectives are specified, and your task is to prepare the tables and graphs for a report and a presentation.

+

Some familiarity with R-Instat is assumed. There are two initial tutorials and following those is enough preparation. If you have already used a statistics package before, then the examples below may be sufficient for you, even without the tutorials. This chapter is also designed to provide practice with R-Instat.

+

The first problem builds on a study in Southern Zambia. This is the most drought-prone area of the country. Everyone knew that there is 'climate change'! Some farmers were emigrating North, citing climate change as their reason. However, a local non-governmental organization (NGO) called the Conservation Farming Unit, questioned this reasoning for the rainfall data. They are not convinced that any climate change has necessarily affected the farming practices. They, therefore, commissioned a study that used daily climatic data from several stations in Southern Zambia. The results were supplied as a report, and presentations of the results were also made to the NGO and to the local FAO Officers. The results confirmed evidence of climate change in the temperature data, but not in the rainfall. The key conclusions were later made into short plays that were broadcast on local radio and played at village meetings.

+

Here we use data from Moorings, a site in Southern Zambia. The daily data, on rainfall, are from 1922 to 2009. Here, partly for simplicity, we largely use the monthly summaries.

+

For the work, we draw an analogy with the preparation of a meal. The first key requirement is that you have the food, which here is the climatic data. In a real meal, the food may be supplied in a form that is ready for cooking, or it may need preparation prior to cooking. Here the data are in pre-packed form, so the analysis can proceed quickly.

+

You also need the right tools. In a kitchen, they are the saucepans, etc, while here they are just the computer, together with the required software.

+

You need some general cooking skills. These are the basic computing skills, plus initial skills of R-Instat, at least from the tutorial.

+

Finally, your objectives must be clear. This corresponds to having a specific meal in mind so that a recipe can be used. Of course, you may have to adapt slightly as you go along. You might find some oddities in the data, just as cooks must improvise if they suddenly find that one of the ingredients is not available.

+

If everything is well organized, the cook can prepare the meal very quickly. This is just what is done in the products in this chapter. This leaves time to make sure the dishes, for us the results, are presented attractively. Then users will enjoy consuming what is presented.

+

Section 2.2 describes the data for this first task. Trends in the rainfall are examined in Section 2.3. A second problem, in Section 2.4, examines whether satellite data on sunshine hours resembles corresponding station data. Daily data from Dodoma, Tanzania, are used.

+

The data for each of these case studies are in the R-Instat library. The presentation is designed so users can repeat the analyses on their laptops.

+

Graphs are produced in each of these sections and the general methods for graphics in R-Instat is outlined in Section 2.5. Section 3.5 then adds a warning. R-Instat provides an easy-to-use click and point way of using the R programming language. It should help users to solve may problems. But a click-and-point system is not the right tool for all problems. We describe a problem that may require more programming skills, at least if you wish to prevent your computer from laughing at you!

+

This chapter demonstrates R-Instat as a simple general statistics package and the File, Prepare and Describe menus are used. It illustrates that a general statistics package is an appropriate tool for many climatic problems. It is also designed to consolidate your experience in using R-Instat. The special climatic menu is introduced in chapter 4.

+
+
+

3.2 The Moorings data

+

Monthly data are used in this part of the chapter. Daily data are the starting point in most of this guide because many of the objectives require daily data. But here the emphasis is on objectives for which the monthly data are suitable.

+

The data are already in an R-Instat file. Hence, they can be opened from the library in R-Instat library.

+

From the opening screen in R-Instat, select File > Open From Library as shown in Fig. 2.2a. Choose Load From Instat Collection, Then Browse to the Climatic directory then to Zambia. Select the file called Moorings_July.rds to give the screen shown in Fig. 2.2b. Press Ok.

+ ++++ + + + + + + + + + + + + +

Fig. 2.2a File > Open from Library

+

(Climatic > Zambia > Moorings.RDS)

Fig. 2.2b Ready to import Moorings.RDS
{ width=“2.430002187226597in” hei ght=“2.7552777777777777in”}
+

The resulting data are shown in Fig. 2.2c. There are 2 data frames. The one called Moorings has daily data.

+

Move to the second data frame as shown in Fig. 2.2c which shows the monthly totals. They are the total rainfall in mm and the total number of rain days. A rain day was defined as a day with more than 0.85mm[^1].

+ ++++ + + + + + + + + + + + + +
Fig. 2.2c The Moorings monthly data

Fig. 2.2d Boxplot dialogue on the Describe menu

+

Describe > Specific > Boxplot

+

Rainfall in Southern Zambia is from November to April. Hence, we analyze the data by season, rather than by year. There are 88 seasons from 1922 to 2009 and 1056 monthly values, as indicated in Fig. 2.2c.

+

The task is to write a short report that describes the patterns of rainfall. One aim is to assess whether there is obvious evidence of change in the pattern of rainfall. This evidence might justify requesting the data from multiple stations, to undertake a more detailed study. The first step is to explore the data, and then consider how appropriate results could be presented. To explore we start with a boxplot to show the seasonal pattern of the rainfall totals.

+

Choose the Boxplot dialogue from the Describe menu, with Describe > Specific > Boxplot, as shown in Fog. 2.2d. Complete the dialogue as shown in Fig. 2.2e. The resulting graph is shown in Fig. 2.2f[^2]. This shows the total rainfall was typically 200mm in each of December to February. There was always some rain in each of these months, and the records were over 500mm.

+ ++++ + + + + + + + + + + + + +

Fig. 2.2e Completed boxplot dialogue

+

Describe > Specific > Boxplot

Fig. 2.2f Boxplot of monthly rainfall totals
+

Change the variable from rain to raindays in Fig. 2.2e to give the corresponding boxplots for the number of raindays in the month, Fig. 2.2g. This shows that typically one day in two are rainy in December to February. Occasionally most of the days are rainy.

+

Boxplots are essentially a 5-number summary of the data, (with potential outliers also shown). The Prepare > Column: Reshape > Column Summaries, Fig. 2.2h, dialogue can provide the same summaries numerically.

+ ++++ + + + + + + + + + + + + +
Fig. 2.2g The number of rain daysFig. 2.2h Summary dialogue on the Prepare menu
+

Summarise both the monthly totals and the number of raindays, with the month as the factor, as shown in Fig. 2.2i. Then choose the Summaries button and complete the sub-dialogue as shown in Fig. 2.2j.

+ ++++ + + + + + + + + + + + + +

Fig. 2.2i The Summary dialogue

+

Prepare > Column: Reshape > Column Summaries

Fig. 2.2j Summaries sub-dialogue
+

The results are in a third data frame. It just has 12 rows as shown in Fig. 2.2k. The summaries are clearer if they are in order (which we did already for Fig. 2.2k).

+

Right-click in the name field of this data frame and choose the option to Reorder columns, Fig. 2.2l.

+ ++++ + + + + + + + + + + + + +
Fig. 2.2k Resulting summary dataFig 2.2l Right-click menu to reorder columns
+

In the Reorder dialogue, use the arrow keys to change the position of the columns in the data frame.

+

With the summaries in a sensible order, they are now transferred to the results (output) window.

+ ++++ + + + + + + + + + + + + +

Fig. 2.2m Reorder the resulting columns

+

Right-Click > Reorder Column(s)

Fig. 2.2n Simplify column names

+

Right-click > Rename Column

+

Before this, we renamed some of the columns to give shorter names. This again used the right-click menu, Fig 2.2l. The rename dialogue is shown in Fig. 2.2n.

+ ++++ + + + + + + + + + + + + +

Fig. 2.2o View Data dialogue

+

Prepare > Data Frame > View Data

Fig. 2.2n The Monthly number of rain days
{width=“2.7121620734908136in” height=“2.720417760279965in”}
+

Now use the Prepare > Data Frame > View Data dialogue, Fig. 2.2o, to transfer the rainfall totals and then the number of rain days to the results window. The results for the number of rain days are shown in Fig. 2.2p.

+
+
+

3.3 The objectives

+

Section 2.2 explored the data and examined the seasonal pattern of the rainfall at Moorings. It also made use of the three menus, File, Prepare and Describe and well as the right-click menu. The main objective, however, was to see if there is evidence of rainfall change rather than to investigate the seasonal pattern.

+

We first examine the annual totals and the total number of rain days. These are the totals from July to June, so they cover each season.

+

Some “housekeeping” is a preliminary. The 3rd data-frame is no longer needed. Right-click on the bottom tab a and choose the option to delete, Fig. 2.3a. The dialogue shown in Fig. 2.3b opens. Just press ok.

+ ++++ + + + + + + + + + + + + +
Fig. 2.3a Right-click on the bottom tabFig. 2.3b Delete a data frame
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTML1e674805.PNG
+

Use Prepare > Column: Reshape > Column Summaries and complete the dialogue and sub-dialogue as shown in Fig. 2.3c and Fig. 2.3d to produce the seasonal totals.

+ ++++ + + + + + + + + + + + + +

Fig. 2.3c Produce the annual totals

+

Prepare > Column: Reshape > Column Summaries

Fig. 2.3d The Summaries sub-dialogue
+
+

+
C:\Users\R OGERS~1\AppData\Local\Temp\SN AGHTML1b0bb1d.PNG
+
+
+

The results are shown in Fig. 2.3 e after the steps explained below. First, notice in Fig. 2.3e that there were only 4 months in the first season, and the annual summary was therefore set to missing[^3].

+ ++++ + + + + + + + + + + + + +
Fig. 2.3e Resulting annual dataFig. 2.3f Menu for a text substring
+

A numeric column for the year (season) is needed for the time series graphs. Hence, as shown below, we produce the second column, called s_yr, also shown in Fig. 2.3e.

+

Use Prepare > Column: Text > Transform, Fig. 2.3f. Complete the resulting dialogue, as shown in Fig. 2.3g, to give just the starting year of the season. The resulting variable is shown in Fig. 2.3e.

+ ++++ + + + + + + + + + + + + +

Fig. 2.3g The Substring Option

+

Prepare > Column:Text > Transform

Fig. 2.3h Convert Column to Numeric
{ width=“2.003675634295713in” hei ght=“2.8906255468066493in”}
+

Use the right-click menu, Fig. 2.3h to convert the resulting s_yr column to numeric.

+

After a little further housekeeping from the right-click menu, to rename, re-order and delete columns, the annual data are as shown in Fig. 2.3e above.

+

Now for the time-series graphs. They can be produced using the Describe > Specific > Line Plot dialogue, but this type of graph is just what is needed for the PICSA-style rainfall graphs, so we use the special climatic menu for the first time.

+

Use Climatic > PICSA > Rainfall Graph. Complete as shown in Fig. 2.3i. Press the PICSA Options button and complete the Lines ab as shown in Fig. 2.3j to add (and label) a horizontal line for the mean.

+ ++++ + + + + + + + + + + + + +

Fig. 2.3i PICSA Rainfall graph dialogue

+

Climatic > PICSA > Rainfall Graph

Fig. 2.3j Add a line showing the mean
+

The resulting graph is shown in Fig 2.3k[^4]. Return to the dialogue and put raindays as the y-variable to give the results in Fig. 2.3l.

+ ++++ + + + + + + + + + + + + +
Fig. 2.3k Seasonal rainfall totalsFig. 2.3l Number of rain days
+

These graphs indicate large inter-annual variability, but they don’t seem to show a trend. That is important because, if you can attribute your farming problems to climate change, then there may be nothing you can do. But coping with the variability is what farmers have always had to do.

+

With results such as shown in Fig. 2.3k and 2.3l you can start comparing risks for different options in your farming and in other enterprises. That sort of idea is discussed in PICSA workshops.

+

Some may find the graph shown above to be convincing evidence that, with rainfall, the pressing problem is variability, rather than change. We stress that there IS climate change, and similar graphs with temperature data show a trend. If the temperatures have changed, then the “system” has changed, and it follows that other elements including rainfall will be affected. Currently, however, with this sort of analysis, it is usually not yet possible to determine which way the pattern of rainfall may change. It is difficult to detect a small change when the inter-annual variability is so large. And, even if a change is detected, coping as well as possible with the variability must be a good thing to do.

+

Some people are not convinced by graphs such as are shown above. A common statement is that the annual totals that might still be similar, but the season is shorter, because planting is delayed, etc. We examine this in more detail in Chapter 7. There the daily data are used to define the start, end and length of the season as well as to examine dry spells and extremes during the season. With the monthly total, the examination can start by repeating the analysis above, but just for November and December, when the season starts.

+

Return to the monthly data frame and filter to examine just those months. So, make sure you are on the monthly data. Right click as usual and choose Filter, Fig. 2.3m

+ ++++ + + + + + + + + + + + + +
Fig. 2.3m Right-click for FilterFig. 2.3n The filter dialogue
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTML1993cb5.PNG
+

In Fig. 2.3n, click to Define new Filter. Complete the sub-dialogue as shown in Fig. 2.3o. The steps are as follows:

+
    +
  1. Choose the month column

  2. +
  3. Select Nov and Dec as shown in Fig. 2.3p

  4. +
  5. Click to Add Condition

  6. +
  7. Press Return

  8. +
+ ++++ + + + + + + + + + + + + +
Fig. 2.3o Defining the filterFig. 2.3p The filtered data
+

Back on the main filter dialogue, just press Ok. The data are now as shown in Fig. 2.3p. The first column is in red and this shows a filter is in operation. Also, at the bottom of the data frame, you see there are now 176 rows (months) of data to analyse, out of the original 1062 rows.

+

The other data have not gone away. If ever you wish to return, then just press right-click as before, Fig. 2.3m and choose the last option to Remove Current Filter.

+

Now it is quick to repeat the steps above for this analysis. It is simpler to recall the last dialogues as shown in Fig. 2.3q.

+ ++++ + + + + + + + + + + + + +
Fig. 2.3q Recall the last dialoguesFig. 2.3r The Column Statistics dialogue
+

The Column Statistics dialogue and sub-dialogue remain completed from before, Fig. 2.3r. So just press Ok.

+

The new columns have added to the existing annual sheet. So, go straight to the PICSA Rainfall Graphs dialogue again. Choose the new variable for the November-December totals and press OK. The mean is now 286mm for the 2 months. Repeat for the number of rain days to give the graphs for the filtered data, see Fig. 2.3s and 2.3t.

+ ++++ + + + + + + + + + + + + +
Fig. 2.3s Rainfall totals Nov-DecFig. 2.3t Number of rain days Nov-Dec
+

One feature of the data in Fig. 2.3s is that had the record started in 1981, then it might have given an impression of an upward trend in the rainfall total. The longer record shows that this sort of conclusion should be treated with considerable caution!

+

These graphs start to satisfy the objective of examining the rainfall data in Southern Zambia for trends. The results should be considered as provisional if only because they are from just a single station and only use the monthly data. We suggest they make a case for a more complete analysis with multiple stations.

+
+
+

3.4 Comparing satellite and station data

+

Our proposed objective is to report on the feasibility of using satellite estimates of sunshine hours to supplement the information from station data. The station network for sunshine or radiation is sparse in many countries. Where it exists the records often have many missing values.

+

Estimates of daily hours of sunshine are also available from the EUMETSAT CMSAF (Climate Monitoring Satellite Application Facility) for about 5km square pixels. The data are available from 1983 and may be downloaded free of charge. These data are in NetCDF files and examples from a few locations have been downloaded and are the R-Instat library.

+

Data from Dodoma, Tanzania was analysed in the second tutorial and the same dataset is used here. In this exercise, these data are merged with the corresponding satellite data and the two variables are then compared.

+

As in the tutorial use File > Open From Library. Choose the Instat collection. Browse to the Climatic directory and choose the Original Climatic Guide datasets. Choose just the Dodoma sheet, Fig. 2.4a.

+ ++++ + + + + + + + + + + + + +
Fig. 2.4a Importing the Dodoma dataFig. 2.4b Add a Date column
+

Once imported use Prepare > Column: Date > Make Date, Fig. 2.4b to construct a date column from the Year, Month, Day columns. Name the resulting column as Date, see Fig. 2.4b.

+

Now use File > Import and Tidy NetCDF File, Fig. 2.4c. Choose the option From Library and the file that starts CMSAF_SDU (for sunshine duration). This file contains just the data from the nearest pixel to the Dodoma station data.

+ ++++ + + + + + + + + + + + + +
Fig. 2.4c Import the CMSAF satellite dataFig. 2.4d Change the name to Date
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTML2bdf480.PNG
+

Once imported, right-click to change the name of the last column from time_date to Date, i.e. to the same name as in the station data, Fig. 2.4d[^5].

+ ++++ + + + + + + + + + + + + +
Fig. 2.4e The Merge dialogueFig. 2.4f Sub-dialogue to add just SDU
+

Use Prepare > Column: Reshape > Merge and complete the dialogue as shown in Fig. 2.4e. It chooses to match on the Date columns, which is what we want. That is why we gave them the same name in the two data frames[^6].

+

The SDU column is all we need from the satellite data. So, press the Merge Options button in Fig. 2.4e. Use the Columns to Include tab and complete as shown in Fig. 2.4f. Press Return and then Ok.

+

Now check, using Describe > One Variable > Summarise on the merged data. Choose all the columns and press Ok. The results are in Fig. 2.4g.

+ ++++ + + + + + + + + + + + + +

Fig. 2.4g Results from One Variable Summarise

+

From Describe > One Variable > Summarise

Fig. 2.4h Generate columns from the Date

+

Prepare > Column: Date > Make Date

+

An encouraging sign in Fig. 2.4g is that summary statistics for the Sunh (from the station) and SDU (from the satellite) are almost identical. The maximum of 16 hours for SDU is a little concerning, because that is probably longer than the maximum day length at Dodoma.

+

Some “housekeeping” is useful, because the results in Fig. 2.4g also show there are some missing values in the year and day of month column[^7].

+

Right-click and delete the first 3 columns. Then generate them again (without missing values) using Prepare > Column: Date > Use Date dialogue, Fig. 2.4h. Then use Describe > One Variable > Summarise again to confirm the new columns do not have missing values.

+ ++++ + + + + + + + + + + + + +
Fig. 2.4i Resulting merged dataFig. 2.4j Correlations dialogue
+

Right-Click and choose Reorder Column(s). The resulting data should be like that shown in Fig. 2.4i.

+

We are now ready to compare the satellite data (SDU) with the station values (sunh).

+ ++++ + + + + + + + + + + + + +
Fig. 2.4k Correlations sub-dialogueFig. 2.4l Results
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTML3dae776.PNG
+

Use Describe > Multivariate > Correlations. and enter SDU and sunh, Fig. 2.4j. Click on Options and choose Scatter Matrix. Fig. 2.4k. The results are in Fig. 2.4l.

+

The results in Fig. 2.4l look promising. The shape of the satellite (bottom right) and station data (top left) look similar and the correlation is a reasonably satisfactory 0.87.

+

What is next? These data (both sunh and SDU) are time series. Time series have seasonality, and this should usually be reflected in the analysis.

+

So, return to the correlations dialogue and sub-dialogue, Fig. 2.4k and add the month factor.

+ ++++ + + + + + + + + + + + + +
Fig. 2.4m Including months in the analysisFig. 2.4n The Histogram dialogue
+

The results in Fig. 2.4m show that the shape of both variables depends on the month. In particular (as expected) there is often less sun in the rainy season (November to April) and the correlations are then higher. The display, in Fig. 2.4m, is also confusing as there are now too many groups to see clearly what is happening.

+

It is time to split up the components of the results in Fig. 2.4m to compare the satellite and station data in more detail.

+

Use Describe > Specific > Histogram, Fig. 2.4n.

+ ++++ + + + + + + + + + + + + +
Fig. 2.4o A set of density graphsFig. 2.4p Include facets in the graph
+

Change the button at the top of Fig. 2.4o to Density and click on Plot Options.

+

In the sub-dialogue, Fig. 2.4p tick the checkbox to include facets and include the month factor.

+ ++++ + + + + + + + + + + + + +
Fig. 2.4q Multiple variablesFig. 2.4r Resulting graphs
+

Return to the main dialogue, and click to include multiple variables, Fig. 2.4q. Include Sunh and SDU and press Ok. The graphs from Fig. 2.4m are now overlaid, so they can easily be compared, and displayed separately for each month. Fig. 2.4r shows the pattern is similar in each month. We also see the sharp peaks in the dry months, particularly from June to October, when most days have about 10 hours of sunshine per day.

+

Fig. 2.4r shows the pattern of sunshine is similar from the satellite and station data. It does not, however, show whether a day in any month with more sunshine at the station (sunh), also had more sunshine from the satellite data (SDU). For this, we look at the scatterplot from Fig. 2.4m again broken into the monthly facets.

+

Use Describe > Specific > Scatterplot and complete the dialogue as shown in Fig. 2.4s. Press on Plot Options and include the months as facets, Fig. 2.4t, just as earlier in Fig. 2.4p.

+ ++++ + + + + + + + + + + + + +
Fig. 2.4s Scatterplot dialogueFig. 2.4t Plotting sub-dialogue
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTML6ce7e6e.PNG
+

The resulting set of graphs is shown in Fig. 2.4u.

+ +++ + + + + + + + + + + +
Fig. 2.4u Scatterplots for each month
+

Our initial objective was to examine whether the satellite estimates may be useful in Tanzania to supplement the station data. The results are promising, but this just the start. There are many possible next steps, including an examination of the occasions when the two variables differ substantially. The analysis should also be extended to multiple stations. We also need more numerical summaries to measure how close the two variables are. Chapter 10 considers this subject in more detail.

+
+
+

3.5 In conclusion

+

To be added

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_3_Using_RInstat_effectively.html b/_book/Chapter_3_Using_RInstat_effectively.html new file mode 100644 index 0000000..6cce8d1 --- /dev/null +++ b/_book/Chapter_3_Using_RInstat_effectively.html @@ -0,0 +1,1294 @@ + + + + + + + + + +4  Using R-Instat effectively – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

4  Using R-Instat effectively

+
+ + + +
+ + + + +
+ + + +
+ + +
+

4.1 Introduction

+

R-Instat is simply a front end to the R programming language, Wikipedia (2019). R started in the 1990s and consists of a relatively small core, that is maintained by the R development core team. There are then also over 12 thousand packages that extend R’s capabilities. About 200 of these packages are included (behind the scenes) in R-Instat.

+

The front end in R-Instat is written in Visual Basic.Net. This front end provides the menus and dialogues that are used to run R-Instat. The default view of R-Instat is shown in Fig. 3.1a. It has 2 windows, one showing part of the data and the other is for the results or output.

+ +++ + + + + + + + + + + +
Fig. 3.1a
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTMLc875082.PNG
+

R-Instat looks a little like a spreadsheet package, but there are differences. One, shown in Fig. 3.1, is that the results are in a separate window, rather than on successive sheets. Also, the data shown in Fig. 3.1a are stored in an R data frame (behind the scenes) and what you see is often only a small part of these data.

+

Current spreadsheets have a limit of about 1million rows. This not a limit in R, (or therefore in R-Instat) where your machine’s memory imposes a limit that is usually larger. However, the effort of continually copying all the data to the front end would slow R-Instat and hence (by default) we just show the first 1000 rows of data and the first 30 columns[^8].

+

One way to see all the data in the current data frame[^9] is shown in Fig. 3.1b. Just right-click on the tab at the bottom and choose View Data Frame, Fig. 3.1c.

+ ++++ + + + + + + + + + + + + +
Fig. 3.1bFig. 3.1c
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTMLc9d2c55.PNG
+

The same result could alternatively be done through Prepare > Data Frame > View data as shown in Fig. 3.1d. This gives a dialogue. From here, as shown in Fig. 3.1e, you can choose any of the open Data Frames. Then click Ok to again show the data in R, Fig. 3.1c.

+ ++++ + + + + + + + + + + + + +
Fig. 3.1dFig. 3.1e
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTMLc9b3538.PNG
+

The menu and dialogue in Fig. 3.1d and 3.1e are all part of the “front-end” of R-Instat. When you click Ok, R-Instat constructs an R command and sends it to R. The results are then returned to the front-end.

+

The output (results) window shows the R command that has been sent, as well as the output, if any. Right-click in the Output Window, Fig. 3.1f, if you wish to turn this off for future commands.

+

In the data window right-click in the name field to provide some common options, Fig. 3.1g. Alternatively, each of these options is available from the Prepare Menu.

+ ++++ + + + + + + + + + + + + +
Fig. 3.1fFig. 3.1g
+

The data and output windows are the most important in R-Instat. There are four more windows. The use of the two metadata windows is described in Section 3.2 and the Log plus Script Windows are described in Section 3.3.

+
+
+

4.2 Column and data frame metadata

+

The R data frames used through R-Instat contain data together with some metadata. The name of each variable is part of the metadata as is a label for each variable. R-Instat has data in a set of data-sheets. An R-Instat data sheet is an R data frame with added metadata. The added information includes information on key columns together with links to other sheets. This helps R-Instat keep track of multiple data frames that are connected, such as the monthly summaries calculated from the daily data. A data sheet also keeps information on objects that have been produced and saved, such as graphs and models.

+ +++ + + + + + + + + + + +
Fig. 3.2aThe toolbar and View menu
+

Use the icon on the toolbar, (Fig. 3.2a) or View > Column Metadata to see the metadata currently associated with each open data frame. An example is in the top left in Fig. 3.2b.

+ +++ + + + + + + + + + + +
Fig. 3.2b
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTML5265ebf.PNG
+

As with Excel you can open multiple data frames when using R-Instat. The column metadata shown in Fig. 3.2b has tabs at the bottom, just like the data (also shown in Fig. 3.2b), so you can check on the metadata for any data frame. An R-Instat data book is the set of open data sheets.

+

Using View > Data Frame Metadata, Fig. 3.2b (top right) opens another window in which each row shows the metadata on a data sheet. The information in Fig. 3.2b includes the name of the sheet, an optional descriptive label, and the number of columns currently in the sheet.

+

If you use File > Save As > File Data As, Fig. 3.2c, at any stage, then R-Instat saves the whole data book, i.e. all the data frames, together with all the associated meta data, into a single file. This file has the extension RDS and this data book can later be re-opened in R-Instat[^10]. Good practice is usually to work on a single topic in each data book, i.e. the different data sheets are usually interconnected. As with Excel, there is nothing stopping you having all sorts of unconnected data sheets in the same book, but this usually complicates your work.

+

Some tasks are made simpler through the Column Metadata window, Fig. 3.2d. You can double-click in the name field of any column to change the name. You can add or change the label in the same way, Fig. 3.2. For numeric columns R chooses the number of significant figures to display. That is also shown in the metadata and can be changed[^11]. In addition, as shown in Fig. 3.2c, right clicking on the left-hand side gives the same popup menu of common tasks as is available from the data view.

+ ++++ + + + + + + + + + + + + +
Fig. 3.2cFig. 3.2d
+

Each Window button in the toolbar, Fig. 3.2e and the Options in the View Menu, Fig. 3.2f act like an on-off switch. So now use the curly arrow to reset to the default of the data and output windows side by side.

+ ++++ + + + + + + + + + + + + +
Fig. 3.2eFig. 3.2f
+

In this section we have added more of the 6 Windows available in R-Instat. The opposite is also useful. Once in the default layout, switching off the Data Window gives just the Output (Results) Window. Or switch off the Output Window to look at more columns of data. However, in that case remember to switch on the Output window to see any further results.

+
+
+

4.3 Graphs

+

Base R has a comprehensive graphics system, and this is used by many R packages. The grammar of graphics, Wilkinson (2005) is an influential book and has led to the exciting ggplot package (gg for grammar of graphics) and graphics system in R. One challenge we had in constructing R-Instat was to make the ggplot system easy to use. Almost all the graphs in this guide use this system. One example that does not, is the adjusted boxplot shown in Fig. 3.5i.

+

In this section we describe key concepts of the ggplot system and of our implementation.

+

One concept is “facets”. Fig. 2.4u is an example of a facetted graph, where there is one facet for each month. The default is for the x and y scales to be the same for each graph[^12], so the months can be compared easily. Also, you are not diverted by lots of axis scales for each month.

+

Some multiple graphs show different information in each pane, as was seen in Fig. 2.4m.

+

Within a graph you can have multiple layers. So, there are 2 layers in Fig. 2.4r, one for the station and the other for the satellite data. In Chapter 10 one layer in a map shows the districts in a country and another shows the position of each climatic station.

+

In each layer there is a geometric shape, or geom. A geom may be a point, a line, a boxplot etc.

+

In R-Instat the common geoms have their own dialogue as shown in Fig. 3.3a. We choose a boxplot in Fig. 3.3b for Tmax at Dodoma by month.

+ ++++ + + + + + + + + + + + + +
Fig. 3.3aFig. 3.3b
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTMLa085dd4.PNG
+

Every graphics dialogue includes the option to save the resulting graph, by giving it a name. In Fig. 3.3b we called the graph Tmax_boxplot. This ggplot graph is now saved as part of the metadata associated with the Dodoma data frame.

+

If you don’t give a name, then the default name of last_graph is given automatically. But, of course, that name is overwritten when you do the next graph.

+ ++++ + + + + + + + + + + + + +
Fig. 3.3cFig. 3.3d
+

Double-click in the graph, Fig, 3.3d to turn it blue. This also produces the popup menu and the graph can be copied to the clipboard.

+

An alternative is shown in Fig. 3.3e. Click on graph icon in the toolbar to show the last graph in R’s viewer. This only shows a single graph, but the Window can be resized and, as shown in Fig. 3.3e, there are now many options to save the graph, or to copy it to the clipboard.

+

This toolbar option is only for the most recent graph. The Describe > View Graph dialogue, Fig. 3.3f provides the option to view any of the saved graphs in this way[^13].

+ ++++ + + + + + + + + + + + + +
Fig. 3.3e The R graph viewerFig. 3.3f Options for viewing graphs
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTMLa31a91e.PNGC:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTMLa3be5f8.PNG
+

We use the dialogue in Fig. 3.3f to show a third way to examine graphs; one that makes use of the excellent plotly package. This is called the Interactive Viewer in Fig. 3.3f. This opens the graph in a browser (though you don’t need to be online) as shown in Fig. 3.3g.

+ +++ + + + + + + + + + + +
Fig.3.3g The (plotly) interactive viewer for ggplot graphs
+

In Fig. 3.3g the data for October are shown. This demonstrates that the boxplot shows the median (30.6°C), the quartiles, etc. In addition, you can hover over any point to find its value and zoom if a part of the plot is of special interest. This is a system worth exploring, so we add a second example. This also shows the value of facets in a graph.

+

Use Describe > Specific > Scatterplot to examine Tmax as the Y variable against Tmin as the X, Fig. 3.3h.

+ ++++ + + + + + + + + + + + + +

Fig. 3.3h Initial use of scatterplot (geom point)

+

Describe > Specific > Scatter Plot

Fig. 3.3i Resulting graph
+

The resulting graph is relatively uninformative, except to demonstrate there is a lot of data. And you don’t need a special graphics system for a single graph like this. It does show there are a few outlying points that require closer investigation.

+

More concerning, as a principle, is that these are time series data. One property of time series is the seasonality and we could allow for this by looking separately at each month.

+

Return to the dialogue in Fig. 3.3h. Click on Plot Options and add the month factor as a facet, Fig. 3.3j. Press Return on the sub-dialogue. Then make the By Variable also the month factor and the Label Variable the Date. Click OK to produce the result shown in Fig. 3.3k.

+ ++++ + + + + + + + + + + + + +
Fig. 3.3j Plot options sub-dialogueFig. 3.3kTmax v Tmin by month
+

One feature of the graph in Fig. 3.3k is that there is the same x and y scales for each graph. This is appropriate here and has then the big advantage that the graph is not cluttered with many axes, so the data are more easily compared.

+

As with the overall graph in Fig 3.3i, one aspect to be investigated, from Fig. 3.3k, is the outliers. This is easily done via the interactive viewer. So, return to Describe > View Graph and choose the last graph, possibly called scatter_Tmax.Tmin from Fig. 3.3h (or just last_graph if no name was given).

+ +++ + + + + + + + + + + +
Fig 3.3l Interactive view
+

The new feature in Fig. 3.3l is that you can now hover over any point and see the values in more detail. The example shown in Fig. 3.3l is that on 9 October 1989 both Tmax and Tmin were 15.6°C. Worth checking! From the graph 15.6°C is very sensible for Tmin but not for Tmax[^14].

+

Other dialogues also provide useful graphs. As an example, use Describe > Multivariate > Correlations, Fig. 3.3m as in Chapter 2.

+ ++++ + + + + + + + + + + + + +
Fig. 3.3mFig. 3.3n
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTMLaa5e48d.PNG
+

Complete the dialogue as shown in Fig. 3.3n. Click on the Options button and complete the sub-dialogue as shown in Fig. 3.3o. The resulting display is in Fig. 3.3p.

+

For the data this indicates that both Tmax and Tmin have roughly normal distributions each month. The correlations are quite low. As with the other graphs more detail can be found from the plotly interactive display.

+ ++++ + + + + + + + + + + + + +
Fig. 3.3o Correlations sub-dialogueFig. 3.3p Distributions, scatterplot and correlations
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTMLaa7a41f.PNG
+

This is an example of a graphical display where the different panes show different types of display. Indeed, one pane is numeric. We used to think that a display in a graph was distinct from displaying tables of results. But Fig. 3.3p is like a 2 by 2 table, one cell of which contains numbers, while the others contain graphs.

+

Finish this section with a little “housekeeping”. Several objects (graphs) have been produced and perhaps are now no longer needed. Use Prepare > R Objects > Delete, Fig. 3.3q.

+ ++++ + + + + + + + + + + + + +
Fig. 3.3q Menu to manage R objectsFig. 3.3r Delete objects no longer needed
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTMLb0219a7.PNG
+

We choose to delete all the objects, Fig. 3.3r.

+
+
+

4.4 The log and script windows

+

The final two Windows in R-Instat are for the Log Window and the Script Window.

+

The R programming language is very powerful, but with a relatively steep learning curve. R-Instat gives easy access to a subset of R. However, a click-and-point system always has limitations. We consider here some options if these limitations are ever a constraint.

+

The log file keeps a record of all the R-commands that have been issued during a session of R-Instat. Use the toolbar option , Fig. 3.2e, or View > Log Window to open the log file.

+

In the Log file, the right-click menu gives various options, Fig. 3.4a, including saving the log file. That action is the same as using File > Save As > Save Log As, shown earlier in Fig. 3.2c.

+ ++++ + + + + + + + + + + + + +
Fig. 3.4a The Log WindowFig. 3.4b The Filter Dialogue
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTML6b171e8.PNG
+

The Log file keeps an exact record of what you have done so far in your R-Instat work. That is useful. If, later, you ever had to justify how you produced results, then this is your record of what was done.

+

If you need to ask for help, then we will usually want to relate anything extra to the best you have been able to do so far. A skilled R user can see exactly what was done through the log file.

+

If R is used directly, then we suggest it be used through RStudio. The log file can be run in RStudio and should produce the same results. Hence, an analysis could start in R-Instat and then continue in RStudio if further results are needed that cannot be done through R-Instat.

+

Sometimes a dialogue can almost do an analysis, but not quite. If small changes are needed to a command then they can be done, in R-Instat, with the Script Window

+

A guide called “Reading, Tweaking and Using R Commands”, reference allows users to adapt the commands behind any dialogue. This situation is illustrated with an example.

+

We show how to use adjusted boxplots (Hubert & Vandervieren, 2008) for each month with the rainfall data from Dodoma. This is first illustrated with the ordinary boxplots that are available (and very useful). However, for the rainfall we would like to have adjusted boxplots because of the skewness of the data. They are available in the R package, called robustbase reference that is already used by R-Instat. But adjusted boxplots are not yet available – at least when this guide was first written.

+

First the data are filtered for just the rain days. Then the boxplots are produced.

+

With the Dodoma data, as used in Chapter 2, use the right-click menu (or Prepare > Data Frame > Filter) to give the Filter dialogue, Fig. 3.4b. Note, in Fig. 3.4b, that the Ok button is not yet enabled. There is also a Script button on the bottom right of the dialogue, and this is also disabled. Every dialogue has the same set of five buttons at the bottom. Hence, every dialogue has a Script button and here we show how it can be used. In Fig. 3.4b, press on the Define New Filter button to open the Filter sub-dialogue. In the sub-dialogue, Fig. 3.4c.

+ ++++ + + + + + + + + + + + + +
Fig. 3.4c The filter sub-dialogueFig. 3.4d The filter dialogue completed
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTML6c2cda1.PNG
+

In the sub-dialogue, choose the Rain variable and make the condition as Rain > 0.85. Then click the Add Condition button, then press the Return button. A filter has now been selected and hence the Ok button is now enabled. We don’t need the To Script button at this stage, but note that it has also been enabled.

+

Now use the Describe > Specific > Boxplot dialogue and complete it as shown in Fig. 3.4e.

+ ++++ + + + + + + + + + + + + +
Fig. 3.4e The boxplot dialogueFig. 3.4f Boxplots with width proportional to the number of rain days
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTML6cfc546.PNG
+

The results are in Fig. 3.4f. They are useful, and pleasantly colourful, but the number of outliers shows that the ordinary boxplot is not ideal for data that are as skew as daily rainfall.

+

So, return to the boxplot dialogue in Fig. 3.4e and press the To Script button. The commands are as shown in Fig. 3.4g

+ +++ + + + + + + + + + + +
Fig. 3.4g Script window for the boxplot commands
    +
  1. Dodoma <- data_book$get_data_frame(data_name="Dodoma_merge")

  2. +
  3. last_graph <- ggplot2::ggplot(data=Dodoma_merge, mapping=ggplot2::aes(y=Rain, x=month)) + ggplot2::geom_boxplot(varwidth=TRUE, outlier.colour="red") + theme_grey()

  4. +
  5. data_book$add_graph(graph_name="last_graph", graph=last_graph, data_name="Dodoma")

  6. +
  7. data_book$get_graphs(data_name="Dodoma", graph_name="last_graph")

  8. +
  9. rm(list=c("last_graph", "Dodoma"))

  10. +
+

The second line – that starts last_graph is the only line that needs to change. The equivalent command, from the robustbase package, is as follows:

+

last_graph <- robustbase::adjbox(Rain ~ month, data =Dodoma_merge, col="red", varwidth=TRUE).

+ +++ + + + + + + + + + + +
Fig. 3.4h
+

So paste or type that command into the Script Window, which should then look as shown in Fig. 3.4h. To run the commands from the Script Window click on the Run All button at the top of Fig. 3.4h.

+

If there is an error, then correct the typing into Fig. 3.4h. Now, to be cautious, right-click, see Fig. 3.4h and this permits you to run the commands one line at a time. It is highly likely that line 2 is the problem so first go to line 1 and then run line 1, using Run Current Line, or pressing <Ctrl> + <Enter>. Do the same for line 2. If that works then continue with the rest of the lines and the graph, shown in Fig. 3.4i should appear.

+ +++ + + + + + + + + + + +
Fig. 3.4i Skew boxplot
+

This example has used the Script Window for a new command. More often the script window is for more modest changes, where an option is added or changed for an existing command.

+

If the command above were in a new package, that was not currently loaded into R-Instat, then the code in line 2 would not be recognised. In that case you would have add an extra line at the top of the script window to load the package, e.g. install.packages("robustbase"). This assumes you are connected to the internet. It also only need be done once. This package is then installed in R and can be used on subsequent occasions in R-Instat without that line being added.

+
+
+

4.5 Don’t let the computer laugh at you!

+

R-Instat is designed to facilitate the analysis of climatic data. This may be through using the general facilities (File, Prepare, Describe and Model menus), or through using the special climatic menu that is introduced in Chapter 4.

+

R-Instat is simply a click and point front-end to the R programming language. It is particularly for users who do not wish to spend time mastering the R language. There is also a special guide for those who would wish to start with R-Instat and then consider migrating to using R “properly”.

+

All software has limitations and it is important to recognise when using R-Instat, or perhaps your favourite spreadsheet package is not the correct solution for your work. We give an example below. Otherwise you may fall into the “copy-paste” trap. This is where you do a very routine job repeatedly, e.g. copy > paste, copy > paste, …. Humans are not good at boring and repetitive jobs and they make mistakes.

+

Computers, on the other hand, can be programmed to handle repetitive tasks brilliantly and very quickly. That’s why, if the computer watches you doing copy >paste, copy > paste etc, while it has little to do – then it is probably laughing at you!

+

Here is an example. It is of a type we discuss in more detail in Chapter 4. Here it is mainly designed to help you to recognise when your software, and perhaps your skill set is insufficient for the task in hand.

+

Climatic data from Garoua, Cameroon have been provided by the Cameroon Met Service and are now available in the R-Instat library, Fig. 3.5a.

+ ++++ + + + + + + + + + + + + +
Fig. 3.5a Garoua data in R-InstatFig. 3.5b Maximum temperature data
+

Fig. 3.5a shows the “standard” layout of the data for R-Instat climatic analyses. Spreadsheet packages like Excel, recognise this as a “list”[^15]. Each column in Fig. 3.5a is of a single “type” – most are numeric. The different elements each have their own column. In Fig. 3.5a each row has the data for a single day. In this file there 21915 rows (days) of data.

+

The starting point for these data looked very different. Some of the initial data for Tmax are shown in Fig. 3.5b. In Fig. 3.5b each day of the month has its own column, so there are 31 columns in the sheet. We find this to be a common “shape”. One additional problem in Fig. 3.5b is that each sheet has only about 3 years of data, so they are split across 16 different sheets.

+

The rainfall is in a different “shape” to the temperatures as shown in Fig. 3.5c and Fig. 3.5d.

+ ++++ + + + + + + + + + + + + +
Fig. 3.5c Rainfall data for GarouaFig. 3.5d More of the year of rainfall data
+

For the rainfall, each year is in a separate sheet. At the bottom of each sheet there are some monthly and annual totals. Hence the rainfall is a mixture of data and summary values.

+

There are three obvious ways you can proceed to change the shape of the data from Fig. 3.5b, c and d into the shape shown in Fig. 3.5a. The first is to use Excel (or another spreadsheet), the second is to use R-Instat and the third is to write a program, using R commands – or another language, such as Python.

+

What might you do with a spreadsheet? Here is a possible way:

+
    +
  1. It would be good to have all the years of data in a single sheet. Start with the first year, which is 1999 for the rainfall. Copy just the data – not the monthly summaries – into a new sheet.

  2. +
  3. Now go to the next year, i.e. 2000 and copy the data below those of

    +
      +
    1. +
  4. +
  5. Now go to 2001 and copy and paste again. The computer is starting to laugh, and you have a long way to go.

  6. +
  7. You persevere and have all the years in your new sheet.

  8. +
  9. Now you want to paste the February data below January, etc. This is 11 more goes at copy > paste.

  10. +
  11. You are bored, so you look briefly at the temperature data in Fig. 3.5d. You realise, in horror, that you will have 31 copy > paste to do there, with one column currently for each month.

  12. +
  13. You give up, realising there must be a better way. That’s partly because you realise the computer is laughing hysterically!

  14. +
+

We took the third option and wrote a program in R. In Chapter 4 we examine whether using R-Instat would be possible (without the computer laughing at you too much).

+

However, there is a general message. R-Instat is merely executing R commands through a click-and-point environment. This approach will always be limited, for some tasks, compared to using the command language directly. So, should you find that an analysis requires a lot of repetition from you, then check whether it is time to use R directly.

+

When you start using R-Instat it does not mean you need to abandon using a spreadsheet. Similarly using R directly does not necessarily mean abandoning R-Instat. When you use R-Instat it automatically generates a log file with the R commands. This file runs in RStudio. So, you could then continue using R directly (through RStudio) for those tasks where R-Instat has been found to be limiting.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_4_Getting_the_data_into_shape.html b/_book/Chapter_4_Getting_the_data_into_shape.html new file mode 100644 index 0000000..543396e --- /dev/null +++ b/_book/Chapter_4_Getting_the_data_into_shape.html @@ -0,0 +1,1622 @@ + + + + + + + + + +5  Getting the data into shape – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

5  Getting the data into shape

+
+ + + +
+ + + + +
+ + + +
+ + +
+

5.1 Introduction

+

R-Instat provides a menu-driven front-end to R. It is designed to make it easy to analyse any sort of data, including climatic data. The climatic menu is designed to make many analyses of the historical climatic records even easier. Most of this guide uses the various menus and dialogues in this special climatic menu.

+

If your analysis is not practical using the special climatic menu it may still be possible using the general menus in R-Instat. After all many climatic analyses are done with other statistical software and they do not have a special climatic menu.

+

“Click and point” systems all have limitations, or they would lose the simplicity of use that is a major driving force in their production. If your analyses cannot be done using R-Instat, then one strategy would be to use R itself. The “tweaking” guide shows how R-Instat can be extended, but you may also find that using RStudio is not as hard as you feared.

+

This Chapter introduce the climatic menu in R-Instat and shows how climatic data is arranged for analysis.

+
+
+

5.2 Climatic data that is “ready”

+

In Chapters 2 and 3 we examined data from Moorings, Zambia and Dodoma in Tanzania that were both in the right “shape” for an immediate analysis. Here we illustrate with more examples that are “ready”. In the following sections of this chapter we show how the Climatic menu, or the general Prepare menu can help to organise data into the same shape.

+

If your data are already in the same shape as the examples below then much of the content from Section 4.4 can be omitted.

+ ++++ + + + + + + + + + + + + +
Fig. 4.2a Importing a csv fileFig. 4.2b Data for 2 stations from Guinea
+

Go to File > Open from Library. Choose Load From Instat Collection, then Browse. Go to the Climatic directory and then Guinea. The data we require are in 2 forms, both an R file with the RDS extension and a csv file that can be read into Excel.

+

Use the file Guinea2.csv.

+

The new feature, compared to the data in Chapter 2, is that there are multiple stations. Right-click in the first Column, Fig. 4.2c, and choose the Levels/Labels dialogue. The result, in Fig 4.2d shows there are 2 stations, Kankan with about 24 thousand rows (days) and Koundara with about 16 thousand days.

+ ++++ + + + + + + + + + + + + +
Fig. 4.2c Choose Levels/LabelsFig. 4.2d The Levels/Labels dialogue confirms 2 stations
+

A second data file is from Western Kenya. Go back to the File > Open From Library dialogue. Browse again to the climatic directory. Choose Kenya and then the file WesternKenya.RDS.

+

This opens 3 data frames in R-Instat, 2 of which are shown in Fig. 4.2e and Fig. 4.2f.

+ ++++ + + + + + + + + + + + + +
Fig. 4.2e Name and location of each stationFig. 4.2f Rainfall data
+

Fig. 4.2e gives details of each station. The locations are included, which will be useful, in Chapter xxx when we draw maps. Fig. 4.2f gives the rainfall data for just over 50 stations. There are over 600 thousand rows (days) of data in total.

+

The third example is again from the Instat files in the Climatic directory. Choose Original Climatic Guide Datasets, which is an Excel file. R-Instat can import multiple sheets together, but here we just need the single sheet called Bulmonth, Fig. 4.2g. The data are monthly from Bulawayo in Zimbabwe from 1951.

+ ++++ + + + + + + + + + + + + +
Fig. 4.2g Importing monthly data from BulawayoFig. 4.2h Monthly data
+

The final example is from an R package. From File > Open From Library use the Open from R option, Fig. 4.2i. This gives access to all the datasets provided with the R packages that are in R-Instat. Scroll down the From Package list to the OpenAir package. There is only one data set. Open it to give the data shown in Fig. 4.2j

+ ++++ + + + + + + + + + + + + +
Fig. 4.2i Choosing the openair packageFig. 4.2j Hourly data
+

These examples show what is assumed in R-Instat to analyse the data. Data for multiple elements and from multiple sites can be in a single data frame. The multiple elements are in successive variables, i.e. they “go across”, while the multiple stations “go down”. The station name or ID is a factor column.

+

The dates are also needed, either in a single variable, Fig. 4.2j or in multiple variables as in Fig. 4.2h and Fig. 4.2f.

+
+
+

5.3 The R-Instat Climatic System

+

Analyses usually proceed using the following general menus:

+
    +
  1. The File menu is used to read the data

  2. +
  3. The Prepare menu is to organise the data ready for analysis

  4. +
  5. The Describe menu is for descriptive statistics, i.e. graphs and tables.

  6. +
  7. The Model menu fits and examines statistical models for the data

  8. +
+

This is shown by the structure of the R-Instat menus shown in Fig. 4.3a.

+ ++++ + + + + + + + + + + + + +
Fig. 4.3a The R-Instat menusFig. 4.3b The Climatic menu
+

The same applies to climatic data and hence the special climatic menu is arranged in the same order, Fig. 4.3b. We now examine some of the initial menu items in turn.

+ ++++ + + + + + + + + + + + + +
Fig. 4.3c The Climatic > File menuFig. 4.3d The Climatic > Tidy and Examine menu
+

Fig. 4.3c shows the Climatic > File menu. Often the data will be loaded using the main File menu as for all the examples in Section 4.2 above. This used the File > Open from Library dialogue, but the File > Open dialogue is often used for the data files.

+

Some options in Fig. 4.3c, such as the importing of NetCDF files are in both menus. Others, like Climsoft are just in this menu. Climsoft is a data management system specially to manage climatic data. It was described in general in Section 1.7 and importing from Climsoft is described in Section 4.5.

+

Fig. 4.3d shows the Tidy and Examine menu. The first dialogue is used to “tidy” climatic data that are not yet in the shape of those in the examples shown in Section 4.2. The idea of Tidy data is useful and is described well by Wickham 2014. He gives a variety of examples, with the most complex being climatic data. The remaining items in the menu in Fig. 4.2b are all also in the main Prepare menu. They may be needed if the tidying is too tricky for the special Tidy Daily Data dialogue. They are also for further checks. For example, for daily data there should be no duplicate days in the record for the same station. Section 4.8 gives an example where this is not the case.

+ ++++ + + + + + + + + + + + + +
Fig. 4.3e The Climatic > dates menuFig. 4.3f The dialogue to define a data frame as climatic
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTMLf1001c1.PNG
+

Next in the preparation is to check that the file has date columns that are ready for the subsequent analyses, Fig. 4.3e. This menu is a copy of the Prepare > Column: Date menu which can be used instead.

+

This leads to the Define Climatic Data dialogue shown in Fig. 4.3f. The example in Fig. 4.3f is for the 2 stations in Guinee, but using the second copy of the file, called Guinee2.rds. This was prepared earlier and saved as an RDS file. The fact it is ready for analysis is saved as part of the metadata for this data frame.

+

The subsequent dialogues in the climatic menu all assume the data have been defined as climatic, i.e. have used the dialogue in Fig. 4.3f. That’s the “climatic system” in R-Instat.

+

Some readers may be concerned that they are in a rush to analyse their data and were not prepared for these initial steps. However, if your data are in “good shape” then they take only a few minutes. If not, then in many analyses these “organising of data” steps do take the time. Once this has been done the analyses can proceed quickly.

+

These organising steps are only done the first time you use the data. Then save the data using File > Save As > Save Data As so the climatic information is remembered. You can therefore continue later, with these data, going straight to the subsequent items in the climatic menu.

+

If you choose, instead, to save the data frame using File > Export > Export Dataset this has the advantage that you can view and use the data in other software. The only problem is that the special climatic information from Fig. 4.3f isn’t saved. So, when you resume, then start with the Define Climatic Data dialogue.

+
+
+

5.4 Tidying the Data

+

You can ignore this section if your data are already in the shape discussed in Section 4.2. Often this is not the case.

+

The first example was previously prepared for the original Instat. It is 56 years of daily data from Samaru in Northern Nigeria. Use File > Open from Library. Choose Instat data, Browse to the Climatic directory, choose Original Climatic Guide Datasets. There untick the first option and choose the sheet called Samaru56, Fig. 4.4a.

+ ++++ + + + + + + + + + + + + +

Fig. 4.4a Open Samaru56

+

File > Open from Library > Instat > Browse > Climatic

Fig. 4.4b The “shape” of the Samaru56 data
+

The data are shown in Fig. 4.4b. They are from 1928 and each year is in a separate column. All columns are of length 366, in Fig. 4.4b, and there is a special code for February 29th in non-leap years.

+ ++++ + + + + + + + + + + + + +

Fig. 4.4c Tidying the Samaru data

+

Climatic > Tidy and Examine > Tidy Daily Data

Fig. 4.4d Issues in the data – no surprises
+

Use Climatic > Tidy and Examine > Tidy Daily Data and complete the dialogue as shown in Fig. 4.4c. This will not work, because we know, from Fig. 4.4b, that there are values on invalid dates, i.e. on Feb 29 in non-leap years. The results are in Fig. 4.4d. We see that day 60 (which we knew about) is the only problem. So we can proceed.

+

Return to the dialogue in Fig. 4.4c, tick the option above to ignore data on invalid dates. Press Ok again.

+ ++++ + + + + + + + + + + + + +
Fig. 4.4e Samaru data reshaped

Fig. 4.4f Using the date variable

+

Climatic > Dates > Use Date

{width=“2.555686789151356in” he ight=“3.7988068678915137in”}
+

The results are in Fig. 4.4e. The tidy data now has 20454 rows (days). Also, as shown in Fig. 4.4e is that there is no longer any need for a special code for February 29th in non-leap years.

+

The date column has been included in the data in Fig. 4.4e. The next step is the Climatic > Dates > Use Date dialogue, completed as in Fig. 4.4f. This adds 4 new columns to the data file. We then do some housekeeping, with Right-Click and Reorder Columns to give the data as shown in Fig. 4.4g.

+ ++++ + + + + + + + + + + + + +
Fig. 4.4g Data ready to be defined as climatic

Fig. 4.4h Defining the data as climatic

+

Climatic > Define Climatic Data

{width=“2.641606517935258in” h eight=“2.5361253280839895in”}
+

Now use Climatic > Define Climatic Data. The dialogue fills automatically which is a good sign. The Check Unique also indicates the Date column can be a key field. Press Ok and the data are now ready for the analysis in R-Instat. They can be saved as an RDS file and/or exported as a csv file.

+

These steps should not have taken long. But this was a single element (rain) from a single station.

+

A second example is data from Garoua, Cameroon. The rainfall first, and initially in Excel, Fig. 4.4i.

+ +++ + + + + + + + + + + +
Fig. 4.4i Rainfall data from Garoua
+

There are (at least 4 complications with these data, compared to the shape we would like.

+
    +
  1. There are some trace values, given as TR in the data, Fig. 4.4i

  2. +
  3. Each year is on a separate Excel sheet.

  4. +
  5. There are summary values, i.e. there are daily data and analysed data together in Fig. 4.4i.

  6. +
  7. The months “go across”.

  8. +
+

We change the trace issue in Excel. They are rare and only up to 2005. R-Instat does not (yet) cope with trace[^16]. We choose to replace the TR by 0 in each sheet. This is easily done in Excel. The data are saved as “Garoua Daily Rainfall data 1999-July2013NOTR.xlxs”.

+

In R-Instat save any files you wish, then use File > Close Data File to clear your data.

+

Then use File > Open from Library > Instat file, Browse, Climatic, Cameroon. Open the Garoua rainfall file with the TR removed, Fig. 4.4j.

+ ++++ + + + + + + + + + + + + +
Fig. 4.4j Importing the Garoua rainfallFig. 4.4k Complete the importing dialogue
+

Click to select all the sheets, and to import only the first 31 data rows, Fig. 4.4k. Press Ok.

+

The 15 Excel sheets have imported into 15 R data frames, Fig. 4.4l and we check quickly that each has the 31 rows and 13 columns. Also, that all the columns are numeric. All seems alright. The next step is to append the years together.

+ ++++ + + + + + + + + + + + + +
Fig. 4.4l The Garoua rainfall data imported

Fig. 4.4m Appending the years

+

Climatic > Tidy and Examine > Append

+

Use Climatic > Tidy and Examine > Append and use all the sheets, Fig. 4.4m. Press Ok.

+

The 15 years of data are now in a single data frame, Fig. 4.4n, and the Append dialogue has added an extra variable that contains the Year. We need the year, but it is “hidden” inside X2013.Stats”, etc. The next dialogue is in Prepare, rather than Climatic.

+

Use Prepare > Column: Text > Transform and complete the dialogue as shown in Fig. 4.4o

+ ++++ + + + + + + + + + + + + +
Fig. 4.4n Data in a single data frame

Fig. 4.4o Extract the Year number

+

Prepare > Column: Text > Transform

+
+

+
C:\Users
+~1\AppData\Local\Temp\S NAGHTML109fd672.PNG
+
+
+

This adds a new column called yr, Fig. 4.4p.

+ ++++ + + + + + + + + + + + + +
Fig. 4.4p The year is now available

Fig. 4.4q Sort the data using the year column

+

Right-click > Sort or Prepare > Data Frame > Sort

+
+

+
C:\Users\R OGERS~1\AppData\Local\Temp\SN AGHTML10a74ad5.PNG
+
+
+

Nearly there. Use Climatic > Tidy and Examine > Tidy Daily Data as shown in Fig. 4.4r. Earlier, in Fig. 4.4c, each year was in a column. Now each month is in its own column. Complete Fig. 4.4r as shown. As with the first run earlier (Fig. 4.4c) we first check on any errors, rather than simply ignoring them.

+ ++++ + + + + + + + + + + + + +

Fig. 4.4r Tidy the daily data

+

Climatic > Tidy and Examine > Tidy Daily Data

Fig. 4.4s An error is reported. The yr column should be numeric
{width=“2.59626968503937in” hei ght=“0.6789588801399825in”}
+

There is an error! This can happen. Reading the message is says the “year column must be numeric”.

+

Looking back to Fig. 4.4p we see the year column is given as yr (c), so it is a character, or text column. So right-click and change it to numeric. Then return to the dialogue in Fig. 4.4r and press Ok again.

+ ++++ + + + + + + + + + + + + +
Fig. 4.4t Some issues with the dataFig. 4.4u The tidy Garoua data – at last!
+

The results are in Fig. 4.4t. Our troubles are not over, because we learn there are 8 non-existent days with rainfall. Fortunately, most have zero and this was probably just a simple error. But the data shows there was 13.7mm on 31 September 2006, and this is a puzzle. Unfortunately, we have no way of checking this value now. So, we return to the dialogue in Fig. 4.4r and change the options to ignore these days. The result is in Fig. 4.4u.

+

If you now wish to proceed with the analysis of the rainfall data, then the next steps are just the same as for the Samaru data, i.e. first the Climatic > Dates > Use Date dialogue, Fig. 4.4f and then the Climatic > Define Climatic Data, Fig. 4.4h. However, we may first want to reorganise the Tmax and Tmin data, and then merge the 3 elements, before defining the climatic data. We leave this largely as an exercise but provide a few hints below.

+ ++++ + + + + + + + + + + + + +
Fig. 4.4v Garoua Tmax dataFig. 4.4w A problem with the data
+

Part of the Tmax data are shown in Excel in Fig. 4.4v. There are again multiple sheets and this time each column is a day of the month. So, there are now 31 columns of data. This is the third option, when using the Climatic > Tidy and Examine > Tidy Daily Data dialogue. For the Samaru data, the years were in separate columns in Fig. 4.4c, and the months in Fig. 4.4r. This time it is the day of the month. That is quite a common layout.

+

On importing all the data for Tmax there is a common problem on the sheet called Page 10. The immediate indication is that some values in X25 (25th of the month) have many decimals. This is because the column name is X25 (c), so it is a character or text column and not numeric. This is because one value is given as 35.B. Perhaps it should be 35.8?

+

Hence note all the columns in Page 10 that are text columns. These are easily corrected in Excel. Then the tidying of the data follows similar steps to that for the rainfall.

+

Once the Tmax and Tmin data have been tidied, the Climatic > Tidy and Examine > Merge dialogue is used to merge the elements into a single data frame.

+
+
+

5.5 Transferring data from Climsoft

+

Climsoft is a comprehensive system for the entry and management of climatic data. The main menu is shown in Fig. 4.5a. It is designed for the entry (or transfer) of climatic data of any sort. It is also particularly useful for capturing and managing data from automatic stations.

+

It also includes facilities for the scanned paper records and hence facilitates the checking of the computerised data against the originals.

+

CLIMSOFT has its own products but is also designed to work smoothly with R-Instat. Hence R-Instat can produce products and applications for CLIMSOFT.

+ +++ + + + + + + + + + + +
Fig. 4.5a The main CLIMSOFT menu
+

There are two ways to transfer data from Climsoft into R-Instat. If Climsoft is on your machine, or is available from your machine, then R-Instat can read the Climsoft database directly. Otherwise Climsoft can export tidy data that is in the form that is easily used by R-Instat. Both methods are shown here.

+

Use Climatic > File > Climsoft to transfer data directly from a Climsoft database, Fig. 4.5b.

+ ++++ + + + + + + + + + + + + +

Fig. 4.5b Import data from Climsoft

+

Climatic > File > Climsoft

Fig. 4.5c Connect to the database
+
+

+
C:\Users
+~1\AppData\Local\Temp\S NAGHTML117998d8.PNG
+
+
+
+

+
C:\Users\ROGERS~1\App Data\Local\Temp\SNAGHTML117 f6eae.PNG
+
+
+
+
+

+
C:\Users\ROGERS~1\App Data\Local\Temp\SNAGHTML118 11950.PNG
+
+
+

In Fig. 4.5b Click on the Establish Connection button to give the screen shown in Fig. 4.5c. This is already set to the main database, so you probably do not need to change that name. We chose to add _test_, Fig. 4.5c to use the tutorial database. Then click on Enter Password and enter your Climsoft password shown at the bottom of Fig. 4.5c.

+

The sub-dialogue now says Connected, Fig. 4.5d and you can press Return.

+ ++++ + + + + + + + + + + + + +
Fig. 4.5d ConnectedFig. 4.5e Transfer just the station data
+

The main dialogue, in Fig. 4.5e now has all the station identifiers. We choose them all and press Ok.

+ ++++ + + + + + + + + + + + + +
Fig. 4.5f Station data imported from ClimsoftFig. 4.5g Add observation data
+

This gives the station information in Fig. 4.5f for all 122 stations in the tutorial database.

+

Now return to the Climsoft dialogue and tick the box for the observation data. Now the Elements are chosen, and we have selected Tmax, Tmin and rainfall in Fig. 4.5g. The Start Date and End Date are left blank so all the data is transferred.

+ ++++ + + + + + + + + + + + + +
Fig. 4.5h The data are imported

Fig. 4.5i Add a Date column

+

Climatic > Dates > Make Date

+

The data in R-Instat are in Fig. 4.5h. There are 6 columns, first the station, then the element given in 3 different ways, then the date and finally the data.

+

The date column is a date-time variable, because the data may be sub-daily. Use the Climatic > Dates > Make Date dialogue as shown in Fig. 4.5i. This adds an R date column.

+

Had we exported just a single element then the data would now be almost ready. As in Section 4.4, just use Climatic > Dates > Use Date and then Climatic > Define Climatic Data.

+

However, as we imported 3 elements (Tmax, Tmin and Rain) we have one further step, because they are currently all in a single column. They need to be in separate columns.

+

First use Right-click on one of the element columns, Fig. 4.5j, and convert it to a factor column.

+ ++++ + + + + + + + + + + + + +
Fig. 4.5j Make the Element column a factor

Fig. 4.5k Unstack the data on the 3 elements

+

Climatic > Tidy and Examine > Unstack

{width=“2.6682010061242343in” h eight=“2.0810804899387576in”}
+
+

+
C:\Use rs\ROGERS~1\AppData\Local\Temp
+120afa21.PNG
+
+
+

Use Climatic > Tidy and Examine > Unstack and complete the dialogue as shown in Fig 4.5k. The data are in Fig. 4.5m and are in just the right “shape” for R-Instat.

+ ++++ + + + + + + + + + + + + +
Fig. 4.5l The data ready for R-InstatFig. 4.5m Climsoft dialogue to export data
+

The second way is for data to be exported from Climsoft that can then be imported into R-Instat.

+

For this option the CLIMSOFT user starts with the Products option in Fig. 4.5a. The products menu is shown in Fig 4.5m. Select Data as the Product category and Daily, as shown in Fig. 4.5m.

+ +++ + + + + + + + + + + +
Fig. 4.5n Screen to export daily data from Climsoft
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTML15618e97.PNG
+

The resulting screen in Climsoft is shown in Fig. 4.5n. Complete it as shown and then press to Start Extraction, Fig. 4.5n. The resulting data are shown in Fig. 4.5o.

+ ++++ + + + + + + + + + + + + +
Fig. 4.5o Ooops!
+
+
+

5.6 Satellite data

+
+
+

5.7 What can go wrong?

+

Nothing may go wrong in organising your data ready for analysis. Even so, it is often frustrating, particularly to those who are relatively inexperienced in these tasks, that the organising stage takes so long, and is also often quite difficult. What can we say except perhaps “Welcome to the real world”!

+

But it is annoying that these steps come first and may be more difficult and time-consuming that the subsequent analyses. These problems are general and are not limited to climatic data, but that may be small comfort as you hoped to proceed quickly and then have more time for other activities!

+

In addition, things may take longer, because of additional problems in the data. We look at some examples in this section. You need to become a super-critical data detective. Here we show how and why.

+

The first problem is very common. It was earlier shown in Fig. 4.4w and we repeat it in Fig. 4.7a. A column that should be numeric has a (c) after it, in R-Instat.

+ ++++ + + + + + + + + + + + + +
Fig. 4.7a Numeric data imports as character (text)Fig. 4.7b Filter in Excel to see the problem
+

This indicates it is a character, or text, column. The “cure” is usually to return to Excel and correct the error there. In Excel, once you know where to look, then one way is to set up a filter and then check on the column that R-Instat has shown has the problem. In Fig. 4.7b we filter on column Z for the 25th and find the bottom entries are not in order. A more careful look shows the bottom value to be 38.B when it possibly should have been 38.8. Other character columns on this same sheet were when a number was typed with a space and no decimal, e.g. 38 6 instead of 38.6 on the 10th of the month.

+

A check that is often useful is Climatic > Tidy and Examine > One Variable Summaries. This is the Examining part of this menu. To show its use, look again at the Dodoma data that was introduced in Chapter 2. So, File > Open from Library > Instat Data > Browse > Climatic Directory > Instat Guide datasets > Dodoma.

+

The data are shown in Fig. 4.7c. On row 120 make a deliberate mistake, i.e. double click on April 30 and change the 30 into 31. That’s not a possible day!

+ ++++ + + + + + + + + + + + + +
Fig. 4.7c Dodoma with an error added

Fig. 4.7d Add a date column

+

Climatic > Dates > Make Date

{w idth=“2.5625590551181103in” he ight=“2.680066710411199in”}
+

Add a date column using Climatic > Dates > Make Date and complete the dialogue as shown in Fig. 4.7d.

+ ++++ + + + + + + + + + + + + +

Fig 4.7e Examine the data

+

Climatic > Tidy and Examine > One Variable Summarise

Fig. 4.7f Resulting summaries
+

Use Climatic > Tidy and Examine > One Variable Summarise as shown in Fig. 4.7e. The results are in Fig. 4.7f.

+

Examine these results for each column in turn. The results are encouraging. The Year goes from 1935 to 2013. The day of the month is from 1 to 31 – which is fine.

+

The rainfall is from 0 (zero) to 119.8. Sometimes it is from -9999 in which case the missing values need to be recoded[^17]. Here they seem fine, and it is encouraging tht there are less than 100 missing values overall. Similarly, the limits for Tmax, Tmin and Sunh all seem reasonable.

+

The last column is the Date and there is one missing value – as we know, because this time we caused it! There should not be missing values in the date column. You need to do something about it.

+

The first step in solving the problem (assuming we don’t know it) is to filter the data, choosing just the days when Date1 == NA. To do this, right-click in any column and choose Filter, Fig, 4.7g.

+ ++++ + + + + + + + + + + + + +

Fig. 4.7g Filter to locate the problem

+

Right-click > Filter

Fig. 4.7h The Filter sub-dialogue
+

In the Filter dialogue, choose the button to Define New Filter, and complete the sub-dialogue as shown in Fig. 4.7h. Click to Add Condition then Return and Ok.

+

The filtered data, Fig.

+ +++ + + + + + + + + + + +
Fig. 4.7i The filtered data
+

This shows it is row 120 that is causing the problem. The correction can be made immediately, or you may like to remove the filter first and then check that there was no value on April 30 in that year.

+

Data from Thaba Tseka in Lesotho initially seemed easy to process. Use File > Open from Library > Instat > Browse > Climatic > Lesotho and the file Thaba_Tseka_Original.

+ +++ + + + + + + + + + + +
Fig. 4.7j The Thaba-Tseka rainfall data
+

The data have been exported from a previous version of Climsoft (see Sections 1.6 and 4.5). They include a lot of station details but seem in exactly the right shape to make quick progress.

+ ++++ + + + + + + + + + + + + +

Fig. 4.7k Add a date column

+

Climatic > Dates > Make Date

Fig. 4.7l Define Climatic Data

+

Climatic > Define Climatic Data

{ width=“2.5451115485564304in” h eight=“3.125343394575678in”}
+

Define a date column from Climatic > Dates > Make Date, Fig. 4.7k, and then check, with Climatic > Tidy and Examine > One Variable Summarise, as in Fig. 4.7e. All seems fine so far.

+

So, the last step. Use Climatic > Define Climatic Data as in Fig. 4.7l. Complete the year, month, day fields, as the names are not recognised automatically. Also, obs is the rain column.

+

Finally check for uniqueness, Fig. 3.7m.

+ ++++ + + + + + + + + + + + + +
Fig. 4.7m A problem - duplicates

Fig. 4.7n Check on the Duplicates

+

Climatic > Tidy and Examine > Duplicates

+
+

+
C:\Users\ROGE RS~1\AppData\Local\Temp\SNAG HTML199cd2c0.PNG
+
+
+

The message in Fig. 4.7m indicates a problem. There are apparently duplicate values in the data.

+

As suggested in Fig. 4.7m use Climatic > Tidy and Examine > Duplicates and complete as shown in Fig. 4.7n. This produces a new logical column, that is first examined through Climatic > Tidy and Explore > One Variable Summarise, Fig. 4.7o.

+ ++++ + + + + + + + + + + + + +

Fig. 4.7o Find how often there are duplicates

+

Climatic > Tidy and Examine > One Variable Summarise

Fig. 4.7p The results
+

If there were no duplicates, then this column would be FALSE all the time. We learn, from the result in Fig. 4.7p that it is TRUE on 364 rows. There are then at least 2 values for each day, so up to 182 days have duplicate values.

+ ++++ + + + + + + + + + + + + +

Fig. 4.7r Filter sub-dialogue

+

Right Click > Filter > Define New Filter

Fig. 4.7s The filtered data
+

Use the right-click and Filter dialogue. Then Define new Filter and complete the sub-dialogue as shown in Fig. 4.7r. Then Return, and Ok to show the filtered data in Fig. 4.7s.

+

The possible problem becomes clearer from an examination of the data from the first 4 days. They are consecutive, from 18th to 21st January 1987. It looks as though a value might have been put on one day, and then corrected to the previous day. But both versions of the data have been exported from Climsoft, and without any indication of which version is the more recent.

+

Now, having been a data detective – it is probably time to go back to the source of the data. This could be to check against the paper copy, or to see whether the data could be exported without the duplicates[^18].

+
+
+

5.8 What’s next?

+

I would like to describe some of the sets of software to be used in later chapters – in addition to those so far. In particular I am looking for examples from countries (in addition to Kenya) where there could be quite a number of stations. One possibility is Rwanda, where we have permission to use 4 stations. I wonder about Germany – partly because of its potential for comparing satellite and station data. Lesotho – I could ask, and Guyana. Later possibly Haiti, but the data aren’t quite ready yet. Maybe Ghana, we currently have permission to use 2 stations.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_5_Quantity_and_quality.html b/_book/Chapter_5_Quantity_and_quality.html new file mode 100644 index 0000000..7b4f9c2 --- /dev/null +++ b/_book/Chapter_5_Quantity_and_quality.html @@ -0,0 +1,1281 @@ + + + + + + + + + +6  Quantity and quality? – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

6  Quantity and quality?

+
+ + + +
+ + + + +
+ + + +
+ + +
+

6.1 Introduction

+

Starting from this Chapter, we assume the data for analysis are “tidy” and are defined as a climatic data frame in R-Instat.

+ ++++ + + + + + + + + + + + + +
Fig. 5.1a The Check Data menu
+

This chapter shows different ways to now look at the data. For many applications this stage can be done quickly, and the work then proceeds with the analyses described in the following chapters. But omit this stare at your peril. We often find users have gone immediately to the analyses they need, only to have to return later to look more critically at their data.

+

From now on, in this guide, we will also assume that you are reasonably comfortable in your use of R-Instat. In Section 5.2 we outline what that means.

+

Section 5.3 shows how to get a quick inventory of the data. We also consider how to tabulate and graph the primary, usually daily, data. Then Section 5.3 examines the data via boxplots. Boxplots are primarily an exploratory tool, but can also be used for presentation graphs.

+

Finally, we consider some formal quality control checks on the data. What oddities might be in the data and what can be done about them.

+
+
+

6.2 An inventory – what data do I have?

+

Open the Rwanda workshop data, Fig. 5.2a. This is from 4 stations and has already been defined as climatic data as described in Chapter 4.

+

Use the first menu item in the Climatic > Check Data menu, Fig. 5.1a to choose an Inventory plot, Fig. 5.2b.

+

In Fig. 5.2b the Data and the Station receivers are completed automatically. This is because the data frame was defined as Climatic with these components. If not, then usually:

+
    +
  1. The data frame was not yet defined as climatic.

  2. +
  3. You are in the wrong data frame – change it in the data selector in the dialogue in Fig. 5.2b.

  4. +
+ ++++ + + + + + + + + + + + + +

Fig. 5.2a Rwanda workshop data

+

File > Open from Library > Instat > Climatic > Rwanda > Rwanda Workshop Data.RDS

Fig. 5.2b Inventory Dialogue

+

Climatic > Check Data > Inventory

+

In Fig. 5.2b, add the 3 data columns for TMAX, TMIN and PRECIP and press Ok. The resulting inventory is in Fig. 5.2c.

+ ++++ + + + + + + + + + + + + +
Fig. 5.2c Default inventory plotFig. 5.2d Facet by element
+

Experiment with the display. For example, in Fig. 5.2d the Facet By, in Fig. 5.2b has been set to be the Element, rather than the Station.

+

One oddity in the data in Fig. 5.2c and 5.2d was the gap in the rainfall records in the 1980s at 2 of the stations. It is quite common to have rainfall records in the database without the corresponding temperature records, but the reverse is odd. The data were exported from the Clinsoft database and it was not clear why these data were absent. That is the idea of being able to produce an inventory.

+

The value of the inventory presentation is that the information on many stations and elements can be shown together. However, the graphs show just when data was present or absent. They do not show the actual values.

+

They can be supplemented by simple time series plots[^19].

+ +++ + + + + + + + + + + +
Fig. 5.2e Rwanda temperature data
+

These plots give a useful indication of the data for analysis. One period in Kamembe Airport is marked in Fig. 5.2e as a cause for concern. In Fig. 5.2f the interactive plotting, using Describe > View Graph is used to examine this part of the graph in more detail.

+ ++++ + + + + + + + + + + + + +
Fig. 5.2f Examine the temperature data in more detail
+

Fig 5.2g shows the same time series graph for the rainfall data at each site. There is a dry period in the year and hence the different years are clearly visible in these graphs.

+ +++ + + + + + + + + + + +
Fig. 5.2g Rainfall data at the four stations
+

The next dialogue is Climatic > Check Data > Display Daily, Fig. 5.2h. This produces a lot of output, so we first choose the filter the data to just the first station, Gisenyi[^20].

+

When using this dialogue the items on the right (from Station down to Year) are completed automatically. If not, then you are probably in the wrong data frame

+ ++++ + + + + + + + + + + + + +

Fig. 5.2h Examining daily values

+

Climatic > Check Data > Display Daily

Fig. 5.2i One year of the data
{width=“2.6560739282589676in” height=“3.423170384951881in”}
+

. Complete the dialogue in Fig. 5.2h as shown. We have chosen to recode zero rainfalls to “—”. This is an option so the rainy days are displayed more clearly in Fig. 5.2i. It indicates the dry period in the year is usually June and July. The dry period was a feature of Fig. 5.2g.

+

We have now almost come “full circle”. In Fig. 4.4i the rainfall data from Garoua, Cameroon, were supplied for analysis arranged in a similar way to the data now shown in Fig. 5.2i. This is a very clear and sensible layout for the data, but to examine, not to analyse.

+

The second tab in the same Climatic > Check Data > Display Daily dialogue gives a simple graphical display of the data “by year”. An example of the resulting display is in Fig. 5.2j. The results show both the missing periods as well as the dry parts of the year.

+ +++ + + + + + + + + + + +
Fig. 5.2j. Daily rainfall for one station
+
+
+

6.3 Using boxplots to check and present data

+

Open the Dodoma data, using the RDS file from the Climatic > Tanzania directory. This is already set as a climatic data frame as described in Chapter 4. It shows data from a single site, with multiple elements.

+

Most of the examples in this Section use the special Climatic > Check Data > Boxplot dialogue. Boxplots are also available through the main Describe menu (Describe > Specific > Boxplot). The results are the same, but the Climatic Boxplot dialogue is usually simpler to complete.

+ ++++ + + + + + + + + + + + + +

Fig. 5.3a Climatic boxplot dialogue

+

Climatic > Check Data > Boxplot

Fig. 5.3b Seasonal pattern of sunshine hours
+

The results, in Fig. 5.3b Show only one value, in September, is odd in being longer than the day length. Most days in the year have many sunshine hours, and the median is more than 10 hrs in the data for 6 months, from June to November.

+

Finding just a single obvious oddity in Fig. 5.3b out of the 20,450 observations is a measure of the high quality of these data. We look in more detail at how to check for outliers in Sections 5.4 and 5.5. As a practical measure, setting the value to missing, would hardly affect the results and may be sensible if the non-computerised records are not easily available.

+

As well as being a very useful exploratory method, boxplots are also often used in the methods section of reports and papers, to present the data being analysed. Thus they can be presentation as well as exploratory graphs.

+

Fig. 5.2b shows the seasonal pattern for the sunshine data. Two simple changes to the dialogue in Fig. 5.3c show the time series, and hence a possible trend, is shown in Fig. 5.3d. The second change in Fig. 5.3c is to use the Variable Width option, to see which years have many missing values.

+ ++++ + + + + + + + + + + + + +
Fig. 5.3c Change to show the time seriesFig. 5.3d
+

It is possible to show both the seasonality and the time-series together, as shown in Fig. 5.3e. The resulting figure is a bit crowded if months are used, so the graph is displayed for each of 4 quarters[^21].

+ +++ + + + + + + + + + + +
Fig. 5.3e
+

An example in Chapter 2, Section 2.4, compared the Dodoma station data on sunshine hours with the estimated values from the satellite data. It is important to check the quality of the data, whatever the source. Hence Fig. 5.3f shows the seasonal pattern of the satellite estimates of sunshine hours.

+ ++++ + + + + + + + + + + + + +
Fig. 5.3f Satellite estimates of sunshine at DodomaFig. 5.3g Suspect values mainly in early years
+

Comparing Fig. 5.3f with Fig. 5.3b (the station data) shows encouragingly that the distributions seem very similar. However, there are also a number of values that are clearly longer than the day length at Dodoma. From discussion with the providers of the data (EUMETSAT) we learned that the early years may have radiation values (and hence sunshine hours) that are less reliable. This is confirmed through the time series plot for the satellite data, in Fig. 5.3g.

+ ++++ + + + + + + + + + + + + +
Fig. 5.3hBoxplots for the rainfallFig. 5.3i Rainfall on rain days
+

Boxplots can be used for the rainfall data, as shown in Fig. 5.3i. The data plotted are just for rain days, with the variable width of each box indicating the number of rain days. The plot shows the unimodal pattern of the rainfall from November to April[^22].

+ ++++ + + + + + + + + + + + + +

Fig. 5.3j Adding a second layer to the plot

+

Plot Options > Layers > Add

Fig. 5.3k Tmax and Tmin plotted together
+

The Dodoma data includes Tmax and Tmin and these can, if required, be shown together on the same graph. An example is in Fig. 5.3k and one of the sub-dialogues to facilitate this graph is shown in Fig. 5.3j[^23] One feature in Fig. 5.3k is the larger variability of the Tmax data in the rainy season, i.e. from November to April.

+

Graphs, once saved, can be also combined, using Describe > Combine Graphs, as shown in Fig. 5.3l, with all 4 elements shown in Fig. 5.3m

+ ++++ + + + + + + + + + + + + +

Fig. 5.3l Combining graphs

+

Describe > Combine Graphs > Options

Fig. 5.3m The 4 elements in Dodoma
+

Other displays of these data are also possible. In Fig. 5.3k we observed the larger variation of the Tmax data in the rainy months (compared to both Tmin, and to Tmax in the dry months). This feature is shown more clearly through density plots as seen in Fig. 5.3p. This uses a dialogue from the ordinary Describe menu. The results in Fig. 5.3p indicate a roughly normal-type shape for the data, though with a slightly longer tail for Tmax in the rainy season[^24].

+ ++++ + + + + + + + + + + + + +

Fig. 5.3o Producing density plots

+

Describe > Specific > Histogram

Fig. 5.3p Density plots for Tmax and Tmin by month
C:\Users\ROGERS~1\A ppData\Local\Temp\SNAGHTML 98d61a3.PNG{width=“2.7408552055993in” h eight=“2.7116983814523183in”}
+

Often the data frame will include data from more than one station. This is illustrated briefly with the Rwanda data, from the library, that is from 4 stations. An example is shown in Fig. 5.3q. It shows relatively little seasonality, because Rwanda is close to the equator. One feature of the data is the higher variability and lower temperatures at the 4th stations, which is at a higher altitude compared to the other 3. For this presentation, in the Climatic > Check Data > Boxplot dialogue, the option is then used to facet by the Station.

+ +++ + + + + + + + + + + +
Fig. 5.3q Example for multiple stations, Tmin for 4 stations in Rwanda
+
+
+

6.4 Quality control of temperature (and other) data

+

The graphical displays in the previous 2 sections have indicated observations that need checking. The dialogue Climatic > Check Data > Temperatures, Fig. 5.4a, is designed to facilitate this checking. It has been designed specifically for temperature records, but with a flexibility to permit it to be used also for other elements.

+

Fig. 5.4 has been completed for the Dodoma data. Initially with a single element (Tmax).

+ ++++ + + + + + + + + + + + + +

Fig. 5.4a

+

Climatic > Check Data > QC Temperatures

Fig. 5.4b
+
+

+
C:\Users\ ROGERS~1\AppData\Local\Temp\S NAGHTML13ef1d27.PNG
+
+
+

From the previous Section, Fig. 5.3k, Tmax at Dodoma is rarely less than 20°C, and could usefully be checked each time. So, the first illustration of the dialogue uses the limits 20 and 40 for Tmax.

+

The results are in Fig. 5.4b. R-Instat has filtered the Dodoma data and copied the “problem” rows into a new data frame. It shows there were just 13 occasions with Tmax <=20 in the record. As shown in Fig. 5.4b, they include 9th October 1989, when Tmax was equal to Tmin at 15.6°C.

+ ++++ + + + + + + + + + + + + +
Fig. 5.4c The available checksFig. 5.4d Checking for consecutive values
+

More checks on the data are available, as shown in Fig. 5.4c. They are considered in turn:

+
    +
  • Acceptable range for each element, as shown in Fig. 5.4a and b. This is very simplistic, because it does not allow for seasonality in the data.

  • +
  • Same examines consecutive days and, with the default setting, indicates whenever 4 days or more have the same value. The idea is that when many consecutive values are identical, it is possible they were simply copied in, and not measured on each day. An example of the results is in Fig. 5.4e.

  • +
  • Jump notes whenever 2 consecutive days are different by more that the threshold amount. The default is that any difference (jump) of more than 10°C deserves further examination.

  • +
  • Difference is only available when 2 elements have been included, usually Tmax and Tmin. The default is to note whenever Tmax <= Tmin, but the difference could be altered.

  • +
  • Outlier is the most complex and relates the value to the boxplot outliers. A boxplot is conceptually fitted for each month at each station and the outliers are then noted. The traditional limit for boxplots has a coefficient of 1.5[^25], as used in all the figures in Section 5.3. We find, with the large samples in climatic data, this gives too many outliers, many of which are not particularly surprising. We therefore usually use 2.5 or 3 (instead of 1.5) as the multiplying value.

  • +
+

You may choose to do multiple checks at the same time. We consider them in turn. Each time the dialogue is used, it produces a new data frame.

+

In Fig. 5.4d we specify the Same check, for both Tmax and Tmin together.

+ ++++ + + + + + + + + + + + + +
Fig. 5.4e Results from the Same checkFig. 5.4f Jump of more than 10°C
+

The results are in Fig. 5.4e. The first occurrence was in July 1965 when Tmax was 26.0°C on 4 consecutive days, while in October 1969 Tmin was consecutively 17.4°C. The results, in Fig. 5.4e also include further columns to note how many consecutive days and whether they were for Tmax or Tmin. In this case there were only 7 occurrences of the event, giving 28 rows in total, so these extra columns are not so important.

+

Fig. 5.4f shows the results from the test for jumps of more than 10°C. Here the logical column was always TRUE for Tmax, i.e. this event did not occur for Tmin. Sometimes Tmax drops because of rainfall, and this column is automatically included in the filtered data. The results in Fig. 5.4f include the size of the jump.

+ ++++ + + + + + + + + + + + + +
Fig. 5.4g Tmax within 1°C of TminFig. 5.4h Outiers from corresponding boxplots
+

In the next check, the limit is set to 1°C. There are then, Fig. 5.4g, just 4 days when Tmax is within 1 degree of Tmin.

+

The final check is equivalent to the boxplot outliers. The threshold in producing Fig. 5.4h was set to 2.5 and there were still 150 outliers to investigate. There are effectively 4 tests here, i.e. whether either Tmax or Tmin are too low, or too high. These correspond to the settings of the logical columns in Fig. 5.4h. Thus the first 3 rows all indicate a low value of Tmax, while the 4th row is a low value for Tmin.

+

Readers may be concerned in having to check 150 values. Our view is that these data are of high quality. This is 150 values out of more than 40,000 (i.e. over 20,000 days for each of Tmin and Tmax), so less than 0.5% of the values to be checked! Not bad.

+
+
+

6.5 Quality control for rainfall records

+

The system for checking rainfall data is similar to that for the temperatures, described in Section 5.4.

+ ++++ + + + + + + + + + + + + +
Fig. 5.5aFig. 5.5b
+

We continue with the Dodoma data. Two checks are undertaken in the dialogue in Fig. 5.5a. First is to note all values more than 100mm and second is to note when any 2 consecutive non-zero values are the same.

+

Some of the results (after reordering columns for clarity) are in Fig. 5.5b. There are 83 rows of data, from 6 occasions with more than 100mm (all look plausible) and 38 occasions when 2 consecutive days had the same rainfall. Looking at the results in Fig. 5.5b, perhaps the low values e.g. 0.3mm on 2 consecutive days is not so surprising, but 19.2mm on both the 5th and 6th January 1967 deserves further investigation.

+ ++++ + + + + + + + + + + + + +
Fig. 5.5c Same values after a filterFig. 5.5d Checking for dry months
+

The data in Fig. 5.5b are just in an ordinary data frame, so we check more closely by filtering out the values of 1mm or less. The results are in Fig. 5.5c. There are just 16 occasions, most of which are shown in Fig. 5.5b with exactly the same amount on 2 days. One way this arises is when the data are computerised initially on the wrong day. They are then transferred to the previous day, but the original is not deleted. A check with the paper records is all that is needed.

+

The next option in Fig. 5.5a is called “Consecutive”. This checks on the number of consecutive rain days. In some places a large number is rare. But sometimes temperature columns may be entered mistakenly. This then appears as many consecutive “rain” days, with relatively similar amounts on the successive days.

+

The next option is called Dry Month and is shown in Fig. 5.5d. The explanation is given for Dodoma, where the rainy season is from November to April. The other months may be totally dry. If January (in the middle of the rainy season) is totally dry, then probably it was missing and recorded mistakenly as zero each day. What is more complicated is November (the usual start of the season) and April (the usual end). If November is totally dry, then it could be true and a late start to the season. Or the data are missing. The same goes for April.

+ ++++ + + + + + + + + + + + + +
Fig. 5.5eFgi. 5.5f
+

The results are in Fig. 5.5e. Right-click on the month column and use the Levels/Labels dialogue, Fig. 5.5f to give the results in Fig. 5.5g. This shows the zeros are primarily in November, but December is zero in 2 years. There are no zero months in January to April.

+

One way to find which years to investigate, is the make the year column in Fig. 5.5e into a Factor and then use the same Levels/Labels dialogue. The results are in Fig. 5.5h, showing the first years are 1935. 1936, 1943, while the frequency of 31 in 1952 idicates that was one of the years when December was zero.

+ ++++ + + + + + + + + + + + + +
Fig. 5.5g It is a November/December problemFig. 5.5hThese are the years
+

The final option is the outliers, using the limits from the skew boxplot. In Fig. 5.5i we omit the zero values and set the skewness weight to 3. This has identified just 3 possible outliers, and each is only just above the corresponding limit, see Fig 5.5j.

+ ++++ + + + + + + + + + + + + +
Fig. 5.5i Settings for the rainfall outliersFig. 5.5j Possible outliers from skew boxplot
+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_6_Preparing_summaries.html b/_book/Chapter_6_Preparing_summaries.html new file mode 100644 index 0000000..d1c6feb --- /dev/null +++ b/_book/Chapter_6_Preparing_summaries.html @@ -0,0 +1,1688 @@ + + + + + + + + + +7  Preparing summaries – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

7  Preparing summaries

+
+ + + +
+ + + + +
+ + + +
+ + +
+

7.1 Introduction

+

In this chapter and the next, we use the Climatic > Prepare menu to summarise data into a form ready for analysis and then present the results as graphs and tables. Here we consider monthly and annual summaries of rainfall, temperature and other elements. The next chapter uses similar ideas for more specialised summaries of the rainfall data, such as the start and length of the season.

+ ++++ + + + + + + + + + + + + +
Fig. 6.1aThe main climatic summary menuFig. 6.1b Presenting the summary
+

In Section 6.2 data from Ghana are used to illustrate the summary of rainfall data.

+

To be continued

+
+
+

7.2 Preparing the data

+

In the second tutorial (reference/link) we showed how to plot annual temperature data, after starting from the daily records. That was without making use of the special climatic menu. These ideas are repeated here and extended for rainfall. The climatic menu is used, and the example is with data from 2 stations. The first step is to prepare the data.

+

Use File > Open from Library > Instat > Browse > Climatic > Ghana and open the file called ghana_two_stations.rds, Fig. 6.2a. The data are from Saltpond, which is on the coast, with a bimodal pattern of rainfall, and Tamale, which is further North, and with unimodal rainfall. The rainfall starts in 1944 for each station. Other elements, Fig. 6.2a, start later.

+ ++++ + + + + + + + + + + + + +

Fig. 6.2a Data from 2 stations

+

File>Open from Library
+>Instat>Browse>Climatic>Ghana

Fig. 6.2b
+

The data is in the right shape and already has a date column.

+

First use Climatic > Dates > Infill, Fig. 6.2b, to check there are no missing dates. Some files simply omit the days when all data are missing.

+ ++++ + + + + + + + + + + + + +

Fig. 6.2c Infill missing dates

+

Climatic > Date > Infill

Fig. 6.2d Results from infilling
+

Complete the dialogue as shown in Fig. 6.2c and press Ok. The number of rows in the data increases slightly to 53297 and the output window states that just under 300 rows have been added.

+

Use Climatic > Tidy and Examine > One Variable Summarise and complete the dialogue as shown in Fig. 6.2e. The results are in Fig. 6.2f. They show no missing values for the date column (which is good and a relief), and very few missing rainfall days. Most of those were infilled. The other variables have reasonable values. Hence we proceed.

+ ++++ + + + + + + + + + + + + +

Fig. 6.2e Checking the data

+

Climatic > Tidy and Examine > One Variable Summarise

Fig. 6.2f Results
{ width=“2.6116010498687663in” h eight=“2.139025590551181in”}
+

Use Climatic > Date > Use Date, Fig. 6.2g. Then it is convenient to reorder the columns to put the date variables before the climatic data, Fig. 6.2h.

+ ++++ + + + + + + + + + + + + +

Fig. 6.2g Generate further date variables

+

Climatic > Date > Use Date

Fig. 6.2h Data

+

After Right-click > Reorder columns

{width=“2.626457786526684in” he ight=“4.1896883202099735in”}
+

Finally, in this preparation, use Climatic > Define Climatic Data. The dialogue should fill automatically as shown in Fig. 6.2i. Check that the data are unique and press Ok.

+ ++++ + + + + + + + + + + + + +

Fig. 6.2

+

Climatic > Define Climatic Datai

Fig. 6.2j A count column

+

Climatic > Prepare > Transform

+

Finally, a new step, because we would like to analyse the number of rain days as well as the rainfall totals. A new column, giving whether a day was rainy-or-not, is generated. We show two ways this new column can be generated.

+

The first way is simple, but it generates a complicated R command, because it is a special case of a more general function. Use Climatic > Prepare > Transform, and complete the dialogue as shown in Fig. 6.2j. This produces a new column, which takes the value 1 for each rain day, and 0 otherwise. We have explained in Chapter 2 why we use the seemingly odd value of 0.85mm as a threshold for rain[^26].

+

Now try the second method, which generates a very simple R command. It uses R-Instat’s powerful calculator, from Prepare > Column: Calculate > Calculations, Fig. 6.2k

+ ++++ + + + + + + + + + + + + +

Fig. 6.2k Using the calculator

+

Prepare > Column: Calculate > Calculations

Fig. 6.2l Using the additional logical keyboard
+

The resulting data are shown in Fig. 6.2m. The calculator has produced a logical column, while the transformation using Prepare > Transform has a column of 0 for dry and 1 for rain. There are the same in R as it interprets TRUE as a 1 and False as a zero.

+

They are now not both needed, so delete one of them. We have kept the logical column.

+ +++ + + + + + + + + + + +

Fig. 6.2m Data

+

After Right-click > Reorder columns

+
+
+

7.3 Annual summaries

+

The data are now ready to produce annual (or other) summaries. So, use Climatic > Prepare > Climatic Summaries. It should initially be as shown in Fig. 6.3a. (If not, then you might be in a different data frame, or you may not have followed the steps in the section above.)

+

We are going to produce the annual totals. Fig. 6.3a also indicates it is equally easy to produce the totals for any subset of the year.

+ ++++ + + + + + + + + + + + + +

Fig. 6.3a The climatic summary dialogue

+

Climatic > Prepare > Climatic Summaries

Fig. 6.3b The summaries sub-dialogue
+

In Fig. 6.3a add the rainfall column and then press the Summaries button. In the sub-dialogue untick the N Total, and keep the N Non Missing and the Sum as shown in Fig. 6.3b. Then press Return and Ok.

+

Now return to the dialogue and use the Rainday column instead of rainfall.

+

Also Press on the Summaries button again and untick the N Non Missing checkbox from Fig. 6.3b. Press Return and Ok again.

+ ++++ + + + + + + + + + + + + +
Fig. 6.3cFig. 6.3d
+

The results are in Fig. 6.3d. These data are now at the “year” levels and there are 146 rows, i.e. years, from the 2 sites together. We see that at Saltpond in 1944 the total rainfall was 724mm from 69 rain days. So, the mean rain per rain day is over 10mm and sometimes considerably so. For example, again from Fig. 6.3d in 1951 there was a total of 1428mm from 85 rain days.

+

There were some missing values in the data, but we defer a discussion of this topic to the next section. Here we have been conservative in that the annual totals have been set to missing if there were any days missing in that year.

+

Graphs of the data can now be produced. The PICSA project includes discussing time-series graphs with farmers. They must be simple to produce, but also very clear. The special dialogue for this is Climatic > PICSA > Rainfall Graph, Fig. 6.3e.

+

In Fig. 6.3e, check you are using the correct (yearly) data frame and complete it as shown. In the sub-dialogue, opt to add the mean line, but (at this stage) without a label.

+

In the sub-dialogue, click also on the Y-axis tab and set the lower limit to 0 (zero).

+ ++++ + + + + + + + + + + + + +

Fig. 6.3e PICSA-style rainfall graphs

+

Climatic > PICSA > Rainfall Graph

Fig. 6.3f Sub-dialogue to add lines
+ +++ + + + + + + + + + + +
Fig. 6.3g PICSA-style graph for 2 stations
+

It can be very useful for researchers and also intermediaries, to see results from multiple stations. This is easy with R-Instat, where they can be in the same data frame. Fig. 6.3h therefore shows another example, with a facetted graph for 12 stations from xxx.

+ + + + + + +
Fig. 6.3hPICSA-style rainfall graph for 12 stations from xxx
+
+

Graph to add

+

However, most farmers are particularly interested in the results from a single station that is as close as possible to their location. Hence once you have the appropriate graph for multiple stations, you can then filter the data to look at each station in turn. Filtering is either done from the right-click menu or from within each dialogue.

+

Return to the previous PICSA dialogue and choose Data Options to give the sub-dialogue shown in Fig. 6.3i

+ ++++ + + + + + + + + + + + + +

Fig. 6.3i Define a filter

+

Climatic > PICSA > Rainfall Graph > Data Options

Fig. 6.3j Choose a single station
{width= “2.0657567804024497in” height=” 2.5604385389326336in”}
+

Choose to define a new Filter and complete the resulting sub-dialogue as shown in Fig. 6.3j. As shown in Fig. 6.3j, give the filter the same name as the station. That will make it easy later.

+

Now return to the PICSA dialogue. Choose the sub-dialogue and change the lines to give terciles with labels. The resulting graph for just Saltpond is in Fig. 6.3k.

+ ++++ + + + + + + + + + + + + +
Fig. 6.3k Single station with tercilesFig. 6.3l Graph for the second station
+

Repeat the filtering exercise above to set a filter for Tamale. The resulting graph with the line for the mean is in Fig. 6.3l.

+

Similar graphs for the number of rain days is also sometimes needed for PICSA. They are now very easy to produce.

+

Return to the Climatic > PICSA > Rainfall Graph dialogue, and simply change the Y-variable,

+ ++++ + + + + + + + + + + + + +
Fig. 6.3mFig. 6.3n
+

Return to the dialogue again, press Data Option and choose the filter you called Saltpond, Fig. 6.3o. You don’t need to define the filter as that was done earlier. You can just keep using it.

+ ++++ + + + + + + + + + + + + +
Fig. 6.3oFig. 6.3p
+

Finally, in this section, we stress that the idea of the climatic menu is simply to make it even easier to do common climatic analyses. By “even easier” we mean easier than using the main dialogues in R-instat. If what you would like to do is not (yet) possible with the climatic menu it may still be possible with the ordinary use of R-Instat[^27]. It is important that you remain in charge and are not limited by the particular dialogues. As an example, suppose you would like to fit a trend line to the rainfall data. The PICSA graphs permit horizontal lines, but not trend lines. Perhaps the last graph, Fig. 6.3p has a downward slope?

+ ++++ + + + + + + + + + + + + +

Fig. 6.3q Graph with “ordinary” dialogue

+

Describe > Specific > Line Plot

Fig. 6.3r Saltpond annual rainfall with trend line
+

One way to check this possibility is through the “ordinary” graphics dialogues in R-Instat. So, use Describe > Specific > Line Plot and complete the dialogue as shown in Fig. 6.3q. The results are in Fig. 6.3t. They perhaps hint at a possible trend[^28]. If there is a trend

+ ++++ + + + + + + + + + + + + +

Fig. 6.3s Analysis for rainfall totals

+

(Change Variable to sum_rainfall in Fig. 6.3q)

Fig. 6.3t Cumulative or Exceedance Graph

+

Climatic > PICSA > Cumulative/Exceedance Graph

+

If there is a trend at Saltpond, perhaps it should also be evident in an analysis of the annual totals. Fig. 6.3s shows this is not the case.

+

Our aim in the above discussion is primarily to discuss the value of the “ordinary” R-Instat dialogues, so users do not restrict all their analysis to the climatic menu. We return to trend analysis in Section 6.6, when we process the temperature data.

+

Time series are not the only way to display the annual summaries. Use Climatic > PICSA > Cumulative/Exceedance Graph, and complete the dialogue as shown in Fig. 6.3t. If the filter is still operating, then remove it by including Data Options and choosing no_filter in the resulting subdialogue, Fig. 6.3u. The resulting graph is in Fig. 6.3v.

+ ++++ + + + + + + + + + + + + +

Fig. 6.3u Removing a filter

+

(Data Options from dialogue)

Fig. 6.3v Cumulative distributions
+

Statisticians like cumulative distributions, but many users prefer exceedance graphs. If that is your wish, then return to the dialogue in Fig. 6.3t and tick the box for an Exceedance Graph. The result is in Fig. 6.3w.

+

These are just the inverse of each other. Starting with an amount – on the x-axis, you can read the probability of the total rainfall being less than this amount (cumulative graph) or greater than this amount (exceedance graph). So, if you need 800mm for a particular crop, then the exceedance graph informs you there is about a 75% chance of getting this amount, or more, at Saltpond and about a 90% chance at Tamale. The cumulate graph would show a 25% or 10% chance of failure, i.e. of getting less than this amount.

+ ++++ + + + + + + + + + + + + +
Fig. 6.3w Exceedance graphFig. 6.3x Exceedance graph for rain days
+

Finally change the variable in the dialogue in Fig. 6.3t to the number of rain days, to give the graph in Fig. 6.3x. The shapes are the same. The steeper the graphs the smaller the variability and Fig. 6.3v, w and x all show the totals are slightly more variable at Saltpond, compared to Tamale. This can be confirmed numerically using Describe > Specific > Summary Tables. Results are in Fig. 6.3y.

+ +++ + + + + + + + + + + +
Fig. 6.3y Numerical results
+

The standard deviation of the annual totals is 273mm at Saltpond compared to 193mm at Tamale, while the means are relatively close. Similarly the standard deviation for the number of rain days is 13 days at Saltpond compared to 9 days at Tamale.

+

This points to looking at the data in more detail. Hence monthly summaries are examined in the next section.

+
+
+

7.4 More detailed summaries - rainfall

+

For many applications it is important to know about the seasonality of the data. In this section we therefore consider monthly (rather than annual) totals.

+

In Fig. 6.2g (link) we used the Climatic > Dates > Use Date dialogue to add the months to the daily data and these are used in this section. Other possibilities with this dialogue are to produce quarters, dekads (10-day periods), pentades or weeks. Any of these periods can be used instead.

+

Use Climatic > Prepare > Climatic Summaries. It was used initially in Fig. 6.3a to produce the annual summaries.

+ ++++ + + + + + + + + + + + + +
Fig.6.4aFig. 6.4b
+

In Fig. 6.4a change the tab at the top to Annual + Within and complete as shown. Click on Summaries and choose just the 2 statistics shown in Fig. 6.4b. Then press Return and Ok.

+

Now change from rainfall to Rainday in Fig. 6.4a and use the Summaries to just get the Sum, i.e. untick the N Non Missing.

+

The resulting data frame is shown in Fig. 6.4c. There are 1751 rows of data, i.e. the 141 years for the 2 stations, times 12, because the data are now monthly. For example, at Saltpond, January 1944 had a total of 41mm from 2 rain days, whie June of the same year had 22 rain days and a total of 256mm.

+ ++++ + + + + + + + + + + + + +
Fig. 6.4cFig. 6.4d
+

One way to show the seasonal pattern is through boxplots. Use Describe > Specific > Boxplot and complete the dialogue as shown in Fig. 6.4d. Use the Plot Options, Fig. 6.4e, to include the stations as facets and give the results as in Fig 6.4f[^29].

+ ++++ + + + + + + + + + + + + +
Fig. 6.4eFig. 6.4f
+

In Fig. 6.4d, change the variable to sum_Rainday to also give the graph in Fig.6.4g.

+

Both graphs show the different seasonal pattern at the 2 sites. June is the peak month of the rainy season at Saltpond and there is one year where the monthly total exceeded 800mm. In June, Fig. 6.4g also shows on average about half the days are rainy at Saltpond and that is similar to the number of rain days in Tamale in September.

+ ++++ + + + + + + + + + + + + +
Fig. 6.4gFig. 6.4h
+

Line plots can show the seasonal and time-series nature of the data together. As an example, use Describe > Specific > Line and complete as shown in Fig. 6.4h. In the Plot Options, use the Month as the factor for the facets, to give the graph as shown in Fig. 6.4i[^30]

+ +++ + + + + + + + + + + +
Fig. 6.4i
+

The results in Fig. 6.4i show the interesting nature of the June rainfall totals at Saltpond and that the extreme monthly total was in 1962. It also shows the way Tamale consistently has more rainfall than Saltpond in July to September.

+

The same type of graph can also be produced for the number of raindays, see Fig. 6.4j for a different layout[^31]. It also shows that the initial analysis of rainfall trends using the annual rainfall totals may have been over-simplistic. If trends do exist, then the next step could be to examine whether they are consistent, or not, during the year, i.e. for the different months. Thus, if rainfall seems to be decreasing, then is that in all months/seasons, or just in a part of the year. This issue is examined further in Section 6.6 when analysing the temperature records.

+ +++ + + + + + + + + + + +
Fig. 6.4j Time series graphs for the 2 stations by month
+

In reports it can be useful to include the daily data for a sample of the years. Fig. 6.2k shows the daily data for Saltpond in 1962[^32], when June had exceptionally high rainfall.

+ +++ + + + + + + + + + + +
Fig. 6.2k Daily data for Saltpond for 1962
+

There is nothing obviously wrong with the June data, but they look sufficiently curious, that a check back to the paper records and perhaps with nearby stations would seem sensible.

+
+
+

7.5 Options for Missing values

+

Analyses need to be able to take account of missing values in the data. Statistical packages are usually “sensible” in their handling of missing values and R is no exception. However, defining how they are to be handled in each circumstance is the responsibility of the user and we consider here the options in R and R-Instat.

+

To illustrate the problem Fig. 6.5a gives an inventory plot for the Ghana data. It shows there is hardly a problem for the rainfall data. The measurement of the other elements started later and there is a slightly greater proportion of missing values.

+ ++++ + + + + + + + + + + + + +

Fig. 6.5a

+

Climatic > Check Data Inventory

Fig. 6.5b Default annual summaries of rainfall

+

From > Climatic > Prepare > Climatic Summaries

+

Fig. 6.5b shows some of the annual totals that were used for analysis in Section 6.3. A column in Fig. 6.3b shows also the number of missing values each year. It shows there were missing values in the last 2 years and the annual summary has therefore been set to missing. This is “safe” but it may be disappointing as the last 2 years totals have therefore been set to missing, and have therefore been excluded from the analysis.

+

Repeating this point, the default in R, and hence in R-Instat, is that when there are any missing values (even just one day in the year) then the summary is set to missing.

+

The opposite approach is also simple to undertake. This is where all the missing days are omitted, and the summary is then calculated using the remaining data. This uses the same Climatic > Prepare > Climatic Summaries dialogue, but check the box labelled Omit Missing Values.

+ ++++ + + + + + + + + + + + + +
Fig. 6.5c Data with both summaries

Fig. 6.5d Years with missing values

+

Use Right-click > Filter with (Total == NA)

+

The results are in the last 2 columns of Fig. 6.5c. They show the total rainfall to be 665mm in Tamale in 2015 from 53 rain days – quite low compared with other years. In 2016 the values are 998mm with 67 rain days.

+

R-Instat has added intermediate options described below. Before that, we consider what more can be done with just these 2 extremes.

+

Fig. 6.5d shows the annual data for those years where there are missing values. There are just 9 years overall, 5 at Saltpond and 4 at Tamale. Hence, with data from 1944 to 2016, this leaves over 60 years of data at each site. Hence, one option is to accept the omission of those years and proceed, which is what was done in Section 6.3.

+

A second possibility results from the observation, Fig. 6.5d, that in 3 of the 9 years there was just a single day missing in the year. Perhaps it is reasonable to accept the totals in those years and then just have 6 missing years overall.

+

To go further we now look in more detail at the daily data. One coincidence is that both sites have missing data in 1949 and an examination is that this is for the same 3 months, i.e. from October to December. We don’t like coincidences and wonder why.

+

More generally, the other years have just one or two months missing. If that were between November and February – when there is usually little rain, then perhaps the total could be accepted. In this case that is not the case. For example August 2015 is missing in Tamale, and this perhaps explains why the total and number of rain days was low in that year. Omitting it, as we did, in Section 6.3, was sensible.

+

A more major possibility is that Saltpond collects data every 3 hours and Tamale collects hourly data. So perhaps the Met service has more detailed records that could help to infill the missing daily values.

+

To see further options for missing values, return to the Climatic > Prepare > Climatic Summaries dialogue. Choose the Summaries button and the Missing Options tab, Fig. 6.5e. The setting we chose of 27 means that any year with a month or more missing, gives a missing summary. In this case, as shown in Fig. 6.5f, it has just given the annual totals for the 3 years with just a single missing day.

+

In some examples the third option in Fig. 6.5e becomes important. Sometimes the data, as supplied, starts, or ends during a year. In this instance the first and/or the last year may be incomplete. For example the Tamale data in 1944 start in February, rather than January. This was not an issue, because January is relatively dry, but had they started in July 1944 that would have been different and should have been allowed for.

+

In Fig. 6.5e this corresponds to setting the Option Not Missing to about 340 (days) rather than the Missing Days to 27.

+ ++++ + + + + + + + + + + + + +
Fig. 6.5eFig. 6.5f
+

A different, and more major, operation is to try to “infill” or complete the data, where there are missing values. There is a wide variety of methods, ranging from input of the mean value from that day of the year to using estimates from a neighbouring station, or from satellite observations. They are considered in Chapter xxx.

+
+
+

7.6 Processing temperature data

+

The Climatic > Prepare > Climatic Summaries dialogue applies to any element. With the Ghana data the annual temperature summaries can therefore be added to those of the rainfall calculated in Section 6.3.

+ ++++ + + + + + + + + + + + + +

Fig. 6.6a

+

Climatic > Prepare > Climatic Summaries

Fig. 6.6bInclude temperature extremes
+

Complete the dialogue as shown in Fig. 6.6a and then the Summaries sub-dialogue as shown in Fig. 6.6b. This produces the annual mean and the annual extremes of the daily minimum temperatures.

+

Then use the Missing Options tab, shown in Fig. 6.6b and complete it as shown earlier in Fig. 6.5e. This will give the annual summaries if there are a few missing days, but not if a month or more is missing.

+

Once you have these summaries, return to the dialogue in Fig. 6.6a and replace the minimum by the maximum temperatures.

+

The measurement of temperatures started in 1960, hence the summary data are now filtered, prior to producing graphs.

+ ++++ + + + + + + + + + + + + +

Fig. 6.6c Annual temperature data

+

Following Right-click > Filter > (Year > 1959)

Fig. 6.6d

+

Describe > Specific > Line Plot

+

Use the Describe > Specific > Line Plot dialogue, and complete as shown in Fig. 6.6d. In the plot options, choose to Facet by the station[^33].

+ +++ + + + + + + + + + + +
Fig. 6.6e
+

In Fig. 6.6e the data on the extremes must be treated with caution, because they are the values on a single day each year. There does appear to be a trend in the mean for Tmax, particularly at Tamale. This can be confirmed using the Model > Three Variables > Fit Model dialogue, which is described in more detail in Chapter xxx. The results show an estimated increase of 2.3°C for Tamale. The estimated increase for Saltpond was just 0.4°C and that was not statistically significant.

+

The graph can be repeated for the minimum temperatures (not shown). Instead, Fig. 6.6 shows Tmax and Tmin together. The estimated trend in Tmin is an increase of 2.0°C per 100 years and is almost the same at the two sites. Fig. 6.6f also shows clearly the much greater diurnal range at Tamale, compared to Saltpond.

+ +++ + + + + + + + + + + +
Fig. 6.6f
+

In Fig. 6.6f (and earlier in Fig. 6.6e) the mean line for Saltpond looks odd. In this Chapter the quality control steps, discussed in Chapter 5, have been omitted and, as usual, that was not a good idea! Fortunately, the daily data are available, so we return to these and do a simple time series plot of the daily records, Fig. 6.6g. This indicates an oddity in the data in about 1974.

+ ++++ + + + + + + + + + + + + +

Fig. 6.6g Tmax for Saltpond daily data by Date

+

From Describe > Specific > Line Plot

Fig. 6.6h Monthly means for Tmax
+

This is confirmed in Fig. 6.6h, where the monthly means for Tmax at Saltpond are displayed for the 1970s[^34]. They show a drop of about 2 degrees from May 1974.

+

The next step in this small investigation is to display the daily records, as shown in Fig. 6.6i. Looking at the daily data it became clear they were originally recorded in degrees Fahrenheit and (at least usually) just to the nearest degree. Hence, for clarity, the Tmax data were transformed back into Fahrenheit[^35] and then displayed, as shown in Fig. 6.6i.

+ ++++ + + + + + + + + + + + + +
Fig. 6.6iFig. 6.6j
+

Fig. 6.6i confirms the change was in May 1974, or possibly 30 April. In most years temperatures in May are about 0.5°C lower than April, or about 1°F. In the 1974 record it is 4 or 5 degrees Fahrenheit lower.

+

Fig. 6.6j therefore repeats the analysis, shown earlier in Fig. 6.6e, but just from 1975. The results are now consistent with the data from Tmin at Saltpond and with the Tamale data. The trend for the mean is slightly higher at 3.2°C per 100 years.

+

Analyses of the temperature records, like the above, are common. There is an immediate follow-up question that is often omitted, namely is the trend in the temperatures consistent through the year, or is it perhaps different in the rainy and dry seasons?

+

As in Section 6.4 for the rainfall, we therefore extend the analysis and examine the monthly data.

+
+
+

7.7 More detailed summaries - temperatures

+

We examine the possible trends in Tmin and Tmax, at the two stations, monthly. A specific question is whether there is evidence for a different trend in some months, compared to others.

+

For simplicity, given the inhomogeneity of Tmax at Saltpond, the daily data are first filtered so only the data from 1975 are analysed, Fig. 6.7a.

+ ++++ + + + + + + + + + + + + +

Fig. 6.7a Filter the data (optional)

+

Right-click > Filter > Define new

Fig. 6.7bMonthly summaries

+

Climatic > Prepare > Climatic Summaries

+

Only summary is the mean

+

Then use Climatic > Prepare > Climatic Summaries, Fig. 9.7b. In Fig. 9.7b click on Summaries and just choose the mean.

+

Then repeat for Tmax, to give the data as in Fig. 6.7c.

+ ++++ + + + + + + + + + + + + +
Fig. 6.7c Monthly means for Tmin and Tmax

Fig. 6.7d

+

Describe > Specific > Line Plot

+

(Also use Plot Options with Month a Facet)

+

Then Describe > Specific > Line Plot, as shown in Fig. 6.7d indicates a reasonably consistent slope at both sites, for each of the months, Fig. 6.7e.

+ +++ + + + + + + + + + + +
Fig. 6.7e Trends by month for the two stations
+

However, this does not quite answer the question posed, namely that the trend is independent of the month, i.e. it is the same in each month.

+

The modelling dialogues are needed to address this hypothesis. The menu is shown in Fig. 6.7f.

+ ++++ + + + + + + + + + + + + +
Fig. 6.7f The Model menu

Fig. 6.7g Filter by Station

+

Right-click > Filter > Define New

{widt h=“2.062606080489939in” height= “2.4237357830271216in”}
+

In the modelling menu, Fig. 6.7f, the One Variable sub-menu permits a wide variety of distributions to be fitted to a single variable, i.e. a single column of data.

+

Moving down in Fig. 6.7f the Two Variables sub-menu is designed to model a single y (dependent) variable against one x (independent) variable. An example would be Tmax against the year. That would be ok if we had annual data, as in Section 6.6, but we have the monthly data.

+

In our case we need at least three variables. The dependent is initially Tmax and this is modelled as a function of both the year and month, i.e. we have a total of 3 variables.

+

Once you use the modelling dialogues as a routine, then the General dialogues are usually used, or (below the line in Fig. 6.7f) the even more general Model dialogue, where you just give an R command.

+

To simplify the modelling, first filter for a single station, Fig. 6.7g. Call the filter Saltpond (rather than Filter1).

+ ++++ + + + + + + + + + + + + +
Fig. 6.7h Make a new data frame

Fig. 6.7i

+

Model > Three Variables > Fit Model

+

Return. to the main dialogue and opt to Apply as Subset, Fig. 6.7h.

+

Now, for the first model. Use Model > Three Variables > Fit Model with the new Saltpond data frame and complete it as shown in Fig. 6.7i. Initially you have a ‘*’ between the year and month variables. This fits a different slope for each month, as shown earlier, for Saltpond, in Fig. 6.7e.

+ ++++ + + + + + + + + + + + + +
Fig. 6.7jFig. 6.7k
+

A lot of results are produced. Key information is the ANOVA table shown in Fig. 6.7j. This shows that there is a clear trend (year) and seasonality (month_abbr). It also shows that there is no evidence of the interaction, i.e. the year:month_abbr explains very little variation in the data, and what it explains is not statistically significant.

+

Hence, the separate slopes each month are not needed. A parallel line model is adequate.

+

So, return to the dialogue in Fig. 6.7i and change the ‘*’ into a ‘+’. At the same time, click on the Display Options and choose to Save the Fitted Values, Fig. 6.7k.

+

Before examining the results there is one small (optional) change that sometimes simplifies the interpretation. With the year as given, i.e. starting in 1975, the origin is almost 2000 years ago. Instead you could make 1975 as the origin, using Prepare > Column: Calculations > Calculate and making a new column, say yr <- year -1975. Then use yr instead of year in the model.

+ ++++ + + + + + + + + + + + + +
Fig. 6.7lFig. 6.7m
+

Interpreting the model in Fig. 6.7l the trend (yr coefficient) is a possibly disturbing 3.4 degrees per 100 years. For the seasonality, the mean temperature in January 1975 was estimated as 29.9°C. February and March were each estimated to be an average of 0.6°C higher, i.e. about 30.5 degrees, while August had the lowest average temperatures.

+

In some stations there is “local warming” where the station surroundings are more built up. Hence this should be checked, before assuming the large trend per year is a feature of global warming.

+

A similar analysis for Tmin, again shows no evidence that a different trend is needed each month. Saving those fitted values also, as shown in Fig. 6.7m permits the parallel lines to be plotted, using Describe > Specific > Line Plot, as shown in Fig. 6.7n

+ +++ + + + + + + + + + + +
Fig. 6.7n Observed and fitted temperatures at Saltpond
+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_7_Tailored_Products.html b/_book/Chapter_7_Tailored_Products.html new file mode 100644 index 0000000..ac62e37 --- /dev/null +++ b/_book/Chapter_7_Tailored_Products.html @@ -0,0 +1,1984 @@ + + + + + + + + + +8  Tailored Products – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

8  Tailored Products

+
+ + + +
+ + + + +
+ + + +
+ + +
+

8.1 Introduction

+

Products by NMSs include regular reports, such as climate normal and 10-day bulletins through the rainy season. It is useful if they also produce “tailored products” that correspond to the specific demands of users.

+

In many countries, one such product is the “start of the rains”. This is usually not a single fixed definition but may depend on factors such as the crop being planted and the type of soil. The results in this chapter are mainly based on an analysis of the daily rainfall data.

+

In early years on this type of work, e.g. (Stern, Dennett, & Dale, 1982) some researchers questioned the need for the daily (rainfall) data. This was often because sufficient results could be obtained through an analysis of monthly totals supplemented, when needed, with 10-day (dekads) or weekly totals.

+

This was partly due to a mis-understanding that the analysis would use the daily values directly. Instead, the daily values are simply used in an initial step to calculate appropriate summaries and these are on a yearly basis. The results are then presented in the same ways as the rainfall totals and total number of rain days in Chapter 6.

+
+
+

8.2 Getting ready

+

One of the examples used in this Chapter is from Moorings in Southern Zambia. This has rainfall data from early 1922. Use Open From Library > Instat > Browse > Climatic > Zambia and open the file called Moorings.rds.

+ ++++ + + + + + + + + + + + + +

Fig. 7.2a

+

Climatic > Dates > Use Date

Fig. 7.2b
{w idth=“2.5082042869641294in” he ight=“3.754517716535433in”}
+

A feature of Moorings, like many stations in Southern Africa, is that the rainy season is from November to April. (This is roughly the mirror image of the Sahel, where the rains are from May to October.) Hence the year is “shifted” and we choose to start from August, Fig. 7.2a.

+

Use the Climatic > Dates > Use Date dialogue, Fig. 7.2a, and complete as shown in Fig. 7.2b. Set the starting month to August.

+

The resulting data, after reordering the columns, is shown in Fig. 7.2b.

+

In Fig. 7.2b 1st March 1922 is given as the season starting in 1921. The year variable has also been given as a factor, to emphasise it is the 1921-1922 season. The variable s_doy (shifted day of year) is 214 on 1st March. It is the day number in the season starting from 1st August as day 1.

+

Finally, in Fig. 7.2b, there seems nothing different about the month variable. But right-click on the column and choose Levels/Labels, Fig. 7.2c. This shows, Fig. 7.2d, that the months are now labelled from August, so all tables and graphs will now appear from August to July, rather than from January to December. Close the Levels/Labels dialogue.

+ ++++ + + + + + + + + + + + + +
Fig. 7.2c Choose Levels/LabelsFig. 7.2d Factor levels start from August
+

Now use the Climatic > Define Climatic Data dialogue.

+ ++++ + + + + + + + + + + + + +

Fig. 7.2e Define Moorings as climatic

+

Climatic > Define Climatic Data

Fig. 7.2f The Climatic > Prepare menu
+

This dialogue should fill automatically, as shown in Fig. 7.2e. Check that the dates define unique rows, Fig. 7.2e, and press Ok.

+

We now assume use of the Climatic > Check Data dialogues, described in Chapter 5, and go straight to the Climatic > Prepare menu, Fig. 7.2f. Start with the Climatic > Prepare > Transform dialogue, Fig. 7.2g. Complete it as shown to produce a new variable, called rainday, see Fig. 7.2h, that facilitates the analysis of the number of rain days. A rain day is defined as one with more than 0.85mm. You can choose a different threshold if you wish.

+ ++++ + + + + + + + + + + + + +
Fig. 7.2gFig. 7.2h
+

Now use the Climatic > Prepare > Climatic Summaries dialogue, Fig. 7.i

+ ++++ + + + + + + + + + + + + +

Fig. 7.2i Getting annual summaries

+

Climatic > Prepare > Climatic Summaries

+

Summaries: N not missing and sum

Fig. 7.2j Annual level data frame

+

(Then also just sum for variable raindays)

+

Most of the dialogue, in Fig. 7.2i, should have completed automatically. If not, then either the data frame was not defined as climatic, or you are on the wrong data frame.

+

In Fig. 7.2i, include the rain variable. Press the Summaries button and choose just the Number not Missing and the Sum. The result should be a new annual data frame with 3 columns.

+

In Fig. 7.2i, change the variable to rainday and this time, just get the sum as the only summary.

+

The resulting annual data frame is shown in Fig. 7.2j. The results show, for example, that the 1922/23 season had a total of 853mm from 75 rain days. Further columns will now be added, that give the start of the rains each year, etc.

+
+
+

8.3 Start of the rains

+

Return to the daily data and use Climatic > Prepare > Start of the Rains, see Fig. 7.2f.

+

The dialogue is shown in Fig. 7.3a. If it is not automatically completed as in Fig. 7.2i, then either you did not define the data as climatic (Fig. 7.2e), or you are on the wrong data frame.

+ +++ + + + + + + + + + + +

Fig. 7.3a Start of the rains dialogue

+

Climatic > Prepare > Start of the Rains

+

This is the first “tailored” product, i.e. there is no fixed definition. What is needed is a definition that corresponds as closely as possible to something used by farmers – perhaps for a specified crop.

+

The first decision is the earliest possible planting date. If there were rain in Moorings on 1st October it would almost certainly be ignored, because it would probably be followed by a long dry spell.

+

As an example, we suggest 15th November as the earliest date. Then also 15th January as the latest date, i.e. after then it would not be worth planting.

+

In Fig. 7.3a, press the Day Range button and complete the sub-dialogue as shown in Fig. 7.3b.

+

After returning to Fig. 7.3a change the 2 days to 3 days and choose to also save the Date column. Then press Ok. The full definition is then:

+

Event 1: “The first occasion from 15th November with more than 20mm within a 3-day period.”

+

The resulting data are in Fig. 7.3c. The Start of the rains dialogue has added 2 more columns to the yearly data frame, one giving the day number (from 1 August) and the other giving the date. In the 1922/23 season the day was 119 or 27 November, while it was also in late November for the following two seasons.

+

The start_doy column is used in the further analysis. The start_date column is just to assist interpretation.

+ ++++ + + + + + + + + + + + + +
Fig. 7.3bFig. 7.3c
+

With the start date, or even with the totals from Section 7.2, you could proceed straight to a PICSA-type graph.

+

Use Climatic > PICSA > Rainfall Graph. Include the start_doy variable, and then the PICSA options Fig. 7.3d.

+ ++++ + + + + + + + + + + + + +
Fig. 7.3dFig. 7.3e Sub-dialogue
+

The sub-dialogue in Fig. 7.3e is used to display the Y-axis as dates, rather than day numbers. Use also the Lines tab to add a line for the mean, and possibly also the X-Axis to untick the angle for the labels. The resulting graph is in Fig. 7.3f.

+

The graph shows the mean starting day was 28th November. There was just one year with a starting date in January. There were also 10 years where the starting date was on the lower limit of 15th November. Perhaps the earliest date should have been even earlier?

+

As a small investigation, change the names of the two columns (right-click, Rename). Then use the Climatic > Prepare > Start of the Rains dialogue again, changing the earliest start date to 1st November[^36]. The definition is now:

+

Event 2: “The first occasion from 1st November with more than 20mm within a 3-day period.”

+

Then the PICSA rainfall graph is run again (unaltered) giving the graph in Fig. 7.3g. The mean is now 9 days earlier.

+ ++++ + + + + + + + + + + + + +
Fig. 7.3f Start of the rains from 15 NovemberFig. 7.3g Start from 1st November
+

There are other components of the Start of the Rains dialogue that can optionally be used. For example, in India a definition (for the Summer monsoon) is of the form:

+

Event 3: First occasion from 1 June with more than 25mm in 5 days, or which at least 3 days are rainy.

+

This uses the Number of Rainy Days checkbox in Fig. 7.3a.

+

The third checkbox in Fig. 7.3a is called Dry Spell. Events 1 and 2 can be considered as defining planting opportunities, while if a dry spell condition is added, this might define a successful planting.

+

Rename the last columns that were produced – so they are not overwritten.

+

Then return to the Climatic > Prepare > Start of the Rains dialogue and check the Dry Spells checkbox, Fig. 7.3h. The definition is now:

+

Event 4: First occasion from 1st November with more than 20mm in 3 days, and no dry spell of more than 9-days in the next 3 weeks (21 days).

+ ++++ + + + + + + + + + + + + +
Fig. 7.3hFig. 7.3i
+

The data resulting from Events 1, 2 and 4 are shown in Fig. 7.3i. They show that in 1965, with Event 2, there was a planting opportunity on 13 November, but that was not successful. The date of the successful planting was 20th December.

+

There was just one year, namely 1972, where there was no successful planting by the imposed limit of 15 January.

+

Event 2 and Event 4 can be compared. Use Prepare > Column: Calculate > Calculations and subtract the date of Event 2 from Event 4, Fig. 7.3j.

+ ++++ + + + + + + + + + + + + +

Fig. 7.3j Difference from including a dry spell

+

Prepare > Column: Calculate > Calculation

Fig. 7.3k Exceedance graph for 3 definitions

+

Climatic > PICSA > Cumulative/Exceedance graph

+

The results are also shown in the last column in Fig. 7.3i. Where the value in this last column is zero the first planting was successful. Otherwise the value shows the delay, before the date of the successful start. Looking down this column, or filtering, or using Prepare > Column: Reshape > Column Summaries shows there were 22 non-zero values, a risk of 1 year in 4.

+

If this risk is too high, then one way to reduce it, might be to omit the early planting dates and start later. Changing Event4 to start on 15th November, and comparing those results with Event 1, changes the risk to 12 years or about 14%.

+

Conservation farming is encouraged in Southern Zambia and one component is water conservation, using planting in small hollows. The promoters estimate this gives an extra 3 days, that seedlings could withstand drought. So, keeping to 1 November in Event 4, and changing the 9 days to 12 days could also be considered. This halves the risk, as there are then just 10 years when replanting was needed.

+

The data may also be plotted as exceedance graphs, as is shown in Fig. 7.3k for the Events 1, 2 and 4.

+
+
+

8.4 The end and length

+

A common definition for the end of the rainy season is based on a simple water balance model. This has been adequate in the unimodal stations in West Africa, but has problems with stations, like Moorings in the Southern hemisphere.

+

Hence, we first look quickly at a site in Northern Nigeria, before returning to discuss the end and length of the season at Moorings.

+

Use File > Open from Library > Instat > Browse > Climatic > Nigeria and open the file called Samaru.rds. The data frame called Samaru56t has 56 years of daily data from 1928, Fig. 7.4a.

+ ++++ + + + + + + + + + + + + +

Fig. 7.4a Samaru daily data

+

File > Open from Library > Instat > Browse > Climatic > Nigeria > Samaru.rds

Fig. 7.4b Start of rains for Samaru

+

Climatic > Prepare > Start of the Rains

+

(Day range from 1 April to 30 June)

+

This data frame is already defined as climatic, so proceed directly to the Climatic > Prepare > Start of the Rains dialogue.

+

These data are from January. In this dialogue, set the earliest date as 1st April and the latest as 30 June. Use Event 5 as shown in Fig. 7.4b:

+

Event 5: First occasion from 1st April with more than 20mm in 3 days and no dry spell longer than 9 days in the next 21 days.

+

As in the previous section, get the starting day of year and the corresponding date.

+ ++++ + + + + + + + + + + + + +

Fig. 7.4c End of rains/Season dialogue

+

Climatic > Prepare > End of the Rains

+

(Day Range from 15 August to 15 December)

Fig. 7.4d The season length

+

Climatic > Prepare > Length

+

Now use Climatic > Prepare > End of the Rains and complete the dialogue as shown in Fig. 7.4c

+

The water balance “model” is like a simple “bucket”. It is empty in the dry season. It is then filled by the rainfall and loses a constant amount of 5mm per day, due to evaporation. The capacity of the bucket, in Fig. 7.4c, is 100mm. Any excess, when the bucket is full, is assumed lost to runoff.

+

In the middle of the season (August), the bucket is usually quite full. The end of the season is defined, in Fig. 7.4c, as the first time, after 15th August, that the bucket is effectively empty.

+ ++++ + + + + + + + + + + + + +
Fig. 7.4e Samaru summary data

Fig. 7.4f Time-series graphs

+

Describe > Specific > Line

+

The length of the season is then, from Climatic > Prepare > Length, simply the difference between the end and the start dates, Fig. 7.4d.

+

The resulting annual data are shown in Fig. 7.4e. Various graphs are possible. The time series graph in Fig. 7.4f indicates clearly the smaller inter-annual variability of the end of the season, compared to the start. This graph was produced using Describe > Specific > Line Plot. An alternative would have been the Climatic > PICSA > Rainfall Graph.

+ ++++ + + + + + + + + + + + + +

Fig. 7.4g Exceedance plots

+

Climatic > PICSA > Cumulative/Exceedance

Fig. 7.4h Length of the season at Samaru
{width=“2.5142836832895887in” height=“3.160087489063867in”}
+

An alternative display is with exceedance graphs, Fig. 7.4g. Here the greater steepness of the line for the end of the season, corresponds to the lower variability. The Prepare > Column: Calculate > Calculations can be used to show the standard deviation of the start is about 17 days (over 2 weeks), while it is about 9 days (just over 1 week) for the end of the season.

+

Fig. 7.4h shows the length of the season, using the Climatic > PICSA > Rainfall Graphs dialogue. Terciles have been added to show that about 1/3 of the years had a season length of less than 152 days, i.e. 5 months, and 1/3 had more than 172 days – almost 6 months.

+

Now return to the Moorings data in the Southern hemisphere[^37]. The start was considered in Section 7.3 and we choose the definition 4, i.e. from 1 November, but with no dry spell of more than 12 days. In principle it simply remains to get the end of the season, and then the length, as above.

+ ++++ + + + + + + + + + + + + +

Fig. 7.4i End of the season dialogue

+

Climatic > Prepare > End of the Rains

Fig. 7.4j
{wi dth=“2.5004582239720037in” heig ht=“2.9221620734908136in”}
+

To illustrate the problem first try the same analysis as for Samaru, Fig. 7.4i. Make the day range 15th February to 15th June, as the equivalent of 15th August to 15th December for Samaru. The results are in Fig. 7.4j and a few of the problems are highlighted.

+

In some years the season appears to end in February, and sometimes on the precise day (15th February) that is the lower limit. This never happened at Samaru as the water balance was always full (or close to full) throughout August. So, August, in the Sahel, has reliable rain. This isn’t the case at Moorings, where there can be a long dry spell at any time in the season.

+

We would still prefer to consider issues in February as a problem during the season – which is covered in Section 7.6, - rather than necessarily a very early end of the season.

+

In an analysis of 5 stations in Zimbabwe, (Mupamgwa, Walker, & Twomlow, 2011) proposed a different type of definition for the end of the season. This was the last day with more than 10mm between 1 January and 30 June. This type of definition has been added to the Climatic > Prepare > End of the Rains dialogue, Fig. 7.4k.

+

For Moorings we have used the last day with more than 10mm up to the end of April, Fig. 4.7k.

+

In using this definition some meteorology staff complained that this was clearly the end of the rains and they would prefer the end of the season.

+

What is therefore also available in R-Instat is to use the above definition for the end of the rains and then to start the water-balance definition from that date – which is a different date each year. Return to Climatic > Prepare > End of Rains, select the End of Season and then the Day Range again, Fig. 7.4l.

+

In Fig. 7.4l choose Variable Day and select the end_rains variable from the summary data. Keep the end date as Fixed Day, and choose 30 June.

+ ++++ + + + + + + + + + + + + +

Fig. 7.4k

+

Climatic > Prepare > End of Rains

Fig. 7.4l Day Range on End of Rains
+

Return to the main dialogue, Fig. 7.4m and set as shown. The results are shown in Fig. 7.4n and are more reasonable.

+ ++++ + + + + + + + + + + + + +
Fig. 7.4mFig. 7.4n
+

Now use Climatic > Prepare > Length of Season, as shown for Samaru in Fig. 7.4d, to give the length.

+

The start and end of the season are plotted in Fig. 7.4o. Unlike Samaru, they are approximately equally variable, and each has a standard deviation of just over 2 weeks. The cumulative frequency graph illustrates the same point, with each of the start, end_rains and end_season having roughly equal slopes and with each having a range of about 2 months (i.e. roughly 4 times the standard deviation).

+ ++++ + + + + + + + + + + + + +
Fig. 7.4oFig. 7.4p
+

Fig. 7.4q plots the season lengths. Here about 1/3 have a length less than 4 months, while the longest third has a duration of five months or more.

+ +++ + + + + + + + + + + +
Fig. 7.4q
+
+
+

8.5 Coping with censored and missing data

+

Censoring occurs in many areas of application of statistics. The topic is particularly important in the analysis of medical data. There the survival times of patients may be recorded for a study up to 3 years. Those who survive longer are the censored observations. We know the survival is more than 3 years, but don’t know exactly how long.

+

In hydrology the height of a river may be measured. At times of flooding the height may be more than the measuring instrument, but the exact value isn’t known.

+

In climatology a heavy wind may destroy the measuring equipment. In that case the exact censoring point is unknown, but we do know that a large value occurred.

+

There is also possible censoring with the start and end of the season in Sections 7.3 and 7.4.

+

To illustrate, use the Climatic > Prepare > Start of the Rains dialogue again, Fig. 7.5a. This time we deliberately choose a small planting window, Fig. 7.5b. The latest planting date is designed to be the date beyond which a farmer would not think it would be sensible to plant for that season. That is not likely to be 30 November, but we choose that early date to illustrate the issue of censoring.

+ ++++ + + + + + + + + + + + + +
Fig. 7.5aFig. 7.5b
+

In Fig. 7.5a the variable names for the results are also changed, to avoid overwriting the previous variables. The results are in Fig. 7.5c, together with the previous ones. In the 1925/26 season the earliest planting opportunity was 3rd January. This is now too late and hence is now given as a missing value. The same is done in the following season when the earliest date was 8th December.

+

In the subsequent analysis we should examine the number of occasions that planting was not possible. One way is to use the Climatic > Tidy and Examine > One Variable Summarise dialogue, Fig. 7.5d.

+ ++++ + + + + + + + + + + + + +
Fig. 7.5cFig. 7.5d
+

The results, in Fig. 7.5e, indicates there were 17 seasons in which the new starting date was censored. However, the problem is that there was already one season for which the original definition was missing. That was not due to censoring, but because there were also missing values in the first season.

+ ++++ + + + + + + + + + + + + +
Fig. 7.5eFig. 7.5f
+

So, there were, 16 years when no planting was possible in November. That is interesting information itself. But the main problem is that the summaries are missing for 2 different reasons, namely either because there were days with missing data, or because planting was not possible, i.e. there was censoring.

+

To proceed we fist explain how R-Instat handles missing values, i.e. days when the rainfall was not recorded. There are various options when producing (say) monthly summaries that were discussed earlier. But what happens with the start and end of the rains.

+

For the start of the rains the summary is set to missing if any day is missing in the period calculated. For example in Fig. 7.5c the start in 1922/23 was on 27th November.

+
    +
  • Had any value been missing between 1st and 27th November 1922, then the result would have been set to missing.

  • +
  • If there were a missing day on 1st December 1922 the result would be given, i.e. it would not be set to missing, because the rains had already started.

  • +
  • One detail is that the result would also be set to missing if either 30th or 31st October 1922 were missing, because then the 3-day total on 1st November cannot be calculated.

  • +
+

The same idea is true for the end of the rains, i.e. if a missing value is encountered in the period when it calculates the end of the rains, then the result is set to missing. Otherwise it is given.

+

For the Moorings data there is only one missing day in the record, once it has started in early 1922. This was on 10th March 2004. The end of the rains was defined to be last occasion with more than 10mm between 1 January and 30 June. This missing value is within the period, but the calculation has “worked backwards” and found the last day on 23rd March 2004. The missing value did not affect this calculation and hence the value is given.

+

The calculation is more complicated for the water balance definition. If there are missing water-balance values in the period of calculation, then the summary is set to missing. If the rainfall is ever missing, then the water balance is set to missing. Once the rainfall is no longer missing the water balance may still be missing, because it does not know what the state was, just after the rainfall data resumed. Hence, the analysis is doubled, starting with both a full and an empty balance (i.e. the two extremes). While these are different, the water balance is still set to missing. Once they are the same, the water balance calculation resumes.

+

These decisions on missing values are strict and some users may feel that a single missing day should not set the summary for that year, or season, to be missing. In that case consider infilling the data, discussed in chapter xxx.

+

We now return to the censoring problem. Return to the Climatic > Prepare > Start of the Rains dialogue in Fig. 7.5a and tick the third option for saving columns, called Occurrence. This adds a logical column to the summaries that can be used to distinguish between missing and censored seasons.

+ + + + + + +
Fig.7.5g Fig. 7.5h
+
+

To be continued once status variable sorted.

+
+
+

8.6 During the season

+

This section considers examples of risks during the rainy season.

+

Chapter 6 examined rainfall totals and rain days throughout the year. Now they are examined for the season.

+

The simplest is to consider fixed periods. At Moorings the rainy season is from November to April. Use Climatic > Prepare > Climatic Summaries, as shown in Fig. 7.6a.

+

In Fig. 7.6a press Summaries and choose just the N non-missing and the Sum. Click on Day Range and choose 1 November to 30 April.

+ ++++ + + + + + + + + + + + + +

Fig. 7.6a Summaries for Moorings

+

Climatic > Prepare > Climatic Summaries

Fig. 7.6b Rename the resulting columns

+

Right-click > Rename Column

+
+

+
C:\Users\ ROGERS~1\AppData\Local\Temp\S NAGHTML59463e8.PNG
+
+
+

Once run, change the rain variable in Fig. 7.6a, to raindays, and this time just get the Sum. You may have found that the variables overwrote the ones produced earlier for the full year. To ensure this does not happen in the future, rename the 3 columns, Fig. 7.6b. It is also useful to add an explanatory label as shown in Fig. 7.6b.

+ ++++ + + + + + + + + + + + + +

Fig. 7.6c Day Range sub-dialogue

+

From Climatic > Prepare > Climatic Summaries

Fig. 7.6d Main climatic summaries dialogue
+

The totals can also be calculated for the rainy season each year. Return to the Climatic > Prepare > Climatic Summaries dialogue. Use the rain variable and then press Day Range. Complete as shown in Fig. 7.6c, where the total is now from the start doy to the end-season. This is confirmed on the return to the main dialogue, Fig. 7.6d.

+

In Fig. 7.6d click on Summaries and choose the Count Non Missing and the Sum. Once produced, right-click and rename the Sum variable as rainSeason. The Count Non Missing column is now the season length. This is another way to get the length!

+

A third possibility is to produce the total (or the number of rain days) for a fixed period following the start. Return once more to the Climatic > Prepare > Climatic Summaries and change the Day Range as indicated in Fig. 7.6e, i.e. for 120 days from the start.

+ ++++ + + + + + + + + + + + + +
Fig. 7.6eFig. 7.6f
+

This would be for a 120-day crop. The approximate water requirement of many crops is known, so the results are the first step in calculating the risks of not having enough water for a specified (20 day) crop in the period following planting.

+

The summary columns produced are shown in Fig. 7.6f.

+

The results are presented as exceedance probabilities in Fig. 7.6g and as time series in Fig. 7.6h.

+ ++++ + + + + + + + + + + + + +
Fig. 7.6g Exceedance graphs of rainfall totalsFig. 7.6hTime-series graphs
+

The three totals are sufficiently similar that plotting the 3 lines on a single time-series graph in Fig. 7.6h would be confusing, so they are plotted as facets[^38]….

+

The same ideas are now considered for spell lengths. In the tropics, drought is a problem and hence we consider the occurrence of long dry spells. The same dialogue could equally be used for hot, or cold, spells in temperature data, etc.

+

The simplest is to find the longest spell length within the main months of the rainy season. Continuing with the Moorings data, use Climatic > Prepare > Spells, Fig. 7.6i.

+

Use the Day Range sub-dialogue to specify January 1 to March 31 as the range of days. The results, shown in Fig. 7.6j give the longest dry-spell length within this 3-month period. It shows the longest number of consecutive days with rain less than 0.85mm on any day.

+ ++++ + + + + + + + + + + + + +

Fig. 7.6i Spells dialogue

+

Climatic > Prepare > Spells

+

(Day range from January 1 to March 31)

Fig. 7.6j Spell lengths Jan-Mar & Apr

+
    +
  • +
+
+

+
C:\User s\ROGERS~1\AppData\Local\Temp
+9f3a1.PNG
+
+
+

To clarify the results, use Climatic > Check Data > Display Daily[^39]. Data for 4 early years are in Fig. 7.6k to be compared with the results in Fig. 7.6j.

+

In Fig. 7.6j the longest spell in 1924 is 19 days. Fig. 7.6k shows that this is a spell from 13th February to 2nd March. In 1925 the longest spell was just 6 days and was at the end of March. This included days with small rainfalls, but each was lower than the 0.85mm threshold.

+

The 7-day spell in 1926 was also at the end of March. In 1927 there was also a long dry spell (14 days) at the end of March, and this also shows that just the longest spell is given. That year also had 13 consecutive dry days in January. If more detail is needed, then the three months could be considered individually.

+

It sometimes causes confusion that the longest spell in a month can be longer than the month itself. We illustrate by calculating the longest spell length in April. The results are also given in the last column in Fig. 7.6j. They show that the longest dry spell in April 2024 was 43 days. This is confirmed from Fig. 7.6k, because 1st April 2024 “inherited” a dry spell from March, of 13 days, i.e. from 19th March. So, 1st April was already the 14th consecutive dry day and this had become 43 days by the ned of April. There is an option in the dialogue if you only wish to consider April itself. This option is used in Section 7.7.

+ ++++++ + + + + + + + + + + + + + + + + +
Fig. 7.6k Data for January to April for 4 years
+

As with the rainfall totals, it is sometimes useful to find the longest dry spell in the rainy season, (i.e. between the day of the start and the end) or in part of the season. As with the rainfall totals this uses the start and end dates each year. In the Climatic > Prepare > Spells dialogue, change the day range as was shown for the rainfall totals in Fig. 7.6c and Fig. 7.6e.

+

Fig. 7.6l shows the results for the season, i.e. between the date of the start of the rains and the end of the season. The median value for the longest spell length is 14 days (2 weeks). The terciles are also given, showing that one year in 3 has a longest spell length of 12 days or less. But also a third of the years has a spell length of 18 days or more.

+

Fig. 7.6m shows the longest spell lengths for the 120 days following planting. The results are similar, but without the longest spells shown in Fig. 7.6l.

+ ++++ + + + + + + + + + + + + +
Fig. 7.6l Longest dry-spell in the seasonFig. 7.6m Longest spell in the first 120 days
+

Many crops are particularly sensitive to dry spells during the flowering period. This is typically about 20 days (3 weeks). Suppose a crop that reaches the start of flowering 50 days after planting. Calculating the risk is currently a 2-stage process in R-Instat. First produce the new column, for the start of flowering, Fig. 7.6n. This is an instance where you can also transform the start_date as is shown in Fig. 7.6o.

+ ++++ + + + + + + + + + + + + +

Fig. 7.6n Calculate the start of flowering

+

Prepare > Column: Calculate > Calculation

Fig. 7.6o
+

The resulting data are in Fig. 7.6p. The flower_date variable shows that the flowering period often starts late in December or in early January, but it is occasionally also in February.

+

The Climatic > Prepare > Spells dialogue is now used from the start_flower day for 20 days. The resulting variable is also shown in Fig. 7.6p and is seen often to be quite short. For example, the longest spell from early 2024 for the next few years is usually just 2 or 3 consecutive dry days.

+ ++++ + + + + + + + + + + + + +
Fig. 7.6pFig. 7.6q
+

The results are plotted in Fig. 7.6q using Climatic > PICSA > Rainfall Graph again. Only in 1/3 of the years is there a dry spell of one week or more. However, in 13 of the 77 years, i.e. one year in six, there was a dry spell of 10 days or more.

+

The graph in Fig. 7.6q is from a variable date. In a particular year, once you know the planting date, or also from crops that are photoperiod sensitive, the dates are fixed. Once calculated, if the risk is high, then perhaps remedial action can be taken, such as planning for some irrigated water to be available for this period.

+

A third aspect that can cause a problem during the season is a climatic extreme. This may be drought, as considered in the dry spells above. It could also be an extreme wind, or excessive rainfall causing flooding. Extremes are considered in detail in Chapter 11, hence only a single example is given here.

+

A question posed in relation to rainfall in Niger, was the risk of more than 100m rain within a 3-day period. The argument was that while a single day with more than 100mm would be a problem, so would, say 40mm, on each of 3 days.

+

Three day running totals were already used “behind the scenes” in calculating the start of the rains. Now these totals are needed explicitly. Use Climatic > Prepare > Transform, as shown in Fig. 7.6r.

+ ++++ + + + + + + + + + + + + +

Fig. 7.6r Transform dialogue

+

Climatic > Prepare > Transform

Fig. 7.6s Resulting data totalled over 3 days
+

The resulting daily data, in Fig. 7.6s, show an instance in February 1923 where the total is more than 100mm.

+

Now the Climatic > Prepare > Climatic Summaries dialogue may be used again, as shown in Fig. 7.6t. The summaries are from January to March and the only summary is the Maximum, Fig. 7.6u.

+ ++++ + + + + + + + + + + + + +
Fig. 7.6tFig. 7.6u Just get the maximum
+

The resulting summary data can now be plotted as shown in Fig. 7.6v and Fig. 7.6w. From Fig. 7.6w there is 100mm or more in about 4 years in 10.

+ ++++ + + + + + + + + + + + + +
Fig. 7.6v Time series of 3-day extremesFig. 7.6w Cumulative distribution
+
+
+

8.7 It rained yesterday. Should I plant?

+

For Moorings, in Zambia, the definition for the start of the rains was the first occasion from 1 November with more than 20mm in 3 days.

+

For successful planting the condition was added that there should not be a dry spell of more than 9 (consecutive) dry days in the next 21 days. In Section 7.3 the two columns (with and without the dry-spell condition) were compared, showing that replanting would be needed in 1 year in 4.

+

That is an overall risk, because sometimes a planting opportunity was early and in other years there was no opportunity until December. If the data are examined more closely, they show that planting was possible by 6th November in 14 of the years. However, replanting was needed (i.e. the dry spell condition wasn’t satisfied) in 7 of these years. That is a risk of 1 year in 2 when very early planting was possible. Perhaps 1st November is too early to consider planting, unless you are willing to entertain the high risk.

+

This question can be turned around. Suppose, in a particular year, there is a potential planting date on 7th November. What is the risk from planting then?

+ ++++ + + + + + + + + + + + + +
Fig. 7.7aDry spell risk after plantingFig. 7.7b Result from 8 Nov and 8 Dec
+

In Fig. 7.7a the Day Range is from 8 November for 21 days. Another change is that 7th November is assumed to be rainy, i.e. not in a dry spell. So, the checkbox “Assume condition not satisfied at the start” is ticked.

+

The results, in Fig. 7.7b indicate that planting early is quite risky. Four years have a dry spell of 10 days or more, even in the few years shown in Fig. 7.7b. If you change the dates in Fig. 7.7a by a month, then the same analysis shows just a single year now gives a problem. Interestingly that year was not a problem with the early planting.

+

Summarising the two columns[^40] shows 32 years, about 1 year in 3, had a dry spell of more than 9 days with the early planting, compared with just 11 years, or 1 year in 8, from the later planting date

+

What we lose on risk from early planting, we potentially gain by having a longer season length. In Section 7.4 the season length was

+

Length = end_season – start_doy.

+

The results were shown in Fig. 7.4q and showed that about 1/3 of the years had a season length of less than 4 months, etc. This figure is repeated as Fig. 7.7c

+

Now that we know the start is on day 100 (8th November) and hence the length is, instead, found from:

+

Length = end_season – 100

+ ++++ + + + + + + + + + + + + +
Fig. 7.7cFig. 7.7d
+

Comparing the information in Fig. 7.7c and 7.7d shows that with early planting, on day 100, there are virtually no years with a season length of less than 4 months. This is compared to 1/3 of the years overall (Fig. 7.7c). The variability is also considerably reduced, because the start is now fixed. The variability is now only because of the uncertainty of the end.

+

With this early planting we could therefore perhaps plan for 120-day crop. That would have almost no risk in terms of season length. If the proposed crop needs (say) 600mm of water, we could now find the proportion of years with at least that total. That uses the Climatic > Prepare > Climatic Summaries dialogue, as shown in Fig. 7.7e.

+ ++++ + + + + + + + + + + + + +
Fig. 7.7e
+

The resulting totals can then be examined in various ways. The time-series graph, Fig. 7.7f, is one option. This indicates quite a high risk of less than 600mm. A crop needing only 500mm would have a much lower risk. There are only a few years with much less than 500mm.

+

An alternative, with this early planting, could be to aim for a short-duration cereal crop, e.g. 90 days and then to try for a short-season legume, that might be planted as the cereal is close to maturity. Fig. 7.7d indicates that this would often have had enough time for fodder, and occasionally would have long enough to mature.

+
+
+

8.8 Reduce risks

+

In the previous section risks were calculated relative to a proposed planting date. In this section we examine the seasonal pattern of the risks. This enables a study of the following types of problem.

+
    +
  • For Moorings the risk of replanting was about one year in three if planting on 8th November. (Assuming replanting is needed if there is a dry spell of 10 days or longer in the following 21 days.) How does this risk depend on the date of planting? Does the risk ever approach zero?

  • +
  • For the option of a 120-day crop that needs (say) at least 600mm of water, when would be the best days to plant?

  • +
+

The method is similar for these two – and for other similar problems. For simplicity the 120-day total is considered first. There is no special dialogue, so the analysis proceeds step-by-step.

+

First use the Climatic > Prepare > Transform dialogue as shown in Fig. 7.8a. This transforms the rainfall data into 120-day moving totals. The resulting data are shown in Fig. 7.8b after reordering the columns. They show that in the 1922/23 season there was more than 600mm if planting was before 11th January.

+ ++++ + + + + + + + + + + + + +
Fig. 7.8aFig. 7.8b
+

These data re now summarised over the years, this time to get a value for each day of the year. This uses the Climatic > Prepare > Climatic Summaries dialogue, Fig. 7.8c. Use the Within Year option in Fig. 7.8c and complete the dialogue as shown.

+ ++++ + + + + + + + + + + + + +
Fig. 7.8cFig. 7.8d
+

In the Climatic Summaries sub-dialogue use the More tab as shown in Fig. 7.8d.

+

This produces a new data frame shown in Fig. 7.8e.

+

Repeat the dialogue in Fig. 7.8c, changing the 600mm to 450mm

+ ++++ + + + + + + + + + + + + +
Fig. 7.8eFig. 7.8f
+

It now just remains to graph the results. This uses the Describe > Specific > Line Plot dialogue, Fig. 7.8f. The results are in Fig. 7.8g[^41].

+

In Fig 7.8g the higher (red) line is for 600mm. It shows the minimum risk corresponds to a planting on about 15th November and is then about 0.3 (30%). The lower line, for 450mm, is below 1 year in 10, for plantings from 1 November to about 10 December.

+ ++++ + + + + + + + + + + + + +
Fig.7.8gFig. 7.8h
+

One improvement in the presentation would be to smooth the lines given in Fig. 7.8g. They are quite smooth already, as there were 88 years of data. With shorter records the need for smoothing becomes greater.

+

Moving averages are the simplest way of smoothing. Use Climatic > Prepare > Transform as shown in Fig. 7.8h. This adds the 2 smoothed columns to the data frame.

+

Note also that the risks are (of course) very high from March onwards. Hence filter the data on the day of year. The 1st March is s_doy = 214.

+ ++++ + + + + + + + + + + + + +
Fig. 7.8iFig. 7.8j
+

Fig. 7.8i shows plots of the data together with the smoothed lines. R and hence R-Instat has many other methods of smoothing data. One alternative method is shown below in Fig. 7.8q.

+

The same ideas can be used to examine the risks of a long dry spell at different points in the season. We first consider the risk of a dry spell after a planting occasion, i.e. after a rain day. This uses the special Multiple Spells tab in the Climatic > Prepare > Transform dialogue. In Fig. 7.8j the maximum spell length is taken over 21 days, and that can, of course, be changed as required.

+ ++++ + + + + + + + + + + + + +
Fig. 7.8kFig. 7.8l
+

The next step, as before, uses the Climatic > Prepare > Climatic Summaries dialogue, Fig.7.8k to calculate the proportion of years with a dry-spell longer than 9 days in the 21 days, following planting, i.e. to correspond to the default values in the Start of the Rains dialogue.

+

Once calculated, repeat the operation with 7 days (for a more sensitive crop) and 12 days, perhaps to correspond to the extra days following a conservation farming strategy.

+ ++++ + + + + + + + + + + + + +
Fig. 7.8mFig. 7.8n
+

The data are shown in Fig. 7.8m where, for variety, we have used percentages rather than proportions.

+

The dry-spell risks are shown in Fig. 7.8n. They show that, in early November, it is quite advantageous, in terms of risk, to have the 12-days, rather than the 9 days assurance for the dry spells. By early December all 3 curves have “flattened out”, hence there is no point in delaying planting – the risks are not getting lower.

+

The messages would be clearer if the data in Fig. 7.8n are smoothed. This can be done in the same way as for the rainfall totals, shown earlier in Fig. 7.8h.

+

Many crops are sensitive to a long dry spell round flowering. The calculation is slightly different to the one above, which assumed rain for planting on day zero. This time we need the unconditional risks, i.e. a dry spell might have started before the flowering period and have continued.

+

Use the Climatic > Prepare > Transform dialogue again, with the Spell tab, as shown in Fig. 7.8o. Then, with the same dialogue, use the Moving tab, Fig. 7.8p, to get the maximum over 20 days. This assumes that the flowering period is of 20 day’s duration.

+ ++++ + + + + + + + + + + + + +

Fig. 7.8o Ordinary spell lengths

+

Climatic > Prepare > Transform

Fig. 7.8pMaximum over 20 days

+

Climatic > Prepare > Transform (again!)

+

The next steps are just as before, i.e. in Fig. 7.8k to Fig. 7.8n. They use the Climatic > Prepare > Climatic Summaries dialogue to get the percentage of years each day, with a longer dry spell than 7 or 9 days. The resulting percentages are then plotted, as before, using the Describe > Specific > Line Plot dialogue.

+ ++++ + + + + + + + + + + + + +
Fig. 7.8q Adding a loess smootherFig. 7.8r
+

This time, for illustration, the smoothing has been done “on the fly”, as additional layers in the plot. Local smoothing has been used with loess, as explained in more detail in Chapter 8.

+

The percentages are (as would be expected[^42]) slightly higher in Fig. 7.8r, compared with Fig. 7.8n. They show a minimum risk if the start of the flowering period is towards the end of January.

+ ++++ + + + + + + + + + + + + +
Fig. 7.8s

Fig. 7.8t Plot the cumulative data

+

Describe > Specific > Line Plot

{w idth=“2.312619203849519in” heig ht=“3.1737740594925636in”}
+

The final example examines the cumulative rainfall distribution each year, or season. This starts, again, with the Climatic > Prepare > Transform dialogue, this time using the Cumulative button, Fig. 7.8s.

+

This adds a column, called cumsum, Fig. 7.8s, giving the accumulated rainfall each year.

+

Now use the Describe > Specific > Line Plot dialogue to graph the cumulative data against the day of the year, Fig. 7.8t.

+ ++++ + + + + + + + + + + + + +
Fig. 7.8u Facet sub-dialogue – by yearFig. 7.8v Filter to choose the first 20 complete years
+

In Fig 7.8t, use Plot Options to put the different years each in their own graph (facet), Fig. 7.8u. Then use the Data Options button, which is on each dialogue, and is another way to get to the filtering system. Choose the first 20 years of data, Fig. 7.8u as 89 years are too many graphs to show together.

+

The resulting graph is in Fig. 7.8w. Each graph starts at zero and rises to the annual (seasonal) total. So, for example 1938-39 was a year with over 1000mm, while 1933-34 had only about half that total.

+

Vertical lines, in Fig. 7.8w, correspond to high rainfall and horizontal lines to dry spells. The 1932-33 season looked like a “bumpy year”.

+ +++ + + + + + + + + + + +
Fig. 7.8w Cumulative rainfall for 20 years at Moorings
+

If you remove the facets from the graphs specified in Fig. 7.8t and instead put the year factor in the main dialogue in Factor (Optional), then the resulting graph is in Fig. 7.8x. This type of display can be useful for monitoring, as you can super-impose the current year. An example is shown below.

+ ++++ + + + + + + + + + + + + +
Fig. 7.8x Single graph of cumulative rainfall (mm).Fig. 7.8y
+

These graphs can be taken further. As an example, in Fig. 7.8y the green lines indicate the start of the rains each year, while the red lines show the date of the end of the season. The early and late starts, and ends, are therefore indicated. A long season is one where the lines are far apart, and so on. We explain, in Chapter 8, how these features can be added.

+

Boxplots can alternatively be used to display the cumulative data. A challenge is to plot them at the end of each 10-day period. This is the first example of the use of the dekads in this guide, so return to the Climatic > Dates > Use Date dialogue and complete it as shown in Fig. 7.8z. The year is shifted, so the dekads start in August.

+ ++++ + + + + + + + + + + + + +
Fig. 7.8zFig. 7.8aa
+

First get a logical column, which is TRUE on the last day of each dekad, and FALSE otherwise[^43]. This uses the calculator, Prepare > Column: Calculate > Calculations. Complete it as shown in Fig. 7.8aa.

+

Now filter so just the rows when the dek_diff variable is TRUE are used. The data are shown in Fig. 7.8 ab.

+ ++++ + + + + + + + + + + + + +
Fig. 7.8ab Filtered for the last day of each dekadFig. 7.8ac
+

Now use Describe > Specific > Boxplot, Fig. 7.8ac. The results are in Fig. 7.8ad[^44].

+ ++++ + + + + + + + + + + + + +
Fig. 7.8ad Boxplots showing the cumulative rainfall at MooringsFig. 7.8ae A new year
+

Fig. 7.8ad shows the progression of the cumulative rainfall for the season towards the final totals. These had a median of 800mm, with a minimum less than 500mm and a maximum of well over 1000mm.

+

One use of this type of plot is to monitor a new year. As an example, Fig. 7.8ae provides data, where the total has now risen to 340mm by the end of February. This information can now be super-imposed on the boxplots, as shown in Fig. 7.8ae with the blue points[^45]. This example shows a great cause for concern. The totals are very low, compared to the earlier 88 years of data.

+ +++ + + + + + + + + + + +
Fig. 7.8ae Adding the current year to the boxplots
+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_8_Efficient_use_of_RInstat_and_R.html b/_book/Chapter_8_Efficient_use_of_RInstat_and_R.html new file mode 100644 index 0000000..6380b4b --- /dev/null +++ b/_book/Chapter_8_Efficient_use_of_RInstat_and_R.html @@ -0,0 +1,819 @@ + + + + + + + + + +9  Efficient use of R-Instat and R – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

9  Efficient use of R-Instat and R

+
+ + + +
+ + + + +
+ + + +
+ + +
+

9.1 Introduction

+

In this guide Chapters 2 and 3 largely made use of the general facilities in R-Instat, shown in Fig. 8.1a. They were dialogues from the File, Prepare and Describe menus. Chapters 4 to 7 used the climatic menu shown in Fig. 8.1b

+ ++++ + + + + + + + + + + + + +
Fig. 8.1a The R-Instat menusFig. 8.1b The Climatic menu
+

The Climatic menu, Fig. 8.1b, mirrors the general menus, Fig. 8.1a in that parts of this menu correspond to the facilities in the File, Prepare, Describe and Model menus. Thus you start by getting the File with the data. Then there is usually a Prepare stage, where the data are organised and checked, ready for analysis. This stage often includes a “reshaping” of the data, where daily records are summarised to a monthly or yearly basis.

+

Then the initial analyses are usually descriptive, so use the Describe section of the Climatic menu or the Describe menu itself. The materials in Chapters 4 to 7 were all devoted to descriptive analyses.

+

When descriptive methods are not enough there is the Model menu to fit and examine statistical models.

+

For users who are starting their climatic analyses with R-Instat we distinguish between four or five “levels”. These different “levels” are discussed in this chapter.

+
    +
  1. If your analyses are “standard”, then you may find all you need is in the climatic menu. That is the idea of the special menu.

  2. +
  3. If you need more, then the general R-Instat menus may be used. The Prepare menu is sometimes needed for more of the initial data manipulation than is in the climatic menu. The powerful ggplot2 graphics system is also available through the Describe menu.

  4. +
  5. R-Instat includes some “halfway” dialogues, that we discuss in Section 8.3. These are dialogues where you have essentially to write a single R command. That’s quite easy and can be a stepping-stone to using R directly.

  6. +
  7. Sometimes a dialogue does not do quite what is needed for an analysis. The To Script button, is on each dialogue and copies the relevant R command to a special script window. You can then “tweak” the resulting command(s) to produce the appropriate analysis. This is described in Section 8.4.

  8. +
  9. Finally, you may be ready to use R “properly”! This is either because the analysis you need is not available in R-Instat, or because the click and point method is becoming tedious and you would like to work more efficiently. One option is then still to start in R-Instat. Then produce the log file, which has a record of all the commands you have used. This may be transferred and should run just the same in RStudio. Then you can continue the analyses using R directly. This process is described in Section 8.5.

  10. +
+

Most of the ideas in this chapter and also discussed in more detail in the R-Instat guide called “Reading, Tweaking and Using R Commands”.

+

Solving problems rather than learning to use R-Instat.

+

Possibly discuss loops for successive analysis of data for multiple stations

+
+
+

9.2 Using the “ordinary” R-Instat

+

Could show smoothing with loess and splines, though a bit of that in Chapter 7. Could refer back

+

Mention export of graphs for an editor: "I'd suggest exporting the figure from R as a vector graphic file (.svg) then adding your labels in a vector graphic software. I use Inkscape software because it can be downloaded for free and its fairly intuitive to learn."

+

Also discuss data sheet and data book – though also in Chapter 3.

+

And the metadata windows, including changing names and also altering precision.

+

Could perhaps be a good place to discuss the Tools > Options dialogue – though maybe that deserves its own section?

+

On tasks in this section include summary of hourly to daily data probably with the example from the openair package?

+
+
+

9.3 The halfway dialogues

+

Mention the risks that using these commands brings. Can make mistakes. Good to make some mistakes intentionally so that you are ready for them.

+

Use an example of infilling data and the calculate dialogue - transform. Could use infilling of temperatures to work towards a complete record.Could install chillR partly because they have an interesting data set where they have introduced missing values. Also because their ideas on infilling will be generally useful for R-Instat in the future.

+

Then also the model and use model menu. This could include modelling extremes.

+
+
+

9.4 The script window

+

Add an R package:

+

install.packages(‘packagename’)

+

Tried Install.packages(“finalfit”) – which gives an error? Wrong quotes! Use Install.packages("finalfit")

+

To use data without needing to give the full name include attach(“dataframename”)

+

library() lists all available packages

+

library(dplyr) makes the package available, so can give the commands without dplyr:: at the start.

+

Move the example here from Chapter 3 of adding a skew boxplot.

+
+
+

9.5 The log window and R

+ +++ + + + + + + + + + + +
Code to add date to an x-variable

# Code generated by the dialog, Line Plot

+

Moorings_by_s_doy <- data_book$get_data_frame(data_name="Moorings_by_s_doy", stack_data=TRUE, id.vars="s_doy", measure.vars=c("prop120.lt.600","prop120.lt.450"))

+

Moorings_by_s_doy <- Moorings_by_s_doy %>% mutate(s_doy=as.Date(s_doy, origin = "2015-07-31"))

+

last_graph <- ggplot2::ggplot(data=Moorings_by_s_doy, mapping=ggplot2::aes(x=s_doy, y=value, colour=variable)) + ggplot2::geom_line() + theme_grey() + ggplot2::theme(axis.text.x=ggplot2::element_text()) + ggplot2::scale_y_continuous(limits=c(0, 1))+scale_x_date(date_labels = "%d %b", date_breaks="1 month")

+

data_book$add_graph(graph_name="last_graph", graph=last_graph, data_name="Moorings_by_s_doy")

+

data_book$get_graphs(data_name="Moorings_by_s_doy", graph_name="last_graph")

+

rm(list=c("last_graph", "Moorings_by_s_doy"))

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/Chapter_9_Gridded_Data.html b/_book/Chapter_9_Gridded_Data.html new file mode 100644 index 0000000..c0c64df --- /dev/null +++ b/_book/Chapter_9_Gridded_Data.html @@ -0,0 +1,1313 @@ + + + + + + + + + +10  Gridded Data – R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

10  Gridded Data

+
+ + + +
+ + + + +
+ + + +
+ + +
+

10.1 Introduction

+

There are various sources of gridded data for climatic elements. Those considered here are from the European Organisation for the Exploitation of Meteorological Satellites, Satellite Application Facility on Climate Monitoring (EUMETSAT CM SAF), the Copernicus Climate Change Service (C3S) Climate Data Store and the International Research Institute for Climate and Society (IRI) Data Store.

+

All data are freely available. You need to register to access data from CM SAF, and also for the C3S Climate Data Store. The IRI Data Store does not require registration. The CM SAF data considered here are from stationary satellites and are available for all of Europe and Africa and possibly more, e.g. Middle East and Caribbean. Sunshine and radiation data are illustrated here. They are available daily (some hourly) on a grid of about 4km and are from 1983. Other elements, e.g. ground temperature are available hourly, from the early 1990s. They will later become available from the 1980s.

+

We consider the ERA5 reanalysis data from the C3S Climate Data Store. ERA5 is global, from 1979 (soon to be 1950) with a large number of elements available hourly on a grid of 0.25 by 0.25 degrees (about 30km). It is illustrated with precipitation (hourly) and with 2m temperature (used to derive daily Tmax and Tmin).

+

The IRI Data Store is a repository of climate data from a wide variety of sources. We illustrate the IRI Data Store by accessing daily precipitation estimates from CHIRPS and ENSO and sea-surface temperatures, that are commonly used for seasonal forecasting.

+

There are many possible uses and applications of these data. To be continued – with examples of what can be done and is being done.

+
+
+

10.2 Importing NetCDF files

+

Show how to use the dialog first without changing options but still look at details to check what is being imported.

+

Then show the options for sub-areas, an individual station, or for multiple stations. Can use Rwanda station locations and CHIRPS data from IRI section.

+
+
+

10.3 EUMETSAT CM SAF

+

The CM SAF website is shown in Fig. 9.2a. You are invited to sign-in or register, though you are welcome to explore what is available without this. You need to register to download any data. You are then able to use these data freely. EUMETSAT would very much welcome any feedback on how the data have been used, particularly if, for example, you have compared your station data with their data. They may sometimes be prepared to assist you with using the data. You can contact EUMETSAT through their User Help Desk https://www.cmsaf.eu/EN/Service/UHD/UHD_node.html.

+ +++ + + + + + + + + + + +
Fig. 9.2a
+

Choose Surface Radiation products from the Climate Data Records menu in Fig. 9.2a. Choose daily sunshine duration, SDU, Fig. 9.2b.

+

From Fig. 9.2c we see the data are available from 1 January 1983 to the end of December 2017 (when this guide was written). There are other products from EUMETSAT CM SAF if more recent data are required, but they have not been through the homogenisation and quality control checks.

+ ++++ + + + + + + + + + + + + +
Fig 9.2bFig. 9.2c
+

Also indicated in Fig. 9.2c is that there is documentation on each product. Consider downloading these guides if you decide to use the data as they are very detailed and informative.

+

On the same screen as Fig. 9.2c you see an Add to Order Cart invitation. Ignore this for now, unless you want a huge file, with data from about half the globe.

+

Instead, scroll further down and click on the button that says Change Projection / spatial resolution / domain.

+ ++++ + + + + + + + + + + + + +
Fig. 9.2dFig. 9.2e
+

If you are following this as an exercise, then change the coordinates in Fig. 9.2e.

+

Click, in Fig. 9.2e to proceed to the time range selection.

+ ++++ + + + + + + + + + + + + +
Fig. 9.2fFig. 9.2g
+

In the following screen, scroll down to confirm that the sub-domain, part of Rwanda, has been included, Fig. 9.2f. Then press Add to Order Cart, Fig. 9.2g.

+

You return to the screen in Fig. 9.2h. It is disconcerting that in Fig. 9.2h it appears you are about to order a file of over 200 gigabytes, but it is the size ignoring the sub-domain[^46]. Keep your nerve and place the order, Fig. 9.2h.

+ +++ + + + + + + + + + + +
Fig.9.2h
+

You receive a confirmatory e-mail that the order has been placed on the EUMETSAT server. Shortly afterwards there is confirmation that the data have been extracted and are waiting to be downloaded, Fig. 9.2i

+ +++ + + + + + + + + + + +
Fig. 9.2i
+

Follow the instructions in your equivalent of the message in Fig. 9.2i to download the file. It is now, for the first time that you are made aware of the file size, 341 Mbytes for this example.

+

This downloads a single tar file, containing 12 thousand individual NetCDF files, with one file for each day.

+

This is continued, in Section 9.5, through the CM SAF toolbox and in Section xxx using R-Instat.

+
+
+

10.4 C3S Climate Data Store

+

If you are not online, then the first part of this section is again for reading only.

+

The website is https://cds.climate.copernicus.eu/. This takes you to the screen partly shown in Fig. 9.3a. You are invited to login or register your account. So, do this.

+

Once logged in you return to the screen in Fig. 9.3a.

+ +++ + + + + + + + + + + +
Fig. 9.3a
+

Then click on Datasets in Fig. 9.3a to give the screen starting in Fig. 9.3b. There are many different datasets available. In the search bar type “ERA5 hourly” and from the results select, “ERA5 hourly data on single levels”.

+

Click on this dataset to get further information, see Fig. 9.3c.

+ ++++ + + + + + + + + + + + + +
Fig. 9.3bFig. 9.3c
+

The data are currently from 1979 (soon to be from 1950). They are available for many elements including precipitation, temperature, evaporation, radiation and wind speed and direction.

+

They are hourly data and at a 0.25 by 0.25-degree (about 25km) resolution.

+ ++++ + + + + + + + + + + + + +
Fig. 9.3dFig. 9.3e
+

On your first visit to the site, continue, and click on Download data in Fig. 9.3c. You then choose one or more elements, Fig. 9.3d and decide on the years, months, days and hours to include. Finally, select the sub-region to extract in the Geographical area section, Fig. 9.3f. Once the items in Fig. 9.3d, Fig. 9.3e and Fig. 9.3f are complete you can click Submit Form to start the request.

+

The running may take minutes (sometimes many) to complete. It also sometimes fails. You can view the current status of your requests by clicking Your requests from the menu bar shown in Fig. 9.3a. Occasionally there is a single error 500, in which case just run again. The other common error is that you have asked for too much data. If you are requesting a complete time series i.e. for all hours, days, and months, then the current limit appears to be approximately 5 years. This limit seems to be the same, irrespective of the area. Hence, for 30 years, make 6 separate requests, changing the years for each run. You do not need to wait for a request to complete before starting another one. Go to Your requests to see the status of each and download the data once complete.

+ ++++ + + + + + + + + + + + + +
Fig. 9.3g Generate a toolbox requestFig. 9.3h Names for each element
+

An alternative way to request data is through the Toolbox, shown in the menu bar of the homepage in Fig. 9.3a. Previously, it was not possible to select a sub-region through the interface described above, hence it was necessary to construct a Python script to run the Toolbox in order to do this. However, now that sub-region extraction is possible in the interface, we suggest it is sufficient to use the interface if your main interest is to download data for use in another software e.g. R or R-Instat.

+

An example Toolbox script to download hourly 2-metre temperature data for sub-region covering in Rwanda for 5 years in shown Fig. 9.3i. The Toolbox also includes functionality for processing, analysing and displaying data, however this is not covered here as we will demonstrate importing ERA5 data into R-Instat.

+ +++ + + + + + + + + + + +
Fig. 9.3i Sample toolbox code

import cdstoolbox as ct

+

@ct.application(title='Retrieve Data')

+

@ct.output.dataarray()

+

def retrieve_sample_data():

+

"""

+

Application main steps:

+

- retrieve 2m temperature of ERA5 from CDS Catalogue

+

- specify the grid - year(s) - month(s) - day(s) - hour(s)

+

- area is optional give N/W/S/E corners

+

- recommended for local analysis

+

- ask for netcdf format

+

"""

+

data = ct.catalogue.retrieve(

+

'reanalysis-era5-single-levels',

+

{

+

'variable': '2m_temperature',

+

'grid': ['0.25', '0.25'],

+

'product_type': 'reanalysis',

+

'year': [

+

'1981',‘1982’,‘1983’,‘1984’,‘1985’

+

],

+

'month': [

+

'01', '02', '03', '04', '05', '06','07', '08', '09', '10', '11', '12',

+

],

+

'day': [

+

'01', '02', '03', '04', '05', '06','07', '08', '09', '10', '11', '12',

+

'13', '14', '15', '16', '17', '18','19', '20', '21', '22', '23', '24',

+

'25', '26', '27', '28', '29', '30','31'

+

],

+

'time': [

+

'00:00','01:00','02:00','03:00','04:00','05:00',

+

'06:00','07:00','08:00','09:00','10:00','11:00',

+

'12:00','13:00','14:00','15:00','16:00','17:00',

+

'18:00','19:00','20:00','21:00','22:00','23:00'

+

],

+

'area': ['-1.5/30/-2.0/30.54'],

+

'format' : ['netcdf']

+

})

+

return data

+

The second stage is to read the resulting data into R-Instat. For those who were not online, the six files have also been renamed and copied into the R-Instat library.

+

Go into R-Instat and use File > Open and Tidy NetCDF File Fig. 9.3j.

+ ++++ + + + + + + + + + + + + +
Fig. 9.3j Loading the data for 1981-5Fig. 9.3k Six files in R-Instat
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTML145541b7.PNG
+

In Fig. 9.3j, if you downloaded your own data, then choose Browse, otherwise choose From Library and use the file called cds.Rwanda_1981_5.nc.

+

Then recall the last dialogue and include the other five files, up to cds.Rwanda_2005_10. The resulting data are shown in Fig. 9.3k. There are about 394,416 rows of data in each file (i.e. roughly 9 * 24 * 365 * 5)

+

The next step is to append the files to give the 30-year record. Use Climatic >Tidy and Examine > Append, Fig. 9.3l. In Fig. 9.3l, include all 6 data frame, then the ID column isn’t needed and the resulting data frame is named better than Append1.

+ ++++ + + + + + + + + + + + + +
Fig. 9.3l Appending the 6 data framesFig. 9.3m Temperatures into centigrade
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTML14701350.PNG
+

The data column in Fig. 9.3k, called tas, is in degrees Kelvin. Use Climatic > Prepare > Transform to change them into centigrade for comparison with the station data, Fig. 9.3m.

+

ECMWF provides the time variable always in GMT (Greenwich Mean Time). Rwanda is 2 hours ahead, so either, or both, the time variables in Fig. 9.3k need to be moved forward by 2 hours. To make this change the data should first be in “station” order. Hence first Right-Click and choose Sort (or use Prepare > Data Frame > Sort) to produce the dialogue in Fig. 9.3n.

+

Now use Prepare > Column: Calculate > Calculations as shown in Fig. 9.3o. In the calculator the Transform keyboard includes the lead function. The function, from the dplyr package is:

+

dplyr::lead(time_full,2), to move to Rwanda time. Pressing the Try button in Fig. 9.3o shows the first value is now 2am GMT[^47].

+ ++++ + + + + + + + + + + + + +
Fig. 9.3nFig. 9.3o
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTML14c5504c.PNG
+

Now use Climatic > Dates > Make Date to make a new Date column from the Rwanda hourly column, Fig. 9.3p.

+ ++++ + + + + + + + + + + + + +
Fig. 9.3pFig. 9.3q
+

Finally generate Tmax and Tmin, on a daily basis, from the hourly values, ready to use, or to compare with station data. First right-click and make the lon and lat columns into factors. The hourly data are now roughly as in Fig. 9.3q

+

Complete the Prepare > Column: Reshape > Column Summaries dialogue as shown in Fig. 9.3r. As these are temperatures the daily maximum and minimum are calculated. The resulting worksheet, Fig. 9.3s, has a more reasonable 100,000 rows of data at the 9 gridpoints.

+ ++++ + + + + + + + + + + + + +

Fig. 9.3r

+

Prepare > Column: Reshape > Column Summaries

+

(Make max and min the summaries)

Fig. 9.3s Resulting daily data
+
+
+

10.5 The IRI Data Store

+

A third source of gridded data considered here is the IRI Data Library. IRI is the International Research Institute for Climate and Society based in Colombia University, USA. The website for their data library is http://iridl.ldeo.columbia.edu/ , Fig. 9.4a. The IRI Data Store is a large repository of climate data from a wide variety of sources. In many cases, the IRI Data Store is not the only, or primary, source of the data, however the IRI Data Store provides a simple consistent way of freely downloading from a large set of sources, and crucially allows for selecting sub-regions.

+

As well as downloading from the website, R-Instat includes a dialog to directly download and import some of the common data from the IRI Data Store. We demonstrate both methods here, using the R-Instat dialog to download CHIRPS daily rainfall estimates and the IRI Data Store website to download information on ENSO and sea surface temperatures.

+
+

10.5.1 Downloading directly from R-Instat

+

Climate Hazards Group InfraRed Precipitation with Station data (CHIRPS), produced by Climate Hazards Center UC Santa Barbara, USA, is a near-global gridded rainfall data set, available from 1981 to near-present with a spatial resolution of 0.05°. It is constructed by combining satellite imagery and in-situ station data, and is available on a daily, dekad and monthly basis. It’s website is here https://www.chc.ucsb.edu/data/chirps but the data is more easily available to download and subset from the IRI Data Store. It is an example of one of the datasets available to download directly from R-Instat.

+

In R-Instat go to Climatic > File > Import from IRI Data Library, fig xxx. First select “UCSB CHIRPS” as the Source. We will download the daily data with the highest resolution available, hence choose “Daily Precipitation 0.05 degree” as the Data, fig xxx. Source shows a limited set of data sources available in the IRI Data Store which we think will be most commonly used by R-Instat users. If there is a dataset from the IRI Data Store that you commonly use and think we should add, please let us know and we can consider adding it to the dialog.

+

The next two sections of the dialog allow for choosing a subset of time or location. By default, “Entire Range” is selected for the data range. For CHIRPS, this means 1981 to near-present. We will use this option, but if you want a shorter time period choose “Custom Range” and select the “From” and “To” dates. The Location Range allows you to choose an area defined by longitude and latitude limits, or a single point, which will extract the nearest grid point to the location you provide. Let’s first choose a single point for Kigali, Rwanda at longitude 30.1 and latitude -1.95, fig xxx.

+

The dialog will connect to the IRI Data Library and download the requested data to your machine as a NetCDF file (.nc), a common format for gridded data (CM SAF and C3S Climate Data Store data are also provided in this format). Click Browse to choose where the download data will be saved to or accept the default of your Documents folder. Choose an appropriate name for the new data frame. Now, click Ok to download and import the data into R-Instat. It may take some time for the request to be processed (up to 30 minutes), particularly for requests that are for a long time period since data are usually stored in separate files for each time point. However, this does not mean the download will be a large file and the time can vary depending on how busy the IRI Data Library servers are. While waiting, you will see the R-Instat waiting dialog and the download progress bar. Do not worry if the progress bar does not move forward, this just means the request is still being processed. Once the request has been processed, the download will usually be small and take very little time. For example, this request should result in a download file of size ~0.1MB.

+

After finishing you will see the data imported into R-Instat, fig xxx. The NetCDF file has been downloaded to the location chosen on the dialog (Documents by default) and the file has been imported into a data frame in R-Instat. The data frame has five columns. X and Y are the location and this should be constant since we requested a single point. Notice that the value in Y is not exactly what we request. It is -1.97 and we request -1.95. This is because the closed grid point in the CHIRPS data grid to the provided location is selected. .T is time as a number and T_date is a more useful column that is created by R-Instat when importing as a Date column. prcp is precipitation. We can confirm this by looking at the column metadata: View > Column Metadata. Scroll to the end to see the “standard_name” and “units” columns which confirm what each column represents and its units, fig xxx. Click View > Column Metadata again to close the metadata. We can see that each row in the data represents a single day, starting on 1981-01-01. Use Describe > One Variable > Summaries, and select all columns to see a summary of the data. The output is shown in fig xxx. We see that X and Y are constant, as expected. .T is numeric and not that useful, but T_date show the data ranges from 1981-01-01 to 2020-08-31 (as of October 2020, usually 1 or 2 months behind the current date). prcp shows a sensible set of summaries for daily rainfall values. This is useful to do to confirm that the request is as you expected. For example, if X and Y are not constant but you wanted just a single point, then you may not have done the request correctly.

+

Notice that the data file is also stored on your machine in the folder you chose. For example, in Documents my file is called ucsb_chirps7f14482329.nc. If you need to import this data again, you can now use the file directly, without requesting it again from the IRI Data Store. See section xxx on how to import NetCDF files.

+

This data is useful for comparison with a single station in Kigali. We often have data from multiple stations and would wish to extract gridded data at each of the station locations. One way to do this would be to make separate requests for each station location using the Import from IRI Data Library multiple times. However, this becomes time consuming for many stations, particularly if the processing time is slow. Another option is to do a single request and download data for an area that covers all the station locations and then afterwards extract the data for the required locations.

+

So let’s to this by download the same data for an area that covers Rwanda instead of a single point. This will be a larger download file ~280MB but should not take much longer to process. If you have an internet connection able to download ~300MB of data then try the next steps below. If not, then this is just for reading.

+

Go back to the Import from IRI Data Library dialog. The Source, Data and Date Range options remain the same. Change the Location Range option from “Point” to “Area” and enter the values: longitude: min 28.5, max 30.5, latitude: min -2.5, max -1.4. This area covers the four stations in Rwanda found in the R-Instat Library. Choose the location to save the download or use the same location. Now, the data request is for approximately a 2 degrees by 1 degree area, which will give approximately (2 / 0.05) x (1 / 0.05) = 40 x 20 = 800 grid points, since the resolution is 0.05 degrees. We do not want to directly import all 800 grid points into R-Instat as this would be equivalent to 800 station records for 40 years. Instead, we want to download the data and then extract only a few grid points of interest afterwards. So we will check the option for “Don’t import data after downloading”. This removes the new data frame name as it will not import into R-Instat but will just download to your machine. Now click Ok and it may take a similar amount of time to complete.

+

After finishing you will not see any change in R-Instat but the file will be downloaded to the chosen folder. We can now use the dialog at Climatic > File > Import & Tidy NetCDF to import a subset of the grid points based on station locations. This is shown in section xxx.

+
+
+

10.5.2 Download from the IRI Data Store

+

As examples, information on ENSO and sea surface temperatures are accessed. The maproom also contains instructional information, so typing ENSO into the search, Fig. 9.4a, provides useful information, including the areas of the Pacific ocean associated with the NINO situations, Fig. 9.4b. Fig. 9.4b is accessed directly from https://iridl.ldeo.columbia.edu/maproom/ENSO/Diagnostics.html

+ ++++ + + + + + + + + + + + + +
Fig.9.4a IRI Data LibraryFig. 9.4b NINO3.4
+

In Fig. 9.4a click on Data by Category, then on Climate Indices, Fig. 9.4c and choose Indices nino EXTENDED, Fig. 9.4d.

+ ++++ + + + + + + + + + + + + +
Fig. 9.4c
+

Choose nino34, in Fig. 9.4e and then go straight to data files. The next screen shows a variety of output formats, including NetCDF, which you choose.

+ ++++ + + + + + + + + + + + + +
Fig. 9.4eFig. 9.4f
+

Now, in R-Instat, use File > Open and Tidy NetCDF File. If you followed the screens above, then browse for the file that was downloaded. Otherwise there is a copy in the R-Instat library to March 2019, Fig. 9.4g.

+ ++++ + + + + + + + + + + + + +
Fig. 9.4gFig. 9.4h
C:\Users\ROGERS~1\AppData\Local\Temp\SNAGHTMLda15af6.PNG
+

The data are now imported into R-Instat, Fig. 9.4h. The time variable has not been recognised as a date. You may wish to click on the I (for information – the metadata) and this will confirm that the column, called T, is months since January 1960. If the fact that some values appear the same in this column, then change the number of significant figures in that column, from 3 to 5.

+

The first value of T, in Fig. 9.4h is -1248. Dividing by 12 gives 104 years, so the data start in January 1856!

+

Use Climatic > Dates > Generate Dates, Fig. 9.4i. In Fig. 9.4i, change the starting date to January 1856, the end date to March 2019 (if using the library dataset), and the step to 1 Month. The resulting date column is shown in Fig. 9.4j.

+ ++++ + + + + + + + + + + + + +
Fig. 9.4iFig. 9.4j
+

Countries have their own definition of when the NINO3.4 implies a year, or season is El Niño, or La Niña, see https://en.wikipedia.org/wiki/El_Ni%C3%B1o, some use the NINO3.4 value and others use NINo3, or even NINO1 and 2. The site http://www.bom.gov.au/climate/enso/enlist/index.shtml gives a detailed description of El Niño events since 1900, Fig. 9.4k, with a companion page for La Niña.

+ ++++ + + + + + + + + + + + + +
Fig. 9.4kFig. 9.4l
+

The SSTs themselves are often used for seasonal forecasting. This is illustrated with the SSTs for the Nino3.4 region.

+

Return to the main page, Fig. 9.4a, then choose Data by Category again, but this time, in Fig. 9.4c, choose Air-Sea Interface. In the resulting screen, choose the NOAA NCDC ERSST version5, Fig. 9.4l.

+

In the resulting screen, Fig. 9.4m, choose anomalies and then Data Selection.

+ ++++ + + + + + + + + + + + + +
Fig. 9.4mFig. 9.4n
+

Set the time, attitude and longitude as shown in Fig. 9.4n and then Restrict Ranges. The part at the top of Fig. 9.4n should change accordingly and you now press Stop Selecting.

+

Fig. 9.4m now has the three ranges added, in blue, Fig. 9.4o. Click on Data Files to give the same as Fig. 9.4f, earlier. Choose the NetCDF option again to download the file.

+ ++++ + + + + + + + + + + + + +
Fig. 9.4oFig. 9.4p
+

Use the File > Input and Tidy NetCDF File as in Fig. 9.4g. Then use the Climatic > Dates > Generate Dates dialogue as shown in Fig. 9.4p. In Fig. 9.4p, remember to change to the new data frame. Then set the starting date to January 1921 and there are now 130 values (26 E-W, by 5 N-S) at each time point.

+

In Fig. 9.4p, if all is correct, the generated sequence should match the length of the data frame. Once accepted, the resulting data frame is shown in Fig. 9.4q. Here each pixel is a 2 degree square, so the first row is the temperature anomaly round 120°W and 4°S for January 1921.

+ +++ + + + + + + + + + + +
Fig. 9.4q
+
+
+
+

10.6 Using the CM SAF toolbox for NetCDF files

+

The CM SAF toolbox is an R software package designed to process the NetCDF files downloaded from EUMETSAT, Section 9.3. It is used on the downloaded files from EUMETSAT (or from other organisations who have NetCDF files). This may be all you need, if your interest is in some products from the EUMETSAT data. Or it may be before using R-Instat if your interest is in comparing station and satellite data.

+
+
+

10.7 Defining ENSO

+

See https://www.ncdc.noaa.gov/teleconnections/enso/indicators/sst/

+

Warm and cold phases are defined as a minimum of five consecutive 3-month running mean of SST anomalies (ERSST.v5) in the Niño 3.4 region surpassing a threshold of +/- 0.5°C

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/index.html b/_book/index.html new file mode 100644 index 0000000..b2071cd --- /dev/null +++ b/_book/index.html @@ -0,0 +1,744 @@ + + + + + + + + + + + +R-Instat Climatic Guide + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

R-Instat Climatic Guide

+
+ + + +
+ +
+
Author
+
+

Roger Stern, Danny Parsons, David Stern, Francis Torgbor & James Musyoka

+
+
+ +
+
Published
+
+

January 6, 2025

+
+
+ + +
+ + + +
+ + +
+

1 Acknowledgments

+

To be added.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/_book/site_libs/bootstrap/bootstrap-icons.css b/_book/site_libs/bootstrap/bootstrap-icons.css new file mode 100644 index 0000000..285e444 --- /dev/null +++ b/_book/site_libs/bootstrap/bootstrap-icons.css @@ -0,0 +1,2078 @@ +/*! + * Bootstrap Icons v1.11.1 (https://icons.getbootstrap.com/) + * Copyright 2019-2023 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE) + */ + +@font-face { + font-display: block; + font-family: "bootstrap-icons"; + src: +url("./bootstrap-icons.woff?2820a3852bdb9a5832199cc61cec4e65") format("woff"); +} + +.bi::before, +[class^="bi-"]::before, +[class*=" bi-"]::before { + display: inline-block; + font-family: bootstrap-icons !important; + font-style: normal; + font-weight: normal !important; + font-variant: normal; + text-transform: none; + line-height: 1; + vertical-align: -.125em; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.bi-123::before { content: "\f67f"; } +.bi-alarm-fill::before { content: "\f101"; } +.bi-alarm::before { content: "\f102"; } +.bi-align-bottom::before { content: "\f103"; } +.bi-align-center::before { content: "\f104"; } +.bi-align-end::before { content: "\f105"; } +.bi-align-middle::before { content: "\f106"; } +.bi-align-start::before { content: "\f107"; } +.bi-align-top::before { content: "\f108"; } +.bi-alt::before { content: "\f109"; } +.bi-app-indicator::before { content: "\f10a"; } +.bi-app::before { content: "\f10b"; } +.bi-archive-fill::before { content: "\f10c"; } +.bi-archive::before { content: "\f10d"; } +.bi-arrow-90deg-down::before { content: "\f10e"; } +.bi-arrow-90deg-left::before { content: "\f10f"; } +.bi-arrow-90deg-right::before { content: "\f110"; } +.bi-arrow-90deg-up::before { content: "\f111"; } +.bi-arrow-bar-down::before { content: "\f112"; } +.bi-arrow-bar-left::before { content: "\f113"; } +.bi-arrow-bar-right::before { content: "\f114"; } +.bi-arrow-bar-up::before { content: "\f115"; } +.bi-arrow-clockwise::before { content: "\f116"; } +.bi-arrow-counterclockwise::before { content: "\f117"; } +.bi-arrow-down-circle-fill::before { content: "\f118"; } +.bi-arrow-down-circle::before { content: "\f119"; } +.bi-arrow-down-left-circle-fill::before { content: "\f11a"; } +.bi-arrow-down-left-circle::before { content: "\f11b"; } +.bi-arrow-down-left-square-fill::before { content: "\f11c"; } +.bi-arrow-down-left-square::before { content: "\f11d"; } +.bi-arrow-down-left::before { content: "\f11e"; } +.bi-arrow-down-right-circle-fill::before { content: "\f11f"; } +.bi-arrow-down-right-circle::before { content: "\f120"; } +.bi-arrow-down-right-square-fill::before { content: "\f121"; } +.bi-arrow-down-right-square::before { content: "\f122"; } +.bi-arrow-down-right::before { content: "\f123"; } +.bi-arrow-down-short::before { content: "\f124"; } +.bi-arrow-down-square-fill::before { content: "\f125"; } +.bi-arrow-down-square::before { content: "\f126"; } +.bi-arrow-down-up::before { content: "\f127"; } +.bi-arrow-down::before { content: "\f128"; } +.bi-arrow-left-circle-fill::before { content: "\f129"; } +.bi-arrow-left-circle::before { content: "\f12a"; } +.bi-arrow-left-right::before { content: "\f12b"; } +.bi-arrow-left-short::before { content: "\f12c"; } +.bi-arrow-left-square-fill::before { content: "\f12d"; } +.bi-arrow-left-square::before { content: "\f12e"; } +.bi-arrow-left::before { content: "\f12f"; } +.bi-arrow-repeat::before { content: "\f130"; } +.bi-arrow-return-left::before { content: "\f131"; } +.bi-arrow-return-right::before { content: "\f132"; } +.bi-arrow-right-circle-fill::before { content: "\f133"; } +.bi-arrow-right-circle::before { content: "\f134"; } +.bi-arrow-right-short::before { content: "\f135"; } +.bi-arrow-right-square-fill::before { content: "\f136"; } +.bi-arrow-right-square::before { content: "\f137"; } +.bi-arrow-right::before { content: "\f138"; } +.bi-arrow-up-circle-fill::before { content: "\f139"; } +.bi-arrow-up-circle::before { content: "\f13a"; } +.bi-arrow-up-left-circle-fill::before { content: "\f13b"; } +.bi-arrow-up-left-circle::before { content: "\f13c"; } +.bi-arrow-up-left-square-fill::before { content: "\f13d"; } +.bi-arrow-up-left-square::before { content: "\f13e"; } +.bi-arrow-up-left::before { content: "\f13f"; } +.bi-arrow-up-right-circle-fill::before { content: "\f140"; } +.bi-arrow-up-right-circle::before { content: "\f141"; } +.bi-arrow-up-right-square-fill::before { content: "\f142"; } +.bi-arrow-up-right-square::before { content: "\f143"; } +.bi-arrow-up-right::before { content: "\f144"; } +.bi-arrow-up-short::before { content: "\f145"; } +.bi-arrow-up-square-fill::before { content: "\f146"; } +.bi-arrow-up-square::before { content: "\f147"; } +.bi-arrow-up::before { content: "\f148"; } +.bi-arrows-angle-contract::before { content: "\f149"; } +.bi-arrows-angle-expand::before { content: "\f14a"; } +.bi-arrows-collapse::before { content: "\f14b"; } +.bi-arrows-expand::before { content: "\f14c"; } +.bi-arrows-fullscreen::before { content: "\f14d"; } +.bi-arrows-move::before { content: "\f14e"; } +.bi-aspect-ratio-fill::before { content: "\f14f"; } +.bi-aspect-ratio::before { content: "\f150"; } +.bi-asterisk::before { content: "\f151"; } +.bi-at::before { content: "\f152"; } +.bi-award-fill::before { content: "\f153"; } +.bi-award::before { content: "\f154"; } +.bi-back::before { content: "\f155"; } +.bi-backspace-fill::before { content: "\f156"; } +.bi-backspace-reverse-fill::before { content: "\f157"; } +.bi-backspace-reverse::before { content: "\f158"; } +.bi-backspace::before { content: "\f159"; } +.bi-badge-3d-fill::before { content: "\f15a"; } +.bi-badge-3d::before { content: "\f15b"; } +.bi-badge-4k-fill::before { content: "\f15c"; } +.bi-badge-4k::before { content: "\f15d"; } +.bi-badge-8k-fill::before { content: "\f15e"; } +.bi-badge-8k::before { content: "\f15f"; } +.bi-badge-ad-fill::before { content: "\f160"; } +.bi-badge-ad::before { content: "\f161"; } +.bi-badge-ar-fill::before { content: "\f162"; } +.bi-badge-ar::before { content: "\f163"; } +.bi-badge-cc-fill::before { content: "\f164"; } +.bi-badge-cc::before { content: "\f165"; } +.bi-badge-hd-fill::before { content: "\f166"; } +.bi-badge-hd::before { content: "\f167"; } +.bi-badge-tm-fill::before { content: "\f168"; } +.bi-badge-tm::before { content: "\f169"; } +.bi-badge-vo-fill::before { content: "\f16a"; } +.bi-badge-vo::before { content: "\f16b"; } +.bi-badge-vr-fill::before { content: "\f16c"; } +.bi-badge-vr::before { content: "\f16d"; } +.bi-badge-wc-fill::before { content: "\f16e"; } +.bi-badge-wc::before { content: "\f16f"; } +.bi-bag-check-fill::before { content: "\f170"; } +.bi-bag-check::before { content: "\f171"; } +.bi-bag-dash-fill::before { content: "\f172"; } +.bi-bag-dash::before { content: "\f173"; } +.bi-bag-fill::before { content: "\f174"; } +.bi-bag-plus-fill::before { content: "\f175"; } +.bi-bag-plus::before { content: "\f176"; } +.bi-bag-x-fill::before { content: "\f177"; } +.bi-bag-x::before { content: "\f178"; } +.bi-bag::before { content: "\f179"; } +.bi-bar-chart-fill::before { content: "\f17a"; } +.bi-bar-chart-line-fill::before { content: "\f17b"; } +.bi-bar-chart-line::before { content: "\f17c"; } +.bi-bar-chart-steps::before { content: "\f17d"; } +.bi-bar-chart::before { content: "\f17e"; } +.bi-basket-fill::before { content: "\f17f"; } +.bi-basket::before { content: "\f180"; } +.bi-basket2-fill::before { content: "\f181"; } +.bi-basket2::before { content: "\f182"; } +.bi-basket3-fill::before { content: "\f183"; } +.bi-basket3::before { content: "\f184"; } +.bi-battery-charging::before { content: "\f185"; } +.bi-battery-full::before { content: "\f186"; } +.bi-battery-half::before { content: "\f187"; } +.bi-battery::before { content: "\f188"; } +.bi-bell-fill::before { content: "\f189"; } +.bi-bell::before { content: "\f18a"; } +.bi-bezier::before { content: "\f18b"; } +.bi-bezier2::before { content: "\f18c"; } +.bi-bicycle::before { content: "\f18d"; } +.bi-binoculars-fill::before { content: "\f18e"; } +.bi-binoculars::before { content: "\f18f"; } +.bi-blockquote-left::before { content: "\f190"; } +.bi-blockquote-right::before { content: "\f191"; } +.bi-book-fill::before { content: "\f192"; } +.bi-book-half::before { content: "\f193"; } +.bi-book::before { content: "\f194"; } +.bi-bookmark-check-fill::before { content: "\f195"; } +.bi-bookmark-check::before { content: "\f196"; } +.bi-bookmark-dash-fill::before { content: "\f197"; } +.bi-bookmark-dash::before { content: "\f198"; } +.bi-bookmark-fill::before { content: "\f199"; } +.bi-bookmark-heart-fill::before { content: "\f19a"; } +.bi-bookmark-heart::before { content: "\f19b"; } +.bi-bookmark-plus-fill::before { content: "\f19c"; } +.bi-bookmark-plus::before { content: "\f19d"; } +.bi-bookmark-star-fill::before { content: "\f19e"; } +.bi-bookmark-star::before { content: "\f19f"; } +.bi-bookmark-x-fill::before { content: "\f1a0"; } +.bi-bookmark-x::before { content: "\f1a1"; } +.bi-bookmark::before { content: "\f1a2"; } +.bi-bookmarks-fill::before { content: "\f1a3"; } +.bi-bookmarks::before { content: "\f1a4"; } +.bi-bookshelf::before { content: "\f1a5"; } +.bi-bootstrap-fill::before { content: "\f1a6"; } +.bi-bootstrap-reboot::before { content: "\f1a7"; } +.bi-bootstrap::before { content: "\f1a8"; } +.bi-border-all::before { content: "\f1a9"; } +.bi-border-bottom::before { content: "\f1aa"; } +.bi-border-center::before { content: "\f1ab"; } +.bi-border-inner::before { content: "\f1ac"; } +.bi-border-left::before { content: "\f1ad"; } +.bi-border-middle::before { content: "\f1ae"; } +.bi-border-outer::before { content: "\f1af"; } +.bi-border-right::before { content: "\f1b0"; } +.bi-border-style::before { content: "\f1b1"; } +.bi-border-top::before { content: "\f1b2"; } +.bi-border-width::before { content: "\f1b3"; } +.bi-border::before { content: "\f1b4"; } +.bi-bounding-box-circles::before { content: "\f1b5"; } +.bi-bounding-box::before { content: "\f1b6"; } +.bi-box-arrow-down-left::before { content: "\f1b7"; } +.bi-box-arrow-down-right::before { content: "\f1b8"; } +.bi-box-arrow-down::before { content: "\f1b9"; } +.bi-box-arrow-in-down-left::before { content: "\f1ba"; } +.bi-box-arrow-in-down-right::before { content: "\f1bb"; } +.bi-box-arrow-in-down::before { content: "\f1bc"; } +.bi-box-arrow-in-left::before { content: "\f1bd"; } +.bi-box-arrow-in-right::before { content: "\f1be"; } +.bi-box-arrow-in-up-left::before { content: "\f1bf"; } +.bi-box-arrow-in-up-right::before { content: "\f1c0"; } +.bi-box-arrow-in-up::before { content: "\f1c1"; } +.bi-box-arrow-left::before { content: "\f1c2"; } +.bi-box-arrow-right::before { content: "\f1c3"; } +.bi-box-arrow-up-left::before { content: "\f1c4"; } +.bi-box-arrow-up-right::before { content: "\f1c5"; } +.bi-box-arrow-up::before { content: "\f1c6"; } +.bi-box-seam::before { content: "\f1c7"; } +.bi-box::before { content: "\f1c8"; } +.bi-braces::before { content: "\f1c9"; } +.bi-bricks::before { content: "\f1ca"; } +.bi-briefcase-fill::before { content: "\f1cb"; } +.bi-briefcase::before { content: "\f1cc"; } +.bi-brightness-alt-high-fill::before { content: "\f1cd"; } +.bi-brightness-alt-high::before { content: "\f1ce"; } +.bi-brightness-alt-low-fill::before { content: "\f1cf"; } +.bi-brightness-alt-low::before { content: "\f1d0"; } +.bi-brightness-high-fill::before { content: "\f1d1"; } +.bi-brightness-high::before { content: "\f1d2"; } +.bi-brightness-low-fill::before { content: "\f1d3"; } +.bi-brightness-low::before { content: "\f1d4"; } +.bi-broadcast-pin::before { content: "\f1d5"; } +.bi-broadcast::before { content: "\f1d6"; } +.bi-brush-fill::before { content: "\f1d7"; } +.bi-brush::before { content: "\f1d8"; } +.bi-bucket-fill::before { content: "\f1d9"; } +.bi-bucket::before { content: "\f1da"; } +.bi-bug-fill::before { content: "\f1db"; } +.bi-bug::before { content: "\f1dc"; } +.bi-building::before { content: "\f1dd"; } +.bi-bullseye::before { content: "\f1de"; } +.bi-calculator-fill::before { content: "\f1df"; } +.bi-calculator::before { content: "\f1e0"; } +.bi-calendar-check-fill::before { content: "\f1e1"; } +.bi-calendar-check::before { content: "\f1e2"; } +.bi-calendar-date-fill::before { content: "\f1e3"; } +.bi-calendar-date::before { content: "\f1e4"; } +.bi-calendar-day-fill::before { content: "\f1e5"; } +.bi-calendar-day::before { content: "\f1e6"; } +.bi-calendar-event-fill::before { content: "\f1e7"; } +.bi-calendar-event::before { content: "\f1e8"; } +.bi-calendar-fill::before { content: "\f1e9"; } +.bi-calendar-minus-fill::before { content: "\f1ea"; } +.bi-calendar-minus::before { content: "\f1eb"; } +.bi-calendar-month-fill::before { content: "\f1ec"; } +.bi-calendar-month::before { content: "\f1ed"; } +.bi-calendar-plus-fill::before { content: "\f1ee"; } +.bi-calendar-plus::before { content: "\f1ef"; } +.bi-calendar-range-fill::before { content: "\f1f0"; } +.bi-calendar-range::before { content: "\f1f1"; } +.bi-calendar-week-fill::before { content: "\f1f2"; } +.bi-calendar-week::before { content: "\f1f3"; } +.bi-calendar-x-fill::before { content: "\f1f4"; } +.bi-calendar-x::before { content: "\f1f5"; } +.bi-calendar::before { content: "\f1f6"; } +.bi-calendar2-check-fill::before { content: "\f1f7"; } +.bi-calendar2-check::before { content: "\f1f8"; } +.bi-calendar2-date-fill::before { content: "\f1f9"; } +.bi-calendar2-date::before { content: "\f1fa"; } +.bi-calendar2-day-fill::before { content: "\f1fb"; } +.bi-calendar2-day::before { content: "\f1fc"; } +.bi-calendar2-event-fill::before { content: "\f1fd"; } +.bi-calendar2-event::before { content: "\f1fe"; } +.bi-calendar2-fill::before { content: "\f1ff"; } +.bi-calendar2-minus-fill::before { content: "\f200"; } +.bi-calendar2-minus::before { content: "\f201"; } +.bi-calendar2-month-fill::before { content: "\f202"; } +.bi-calendar2-month::before { content: "\f203"; } +.bi-calendar2-plus-fill::before { content: "\f204"; } +.bi-calendar2-plus::before { content: "\f205"; } +.bi-calendar2-range-fill::before { content: "\f206"; } +.bi-calendar2-range::before { content: "\f207"; } +.bi-calendar2-week-fill::before { content: "\f208"; } +.bi-calendar2-week::before { content: "\f209"; } +.bi-calendar2-x-fill::before { content: "\f20a"; } +.bi-calendar2-x::before { content: "\f20b"; } +.bi-calendar2::before { content: "\f20c"; } +.bi-calendar3-event-fill::before { content: "\f20d"; } +.bi-calendar3-event::before { content: "\f20e"; } +.bi-calendar3-fill::before { content: "\f20f"; } +.bi-calendar3-range-fill::before { content: "\f210"; } +.bi-calendar3-range::before { content: "\f211"; } +.bi-calendar3-week-fill::before { content: "\f212"; } +.bi-calendar3-week::before { content: "\f213"; } +.bi-calendar3::before { content: "\f214"; } +.bi-calendar4-event::before { content: "\f215"; } +.bi-calendar4-range::before { content: "\f216"; } +.bi-calendar4-week::before { content: "\f217"; } +.bi-calendar4::before { content: "\f218"; } +.bi-camera-fill::before { content: "\f219"; } +.bi-camera-reels-fill::before { content: "\f21a"; } +.bi-camera-reels::before { content: "\f21b"; } +.bi-camera-video-fill::before { content: "\f21c"; } +.bi-camera-video-off-fill::before { content: "\f21d"; } +.bi-camera-video-off::before { content: "\f21e"; } +.bi-camera-video::before { content: "\f21f"; } +.bi-camera::before { content: "\f220"; } +.bi-camera2::before { content: "\f221"; } +.bi-capslock-fill::before { content: "\f222"; } +.bi-capslock::before { content: "\f223"; } +.bi-card-checklist::before { content: "\f224"; } +.bi-card-heading::before { content: "\f225"; } +.bi-card-image::before { content: "\f226"; } +.bi-card-list::before { content: "\f227"; } +.bi-card-text::before { content: "\f228"; } +.bi-caret-down-fill::before { content: "\f229"; } +.bi-caret-down-square-fill::before { content: "\f22a"; } +.bi-caret-down-square::before { content: "\f22b"; } +.bi-caret-down::before { content: "\f22c"; } +.bi-caret-left-fill::before { content: "\f22d"; } +.bi-caret-left-square-fill::before { content: "\f22e"; } +.bi-caret-left-square::before { content: "\f22f"; } +.bi-caret-left::before { content: "\f230"; } +.bi-caret-right-fill::before { content: "\f231"; } +.bi-caret-right-square-fill::before { content: "\f232"; } +.bi-caret-right-square::before { content: "\f233"; } +.bi-caret-right::before { content: "\f234"; } +.bi-caret-up-fill::before { content: "\f235"; } +.bi-caret-up-square-fill::before { content: "\f236"; } +.bi-caret-up-square::before { content: "\f237"; } +.bi-caret-up::before { content: "\f238"; } +.bi-cart-check-fill::before { content: "\f239"; } +.bi-cart-check::before { content: "\f23a"; } +.bi-cart-dash-fill::before { content: "\f23b"; } +.bi-cart-dash::before { content: "\f23c"; } +.bi-cart-fill::before { content: "\f23d"; } +.bi-cart-plus-fill::before { content: "\f23e"; } +.bi-cart-plus::before { content: "\f23f"; } +.bi-cart-x-fill::before { content: "\f240"; } +.bi-cart-x::before { content: "\f241"; } +.bi-cart::before { content: "\f242"; } +.bi-cart2::before { content: "\f243"; } +.bi-cart3::before { content: "\f244"; } +.bi-cart4::before { content: "\f245"; } +.bi-cash-stack::before { content: "\f246"; } +.bi-cash::before { content: "\f247"; } +.bi-cast::before { content: "\f248"; } +.bi-chat-dots-fill::before { content: "\f249"; } +.bi-chat-dots::before { content: "\f24a"; } +.bi-chat-fill::before { content: "\f24b"; } +.bi-chat-left-dots-fill::before { content: "\f24c"; } +.bi-chat-left-dots::before { content: "\f24d"; } +.bi-chat-left-fill::before { content: "\f24e"; } +.bi-chat-left-quote-fill::before { content: "\f24f"; } +.bi-chat-left-quote::before { content: "\f250"; } +.bi-chat-left-text-fill::before { content: "\f251"; } +.bi-chat-left-text::before { content: "\f252"; } +.bi-chat-left::before { content: "\f253"; } +.bi-chat-quote-fill::before { content: "\f254"; } +.bi-chat-quote::before { content: "\f255"; } +.bi-chat-right-dots-fill::before { content: "\f256"; } +.bi-chat-right-dots::before { content: "\f257"; } +.bi-chat-right-fill::before { content: "\f258"; } +.bi-chat-right-quote-fill::before { content: "\f259"; } +.bi-chat-right-quote::before { content: "\f25a"; } +.bi-chat-right-text-fill::before { content: "\f25b"; } +.bi-chat-right-text::before { content: "\f25c"; } +.bi-chat-right::before { content: "\f25d"; } +.bi-chat-square-dots-fill::before { content: "\f25e"; } +.bi-chat-square-dots::before { content: "\f25f"; } +.bi-chat-square-fill::before { content: "\f260"; } +.bi-chat-square-quote-fill::before { content: "\f261"; } +.bi-chat-square-quote::before { content: "\f262"; } +.bi-chat-square-text-fill::before { content: "\f263"; } +.bi-chat-square-text::before { content: "\f264"; } +.bi-chat-square::before { content: "\f265"; } +.bi-chat-text-fill::before { content: "\f266"; } +.bi-chat-text::before { content: "\f267"; } +.bi-chat::before { content: "\f268"; } +.bi-check-all::before { content: "\f269"; } +.bi-check-circle-fill::before { content: "\f26a"; } +.bi-check-circle::before { content: "\f26b"; } +.bi-check-square-fill::before { content: "\f26c"; } +.bi-check-square::before { content: "\f26d"; } +.bi-check::before { content: "\f26e"; } +.bi-check2-all::before { content: "\f26f"; } +.bi-check2-circle::before { content: "\f270"; } +.bi-check2-square::before { content: "\f271"; } +.bi-check2::before { content: "\f272"; } +.bi-chevron-bar-contract::before { content: "\f273"; } +.bi-chevron-bar-down::before { content: "\f274"; } +.bi-chevron-bar-expand::before { content: "\f275"; } +.bi-chevron-bar-left::before { content: "\f276"; } +.bi-chevron-bar-right::before { content: "\f277"; } +.bi-chevron-bar-up::before { content: "\f278"; } +.bi-chevron-compact-down::before { content: "\f279"; } +.bi-chevron-compact-left::before { content: "\f27a"; } +.bi-chevron-compact-right::before { content: "\f27b"; } +.bi-chevron-compact-up::before { content: "\f27c"; } +.bi-chevron-contract::before { content: "\f27d"; } +.bi-chevron-double-down::before { content: "\f27e"; } +.bi-chevron-double-left::before { content: "\f27f"; } +.bi-chevron-double-right::before { content: "\f280"; } +.bi-chevron-double-up::before { content: "\f281"; } +.bi-chevron-down::before { content: "\f282"; } +.bi-chevron-expand::before { content: "\f283"; } +.bi-chevron-left::before { content: "\f284"; } +.bi-chevron-right::before { content: "\f285"; } +.bi-chevron-up::before { content: "\f286"; } +.bi-circle-fill::before { content: "\f287"; } +.bi-circle-half::before { content: "\f288"; } +.bi-circle-square::before { content: "\f289"; } +.bi-circle::before { content: "\f28a"; } +.bi-clipboard-check::before { content: "\f28b"; } +.bi-clipboard-data::before { content: "\f28c"; } +.bi-clipboard-minus::before { content: "\f28d"; } +.bi-clipboard-plus::before { content: "\f28e"; } +.bi-clipboard-x::before { content: "\f28f"; } +.bi-clipboard::before { content: "\f290"; } +.bi-clock-fill::before { content: "\f291"; } +.bi-clock-history::before { content: "\f292"; } +.bi-clock::before { content: "\f293"; } +.bi-cloud-arrow-down-fill::before { content: "\f294"; } +.bi-cloud-arrow-down::before { content: "\f295"; } +.bi-cloud-arrow-up-fill::before { content: "\f296"; } +.bi-cloud-arrow-up::before { content: "\f297"; } +.bi-cloud-check-fill::before { content: "\f298"; } +.bi-cloud-check::before { content: "\f299"; } +.bi-cloud-download-fill::before { content: "\f29a"; } +.bi-cloud-download::before { content: "\f29b"; } +.bi-cloud-drizzle-fill::before { content: "\f29c"; } +.bi-cloud-drizzle::before { content: "\f29d"; } +.bi-cloud-fill::before { content: "\f29e"; } +.bi-cloud-fog-fill::before { content: "\f29f"; } +.bi-cloud-fog::before { content: "\f2a0"; } +.bi-cloud-fog2-fill::before { content: "\f2a1"; } +.bi-cloud-fog2::before { content: "\f2a2"; } +.bi-cloud-hail-fill::before { content: "\f2a3"; } +.bi-cloud-hail::before { content: "\f2a4"; } +.bi-cloud-haze-fill::before { content: "\f2a6"; } +.bi-cloud-haze::before { content: "\f2a7"; } +.bi-cloud-haze2-fill::before { content: "\f2a8"; } +.bi-cloud-lightning-fill::before { content: "\f2a9"; } +.bi-cloud-lightning-rain-fill::before { content: "\f2aa"; } +.bi-cloud-lightning-rain::before { content: "\f2ab"; } +.bi-cloud-lightning::before { content: "\f2ac"; } +.bi-cloud-minus-fill::before { content: "\f2ad"; } +.bi-cloud-minus::before { content: "\f2ae"; } +.bi-cloud-moon-fill::before { content: "\f2af"; } +.bi-cloud-moon::before { content: "\f2b0"; } +.bi-cloud-plus-fill::before { content: "\f2b1"; } +.bi-cloud-plus::before { content: "\f2b2"; } +.bi-cloud-rain-fill::before { content: "\f2b3"; } +.bi-cloud-rain-heavy-fill::before { content: "\f2b4"; } +.bi-cloud-rain-heavy::before { content: "\f2b5"; } +.bi-cloud-rain::before { content: "\f2b6"; } +.bi-cloud-slash-fill::before { content: "\f2b7"; } +.bi-cloud-slash::before { content: "\f2b8"; } +.bi-cloud-sleet-fill::before { content: "\f2b9"; } +.bi-cloud-sleet::before { content: "\f2ba"; } +.bi-cloud-snow-fill::before { content: "\f2bb"; } +.bi-cloud-snow::before { content: "\f2bc"; } +.bi-cloud-sun-fill::before { content: "\f2bd"; } +.bi-cloud-sun::before { content: "\f2be"; } +.bi-cloud-upload-fill::before { content: "\f2bf"; } +.bi-cloud-upload::before { content: "\f2c0"; } +.bi-cloud::before { content: "\f2c1"; } +.bi-clouds-fill::before { content: "\f2c2"; } +.bi-clouds::before { content: "\f2c3"; } +.bi-cloudy-fill::before { content: "\f2c4"; } +.bi-cloudy::before { content: "\f2c5"; } +.bi-code-slash::before { content: "\f2c6"; } +.bi-code-square::before { content: "\f2c7"; } +.bi-code::before { content: "\f2c8"; } +.bi-collection-fill::before { content: "\f2c9"; } +.bi-collection-play-fill::before { content: "\f2ca"; } +.bi-collection-play::before { content: "\f2cb"; } +.bi-collection::before { content: "\f2cc"; } +.bi-columns-gap::before { content: "\f2cd"; } +.bi-columns::before { content: "\f2ce"; } +.bi-command::before { content: "\f2cf"; } +.bi-compass-fill::before { content: "\f2d0"; } +.bi-compass::before { content: "\f2d1"; } +.bi-cone-striped::before { content: "\f2d2"; } +.bi-cone::before { content: "\f2d3"; } +.bi-controller::before { content: "\f2d4"; } +.bi-cpu-fill::before { content: "\f2d5"; } +.bi-cpu::before { content: "\f2d6"; } +.bi-credit-card-2-back-fill::before { content: "\f2d7"; } +.bi-credit-card-2-back::before { content: "\f2d8"; } +.bi-credit-card-2-front-fill::before { content: "\f2d9"; } +.bi-credit-card-2-front::before { content: "\f2da"; } +.bi-credit-card-fill::before { content: "\f2db"; } +.bi-credit-card::before { content: "\f2dc"; } +.bi-crop::before { content: "\f2dd"; } +.bi-cup-fill::before { content: "\f2de"; } +.bi-cup-straw::before { content: "\f2df"; } +.bi-cup::before { content: "\f2e0"; } +.bi-cursor-fill::before { content: "\f2e1"; } +.bi-cursor-text::before { content: "\f2e2"; } +.bi-cursor::before { content: "\f2e3"; } +.bi-dash-circle-dotted::before { content: "\f2e4"; } +.bi-dash-circle-fill::before { content: "\f2e5"; } +.bi-dash-circle::before { content: "\f2e6"; } +.bi-dash-square-dotted::before { content: "\f2e7"; } +.bi-dash-square-fill::before { content: "\f2e8"; } +.bi-dash-square::before { content: "\f2e9"; } +.bi-dash::before { content: "\f2ea"; } +.bi-diagram-2-fill::before { content: "\f2eb"; } +.bi-diagram-2::before { content: "\f2ec"; } +.bi-diagram-3-fill::before { content: "\f2ed"; } +.bi-diagram-3::before { content: "\f2ee"; } +.bi-diamond-fill::before { content: "\f2ef"; } +.bi-diamond-half::before { content: "\f2f0"; } +.bi-diamond::before { content: "\f2f1"; } +.bi-dice-1-fill::before { content: "\f2f2"; } +.bi-dice-1::before { content: "\f2f3"; } +.bi-dice-2-fill::before { content: "\f2f4"; } +.bi-dice-2::before { content: "\f2f5"; } +.bi-dice-3-fill::before { content: "\f2f6"; } +.bi-dice-3::before { content: "\f2f7"; } +.bi-dice-4-fill::before { content: "\f2f8"; } +.bi-dice-4::before { content: "\f2f9"; } +.bi-dice-5-fill::before { content: "\f2fa"; } +.bi-dice-5::before { content: "\f2fb"; } +.bi-dice-6-fill::before { content: "\f2fc"; } +.bi-dice-6::before { content: "\f2fd"; } +.bi-disc-fill::before { content: "\f2fe"; } +.bi-disc::before { content: "\f2ff"; } +.bi-discord::before { content: "\f300"; } +.bi-display-fill::before { content: "\f301"; } +.bi-display::before { content: "\f302"; } +.bi-distribute-horizontal::before { content: "\f303"; } +.bi-distribute-vertical::before { content: "\f304"; } +.bi-door-closed-fill::before { content: "\f305"; } +.bi-door-closed::before { content: "\f306"; } +.bi-door-open-fill::before { content: "\f307"; } +.bi-door-open::before { content: "\f308"; } +.bi-dot::before { content: "\f309"; } +.bi-download::before { content: "\f30a"; } +.bi-droplet-fill::before { content: "\f30b"; } +.bi-droplet-half::before { content: "\f30c"; } +.bi-droplet::before { content: "\f30d"; } +.bi-earbuds::before { content: "\f30e"; } +.bi-easel-fill::before { content: "\f30f"; } +.bi-easel::before { content: "\f310"; } +.bi-egg-fill::before { content: "\f311"; } +.bi-egg-fried::before { content: "\f312"; } +.bi-egg::before { content: "\f313"; } +.bi-eject-fill::before { content: "\f314"; } +.bi-eject::before { content: "\f315"; } +.bi-emoji-angry-fill::before { content: "\f316"; } +.bi-emoji-angry::before { content: "\f317"; } +.bi-emoji-dizzy-fill::before { content: "\f318"; } +.bi-emoji-dizzy::before { content: "\f319"; } +.bi-emoji-expressionless-fill::before { content: "\f31a"; } +.bi-emoji-expressionless::before { content: "\f31b"; } +.bi-emoji-frown-fill::before { content: "\f31c"; } +.bi-emoji-frown::before { content: "\f31d"; } +.bi-emoji-heart-eyes-fill::before { content: "\f31e"; } +.bi-emoji-heart-eyes::before { content: "\f31f"; } +.bi-emoji-laughing-fill::before { content: "\f320"; } +.bi-emoji-laughing::before { content: "\f321"; } +.bi-emoji-neutral-fill::before { content: "\f322"; } +.bi-emoji-neutral::before { content: "\f323"; } +.bi-emoji-smile-fill::before { content: "\f324"; } +.bi-emoji-smile-upside-down-fill::before { content: "\f325"; } +.bi-emoji-smile-upside-down::before { content: "\f326"; } +.bi-emoji-smile::before { content: "\f327"; } +.bi-emoji-sunglasses-fill::before { content: "\f328"; } +.bi-emoji-sunglasses::before { content: "\f329"; } +.bi-emoji-wink-fill::before { content: "\f32a"; } +.bi-emoji-wink::before { content: "\f32b"; } +.bi-envelope-fill::before { content: "\f32c"; } +.bi-envelope-open-fill::before { content: "\f32d"; } +.bi-envelope-open::before { content: "\f32e"; } +.bi-envelope::before { content: "\f32f"; } +.bi-eraser-fill::before { content: "\f330"; } +.bi-eraser::before { content: "\f331"; } +.bi-exclamation-circle-fill::before { content: "\f332"; } +.bi-exclamation-circle::before { content: "\f333"; } +.bi-exclamation-diamond-fill::before { content: "\f334"; } +.bi-exclamation-diamond::before { content: "\f335"; } +.bi-exclamation-octagon-fill::before { content: "\f336"; } +.bi-exclamation-octagon::before { content: "\f337"; } +.bi-exclamation-square-fill::before { content: "\f338"; } +.bi-exclamation-square::before { content: "\f339"; } +.bi-exclamation-triangle-fill::before { content: "\f33a"; } +.bi-exclamation-triangle::before { content: "\f33b"; } +.bi-exclamation::before { content: "\f33c"; } +.bi-exclude::before { content: "\f33d"; } +.bi-eye-fill::before { content: "\f33e"; } +.bi-eye-slash-fill::before { content: "\f33f"; } +.bi-eye-slash::before { content: "\f340"; } +.bi-eye::before { content: "\f341"; } +.bi-eyedropper::before { content: "\f342"; } +.bi-eyeglasses::before { content: "\f343"; } +.bi-facebook::before { content: "\f344"; } +.bi-file-arrow-down-fill::before { content: "\f345"; } +.bi-file-arrow-down::before { content: "\f346"; } +.bi-file-arrow-up-fill::before { content: "\f347"; } +.bi-file-arrow-up::before { content: "\f348"; } +.bi-file-bar-graph-fill::before { content: "\f349"; } +.bi-file-bar-graph::before { content: "\f34a"; } +.bi-file-binary-fill::before { content: "\f34b"; } +.bi-file-binary::before { content: "\f34c"; } +.bi-file-break-fill::before { content: "\f34d"; } +.bi-file-break::before { content: "\f34e"; } +.bi-file-check-fill::before { content: "\f34f"; } +.bi-file-check::before { content: "\f350"; } +.bi-file-code-fill::before { content: "\f351"; } +.bi-file-code::before { content: "\f352"; } +.bi-file-diff-fill::before { content: "\f353"; } +.bi-file-diff::before { content: "\f354"; } +.bi-file-earmark-arrow-down-fill::before { content: "\f355"; } +.bi-file-earmark-arrow-down::before { content: "\f356"; } +.bi-file-earmark-arrow-up-fill::before { content: "\f357"; } +.bi-file-earmark-arrow-up::before { content: "\f358"; } +.bi-file-earmark-bar-graph-fill::before { content: "\f359"; } +.bi-file-earmark-bar-graph::before { content: "\f35a"; } +.bi-file-earmark-binary-fill::before { content: "\f35b"; } +.bi-file-earmark-binary::before { content: "\f35c"; } +.bi-file-earmark-break-fill::before { content: "\f35d"; } +.bi-file-earmark-break::before { content: "\f35e"; } +.bi-file-earmark-check-fill::before { content: "\f35f"; } +.bi-file-earmark-check::before { content: "\f360"; } +.bi-file-earmark-code-fill::before { content: "\f361"; } +.bi-file-earmark-code::before { content: "\f362"; } +.bi-file-earmark-diff-fill::before { content: "\f363"; } +.bi-file-earmark-diff::before { content: "\f364"; } +.bi-file-earmark-easel-fill::before { content: "\f365"; } +.bi-file-earmark-easel::before { content: "\f366"; } +.bi-file-earmark-excel-fill::before { content: "\f367"; } +.bi-file-earmark-excel::before { content: "\f368"; } +.bi-file-earmark-fill::before { content: "\f369"; } +.bi-file-earmark-font-fill::before { content: "\f36a"; } +.bi-file-earmark-font::before { content: "\f36b"; } +.bi-file-earmark-image-fill::before { content: "\f36c"; } +.bi-file-earmark-image::before { content: "\f36d"; } +.bi-file-earmark-lock-fill::before { content: "\f36e"; } +.bi-file-earmark-lock::before { content: "\f36f"; } +.bi-file-earmark-lock2-fill::before { content: "\f370"; } +.bi-file-earmark-lock2::before { content: "\f371"; } +.bi-file-earmark-medical-fill::before { content: "\f372"; } +.bi-file-earmark-medical::before { content: "\f373"; } +.bi-file-earmark-minus-fill::before { content: "\f374"; } +.bi-file-earmark-minus::before { content: "\f375"; } +.bi-file-earmark-music-fill::before { content: "\f376"; } +.bi-file-earmark-music::before { content: "\f377"; } +.bi-file-earmark-person-fill::before { content: "\f378"; } +.bi-file-earmark-person::before { content: "\f379"; } +.bi-file-earmark-play-fill::before { content: "\f37a"; } +.bi-file-earmark-play::before { content: "\f37b"; } +.bi-file-earmark-plus-fill::before { content: "\f37c"; } +.bi-file-earmark-plus::before { content: "\f37d"; } +.bi-file-earmark-post-fill::before { content: "\f37e"; } +.bi-file-earmark-post::before { content: "\f37f"; } +.bi-file-earmark-ppt-fill::before { content: "\f380"; } +.bi-file-earmark-ppt::before { content: "\f381"; } +.bi-file-earmark-richtext-fill::before { content: "\f382"; } +.bi-file-earmark-richtext::before { content: "\f383"; } +.bi-file-earmark-ruled-fill::before { content: "\f384"; } +.bi-file-earmark-ruled::before { content: "\f385"; } +.bi-file-earmark-slides-fill::before { content: "\f386"; } +.bi-file-earmark-slides::before { content: "\f387"; } +.bi-file-earmark-spreadsheet-fill::before { content: "\f388"; } +.bi-file-earmark-spreadsheet::before { content: "\f389"; } +.bi-file-earmark-text-fill::before { content: "\f38a"; } +.bi-file-earmark-text::before { content: "\f38b"; } +.bi-file-earmark-word-fill::before { content: "\f38c"; } +.bi-file-earmark-word::before { content: "\f38d"; } +.bi-file-earmark-x-fill::before { content: "\f38e"; } +.bi-file-earmark-x::before { content: "\f38f"; } +.bi-file-earmark-zip-fill::before { content: "\f390"; } +.bi-file-earmark-zip::before { content: "\f391"; } +.bi-file-earmark::before { content: "\f392"; } +.bi-file-easel-fill::before { content: "\f393"; } +.bi-file-easel::before { content: "\f394"; } +.bi-file-excel-fill::before { content: "\f395"; } +.bi-file-excel::before { content: "\f396"; } +.bi-file-fill::before { content: "\f397"; } +.bi-file-font-fill::before { content: "\f398"; } +.bi-file-font::before { content: "\f399"; } +.bi-file-image-fill::before { content: "\f39a"; } +.bi-file-image::before { content: "\f39b"; } +.bi-file-lock-fill::before { content: "\f39c"; } +.bi-file-lock::before { content: "\f39d"; } +.bi-file-lock2-fill::before { content: "\f39e"; } +.bi-file-lock2::before { content: "\f39f"; } +.bi-file-medical-fill::before { content: "\f3a0"; } +.bi-file-medical::before { content: "\f3a1"; } +.bi-file-minus-fill::before { content: "\f3a2"; } +.bi-file-minus::before { content: "\f3a3"; } +.bi-file-music-fill::before { content: "\f3a4"; } +.bi-file-music::before { content: "\f3a5"; } +.bi-file-person-fill::before { content: "\f3a6"; } +.bi-file-person::before { content: "\f3a7"; } +.bi-file-play-fill::before { content: "\f3a8"; } +.bi-file-play::before { content: "\f3a9"; } +.bi-file-plus-fill::before { content: "\f3aa"; } +.bi-file-plus::before { content: "\f3ab"; } +.bi-file-post-fill::before { content: "\f3ac"; } +.bi-file-post::before { content: "\f3ad"; } +.bi-file-ppt-fill::before { content: "\f3ae"; } +.bi-file-ppt::before { content: "\f3af"; } +.bi-file-richtext-fill::before { content: "\f3b0"; } +.bi-file-richtext::before { content: "\f3b1"; } +.bi-file-ruled-fill::before { content: "\f3b2"; } +.bi-file-ruled::before { content: "\f3b3"; } +.bi-file-slides-fill::before { content: "\f3b4"; } +.bi-file-slides::before { content: "\f3b5"; } +.bi-file-spreadsheet-fill::before { content: "\f3b6"; } +.bi-file-spreadsheet::before { content: "\f3b7"; } +.bi-file-text-fill::before { content: "\f3b8"; } +.bi-file-text::before { content: "\f3b9"; } +.bi-file-word-fill::before { content: "\f3ba"; } +.bi-file-word::before { content: "\f3bb"; } +.bi-file-x-fill::before { content: "\f3bc"; } +.bi-file-x::before { content: "\f3bd"; } +.bi-file-zip-fill::before { content: "\f3be"; } +.bi-file-zip::before { content: "\f3bf"; } +.bi-file::before { content: "\f3c0"; } +.bi-files-alt::before { content: "\f3c1"; } +.bi-files::before { content: "\f3c2"; } +.bi-film::before { content: "\f3c3"; } +.bi-filter-circle-fill::before { content: "\f3c4"; } +.bi-filter-circle::before { content: "\f3c5"; } +.bi-filter-left::before { content: "\f3c6"; } +.bi-filter-right::before { content: "\f3c7"; } +.bi-filter-square-fill::before { content: "\f3c8"; } +.bi-filter-square::before { content: "\f3c9"; } +.bi-filter::before { content: "\f3ca"; } +.bi-flag-fill::before { content: "\f3cb"; } +.bi-flag::before { content: "\f3cc"; } +.bi-flower1::before { content: "\f3cd"; } +.bi-flower2::before { content: "\f3ce"; } +.bi-flower3::before { content: "\f3cf"; } +.bi-folder-check::before { content: "\f3d0"; } +.bi-folder-fill::before { content: "\f3d1"; } +.bi-folder-minus::before { content: "\f3d2"; } +.bi-folder-plus::before { content: "\f3d3"; } +.bi-folder-symlink-fill::before { content: "\f3d4"; } +.bi-folder-symlink::before { content: "\f3d5"; } +.bi-folder-x::before { content: "\f3d6"; } +.bi-folder::before { content: "\f3d7"; } +.bi-folder2-open::before { content: "\f3d8"; } +.bi-folder2::before { content: "\f3d9"; } +.bi-fonts::before { content: "\f3da"; } +.bi-forward-fill::before { content: "\f3db"; } +.bi-forward::before { content: "\f3dc"; } +.bi-front::before { content: "\f3dd"; } +.bi-fullscreen-exit::before { content: "\f3de"; } +.bi-fullscreen::before { content: "\f3df"; } +.bi-funnel-fill::before { content: "\f3e0"; } +.bi-funnel::before { content: "\f3e1"; } +.bi-gear-fill::before { content: "\f3e2"; } +.bi-gear-wide-connected::before { content: "\f3e3"; } +.bi-gear-wide::before { content: "\f3e4"; } +.bi-gear::before { content: "\f3e5"; } +.bi-gem::before { content: "\f3e6"; } +.bi-geo-alt-fill::before { content: "\f3e7"; } +.bi-geo-alt::before { content: "\f3e8"; } +.bi-geo-fill::before { content: "\f3e9"; } +.bi-geo::before { content: "\f3ea"; } +.bi-gift-fill::before { content: "\f3eb"; } +.bi-gift::before { content: "\f3ec"; } +.bi-github::before { content: "\f3ed"; } +.bi-globe::before { content: "\f3ee"; } +.bi-globe2::before { content: "\f3ef"; } +.bi-google::before { content: "\f3f0"; } +.bi-graph-down::before { content: "\f3f1"; } +.bi-graph-up::before { content: "\f3f2"; } +.bi-grid-1x2-fill::before { content: "\f3f3"; } +.bi-grid-1x2::before { content: "\f3f4"; } +.bi-grid-3x2-gap-fill::before { content: "\f3f5"; } +.bi-grid-3x2-gap::before { content: "\f3f6"; } +.bi-grid-3x2::before { content: "\f3f7"; } +.bi-grid-3x3-gap-fill::before { content: "\f3f8"; } +.bi-grid-3x3-gap::before { content: "\f3f9"; } +.bi-grid-3x3::before { content: "\f3fa"; } +.bi-grid-fill::before { content: "\f3fb"; } +.bi-grid::before { content: "\f3fc"; } +.bi-grip-horizontal::before { content: "\f3fd"; } +.bi-grip-vertical::before { content: "\f3fe"; } +.bi-hammer::before { content: "\f3ff"; } +.bi-hand-index-fill::before { content: "\f400"; } +.bi-hand-index-thumb-fill::before { content: "\f401"; } +.bi-hand-index-thumb::before { content: "\f402"; } +.bi-hand-index::before { content: "\f403"; } +.bi-hand-thumbs-down-fill::before { content: "\f404"; } +.bi-hand-thumbs-down::before { content: "\f405"; } +.bi-hand-thumbs-up-fill::before { content: "\f406"; } +.bi-hand-thumbs-up::before { content: "\f407"; } +.bi-handbag-fill::before { content: "\f408"; } +.bi-handbag::before { content: "\f409"; } +.bi-hash::before { content: "\f40a"; } +.bi-hdd-fill::before { content: "\f40b"; } +.bi-hdd-network-fill::before { content: "\f40c"; } +.bi-hdd-network::before { content: "\f40d"; } +.bi-hdd-rack-fill::before { content: "\f40e"; } +.bi-hdd-rack::before { content: "\f40f"; } +.bi-hdd-stack-fill::before { content: "\f410"; } +.bi-hdd-stack::before { content: "\f411"; } +.bi-hdd::before { content: "\f412"; } +.bi-headphones::before { content: "\f413"; } +.bi-headset::before { content: "\f414"; } +.bi-heart-fill::before { content: "\f415"; } +.bi-heart-half::before { content: "\f416"; } +.bi-heart::before { content: "\f417"; } +.bi-heptagon-fill::before { content: "\f418"; } +.bi-heptagon-half::before { content: "\f419"; } +.bi-heptagon::before { content: "\f41a"; } +.bi-hexagon-fill::before { content: "\f41b"; } +.bi-hexagon-half::before { content: "\f41c"; } +.bi-hexagon::before { content: "\f41d"; } +.bi-hourglass-bottom::before { content: "\f41e"; } +.bi-hourglass-split::before { content: "\f41f"; } +.bi-hourglass-top::before { content: "\f420"; } +.bi-hourglass::before { content: "\f421"; } +.bi-house-door-fill::before { content: "\f422"; } +.bi-house-door::before { content: "\f423"; } +.bi-house-fill::before { content: "\f424"; } +.bi-house::before { content: "\f425"; } +.bi-hr::before { content: "\f426"; } +.bi-hurricane::before { content: "\f427"; } +.bi-image-alt::before { content: "\f428"; } +.bi-image-fill::before { content: "\f429"; } +.bi-image::before { content: "\f42a"; } +.bi-images::before { content: "\f42b"; } +.bi-inbox-fill::before { content: "\f42c"; } +.bi-inbox::before { content: "\f42d"; } +.bi-inboxes-fill::before { content: "\f42e"; } +.bi-inboxes::before { content: "\f42f"; } +.bi-info-circle-fill::before { content: "\f430"; } +.bi-info-circle::before { content: "\f431"; } +.bi-info-square-fill::before { content: "\f432"; } +.bi-info-square::before { content: "\f433"; } +.bi-info::before { content: "\f434"; } +.bi-input-cursor-text::before { content: "\f435"; } +.bi-input-cursor::before { content: "\f436"; } +.bi-instagram::before { content: "\f437"; } +.bi-intersect::before { content: "\f438"; } +.bi-journal-album::before { content: "\f439"; } +.bi-journal-arrow-down::before { content: "\f43a"; } +.bi-journal-arrow-up::before { content: "\f43b"; } +.bi-journal-bookmark-fill::before { content: "\f43c"; } +.bi-journal-bookmark::before { content: "\f43d"; } +.bi-journal-check::before { content: "\f43e"; } +.bi-journal-code::before { content: "\f43f"; } +.bi-journal-medical::before { content: "\f440"; } +.bi-journal-minus::before { content: "\f441"; } +.bi-journal-plus::before { content: "\f442"; } +.bi-journal-richtext::before { content: "\f443"; } +.bi-journal-text::before { content: "\f444"; } +.bi-journal-x::before { content: "\f445"; } +.bi-journal::before { content: "\f446"; } +.bi-journals::before { content: "\f447"; } +.bi-joystick::before { content: "\f448"; } +.bi-justify-left::before { content: "\f449"; } +.bi-justify-right::before { content: "\f44a"; } +.bi-justify::before { content: "\f44b"; } +.bi-kanban-fill::before { content: "\f44c"; } +.bi-kanban::before { content: "\f44d"; } +.bi-key-fill::before { content: "\f44e"; } +.bi-key::before { content: "\f44f"; } +.bi-keyboard-fill::before { content: "\f450"; } +.bi-keyboard::before { content: "\f451"; } +.bi-ladder::before { content: "\f452"; } +.bi-lamp-fill::before { content: "\f453"; } +.bi-lamp::before { content: "\f454"; } +.bi-laptop-fill::before { content: "\f455"; } +.bi-laptop::before { content: "\f456"; } +.bi-layer-backward::before { content: "\f457"; } +.bi-layer-forward::before { content: "\f458"; } +.bi-layers-fill::before { content: "\f459"; } +.bi-layers-half::before { content: "\f45a"; } +.bi-layers::before { content: "\f45b"; } +.bi-layout-sidebar-inset-reverse::before { content: "\f45c"; } +.bi-layout-sidebar-inset::before { content: "\f45d"; } +.bi-layout-sidebar-reverse::before { content: "\f45e"; } +.bi-layout-sidebar::before { content: "\f45f"; } +.bi-layout-split::before { content: "\f460"; } +.bi-layout-text-sidebar-reverse::before { content: "\f461"; } +.bi-layout-text-sidebar::before { content: "\f462"; } +.bi-layout-text-window-reverse::before { content: "\f463"; } +.bi-layout-text-window::before { content: "\f464"; } +.bi-layout-three-columns::before { content: "\f465"; } +.bi-layout-wtf::before { content: "\f466"; } +.bi-life-preserver::before { content: "\f467"; } +.bi-lightbulb-fill::before { content: "\f468"; } +.bi-lightbulb-off-fill::before { content: "\f469"; } +.bi-lightbulb-off::before { content: "\f46a"; } +.bi-lightbulb::before { content: "\f46b"; } +.bi-lightning-charge-fill::before { content: "\f46c"; } +.bi-lightning-charge::before { content: "\f46d"; } +.bi-lightning-fill::before { content: "\f46e"; } +.bi-lightning::before { content: "\f46f"; } +.bi-link-45deg::before { content: "\f470"; } +.bi-link::before { content: "\f471"; } +.bi-linkedin::before { content: "\f472"; } +.bi-list-check::before { content: "\f473"; } +.bi-list-nested::before { content: "\f474"; } +.bi-list-ol::before { content: "\f475"; } +.bi-list-stars::before { content: "\f476"; } +.bi-list-task::before { content: "\f477"; } +.bi-list-ul::before { content: "\f478"; } +.bi-list::before { content: "\f479"; } +.bi-lock-fill::before { content: "\f47a"; } +.bi-lock::before { content: "\f47b"; } +.bi-mailbox::before { content: "\f47c"; } +.bi-mailbox2::before { content: "\f47d"; } +.bi-map-fill::before { content: "\f47e"; } +.bi-map::before { content: "\f47f"; } +.bi-markdown-fill::before { content: "\f480"; } +.bi-markdown::before { content: "\f481"; } +.bi-mask::before { content: "\f482"; } +.bi-megaphone-fill::before { content: "\f483"; } +.bi-megaphone::before { content: "\f484"; } +.bi-menu-app-fill::before { content: "\f485"; } +.bi-menu-app::before { content: "\f486"; } +.bi-menu-button-fill::before { content: "\f487"; } +.bi-menu-button-wide-fill::before { content: "\f488"; } +.bi-menu-button-wide::before { content: "\f489"; } +.bi-menu-button::before { content: "\f48a"; } +.bi-menu-down::before { content: "\f48b"; } +.bi-menu-up::before { content: "\f48c"; } +.bi-mic-fill::before { content: "\f48d"; } +.bi-mic-mute-fill::before { content: "\f48e"; } +.bi-mic-mute::before { content: "\f48f"; } +.bi-mic::before { content: "\f490"; } +.bi-minecart-loaded::before { content: "\f491"; } +.bi-minecart::before { content: "\f492"; } +.bi-moisture::before { content: "\f493"; } +.bi-moon-fill::before { content: "\f494"; } +.bi-moon-stars-fill::before { content: "\f495"; } +.bi-moon-stars::before { content: "\f496"; } +.bi-moon::before { content: "\f497"; } +.bi-mouse-fill::before { content: "\f498"; } +.bi-mouse::before { content: "\f499"; } +.bi-mouse2-fill::before { content: "\f49a"; } +.bi-mouse2::before { content: "\f49b"; } +.bi-mouse3-fill::before { content: "\f49c"; } +.bi-mouse3::before { content: "\f49d"; } +.bi-music-note-beamed::before { content: "\f49e"; } +.bi-music-note-list::before { content: "\f49f"; } +.bi-music-note::before { content: "\f4a0"; } +.bi-music-player-fill::before { content: "\f4a1"; } +.bi-music-player::before { content: "\f4a2"; } +.bi-newspaper::before { content: "\f4a3"; } +.bi-node-minus-fill::before { content: "\f4a4"; } +.bi-node-minus::before { content: "\f4a5"; } +.bi-node-plus-fill::before { content: "\f4a6"; } +.bi-node-plus::before { content: "\f4a7"; } +.bi-nut-fill::before { content: "\f4a8"; } +.bi-nut::before { content: "\f4a9"; } +.bi-octagon-fill::before { content: "\f4aa"; } +.bi-octagon-half::before { content: "\f4ab"; } +.bi-octagon::before { content: "\f4ac"; } +.bi-option::before { content: "\f4ad"; } +.bi-outlet::before { content: "\f4ae"; } +.bi-paint-bucket::before { content: "\f4af"; } +.bi-palette-fill::before { content: "\f4b0"; } +.bi-palette::before { content: "\f4b1"; } +.bi-palette2::before { content: "\f4b2"; } +.bi-paperclip::before { content: "\f4b3"; } +.bi-paragraph::before { content: "\f4b4"; } +.bi-patch-check-fill::before { content: "\f4b5"; } +.bi-patch-check::before { content: "\f4b6"; } +.bi-patch-exclamation-fill::before { content: "\f4b7"; } +.bi-patch-exclamation::before { content: "\f4b8"; } +.bi-patch-minus-fill::before { content: "\f4b9"; } +.bi-patch-minus::before { content: "\f4ba"; } +.bi-patch-plus-fill::before { content: "\f4bb"; } +.bi-patch-plus::before { content: "\f4bc"; } +.bi-patch-question-fill::before { content: "\f4bd"; } +.bi-patch-question::before { content: "\f4be"; } +.bi-pause-btn-fill::before { content: "\f4bf"; } +.bi-pause-btn::before { content: "\f4c0"; } +.bi-pause-circle-fill::before { content: "\f4c1"; } +.bi-pause-circle::before { content: "\f4c2"; } +.bi-pause-fill::before { content: "\f4c3"; } +.bi-pause::before { content: "\f4c4"; } +.bi-peace-fill::before { content: "\f4c5"; } +.bi-peace::before { content: "\f4c6"; } +.bi-pen-fill::before { content: "\f4c7"; } +.bi-pen::before { content: "\f4c8"; } +.bi-pencil-fill::before { content: "\f4c9"; } +.bi-pencil-square::before { content: "\f4ca"; } +.bi-pencil::before { content: "\f4cb"; } +.bi-pentagon-fill::before { content: "\f4cc"; } +.bi-pentagon-half::before { content: "\f4cd"; } +.bi-pentagon::before { content: "\f4ce"; } +.bi-people-fill::before { content: "\f4cf"; } +.bi-people::before { content: "\f4d0"; } +.bi-percent::before { content: "\f4d1"; } +.bi-person-badge-fill::before { content: "\f4d2"; } +.bi-person-badge::before { content: "\f4d3"; } +.bi-person-bounding-box::before { content: "\f4d4"; } +.bi-person-check-fill::before { content: "\f4d5"; } +.bi-person-check::before { content: "\f4d6"; } +.bi-person-circle::before { content: "\f4d7"; } +.bi-person-dash-fill::before { content: "\f4d8"; } +.bi-person-dash::before { content: "\f4d9"; } +.bi-person-fill::before { content: "\f4da"; } +.bi-person-lines-fill::before { content: "\f4db"; } +.bi-person-plus-fill::before { content: "\f4dc"; } +.bi-person-plus::before { content: "\f4dd"; } +.bi-person-square::before { content: "\f4de"; } +.bi-person-x-fill::before { content: "\f4df"; } +.bi-person-x::before { content: "\f4e0"; } +.bi-person::before { content: "\f4e1"; } +.bi-phone-fill::before { content: "\f4e2"; } +.bi-phone-landscape-fill::before { content: "\f4e3"; } +.bi-phone-landscape::before { content: "\f4e4"; } +.bi-phone-vibrate-fill::before { content: "\f4e5"; } +.bi-phone-vibrate::before { content: "\f4e6"; } +.bi-phone::before { content: "\f4e7"; } +.bi-pie-chart-fill::before { content: "\f4e8"; } +.bi-pie-chart::before { content: "\f4e9"; } +.bi-pin-angle-fill::before { content: "\f4ea"; } +.bi-pin-angle::before { content: "\f4eb"; } +.bi-pin-fill::before { content: "\f4ec"; } +.bi-pin::before { content: "\f4ed"; } +.bi-pip-fill::before { content: "\f4ee"; } +.bi-pip::before { content: "\f4ef"; } +.bi-play-btn-fill::before { content: "\f4f0"; } +.bi-play-btn::before { content: "\f4f1"; } +.bi-play-circle-fill::before { content: "\f4f2"; } +.bi-play-circle::before { content: "\f4f3"; } +.bi-play-fill::before { content: "\f4f4"; } +.bi-play::before { content: "\f4f5"; } +.bi-plug-fill::before { content: "\f4f6"; } +.bi-plug::before { content: "\f4f7"; } +.bi-plus-circle-dotted::before { content: "\f4f8"; } +.bi-plus-circle-fill::before { content: "\f4f9"; } +.bi-plus-circle::before { content: "\f4fa"; } +.bi-plus-square-dotted::before { content: "\f4fb"; } +.bi-plus-square-fill::before { content: "\f4fc"; } +.bi-plus-square::before { content: "\f4fd"; } +.bi-plus::before { content: "\f4fe"; } +.bi-power::before { content: "\f4ff"; } +.bi-printer-fill::before { content: "\f500"; } +.bi-printer::before { content: "\f501"; } +.bi-puzzle-fill::before { content: "\f502"; } +.bi-puzzle::before { content: "\f503"; } +.bi-question-circle-fill::before { content: "\f504"; } +.bi-question-circle::before { content: "\f505"; } +.bi-question-diamond-fill::before { content: "\f506"; } +.bi-question-diamond::before { content: "\f507"; } +.bi-question-octagon-fill::before { content: "\f508"; } +.bi-question-octagon::before { content: "\f509"; } +.bi-question-square-fill::before { content: "\f50a"; } +.bi-question-square::before { content: "\f50b"; } +.bi-question::before { content: "\f50c"; } +.bi-rainbow::before { content: "\f50d"; } +.bi-receipt-cutoff::before { content: "\f50e"; } +.bi-receipt::before { content: "\f50f"; } +.bi-reception-0::before { content: "\f510"; } +.bi-reception-1::before { content: "\f511"; } +.bi-reception-2::before { content: "\f512"; } +.bi-reception-3::before { content: "\f513"; } +.bi-reception-4::before { content: "\f514"; } +.bi-record-btn-fill::before { content: "\f515"; } +.bi-record-btn::before { content: "\f516"; } +.bi-record-circle-fill::before { content: "\f517"; } +.bi-record-circle::before { content: "\f518"; } +.bi-record-fill::before { content: "\f519"; } +.bi-record::before { content: "\f51a"; } +.bi-record2-fill::before { content: "\f51b"; } +.bi-record2::before { content: "\f51c"; } +.bi-reply-all-fill::before { content: "\f51d"; } +.bi-reply-all::before { content: "\f51e"; } +.bi-reply-fill::before { content: "\f51f"; } +.bi-reply::before { content: "\f520"; } +.bi-rss-fill::before { content: "\f521"; } +.bi-rss::before { content: "\f522"; } +.bi-rulers::before { content: "\f523"; } +.bi-save-fill::before { content: "\f524"; } +.bi-save::before { content: "\f525"; } +.bi-save2-fill::before { content: "\f526"; } +.bi-save2::before { content: "\f527"; } +.bi-scissors::before { content: "\f528"; } +.bi-screwdriver::before { content: "\f529"; } +.bi-search::before { content: "\f52a"; } +.bi-segmented-nav::before { content: "\f52b"; } +.bi-server::before { content: "\f52c"; } +.bi-share-fill::before { content: "\f52d"; } +.bi-share::before { content: "\f52e"; } +.bi-shield-check::before { content: "\f52f"; } +.bi-shield-exclamation::before { content: "\f530"; } +.bi-shield-fill-check::before { content: "\f531"; } +.bi-shield-fill-exclamation::before { content: "\f532"; } +.bi-shield-fill-minus::before { content: "\f533"; } +.bi-shield-fill-plus::before { content: "\f534"; } +.bi-shield-fill-x::before { content: "\f535"; } +.bi-shield-fill::before { content: "\f536"; } +.bi-shield-lock-fill::before { content: "\f537"; } +.bi-shield-lock::before { content: "\f538"; } +.bi-shield-minus::before { content: "\f539"; } +.bi-shield-plus::before { content: "\f53a"; } +.bi-shield-shaded::before { content: "\f53b"; } +.bi-shield-slash-fill::before { content: "\f53c"; } +.bi-shield-slash::before { content: "\f53d"; } +.bi-shield-x::before { content: "\f53e"; } +.bi-shield::before { content: "\f53f"; } +.bi-shift-fill::before { content: "\f540"; } +.bi-shift::before { content: "\f541"; } +.bi-shop-window::before { content: "\f542"; } +.bi-shop::before { content: "\f543"; } +.bi-shuffle::before { content: "\f544"; } +.bi-signpost-2-fill::before { content: "\f545"; } +.bi-signpost-2::before { content: "\f546"; } +.bi-signpost-fill::before { content: "\f547"; } +.bi-signpost-split-fill::before { content: "\f548"; } +.bi-signpost-split::before { content: "\f549"; } +.bi-signpost::before { content: "\f54a"; } +.bi-sim-fill::before { content: "\f54b"; } +.bi-sim::before { content: "\f54c"; } +.bi-skip-backward-btn-fill::before { content: "\f54d"; } +.bi-skip-backward-btn::before { content: "\f54e"; } +.bi-skip-backward-circle-fill::before { content: "\f54f"; } +.bi-skip-backward-circle::before { content: "\f550"; } +.bi-skip-backward-fill::before { content: "\f551"; } +.bi-skip-backward::before { content: "\f552"; } +.bi-skip-end-btn-fill::before { content: "\f553"; } +.bi-skip-end-btn::before { content: "\f554"; } +.bi-skip-end-circle-fill::before { content: "\f555"; } +.bi-skip-end-circle::before { content: "\f556"; } +.bi-skip-end-fill::before { content: "\f557"; } +.bi-skip-end::before { content: "\f558"; } +.bi-skip-forward-btn-fill::before { content: "\f559"; } +.bi-skip-forward-btn::before { content: "\f55a"; } +.bi-skip-forward-circle-fill::before { content: "\f55b"; } +.bi-skip-forward-circle::before { content: "\f55c"; } +.bi-skip-forward-fill::before { content: "\f55d"; } +.bi-skip-forward::before { content: "\f55e"; } +.bi-skip-start-btn-fill::before { content: "\f55f"; } +.bi-skip-start-btn::before { content: "\f560"; } +.bi-skip-start-circle-fill::before { content: "\f561"; } +.bi-skip-start-circle::before { content: "\f562"; } +.bi-skip-start-fill::before { content: "\f563"; } +.bi-skip-start::before { content: "\f564"; } +.bi-slack::before { content: "\f565"; } +.bi-slash-circle-fill::before { content: "\f566"; } +.bi-slash-circle::before { content: "\f567"; } +.bi-slash-square-fill::before { content: "\f568"; } +.bi-slash-square::before { content: "\f569"; } +.bi-slash::before { content: "\f56a"; } +.bi-sliders::before { content: "\f56b"; } +.bi-smartwatch::before { content: "\f56c"; } +.bi-snow::before { content: "\f56d"; } +.bi-snow2::before { content: "\f56e"; } +.bi-snow3::before { content: "\f56f"; } +.bi-sort-alpha-down-alt::before { content: "\f570"; } +.bi-sort-alpha-down::before { content: "\f571"; } +.bi-sort-alpha-up-alt::before { content: "\f572"; } +.bi-sort-alpha-up::before { content: "\f573"; } +.bi-sort-down-alt::before { content: "\f574"; } +.bi-sort-down::before { content: "\f575"; } +.bi-sort-numeric-down-alt::before { content: "\f576"; } +.bi-sort-numeric-down::before { content: "\f577"; } +.bi-sort-numeric-up-alt::before { content: "\f578"; } +.bi-sort-numeric-up::before { content: "\f579"; } +.bi-sort-up-alt::before { content: "\f57a"; } +.bi-sort-up::before { content: "\f57b"; } +.bi-soundwave::before { content: "\f57c"; } +.bi-speaker-fill::before { content: "\f57d"; } +.bi-speaker::before { content: "\f57e"; } +.bi-speedometer::before { content: "\f57f"; } +.bi-speedometer2::before { content: "\f580"; } +.bi-spellcheck::before { content: "\f581"; } +.bi-square-fill::before { content: "\f582"; } +.bi-square-half::before { content: "\f583"; } +.bi-square::before { content: "\f584"; } +.bi-stack::before { content: "\f585"; } +.bi-star-fill::before { content: "\f586"; } +.bi-star-half::before { content: "\f587"; } +.bi-star::before { content: "\f588"; } +.bi-stars::before { content: "\f589"; } +.bi-stickies-fill::before { content: "\f58a"; } +.bi-stickies::before { content: "\f58b"; } +.bi-sticky-fill::before { content: "\f58c"; } +.bi-sticky::before { content: "\f58d"; } +.bi-stop-btn-fill::before { content: "\f58e"; } +.bi-stop-btn::before { content: "\f58f"; } +.bi-stop-circle-fill::before { content: "\f590"; } +.bi-stop-circle::before { content: "\f591"; } +.bi-stop-fill::before { content: "\f592"; } +.bi-stop::before { content: "\f593"; } +.bi-stoplights-fill::before { content: "\f594"; } +.bi-stoplights::before { content: "\f595"; } +.bi-stopwatch-fill::before { content: "\f596"; } +.bi-stopwatch::before { content: "\f597"; } +.bi-subtract::before { content: "\f598"; } +.bi-suit-club-fill::before { content: "\f599"; } +.bi-suit-club::before { content: "\f59a"; } +.bi-suit-diamond-fill::before { content: "\f59b"; } +.bi-suit-diamond::before { content: "\f59c"; } +.bi-suit-heart-fill::before { content: "\f59d"; } +.bi-suit-heart::before { content: "\f59e"; } +.bi-suit-spade-fill::before { content: "\f59f"; } +.bi-suit-spade::before { content: "\f5a0"; } +.bi-sun-fill::before { content: "\f5a1"; } +.bi-sun::before { content: "\f5a2"; } +.bi-sunglasses::before { content: "\f5a3"; } +.bi-sunrise-fill::before { content: "\f5a4"; } +.bi-sunrise::before { content: "\f5a5"; } +.bi-sunset-fill::before { content: "\f5a6"; } +.bi-sunset::before { content: "\f5a7"; } +.bi-symmetry-horizontal::before { content: "\f5a8"; } +.bi-symmetry-vertical::before { content: "\f5a9"; } +.bi-table::before { content: "\f5aa"; } +.bi-tablet-fill::before { content: "\f5ab"; } +.bi-tablet-landscape-fill::before { content: "\f5ac"; } +.bi-tablet-landscape::before { content: "\f5ad"; } +.bi-tablet::before { content: "\f5ae"; } +.bi-tag-fill::before { content: "\f5af"; } +.bi-tag::before { content: "\f5b0"; } +.bi-tags-fill::before { content: "\f5b1"; } +.bi-tags::before { content: "\f5b2"; } +.bi-telegram::before { content: "\f5b3"; } +.bi-telephone-fill::before { content: "\f5b4"; } +.bi-telephone-forward-fill::before { content: "\f5b5"; } +.bi-telephone-forward::before { content: "\f5b6"; } +.bi-telephone-inbound-fill::before { content: "\f5b7"; } +.bi-telephone-inbound::before { content: "\f5b8"; } +.bi-telephone-minus-fill::before { content: "\f5b9"; } +.bi-telephone-minus::before { content: "\f5ba"; } +.bi-telephone-outbound-fill::before { content: "\f5bb"; } +.bi-telephone-outbound::before { content: "\f5bc"; } +.bi-telephone-plus-fill::before { content: "\f5bd"; } +.bi-telephone-plus::before { content: "\f5be"; } +.bi-telephone-x-fill::before { content: "\f5bf"; } +.bi-telephone-x::before { content: "\f5c0"; } +.bi-telephone::before { content: "\f5c1"; } +.bi-terminal-fill::before { content: "\f5c2"; } +.bi-terminal::before { content: "\f5c3"; } +.bi-text-center::before { content: "\f5c4"; } +.bi-text-indent-left::before { content: "\f5c5"; } +.bi-text-indent-right::before { content: "\f5c6"; } +.bi-text-left::before { content: "\f5c7"; } +.bi-text-paragraph::before { content: "\f5c8"; } +.bi-text-right::before { content: "\f5c9"; } +.bi-textarea-resize::before { content: "\f5ca"; } +.bi-textarea-t::before { content: "\f5cb"; } +.bi-textarea::before { content: "\f5cc"; } +.bi-thermometer-half::before { content: "\f5cd"; } +.bi-thermometer-high::before { content: "\f5ce"; } +.bi-thermometer-low::before { content: "\f5cf"; } +.bi-thermometer-snow::before { content: "\f5d0"; } +.bi-thermometer-sun::before { content: "\f5d1"; } +.bi-thermometer::before { content: "\f5d2"; } +.bi-three-dots-vertical::before { content: "\f5d3"; } +.bi-three-dots::before { content: "\f5d4"; } +.bi-toggle-off::before { content: "\f5d5"; } +.bi-toggle-on::before { content: "\f5d6"; } +.bi-toggle2-off::before { content: "\f5d7"; } +.bi-toggle2-on::before { content: "\f5d8"; } +.bi-toggles::before { content: "\f5d9"; } +.bi-toggles2::before { content: "\f5da"; } +.bi-tools::before { content: "\f5db"; } +.bi-tornado::before { content: "\f5dc"; } +.bi-trash-fill::before { content: "\f5dd"; } +.bi-trash::before { content: "\f5de"; } +.bi-trash2-fill::before { content: "\f5df"; } +.bi-trash2::before { content: "\f5e0"; } +.bi-tree-fill::before { content: "\f5e1"; } +.bi-tree::before { content: "\f5e2"; } +.bi-triangle-fill::before { content: "\f5e3"; } +.bi-triangle-half::before { content: "\f5e4"; } +.bi-triangle::before { content: "\f5e5"; } +.bi-trophy-fill::before { content: "\f5e6"; } +.bi-trophy::before { content: "\f5e7"; } +.bi-tropical-storm::before { content: "\f5e8"; } +.bi-truck-flatbed::before { content: "\f5e9"; } +.bi-truck::before { content: "\f5ea"; } +.bi-tsunami::before { content: "\f5eb"; } +.bi-tv-fill::before { content: "\f5ec"; } +.bi-tv::before { content: "\f5ed"; } +.bi-twitch::before { content: "\f5ee"; } +.bi-twitter::before { content: "\f5ef"; } +.bi-type-bold::before { content: "\f5f0"; } +.bi-type-h1::before { content: "\f5f1"; } +.bi-type-h2::before { content: "\f5f2"; } +.bi-type-h3::before { content: "\f5f3"; } +.bi-type-italic::before { content: "\f5f4"; } +.bi-type-strikethrough::before { content: "\f5f5"; } +.bi-type-underline::before { content: "\f5f6"; } +.bi-type::before { content: "\f5f7"; } +.bi-ui-checks-grid::before { content: "\f5f8"; } +.bi-ui-checks::before { content: "\f5f9"; } +.bi-ui-radios-grid::before { content: "\f5fa"; } +.bi-ui-radios::before { content: "\f5fb"; } +.bi-umbrella-fill::before { content: "\f5fc"; } +.bi-umbrella::before { content: "\f5fd"; } +.bi-union::before { content: "\f5fe"; } +.bi-unlock-fill::before { content: "\f5ff"; } +.bi-unlock::before { content: "\f600"; } +.bi-upc-scan::before { content: "\f601"; } +.bi-upc::before { content: "\f602"; } +.bi-upload::before { content: "\f603"; } +.bi-vector-pen::before { content: "\f604"; } +.bi-view-list::before { content: "\f605"; } +.bi-view-stacked::before { content: "\f606"; } +.bi-vinyl-fill::before { content: "\f607"; } +.bi-vinyl::before { content: "\f608"; } +.bi-voicemail::before { content: "\f609"; } +.bi-volume-down-fill::before { content: "\f60a"; } +.bi-volume-down::before { content: "\f60b"; } +.bi-volume-mute-fill::before { content: "\f60c"; } +.bi-volume-mute::before { content: "\f60d"; } +.bi-volume-off-fill::before { content: "\f60e"; } +.bi-volume-off::before { content: "\f60f"; } +.bi-volume-up-fill::before { content: "\f610"; } +.bi-volume-up::before { content: "\f611"; } +.bi-vr::before { content: "\f612"; } +.bi-wallet-fill::before { content: "\f613"; } +.bi-wallet::before { content: "\f614"; } +.bi-wallet2::before { content: "\f615"; } +.bi-watch::before { content: "\f616"; } +.bi-water::before { content: "\f617"; } +.bi-whatsapp::before { content: "\f618"; } +.bi-wifi-1::before { content: "\f619"; } +.bi-wifi-2::before { content: "\f61a"; } +.bi-wifi-off::before { content: "\f61b"; } +.bi-wifi::before { content: "\f61c"; } +.bi-wind::before { content: "\f61d"; } +.bi-window-dock::before { content: "\f61e"; } +.bi-window-sidebar::before { content: "\f61f"; } +.bi-window::before { content: "\f620"; } +.bi-wrench::before { content: "\f621"; } +.bi-x-circle-fill::before { content: "\f622"; } +.bi-x-circle::before { content: "\f623"; } +.bi-x-diamond-fill::before { content: "\f624"; } +.bi-x-diamond::before { content: "\f625"; } +.bi-x-octagon-fill::before { content: "\f626"; } +.bi-x-octagon::before { content: "\f627"; } +.bi-x-square-fill::before { content: "\f628"; } +.bi-x-square::before { content: "\f629"; } +.bi-x::before { content: "\f62a"; } +.bi-youtube::before { content: "\f62b"; } +.bi-zoom-in::before { content: "\f62c"; } +.bi-zoom-out::before { content: "\f62d"; } +.bi-bank::before { content: "\f62e"; } +.bi-bank2::before { content: "\f62f"; } +.bi-bell-slash-fill::before { content: "\f630"; } +.bi-bell-slash::before { content: "\f631"; } +.bi-cash-coin::before { content: "\f632"; } +.bi-check-lg::before { content: "\f633"; } +.bi-coin::before { content: "\f634"; } +.bi-currency-bitcoin::before { content: "\f635"; } +.bi-currency-dollar::before { content: "\f636"; } +.bi-currency-euro::before { content: "\f637"; } +.bi-currency-exchange::before { content: "\f638"; } +.bi-currency-pound::before { content: "\f639"; } +.bi-currency-yen::before { content: "\f63a"; } +.bi-dash-lg::before { content: "\f63b"; } +.bi-exclamation-lg::before { content: "\f63c"; } +.bi-file-earmark-pdf-fill::before { content: "\f63d"; } +.bi-file-earmark-pdf::before { content: "\f63e"; } +.bi-file-pdf-fill::before { content: "\f63f"; } +.bi-file-pdf::before { content: "\f640"; } +.bi-gender-ambiguous::before { content: "\f641"; } +.bi-gender-female::before { content: "\f642"; } +.bi-gender-male::before { content: "\f643"; } +.bi-gender-trans::before { content: "\f644"; } +.bi-headset-vr::before { content: "\f645"; } +.bi-info-lg::before { content: "\f646"; } +.bi-mastodon::before { content: "\f647"; } +.bi-messenger::before { content: "\f648"; } +.bi-piggy-bank-fill::before { content: "\f649"; } +.bi-piggy-bank::before { content: "\f64a"; } +.bi-pin-map-fill::before { content: "\f64b"; } +.bi-pin-map::before { content: "\f64c"; } +.bi-plus-lg::before { content: "\f64d"; } +.bi-question-lg::before { content: "\f64e"; } +.bi-recycle::before { content: "\f64f"; } +.bi-reddit::before { content: "\f650"; } +.bi-safe-fill::before { content: "\f651"; } +.bi-safe2-fill::before { content: "\f652"; } +.bi-safe2::before { content: "\f653"; } +.bi-sd-card-fill::before { content: "\f654"; } +.bi-sd-card::before { content: "\f655"; } +.bi-skype::before { content: "\f656"; } +.bi-slash-lg::before { content: "\f657"; } +.bi-translate::before { content: "\f658"; } +.bi-x-lg::before { content: "\f659"; } +.bi-safe::before { content: "\f65a"; } +.bi-apple::before { content: "\f65b"; } +.bi-microsoft::before { content: "\f65d"; } +.bi-windows::before { content: "\f65e"; } +.bi-behance::before { content: "\f65c"; } +.bi-dribbble::before { content: "\f65f"; } +.bi-line::before { content: "\f660"; } +.bi-medium::before { content: "\f661"; } +.bi-paypal::before { content: "\f662"; } +.bi-pinterest::before { content: "\f663"; } +.bi-signal::before { content: "\f664"; } +.bi-snapchat::before { content: "\f665"; } +.bi-spotify::before { content: "\f666"; } +.bi-stack-overflow::before { content: "\f667"; } +.bi-strava::before { content: "\f668"; } +.bi-wordpress::before { content: "\f669"; } +.bi-vimeo::before { content: "\f66a"; } +.bi-activity::before { content: "\f66b"; } +.bi-easel2-fill::before { content: "\f66c"; } +.bi-easel2::before { content: "\f66d"; } +.bi-easel3-fill::before { content: "\f66e"; } +.bi-easel3::before { content: "\f66f"; } +.bi-fan::before { content: "\f670"; } +.bi-fingerprint::before { content: "\f671"; } +.bi-graph-down-arrow::before { content: "\f672"; } +.bi-graph-up-arrow::before { content: "\f673"; } +.bi-hypnotize::before { content: "\f674"; } +.bi-magic::before { content: "\f675"; } +.bi-person-rolodex::before { content: "\f676"; } +.bi-person-video::before { content: "\f677"; } +.bi-person-video2::before { content: "\f678"; } +.bi-person-video3::before { content: "\f679"; } +.bi-person-workspace::before { content: "\f67a"; } +.bi-radioactive::before { content: "\f67b"; } +.bi-webcam-fill::before { content: "\f67c"; } +.bi-webcam::before { content: "\f67d"; } +.bi-yin-yang::before { content: "\f67e"; } +.bi-bandaid-fill::before { content: "\f680"; } +.bi-bandaid::before { content: "\f681"; } +.bi-bluetooth::before { content: "\f682"; } +.bi-body-text::before { content: "\f683"; } +.bi-boombox::before { content: "\f684"; } +.bi-boxes::before { content: "\f685"; } +.bi-dpad-fill::before { content: "\f686"; } +.bi-dpad::before { content: "\f687"; } +.bi-ear-fill::before { content: "\f688"; } +.bi-ear::before { content: "\f689"; } +.bi-envelope-check-fill::before { content: "\f68b"; } +.bi-envelope-check::before { content: "\f68c"; } +.bi-envelope-dash-fill::before { content: "\f68e"; } +.bi-envelope-dash::before { content: "\f68f"; } +.bi-envelope-exclamation-fill::before { content: "\f691"; } +.bi-envelope-exclamation::before { content: "\f692"; } +.bi-envelope-plus-fill::before { content: "\f693"; } +.bi-envelope-plus::before { content: "\f694"; } +.bi-envelope-slash-fill::before { content: "\f696"; } +.bi-envelope-slash::before { content: "\f697"; } +.bi-envelope-x-fill::before { content: "\f699"; } +.bi-envelope-x::before { content: "\f69a"; } +.bi-explicit-fill::before { content: "\f69b"; } +.bi-explicit::before { content: "\f69c"; } +.bi-git::before { content: "\f69d"; } +.bi-infinity::before { content: "\f69e"; } +.bi-list-columns-reverse::before { content: "\f69f"; } +.bi-list-columns::before { content: "\f6a0"; } +.bi-meta::before { content: "\f6a1"; } +.bi-nintendo-switch::before { content: "\f6a4"; } +.bi-pc-display-horizontal::before { content: "\f6a5"; } +.bi-pc-display::before { content: "\f6a6"; } +.bi-pc-horizontal::before { content: "\f6a7"; } +.bi-pc::before { content: "\f6a8"; } +.bi-playstation::before { content: "\f6a9"; } +.bi-plus-slash-minus::before { content: "\f6aa"; } +.bi-projector-fill::before { content: "\f6ab"; } +.bi-projector::before { content: "\f6ac"; } +.bi-qr-code-scan::before { content: "\f6ad"; } +.bi-qr-code::before { content: "\f6ae"; } +.bi-quora::before { content: "\f6af"; } +.bi-quote::before { content: "\f6b0"; } +.bi-robot::before { content: "\f6b1"; } +.bi-send-check-fill::before { content: "\f6b2"; } +.bi-send-check::before { content: "\f6b3"; } +.bi-send-dash-fill::before { content: "\f6b4"; } +.bi-send-dash::before { content: "\f6b5"; } +.bi-send-exclamation-fill::before { content: "\f6b7"; } +.bi-send-exclamation::before { content: "\f6b8"; } +.bi-send-fill::before { content: "\f6b9"; } +.bi-send-plus-fill::before { content: "\f6ba"; } +.bi-send-plus::before { content: "\f6bb"; } +.bi-send-slash-fill::before { content: "\f6bc"; } +.bi-send-slash::before { content: "\f6bd"; } +.bi-send-x-fill::before { content: "\f6be"; } +.bi-send-x::before { content: "\f6bf"; } +.bi-send::before { content: "\f6c0"; } +.bi-steam::before { content: "\f6c1"; } +.bi-terminal-dash::before { content: "\f6c3"; } +.bi-terminal-plus::before { content: "\f6c4"; } +.bi-terminal-split::before { content: "\f6c5"; } +.bi-ticket-detailed-fill::before { content: "\f6c6"; } +.bi-ticket-detailed::before { content: "\f6c7"; } +.bi-ticket-fill::before { content: "\f6c8"; } +.bi-ticket-perforated-fill::before { content: "\f6c9"; } +.bi-ticket-perforated::before { content: "\f6ca"; } +.bi-ticket::before { content: "\f6cb"; } +.bi-tiktok::before { content: "\f6cc"; } +.bi-window-dash::before { content: "\f6cd"; } +.bi-window-desktop::before { content: "\f6ce"; } +.bi-window-fullscreen::before { content: "\f6cf"; } +.bi-window-plus::before { content: "\f6d0"; } +.bi-window-split::before { content: "\f6d1"; } +.bi-window-stack::before { content: "\f6d2"; } +.bi-window-x::before { content: "\f6d3"; } +.bi-xbox::before { content: "\f6d4"; } +.bi-ethernet::before { content: "\f6d5"; } +.bi-hdmi-fill::before { content: "\f6d6"; } +.bi-hdmi::before { content: "\f6d7"; } +.bi-usb-c-fill::before { content: "\f6d8"; } +.bi-usb-c::before { content: "\f6d9"; } +.bi-usb-fill::before { content: "\f6da"; } +.bi-usb-plug-fill::before { content: "\f6db"; } +.bi-usb-plug::before { content: "\f6dc"; } +.bi-usb-symbol::before { content: "\f6dd"; } +.bi-usb::before { content: "\f6de"; } +.bi-boombox-fill::before { content: "\f6df"; } +.bi-displayport::before { content: "\f6e1"; } +.bi-gpu-card::before { content: "\f6e2"; } +.bi-memory::before { content: "\f6e3"; } +.bi-modem-fill::before { content: "\f6e4"; } +.bi-modem::before { content: "\f6e5"; } +.bi-motherboard-fill::before { content: "\f6e6"; } +.bi-motherboard::before { content: "\f6e7"; } +.bi-optical-audio-fill::before { content: "\f6e8"; } +.bi-optical-audio::before { content: "\f6e9"; } +.bi-pci-card::before { content: "\f6ea"; } +.bi-router-fill::before { content: "\f6eb"; } +.bi-router::before { content: "\f6ec"; } +.bi-thunderbolt-fill::before { content: "\f6ef"; } +.bi-thunderbolt::before { content: "\f6f0"; } +.bi-usb-drive-fill::before { content: "\f6f1"; } +.bi-usb-drive::before { content: "\f6f2"; } +.bi-usb-micro-fill::before { content: "\f6f3"; } +.bi-usb-micro::before { content: "\f6f4"; } +.bi-usb-mini-fill::before { content: "\f6f5"; } +.bi-usb-mini::before { content: "\f6f6"; } +.bi-cloud-haze2::before { content: "\f6f7"; } +.bi-device-hdd-fill::before { content: "\f6f8"; } +.bi-device-hdd::before { content: "\f6f9"; } +.bi-device-ssd-fill::before { content: "\f6fa"; } +.bi-device-ssd::before { content: "\f6fb"; } +.bi-displayport-fill::before { content: "\f6fc"; } +.bi-mortarboard-fill::before { content: "\f6fd"; } +.bi-mortarboard::before { content: "\f6fe"; } +.bi-terminal-x::before { content: "\f6ff"; } +.bi-arrow-through-heart-fill::before { content: "\f700"; } +.bi-arrow-through-heart::before { content: "\f701"; } +.bi-badge-sd-fill::before { content: "\f702"; } +.bi-badge-sd::before { content: "\f703"; } +.bi-bag-heart-fill::before { content: "\f704"; } +.bi-bag-heart::before { content: "\f705"; } +.bi-balloon-fill::before { content: "\f706"; } +.bi-balloon-heart-fill::before { content: "\f707"; } +.bi-balloon-heart::before { content: "\f708"; } +.bi-balloon::before { content: "\f709"; } +.bi-box2-fill::before { content: "\f70a"; } +.bi-box2-heart-fill::before { content: "\f70b"; } +.bi-box2-heart::before { content: "\f70c"; } +.bi-box2::before { content: "\f70d"; } +.bi-braces-asterisk::before { content: "\f70e"; } +.bi-calendar-heart-fill::before { content: "\f70f"; } +.bi-calendar-heart::before { content: "\f710"; } +.bi-calendar2-heart-fill::before { content: "\f711"; } +.bi-calendar2-heart::before { content: "\f712"; } +.bi-chat-heart-fill::before { content: "\f713"; } +.bi-chat-heart::before { content: "\f714"; } +.bi-chat-left-heart-fill::before { content: "\f715"; } +.bi-chat-left-heart::before { content: "\f716"; } +.bi-chat-right-heart-fill::before { content: "\f717"; } +.bi-chat-right-heart::before { content: "\f718"; } +.bi-chat-square-heart-fill::before { content: "\f719"; } +.bi-chat-square-heart::before { content: "\f71a"; } +.bi-clipboard-check-fill::before { content: "\f71b"; } +.bi-clipboard-data-fill::before { content: "\f71c"; } +.bi-clipboard-fill::before { content: "\f71d"; } +.bi-clipboard-heart-fill::before { content: "\f71e"; } +.bi-clipboard-heart::before { content: "\f71f"; } +.bi-clipboard-minus-fill::before { content: "\f720"; } +.bi-clipboard-plus-fill::before { content: "\f721"; } +.bi-clipboard-pulse::before { content: "\f722"; } +.bi-clipboard-x-fill::before { content: "\f723"; } +.bi-clipboard2-check-fill::before { content: "\f724"; } +.bi-clipboard2-check::before { content: "\f725"; } +.bi-clipboard2-data-fill::before { content: "\f726"; } +.bi-clipboard2-data::before { content: "\f727"; } +.bi-clipboard2-fill::before { content: "\f728"; } +.bi-clipboard2-heart-fill::before { content: "\f729"; } +.bi-clipboard2-heart::before { content: "\f72a"; } +.bi-clipboard2-minus-fill::before { content: "\f72b"; } +.bi-clipboard2-minus::before { content: "\f72c"; } +.bi-clipboard2-plus-fill::before { content: "\f72d"; } +.bi-clipboard2-plus::before { content: "\f72e"; } +.bi-clipboard2-pulse-fill::before { content: "\f72f"; } +.bi-clipboard2-pulse::before { content: "\f730"; } +.bi-clipboard2-x-fill::before { content: "\f731"; } +.bi-clipboard2-x::before { content: "\f732"; } +.bi-clipboard2::before { content: "\f733"; } +.bi-emoji-kiss-fill::before { content: "\f734"; } +.bi-emoji-kiss::before { content: "\f735"; } +.bi-envelope-heart-fill::before { content: "\f736"; } +.bi-envelope-heart::before { content: "\f737"; } +.bi-envelope-open-heart-fill::before { content: "\f738"; } +.bi-envelope-open-heart::before { content: "\f739"; } +.bi-envelope-paper-fill::before { content: "\f73a"; } +.bi-envelope-paper-heart-fill::before { content: "\f73b"; } +.bi-envelope-paper-heart::before { content: "\f73c"; } +.bi-envelope-paper::before { content: "\f73d"; } +.bi-filetype-aac::before { content: "\f73e"; } +.bi-filetype-ai::before { content: "\f73f"; } +.bi-filetype-bmp::before { content: "\f740"; } +.bi-filetype-cs::before { content: "\f741"; } +.bi-filetype-css::before { content: "\f742"; } +.bi-filetype-csv::before { content: "\f743"; } +.bi-filetype-doc::before { content: "\f744"; } +.bi-filetype-docx::before { content: "\f745"; } +.bi-filetype-exe::before { content: "\f746"; } +.bi-filetype-gif::before { content: "\f747"; } +.bi-filetype-heic::before { content: "\f748"; } +.bi-filetype-html::before { content: "\f749"; } +.bi-filetype-java::before { content: "\f74a"; } +.bi-filetype-jpg::before { content: "\f74b"; } +.bi-filetype-js::before { content: "\f74c"; } +.bi-filetype-jsx::before { content: "\f74d"; } +.bi-filetype-key::before { content: "\f74e"; } +.bi-filetype-m4p::before { content: "\f74f"; } +.bi-filetype-md::before { content: "\f750"; } +.bi-filetype-mdx::before { content: "\f751"; } +.bi-filetype-mov::before { content: "\f752"; } +.bi-filetype-mp3::before { content: "\f753"; } +.bi-filetype-mp4::before { content: "\f754"; } +.bi-filetype-otf::before { content: "\f755"; } +.bi-filetype-pdf::before { content: "\f756"; } +.bi-filetype-php::before { content: "\f757"; } +.bi-filetype-png::before { content: "\f758"; } +.bi-filetype-ppt::before { content: "\f75a"; } +.bi-filetype-psd::before { content: "\f75b"; } +.bi-filetype-py::before { content: "\f75c"; } +.bi-filetype-raw::before { content: "\f75d"; } +.bi-filetype-rb::before { content: "\f75e"; } +.bi-filetype-sass::before { content: "\f75f"; } +.bi-filetype-scss::before { content: "\f760"; } +.bi-filetype-sh::before { content: "\f761"; } +.bi-filetype-svg::before { content: "\f762"; } +.bi-filetype-tiff::before { content: "\f763"; } +.bi-filetype-tsx::before { content: "\f764"; } +.bi-filetype-ttf::before { content: "\f765"; } +.bi-filetype-txt::before { content: "\f766"; } +.bi-filetype-wav::before { content: "\f767"; } +.bi-filetype-woff::before { content: "\f768"; } +.bi-filetype-xls::before { content: "\f76a"; } +.bi-filetype-xml::before { content: "\f76b"; } +.bi-filetype-yml::before { content: "\f76c"; } +.bi-heart-arrow::before { content: "\f76d"; } +.bi-heart-pulse-fill::before { content: "\f76e"; } +.bi-heart-pulse::before { content: "\f76f"; } +.bi-heartbreak-fill::before { content: "\f770"; } +.bi-heartbreak::before { content: "\f771"; } +.bi-hearts::before { content: "\f772"; } +.bi-hospital-fill::before { content: "\f773"; } +.bi-hospital::before { content: "\f774"; } +.bi-house-heart-fill::before { content: "\f775"; } +.bi-house-heart::before { content: "\f776"; } +.bi-incognito::before { content: "\f777"; } +.bi-magnet-fill::before { content: "\f778"; } +.bi-magnet::before { content: "\f779"; } +.bi-person-heart::before { content: "\f77a"; } +.bi-person-hearts::before { content: "\f77b"; } +.bi-phone-flip::before { content: "\f77c"; } +.bi-plugin::before { content: "\f77d"; } +.bi-postage-fill::before { content: "\f77e"; } +.bi-postage-heart-fill::before { content: "\f77f"; } +.bi-postage-heart::before { content: "\f780"; } +.bi-postage::before { content: "\f781"; } +.bi-postcard-fill::before { content: "\f782"; } +.bi-postcard-heart-fill::before { content: "\f783"; } +.bi-postcard-heart::before { content: "\f784"; } +.bi-postcard::before { content: "\f785"; } +.bi-search-heart-fill::before { content: "\f786"; } +.bi-search-heart::before { content: "\f787"; } +.bi-sliders2-vertical::before { content: "\f788"; } +.bi-sliders2::before { content: "\f789"; } +.bi-trash3-fill::before { content: "\f78a"; } +.bi-trash3::before { content: "\f78b"; } +.bi-valentine::before { content: "\f78c"; } +.bi-valentine2::before { content: "\f78d"; } +.bi-wrench-adjustable-circle-fill::before { content: "\f78e"; } +.bi-wrench-adjustable-circle::before { content: "\f78f"; } +.bi-wrench-adjustable::before { content: "\f790"; } +.bi-filetype-json::before { content: "\f791"; } +.bi-filetype-pptx::before { content: "\f792"; } +.bi-filetype-xlsx::before { content: "\f793"; } +.bi-1-circle-fill::before { content: "\f796"; } +.bi-1-circle::before { content: "\f797"; } +.bi-1-square-fill::before { content: "\f798"; } +.bi-1-square::before { content: "\f799"; } +.bi-2-circle-fill::before { content: "\f79c"; } +.bi-2-circle::before { content: "\f79d"; } +.bi-2-square-fill::before { content: "\f79e"; } +.bi-2-square::before { content: "\f79f"; } +.bi-3-circle-fill::before { content: "\f7a2"; } +.bi-3-circle::before { content: "\f7a3"; } +.bi-3-square-fill::before { content: "\f7a4"; } +.bi-3-square::before { content: "\f7a5"; } +.bi-4-circle-fill::before { content: "\f7a8"; } +.bi-4-circle::before { content: "\f7a9"; } +.bi-4-square-fill::before { content: "\f7aa"; } +.bi-4-square::before { content: "\f7ab"; } +.bi-5-circle-fill::before { content: "\f7ae"; } +.bi-5-circle::before { content: "\f7af"; } +.bi-5-square-fill::before { content: "\f7b0"; } +.bi-5-square::before { content: "\f7b1"; } +.bi-6-circle-fill::before { content: "\f7b4"; } +.bi-6-circle::before { content: "\f7b5"; } +.bi-6-square-fill::before { content: "\f7b6"; } +.bi-6-square::before { content: "\f7b7"; } +.bi-7-circle-fill::before { content: "\f7ba"; } +.bi-7-circle::before { content: "\f7bb"; } +.bi-7-square-fill::before { content: "\f7bc"; } +.bi-7-square::before { content: "\f7bd"; } +.bi-8-circle-fill::before { content: "\f7c0"; } +.bi-8-circle::before { content: "\f7c1"; } +.bi-8-square-fill::before { content: "\f7c2"; } +.bi-8-square::before { content: "\f7c3"; } +.bi-9-circle-fill::before { content: "\f7c6"; } +.bi-9-circle::before { content: "\f7c7"; } +.bi-9-square-fill::before { content: "\f7c8"; } +.bi-9-square::before { content: "\f7c9"; } +.bi-airplane-engines-fill::before { content: "\f7ca"; } +.bi-airplane-engines::before { content: "\f7cb"; } +.bi-airplane-fill::before { content: "\f7cc"; } +.bi-airplane::before { content: "\f7cd"; } +.bi-alexa::before { content: "\f7ce"; } +.bi-alipay::before { content: "\f7cf"; } +.bi-android::before { content: "\f7d0"; } +.bi-android2::before { content: "\f7d1"; } +.bi-box-fill::before { content: "\f7d2"; } +.bi-box-seam-fill::before { content: "\f7d3"; } +.bi-browser-chrome::before { content: "\f7d4"; } +.bi-browser-edge::before { content: "\f7d5"; } +.bi-browser-firefox::before { content: "\f7d6"; } +.bi-browser-safari::before { content: "\f7d7"; } +.bi-c-circle-fill::before { content: "\f7da"; } +.bi-c-circle::before { content: "\f7db"; } +.bi-c-square-fill::before { content: "\f7dc"; } +.bi-c-square::before { content: "\f7dd"; } +.bi-capsule-pill::before { content: "\f7de"; } +.bi-capsule::before { content: "\f7df"; } +.bi-car-front-fill::before { content: "\f7e0"; } +.bi-car-front::before { content: "\f7e1"; } +.bi-cassette-fill::before { content: "\f7e2"; } +.bi-cassette::before { content: "\f7e3"; } +.bi-cc-circle-fill::before { content: "\f7e6"; } +.bi-cc-circle::before { content: "\f7e7"; } +.bi-cc-square-fill::before { content: "\f7e8"; } +.bi-cc-square::before { content: "\f7e9"; } +.bi-cup-hot-fill::before { content: "\f7ea"; } +.bi-cup-hot::before { content: "\f7eb"; } +.bi-currency-rupee::before { content: "\f7ec"; } +.bi-dropbox::before { content: "\f7ed"; } +.bi-escape::before { content: "\f7ee"; } +.bi-fast-forward-btn-fill::before { content: "\f7ef"; } +.bi-fast-forward-btn::before { content: "\f7f0"; } +.bi-fast-forward-circle-fill::before { content: "\f7f1"; } +.bi-fast-forward-circle::before { content: "\f7f2"; } +.bi-fast-forward-fill::before { content: "\f7f3"; } +.bi-fast-forward::before { content: "\f7f4"; } +.bi-filetype-sql::before { content: "\f7f5"; } +.bi-fire::before { content: "\f7f6"; } +.bi-google-play::before { content: "\f7f7"; } +.bi-h-circle-fill::before { content: "\f7fa"; } +.bi-h-circle::before { content: "\f7fb"; } +.bi-h-square-fill::before { content: "\f7fc"; } +.bi-h-square::before { content: "\f7fd"; } +.bi-indent::before { content: "\f7fe"; } +.bi-lungs-fill::before { content: "\f7ff"; } +.bi-lungs::before { content: "\f800"; } +.bi-microsoft-teams::before { content: "\f801"; } +.bi-p-circle-fill::before { content: "\f804"; } +.bi-p-circle::before { content: "\f805"; } +.bi-p-square-fill::before { content: "\f806"; } +.bi-p-square::before { content: "\f807"; } +.bi-pass-fill::before { content: "\f808"; } +.bi-pass::before { content: "\f809"; } +.bi-prescription::before { content: "\f80a"; } +.bi-prescription2::before { content: "\f80b"; } +.bi-r-circle-fill::before { content: "\f80e"; } +.bi-r-circle::before { content: "\f80f"; } +.bi-r-square-fill::before { content: "\f810"; } +.bi-r-square::before { content: "\f811"; } +.bi-repeat-1::before { content: "\f812"; } +.bi-repeat::before { content: "\f813"; } +.bi-rewind-btn-fill::before { content: "\f814"; } +.bi-rewind-btn::before { content: "\f815"; } +.bi-rewind-circle-fill::before { content: "\f816"; } +.bi-rewind-circle::before { content: "\f817"; } +.bi-rewind-fill::before { content: "\f818"; } +.bi-rewind::before { content: "\f819"; } +.bi-train-freight-front-fill::before { content: "\f81a"; } +.bi-train-freight-front::before { content: "\f81b"; } +.bi-train-front-fill::before { content: "\f81c"; } +.bi-train-front::before { content: "\f81d"; } +.bi-train-lightrail-front-fill::before { content: "\f81e"; } +.bi-train-lightrail-front::before { content: "\f81f"; } +.bi-truck-front-fill::before { content: "\f820"; } +.bi-truck-front::before { content: "\f821"; } +.bi-ubuntu::before { content: "\f822"; } +.bi-unindent::before { content: "\f823"; } +.bi-unity::before { content: "\f824"; } +.bi-universal-access-circle::before { content: "\f825"; } +.bi-universal-access::before { content: "\f826"; } +.bi-virus::before { content: "\f827"; } +.bi-virus2::before { content: "\f828"; } +.bi-wechat::before { content: "\f829"; } +.bi-yelp::before { content: "\f82a"; } +.bi-sign-stop-fill::before { content: "\f82b"; } +.bi-sign-stop-lights-fill::before { content: "\f82c"; } +.bi-sign-stop-lights::before { content: "\f82d"; } +.bi-sign-stop::before { content: "\f82e"; } +.bi-sign-turn-left-fill::before { content: "\f82f"; } +.bi-sign-turn-left::before { content: "\f830"; } +.bi-sign-turn-right-fill::before { content: "\f831"; } +.bi-sign-turn-right::before { content: "\f832"; } +.bi-sign-turn-slight-left-fill::before { content: "\f833"; } +.bi-sign-turn-slight-left::before { content: "\f834"; } +.bi-sign-turn-slight-right-fill::before { content: "\f835"; } +.bi-sign-turn-slight-right::before { content: "\f836"; } +.bi-sign-yield-fill::before { content: "\f837"; } +.bi-sign-yield::before { content: "\f838"; } +.bi-ev-station-fill::before { content: "\f839"; } +.bi-ev-station::before { content: "\f83a"; } +.bi-fuel-pump-diesel-fill::before { content: "\f83b"; } +.bi-fuel-pump-diesel::before { content: "\f83c"; } +.bi-fuel-pump-fill::before { content: "\f83d"; } +.bi-fuel-pump::before { content: "\f83e"; } +.bi-0-circle-fill::before { content: "\f83f"; } +.bi-0-circle::before { content: "\f840"; } +.bi-0-square-fill::before { content: "\f841"; } +.bi-0-square::before { content: "\f842"; } +.bi-rocket-fill::before { content: "\f843"; } +.bi-rocket-takeoff-fill::before { content: "\f844"; } +.bi-rocket-takeoff::before { content: "\f845"; } +.bi-rocket::before { content: "\f846"; } +.bi-stripe::before { content: "\f847"; } +.bi-subscript::before { content: "\f848"; } +.bi-superscript::before { content: "\f849"; } +.bi-trello::before { content: "\f84a"; } +.bi-envelope-at-fill::before { content: "\f84b"; } +.bi-envelope-at::before { content: "\f84c"; } +.bi-regex::before { content: "\f84d"; } +.bi-text-wrap::before { content: "\f84e"; } +.bi-sign-dead-end-fill::before { content: "\f84f"; } +.bi-sign-dead-end::before { content: "\f850"; } +.bi-sign-do-not-enter-fill::before { content: "\f851"; } +.bi-sign-do-not-enter::before { content: "\f852"; } +.bi-sign-intersection-fill::before { content: "\f853"; } +.bi-sign-intersection-side-fill::before { content: "\f854"; } +.bi-sign-intersection-side::before { content: "\f855"; } +.bi-sign-intersection-t-fill::before { content: "\f856"; } +.bi-sign-intersection-t::before { content: "\f857"; } +.bi-sign-intersection-y-fill::before { content: "\f858"; } +.bi-sign-intersection-y::before { content: "\f859"; } +.bi-sign-intersection::before { content: "\f85a"; } +.bi-sign-merge-left-fill::before { content: "\f85b"; } +.bi-sign-merge-left::before { content: "\f85c"; } +.bi-sign-merge-right-fill::before { content: "\f85d"; } +.bi-sign-merge-right::before { content: "\f85e"; } +.bi-sign-no-left-turn-fill::before { content: "\f85f"; } +.bi-sign-no-left-turn::before { content: "\f860"; } +.bi-sign-no-parking-fill::before { content: "\f861"; } +.bi-sign-no-parking::before { content: "\f862"; } +.bi-sign-no-right-turn-fill::before { content: "\f863"; } +.bi-sign-no-right-turn::before { content: "\f864"; } +.bi-sign-railroad-fill::before { content: "\f865"; } +.bi-sign-railroad::before { content: "\f866"; } +.bi-building-add::before { content: "\f867"; } +.bi-building-check::before { content: "\f868"; } +.bi-building-dash::before { content: "\f869"; } +.bi-building-down::before { content: "\f86a"; } +.bi-building-exclamation::before { content: "\f86b"; } +.bi-building-fill-add::before { content: "\f86c"; } +.bi-building-fill-check::before { content: "\f86d"; } +.bi-building-fill-dash::before { content: "\f86e"; } +.bi-building-fill-down::before { content: "\f86f"; } +.bi-building-fill-exclamation::before { content: "\f870"; } +.bi-building-fill-gear::before { content: "\f871"; } +.bi-building-fill-lock::before { content: "\f872"; } +.bi-building-fill-slash::before { content: "\f873"; } +.bi-building-fill-up::before { content: "\f874"; } +.bi-building-fill-x::before { content: "\f875"; } +.bi-building-fill::before { content: "\f876"; } +.bi-building-gear::before { content: "\f877"; } +.bi-building-lock::before { content: "\f878"; } +.bi-building-slash::before { content: "\f879"; } +.bi-building-up::before { content: "\f87a"; } +.bi-building-x::before { content: "\f87b"; } +.bi-buildings-fill::before { content: "\f87c"; } +.bi-buildings::before { content: "\f87d"; } +.bi-bus-front-fill::before { content: "\f87e"; } +.bi-bus-front::before { content: "\f87f"; } +.bi-ev-front-fill::before { content: "\f880"; } +.bi-ev-front::before { content: "\f881"; } +.bi-globe-americas::before { content: "\f882"; } +.bi-globe-asia-australia::before { content: "\f883"; } +.bi-globe-central-south-asia::before { content: "\f884"; } +.bi-globe-europe-africa::before { content: "\f885"; } +.bi-house-add-fill::before { content: "\f886"; } +.bi-house-add::before { content: "\f887"; } +.bi-house-check-fill::before { content: "\f888"; } +.bi-house-check::before { content: "\f889"; } +.bi-house-dash-fill::before { content: "\f88a"; } +.bi-house-dash::before { content: "\f88b"; } +.bi-house-down-fill::before { content: "\f88c"; } +.bi-house-down::before { content: "\f88d"; } +.bi-house-exclamation-fill::before { content: "\f88e"; } +.bi-house-exclamation::before { content: "\f88f"; } +.bi-house-gear-fill::before { content: "\f890"; } +.bi-house-gear::before { content: "\f891"; } +.bi-house-lock-fill::before { content: "\f892"; } +.bi-house-lock::before { content: "\f893"; } +.bi-house-slash-fill::before { content: "\f894"; } +.bi-house-slash::before { content: "\f895"; } +.bi-house-up-fill::before { content: "\f896"; } +.bi-house-up::before { content: "\f897"; } +.bi-house-x-fill::before { content: "\f898"; } +.bi-house-x::before { content: "\f899"; } +.bi-person-add::before { content: "\f89a"; } +.bi-person-down::before { content: "\f89b"; } +.bi-person-exclamation::before { content: "\f89c"; } +.bi-person-fill-add::before { content: "\f89d"; } +.bi-person-fill-check::before { content: "\f89e"; } +.bi-person-fill-dash::before { content: "\f89f"; } +.bi-person-fill-down::before { content: "\f8a0"; } +.bi-person-fill-exclamation::before { content: "\f8a1"; } +.bi-person-fill-gear::before { content: "\f8a2"; } +.bi-person-fill-lock::before { content: "\f8a3"; } +.bi-person-fill-slash::before { content: "\f8a4"; } +.bi-person-fill-up::before { content: "\f8a5"; } +.bi-person-fill-x::before { content: "\f8a6"; } +.bi-person-gear::before { content: "\f8a7"; } +.bi-person-lock::before { content: "\f8a8"; } +.bi-person-slash::before { content: "\f8a9"; } +.bi-person-up::before { content: "\f8aa"; } +.bi-scooter::before { content: "\f8ab"; } +.bi-taxi-front-fill::before { content: "\f8ac"; } +.bi-taxi-front::before { content: "\f8ad"; } +.bi-amd::before { content: "\f8ae"; } +.bi-database-add::before { content: "\f8af"; } +.bi-database-check::before { content: "\f8b0"; } +.bi-database-dash::before { content: "\f8b1"; } +.bi-database-down::before { content: "\f8b2"; } +.bi-database-exclamation::before { content: "\f8b3"; } +.bi-database-fill-add::before { content: "\f8b4"; } +.bi-database-fill-check::before { content: "\f8b5"; } +.bi-database-fill-dash::before { content: "\f8b6"; } +.bi-database-fill-down::before { content: "\f8b7"; } +.bi-database-fill-exclamation::before { content: "\f8b8"; } +.bi-database-fill-gear::before { content: "\f8b9"; } +.bi-database-fill-lock::before { content: "\f8ba"; } +.bi-database-fill-slash::before { content: "\f8bb"; } +.bi-database-fill-up::before { content: "\f8bc"; } +.bi-database-fill-x::before { content: "\f8bd"; } +.bi-database-fill::before { content: "\f8be"; } +.bi-database-gear::before { content: "\f8bf"; } +.bi-database-lock::before { content: "\f8c0"; } +.bi-database-slash::before { content: "\f8c1"; } +.bi-database-up::before { content: "\f8c2"; } +.bi-database-x::before { content: "\f8c3"; } +.bi-database::before { content: "\f8c4"; } +.bi-houses-fill::before { content: "\f8c5"; } +.bi-houses::before { content: "\f8c6"; } +.bi-nvidia::before { content: "\f8c7"; } +.bi-person-vcard-fill::before { content: "\f8c8"; } +.bi-person-vcard::before { content: "\f8c9"; } +.bi-sina-weibo::before { content: "\f8ca"; } +.bi-tencent-qq::before { content: "\f8cb"; } +.bi-wikipedia::before { content: "\f8cc"; } +.bi-alphabet-uppercase::before { content: "\f2a5"; } +.bi-alphabet::before { content: "\f68a"; } +.bi-amazon::before { content: "\f68d"; } +.bi-arrows-collapse-vertical::before { content: "\f690"; } +.bi-arrows-expand-vertical::before { content: "\f695"; } +.bi-arrows-vertical::before { content: "\f698"; } +.bi-arrows::before { content: "\f6a2"; } +.bi-ban-fill::before { content: "\f6a3"; } +.bi-ban::before { content: "\f6b6"; } +.bi-bing::before { content: "\f6c2"; } +.bi-cake::before { content: "\f6e0"; } +.bi-cake2::before { content: "\f6ed"; } +.bi-cookie::before { content: "\f6ee"; } +.bi-copy::before { content: "\f759"; } +.bi-crosshair::before { content: "\f769"; } +.bi-crosshair2::before { content: "\f794"; } +.bi-emoji-astonished-fill::before { content: "\f795"; } +.bi-emoji-astonished::before { content: "\f79a"; } +.bi-emoji-grimace-fill::before { content: "\f79b"; } +.bi-emoji-grimace::before { content: "\f7a0"; } +.bi-emoji-grin-fill::before { content: "\f7a1"; } +.bi-emoji-grin::before { content: "\f7a6"; } +.bi-emoji-surprise-fill::before { content: "\f7a7"; } +.bi-emoji-surprise::before { content: "\f7ac"; } +.bi-emoji-tear-fill::before { content: "\f7ad"; } +.bi-emoji-tear::before { content: "\f7b2"; } +.bi-envelope-arrow-down-fill::before { content: "\f7b3"; } +.bi-envelope-arrow-down::before { content: "\f7b8"; } +.bi-envelope-arrow-up-fill::before { content: "\f7b9"; } +.bi-envelope-arrow-up::before { content: "\f7be"; } +.bi-feather::before { content: "\f7bf"; } +.bi-feather2::before { content: "\f7c4"; } +.bi-floppy-fill::before { content: "\f7c5"; } +.bi-floppy::before { content: "\f7d8"; } +.bi-floppy2-fill::before { content: "\f7d9"; } +.bi-floppy2::before { content: "\f7e4"; } +.bi-gitlab::before { content: "\f7e5"; } +.bi-highlighter::before { content: "\f7f8"; } +.bi-marker-tip::before { content: "\f802"; } +.bi-nvme-fill::before { content: "\f803"; } +.bi-nvme::before { content: "\f80c"; } +.bi-opencollective::before { content: "\f80d"; } +.bi-pci-card-network::before { content: "\f8cd"; } +.bi-pci-card-sound::before { content: "\f8ce"; } +.bi-radar::before { content: "\f8cf"; } +.bi-send-arrow-down-fill::before { content: "\f8d0"; } +.bi-send-arrow-down::before { content: "\f8d1"; } +.bi-send-arrow-up-fill::before { content: "\f8d2"; } +.bi-send-arrow-up::before { content: "\f8d3"; } +.bi-sim-slash-fill::before { content: "\f8d4"; } +.bi-sim-slash::before { content: "\f8d5"; } +.bi-sourceforge::before { content: "\f8d6"; } +.bi-substack::before { content: "\f8d7"; } +.bi-threads-fill::before { content: "\f8d8"; } +.bi-threads::before { content: "\f8d9"; } +.bi-transparency::before { content: "\f8da"; } +.bi-twitter-x::before { content: "\f8db"; } +.bi-type-h4::before { content: "\f8dc"; } +.bi-type-h5::before { content: "\f8dd"; } +.bi-type-h6::before { content: "\f8de"; } +.bi-backpack-fill::before { content: "\f8df"; } +.bi-backpack::before { content: "\f8e0"; } +.bi-backpack2-fill::before { content: "\f8e1"; } +.bi-backpack2::before { content: "\f8e2"; } +.bi-backpack3-fill::before { content: "\f8e3"; } +.bi-backpack3::before { content: "\f8e4"; } +.bi-backpack4-fill::before { content: "\f8e5"; } +.bi-backpack4::before { content: "\f8e6"; } +.bi-brilliance::before { content: "\f8e7"; } +.bi-cake-fill::before { content: "\f8e8"; } +.bi-cake2-fill::before { content: "\f8e9"; } +.bi-duffle-fill::before { content: "\f8ea"; } +.bi-duffle::before { content: "\f8eb"; } +.bi-exposure::before { content: "\f8ec"; } +.bi-gender-neuter::before { content: "\f8ed"; } +.bi-highlights::before { content: "\f8ee"; } +.bi-luggage-fill::before { content: "\f8ef"; } +.bi-luggage::before { content: "\f8f0"; } +.bi-mailbox-flag::before { content: "\f8f1"; } +.bi-mailbox2-flag::before { content: "\f8f2"; } +.bi-noise-reduction::before { content: "\f8f3"; } +.bi-passport-fill::before { content: "\f8f4"; } +.bi-passport::before { content: "\f8f5"; } +.bi-person-arms-up::before { content: "\f8f6"; } +.bi-person-raised-hand::before { content: "\f8f7"; } +.bi-person-standing-dress::before { content: "\f8f8"; } +.bi-person-standing::before { content: "\f8f9"; } +.bi-person-walking::before { content: "\f8fa"; } +.bi-person-wheelchair::before { content: "\f8fb"; } +.bi-shadows::before { content: "\f8fc"; } +.bi-suitcase-fill::before { content: "\f8fd"; } +.bi-suitcase-lg-fill::before { content: "\f8fe"; } +.bi-suitcase-lg::before { content: "\f8ff"; } +.bi-suitcase::before { content: "\f900"; } +.bi-suitcase2-fill::before { content: "\f901"; } +.bi-suitcase2::before { content: "\f902"; } +.bi-vignette::before { content: "\f903"; } diff --git a/_book/site_libs/bootstrap/bootstrap-icons.woff b/_book/site_libs/bootstrap/bootstrap-icons.woff new file mode 100644 index 0000000000000000000000000000000000000000..dbeeb055674125ad78fda0f3d166b36e5cc92336 GIT binary patch literal 176200 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

2+UrCZlNAp`)&G@jg{m-!Dn; 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πR(XEyYV3az{Ot$Y*f93mYq^Lnu{qbYp!X!TA9&! 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 F?~0aZ)an2L literal 0 HcmV?d00001 diff --git a/_book/site_libs/bootstrap/bootstrap.min.css b/_book/site_libs/bootstrap/bootstrap.min.css new file mode 100644 index 0000000..302dcde --- /dev/null +++ b/_book/site_libs/bootstrap/bootstrap.min.css @@ -0,0 +1,12 @@ +/*! + * Bootstrap v5.3.1 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */@import"https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@300;400;700&display=swap";:root,[data-bs-theme=light]{--bs-blue: #2780e3;--bs-indigo: #6610f2;--bs-purple: #613d7c;--bs-pink: #e83e8c;--bs-red: #ff0039;--bs-orange: #f0ad4e;--bs-yellow: #ff7518;--bs-green: #3fb618;--bs-teal: #20c997;--bs-cyan: #9954bb;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-default: #343a40;--bs-primary: #2780e3;--bs-secondary: #343a40;--bs-success: #3fb618;--bs-info: #9954bb;--bs-warning: #ff7518;--bs-danger: #ff0039;--bs-light: #f8f9fa;--bs-dark: #343a40;--bs-default-rgb: 52, 58, 64;--bs-primary-rgb: 39, 128, 227;--bs-secondary-rgb: 52, 58, 64;--bs-success-rgb: 63, 182, 24;--bs-info-rgb: 153, 84, 187;--bs-warning-rgb: 255, 117, 24;--bs-danger-rgb: 255, 0, 57;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 52, 58, 64;--bs-primary-text-emphasis: #10335b;--bs-secondary-text-emphasis: #15171a;--bs-success-text-emphasis: #19490a;--bs-info-text-emphasis: #3d224b;--bs-warning-text-emphasis: #662f0a;--bs-danger-text-emphasis: #660017;--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: #d4e6f9;--bs-secondary-bg-subtle: #d6d8d9;--bs-success-bg-subtle: #d9f0d1;--bs-info-bg-subtle: #ebddf1;--bs-warning-bg-subtle: #ffe3d1;--bs-danger-bg-subtle: #ffccd7;--bs-light-bg-subtle: #fcfcfd;--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: #a9ccf4;--bs-secondary-border-subtle: #aeb0b3;--bs-success-border-subtle: #b2e2a3;--bs-info-border-subtle: #d6bbe4;--bs-warning-border-subtle: #ffc8a3;--bs-danger-border-subtle: #ff99b0;--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-font-sans-serif: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-root-font-size: 17px;--bs-body-font-family: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #343a40;--bs-body-color-rgb: 52, 58, 64;--bs-body-bg: #fff;--bs-body-bg-rgb: 255, 255, 255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(52, 58, 64, 0.75);--bs-secondary-color-rgb: 52, 58, 64;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(52, 58, 64, 0.5);--bs-tertiary-color-rgb: 52, 58, 64;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: inherit;--bs-link-color: #2761e3;--bs-link-color-rgb: 39, 97, 227;--bs-link-decoration: underline;--bs-link-hover-color: #1f4eb6;--bs-link-hover-color-rgb: 31, 78, 182;--bs-code-color: #7d12ba;--bs-highlight-bg: #ffe3d1;--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, 0.175);--bs-border-radius: 0.25rem;--bs-border-radius-sm: 0.2em;--bs-border-radius-lg: 0.5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width: 0.25rem;--bs-focus-ring-opacity: 0.25;--bs-focus-ring-color: rgba(39, 128, 227, 0.25);--bs-form-valid-color: #3fb618;--bs-form-valid-border-color: #3fb618;--bs-form-invalid-color: #ff0039;--bs-form-invalid-border-color: #ff0039}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222, 226, 230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33, 37, 41;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255, 255, 255;--bs-secondary-color: rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb: 222, 226, 230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52, 58, 64;--bs-tertiary-color: rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb: 222, 226, 230;--bs-tertiary-bg: #2b3035;--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: #7db3ee;--bs-secondary-text-emphasis: #85898c;--bs-success-text-emphasis: #8cd374;--bs-info-text-emphasis: #c298d6;--bs-warning-text-emphasis: #ffac74;--bs-danger-text-emphasis: #ff6688;--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: #081a2d;--bs-secondary-bg-subtle: #0a0c0d;--bs-success-bg-subtle: #0d2405;--bs-info-bg-subtle: #1f1125;--bs-warning-bg-subtle: #331705;--bs-danger-bg-subtle: #33000b;--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: #174d88;--bs-secondary-border-subtle: #1f2326;--bs-success-border-subtle: #266d0e;--bs-info-border-subtle: #5c3270;--bs-warning-border-subtle: #99460e;--bs-danger-border-subtle: #990022;--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: #7db3ee;--bs-link-hover-color: #97c2f1;--bs-link-color-rgb: 125, 179, 238;--bs-link-hover-color-rgb: 151, 194, 241;--bs-code-color: white;--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, 0.15);--bs-form-valid-color: #8cd374;--bs-form-valid-border-color: #8cd374;--bs-form-invalid-color: #ff6688;--bs-form-invalid-border-color: #ff6688}*,*::before,*::after{box-sizing:border-box}:root{font-size:var(--bs-root-font-size)}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:1px solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h1,.h1{font-size:2rem}}h2,.h2{font-size:calc(1.29rem + 0.48vw)}@media(min-width: 1200px){h2,.h2{font-size:1.65rem}}h3,.h3{font-size:calc(1.27rem + 0.24vw)}@media(min-width: 1200px){h3,.h3{font-size:1.45rem}}h4,.h4{font-size:1.25rem}h5,.h5{font-size:1.1rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem;padding:.625rem 1.25rem;border-left:.25rem solid #e9ecef}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em;color:#000;background-color:#f8f9fa;padding:.5rem;border:1px solid var(--bs-border-color, #dee2e6)}pre code{background-color:rgba(0,0,0,0);font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);background-color:#f8f9fa;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.4rem .4rem;font-size:0.875em;color:#fff;background-color:#343a40}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:rgba(52,58,64,.75);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:rgba(52,58,64,.75)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.grid{display:grid;grid-template-rows:repeat(var(--bs-rows, 1), 1fr);grid-template-columns:repeat(var(--bs-columns, 12), 1fr);gap:var(--bs-gap, 1.5rem)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media(min-width: 576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media(min-width: 768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media(min-width: 992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media(min-width: 1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media(min-width: 1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: #343a40;--bs-table-bg: #fff;--bs-table-border-color: #dee2e6;--bs-table-accent-bg: transparent;--bs-table-striped-color: #343a40;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #343a40;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #343a40;--bs-table-hover-bg: rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(1px*2) solid #b2bac1}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: #d4e6f9;--bs-table-border-color: #bfcfe0;--bs-table-striped-bg: #c9dbed;--bs-table-striped-color: #000;--bs-table-active-bg: #bfcfe0;--bs-table-active-color: #000;--bs-table-hover-bg: #c4d5e6;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: #d6d8d9;--bs-table-border-color: #c1c2c3;--bs-table-striped-bg: #cbcdce;--bs-table-striped-color: #000;--bs-table-active-bg: #c1c2c3;--bs-table-active-color: #000;--bs-table-hover-bg: #c6c8c9;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #d9f0d1;--bs-table-border-color: #c3d8bc;--bs-table-striped-bg: #cee4c7;--bs-table-striped-color: #000;--bs-table-active-bg: #c3d8bc;--bs-table-active-color: #000;--bs-table-hover-bg: #c9dec1;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: #ebddf1;--bs-table-border-color: #d4c7d9;--bs-table-striped-bg: #dfd2e5;--bs-table-striped-color: #000;--bs-table-active-bg: #d4c7d9;--bs-table-active-color: #000;--bs-table-hover-bg: #d9ccdf;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: #ffe3d1;--bs-table-border-color: #e6ccbc;--bs-table-striped-bg: #f2d8c7;--bs-table-striped-color: #000;--bs-table-active-bg: #e6ccbc;--bs-table-active-color: #000;--bs-table-hover-bg: #ecd2c1;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #ffccd7;--bs-table-border-color: #e6b8c2;--bs-table-striped-bg: #f2c2cc;--bs-table-striped-color: #000;--bs-table-active-bg: #e6b8c2;--bs-table-active-color: #000;--bs-table-hover-bg: #ecbdc7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: #dfe0e1;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #343a40;--bs-table-border-color: #484e53;--bs-table-striped-bg: #3e444a;--bs-table-striped-color: #fff;--bs-table-active-bg: #484e53;--bs-table-active-color: #fff;--bs-table-hover-bg: #43494e;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label,.shiny-input-container .control-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:rgba(52,58,64,.75)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#343a40;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#fff;background-clip:padding-box;border:1px solid #dee2e6;border-radius:0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#343a40;background-color:#fff;border-color:#93c0f1;outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:rgba(52,58,64,.75);opacity:1}.form-control:disabled{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:#343a40;background-color:#f8f9fa;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#e9ecef}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#343a40;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(1px * 2));padding:.25rem .5rem;font-size:0.875rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2));padding:.5rem 1rem;font-size:1.25rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + calc(1px * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(1px * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(1px * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important}.form-control-color::-webkit-color-swatch{border:0 !important}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(1px * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(1px * 2))}.form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#343a40;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#fff;background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #dee2e6;border-radius:0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#93c0f1;outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #343a40}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check,.shiny-input-container .checkbox,.shiny-input-container .radio{display:block;min-height:1.5rem;padding-left:0;margin-bottom:.125rem}.form-check .form-check-input,.form-check .shiny-input-container .checkbox input,.form-check .shiny-input-container .radio input,.shiny-input-container .checkbox .form-check-input,.shiny-input-container .checkbox .shiny-input-container .checkbox input,.shiny-input-container .checkbox .shiny-input-container .radio input,.shiny-input-container .radio .form-check-input,.shiny-input-container .radio .shiny-input-container .checkbox input,.shiny-input-container .radio .shiny-input-container .radio input{float:left;margin-left:0}.form-check-reverse{padding-right:0;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:0;margin-left:0}.form-check-input,.shiny-input-container .checkbox input,.shiny-input-container .checkbox-inline input,.shiny-input-container .radio input,.shiny-input-container .radio-inline input{--bs-form-check-bg: #fff;width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid #dee2e6;print-color-adjust:exact}.form-check-input[type=radio],.shiny-input-container .checkbox input[type=radio],.shiny-input-container .checkbox-inline input[type=radio],.shiny-input-container .radio input[type=radio],.shiny-input-container .radio-inline input[type=radio]{border-radius:50%}.form-check-input:active,.shiny-input-container .checkbox input:active,.shiny-input-container .checkbox-inline input:active,.shiny-input-container .radio input:active,.shiny-input-container .radio-inline input:active{filter:brightness(90%)}.form-check-input:focus,.shiny-input-container .checkbox input:focus,.shiny-input-container .checkbox-inline input:focus,.shiny-input-container .radio input:focus,.shiny-input-container .radio-inline input:focus{border-color:#93c0f1;outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.form-check-input:checked,.shiny-input-container .checkbox input:checked,.shiny-input-container .checkbox-inline input:checked,.shiny-input-container .radio input:checked,.shiny-input-container .radio-inline input:checked{background-color:#2780e3;border-color:#2780e3}.form-check-input:checked[type=checkbox],.shiny-input-container .checkbox input:checked[type=checkbox],.shiny-input-container .checkbox-inline input:checked[type=checkbox],.shiny-input-container .radio input:checked[type=checkbox],.shiny-input-container .radio-inline input:checked[type=checkbox]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio],.shiny-input-container .checkbox input:checked[type=radio],.shiny-input-container .checkbox-inline input:checked[type=radio],.shiny-input-container .radio input:checked[type=radio],.shiny-input-container .radio-inline input:checked[type=radio]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate,.shiny-input-container .checkbox input[type=checkbox]:indeterminate,.shiny-input-container .checkbox-inline input[type=checkbox]:indeterminate,.shiny-input-container .radio input[type=checkbox]:indeterminate,.shiny-input-container .radio-inline input[type=checkbox]:indeterminate{background-color:#2780e3;border-color:#2780e3;--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled,.shiny-input-container .checkbox input:disabled,.shiny-input-container .checkbox-inline input:disabled,.shiny-input-container .radio input:disabled,.shiny-input-container .radio-inline input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input[disabled]~span,.form-check-input:disabled~.form-check-label,.form-check-input:disabled~span,.shiny-input-container .checkbox input[disabled]~.form-check-label,.shiny-input-container .checkbox input[disabled]~span,.shiny-input-container .checkbox input:disabled~.form-check-label,.shiny-input-container .checkbox input:disabled~span,.shiny-input-container .checkbox-inline input[disabled]~.form-check-label,.shiny-input-container .checkbox-inline input[disabled]~span,.shiny-input-container .checkbox-inline input:disabled~.form-check-label,.shiny-input-container .checkbox-inline input:disabled~span,.shiny-input-container .radio input[disabled]~.form-check-label,.shiny-input-container .radio input[disabled]~span,.shiny-input-container .radio input:disabled~.form-check-label,.shiny-input-container .radio input:disabled~span,.shiny-input-container .radio-inline input[disabled]~.form-check-label,.shiny-input-container .radio-inline input[disabled]~span,.shiny-input-container .radio-inline input:disabled~.form-check-label,.shiny-input-container .radio-inline input:disabled~span{cursor:default;opacity:.5}.form-check-label,.shiny-input-container .checkbox label,.shiny-input-container .checkbox-inline label,.shiny-input-container .radio label,.shiny-input-container .radio-inline label{cursor:pointer}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2393c0f1'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:rgba(0,0,0,0)}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(39,128,227,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(39,128,227,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#2780e3;border:0;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#bed9f7}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0)}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#2780e3;border:0;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#bed9f7}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0)}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:rgba(52,58,64,.75)}.form-range:disabled::-moz-range-thumb{background-color:rgba(52,58,64,.75)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(1px * 2));min-height:calc(3.5rem + calc(1px * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:#fff}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:1px 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:#e9ecef}.input-group{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:stretch;-webkit-align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#343a40;text-align:center;white-space:nowrap;background-color:#f8f9fa;border:1px solid #dee2e6}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(1px*-1)}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#3fb618}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:#3fb618}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#3fb618;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233fb618' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#3fb618;box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#3fb618}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233fb618' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#3fb618;box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#3fb618}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#3fb618}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#3fb618}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#ff0039}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:#ff0039}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#ff0039;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff0039'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff0039' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#ff0039;box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#ff0039}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff0039'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff0039' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#ff0039;box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#ff0039}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#ff0039}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#ff0039}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: 0.75rem;--bs-btn-padding-y: 0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: #343a40;--bs-btn-bg: transparent;--bs-btn-border-width: 1px;--bs-btn-border-color: transparent;--bs-btn-border-radius: 0.25rem;--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity: 0.65;--bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-default{--bs-btn-color: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #2c3136;--bs-btn-hover-border-color: #2a2e33;--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: #2a2e33;--bs-btn-active-border-color: #272c30;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #2780e3;--bs-btn-border-color: #2780e3;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #216dc1;--bs-btn-hover-border-color: #1f66b6;--bs-btn-focus-shadow-rgb: 71, 147, 231;--bs-btn-active-color: #fff;--bs-btn-active-bg: #1f66b6;--bs-btn-active-border-color: #1d60aa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #2780e3;--bs-btn-disabled-border-color: #2780e3}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #2c3136;--bs-btn-hover-border-color: #2a2e33;--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: #2a2e33;--bs-btn-active-border-color: #272c30;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #3fb618;--bs-btn-border-color: #3fb618;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #369b14;--bs-btn-hover-border-color: #329213;--bs-btn-focus-shadow-rgb: 92, 193, 59;--bs-btn-active-color: #fff;--bs-btn-active-bg: #329213;--bs-btn-active-border-color: #2f8912;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #3fb618;--bs-btn-disabled-border-color: #3fb618}.btn-info{--bs-btn-color: #fff;--bs-btn-bg: #9954bb;--bs-btn-border-color: #9954bb;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #82479f;--bs-btn-hover-border-color: #7a4396;--bs-btn-focus-shadow-rgb: 168, 110, 197;--bs-btn-active-color: #fff;--bs-btn-active-bg: #7a4396;--bs-btn-active-border-color: #733f8c;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #9954bb;--bs-btn-disabled-border-color: #9954bb}.btn-warning{--bs-btn-color: #fff;--bs-btn-bg: #ff7518;--bs-btn-border-color: #ff7518;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #d96314;--bs-btn-hover-border-color: #cc5e13;--bs-btn-focus-shadow-rgb: 255, 138, 59;--bs-btn-active-color: #fff;--bs-btn-active-bg: #cc5e13;--bs-btn-active-border-color: #bf5812;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #ff7518;--bs-btn-disabled-border-color: #ff7518}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #ff0039;--bs-btn-border-color: #ff0039;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #d90030;--bs-btn-hover-border-color: #cc002e;--bs-btn-focus-shadow-rgb: 255, 38, 87;--bs-btn-active-color: #fff;--bs-btn-active-bg: #cc002e;--bs-btn-active-border-color: #bf002b;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #ff0039;--bs-btn-disabled-border-color: #ff0039}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #52585d;--bs-btn-hover-border-color: #484e53;--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: #5d6166;--bs-btn-active-border-color: #484e53;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-outline-default{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-primary{--bs-btn-color: #2780e3;--bs-btn-border-color: #2780e3;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #2780e3;--bs-btn-hover-border-color: #2780e3;--bs-btn-focus-shadow-rgb: 39, 128, 227;--bs-btn-active-color: #fff;--bs-btn-active-bg: #2780e3;--bs-btn-active-border-color: #2780e3;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #2780e3;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #2780e3;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #3fb618;--bs-btn-border-color: #3fb618;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #3fb618;--bs-btn-hover-border-color: #3fb618;--bs-btn-focus-shadow-rgb: 63, 182, 24;--bs-btn-active-color: #fff;--bs-btn-active-bg: #3fb618;--bs-btn-active-border-color: #3fb618;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #3fb618;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #3fb618;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #9954bb;--bs-btn-border-color: #9954bb;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #9954bb;--bs-btn-hover-border-color: #9954bb;--bs-btn-focus-shadow-rgb: 153, 84, 187;--bs-btn-active-color: #fff;--bs-btn-active-bg: #9954bb;--bs-btn-active-border-color: #9954bb;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #9954bb;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #9954bb;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ff7518;--bs-btn-border-color: #ff7518;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #ff7518;--bs-btn-hover-border-color: #ff7518;--bs-btn-focus-shadow-rgb: 255, 117, 24;--bs-btn-active-color: #fff;--bs-btn-active-bg: #ff7518;--bs-btn-active-border-color: #ff7518;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ff7518;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ff7518;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #ff0039;--bs-btn-border-color: #ff0039;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #ff0039;--bs-btn-hover-border-color: #ff0039;--bs-btn-focus-shadow-rgb: 255, 0, 57;--bs-btn-active-color: #fff;--bs-btn-active-bg: #ff0039;--bs-btn-active-border-color: #ff0039;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ff0039;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ff0039;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248, 249, 250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: #2761e3;--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: #1f4eb6;--bs-btn-hover-border-color: transparent;--bs-btn-active-color: #1f4eb6;--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 71, 121, 231;text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: 0.5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: 0.5rem}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: 0.25rem;--bs-btn-padding-x: 0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius: 0.2em}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .2s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: 0.5rem;--bs-dropdown-spacer: 0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: #343a40;--bs-dropdown-bg: #fff;--bs-dropdown-border-color: rgba(0, 0, 0, 0.175);--bs-dropdown-border-radius: 0.25rem;--bs-dropdown-border-width: 1px;--bs-dropdown-inner-border-radius: calc(0.25rem - 1px);--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-divider-margin-y: 0.5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-dropdown-link-color: #343a40;--bs-dropdown-link-hover-color: #343a40;--bs-dropdown-link-hover-bg: #f8f9fa;--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #2780e3;--bs-dropdown-link-disabled-color: rgba(52, 58, 64, 0.5);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: 0.25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: 0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:0.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: rgba(0, 0, 0, 0.175);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #2780e3;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(1px*-1)}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;-webkit-flex-direction:column;align-items:flex-start;-webkit-align-items:flex-start;justify-content:center;-webkit-justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(1px*-1)}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: #2761e3;--bs-nav-link-hover-color: #1f4eb6;--bs-nav-link-disabled-color: rgba(52, 58, 64, 0.75);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: 1px;--bs-nav-tabs-border-color: #dee2e6;--bs-nav-tabs-border-radius: 0.25rem;--bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;--bs-nav-tabs-link-active-color: #000;--bs-nav-tabs-link-active-bg: #fff;--bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1*var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid rgba(0,0,0,0)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1*var(--bs-nav-tabs-border-width))}.nav-pills{--bs-nav-pills-border-radius: 0.25rem;--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #2780e3}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: 0.125rem;--bs-nav-underline-link-active-color: #000;gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid rgba(0,0,0,0)}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;-webkit-flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;-webkit-flex-basis:0;flex-grow:1;-webkit-flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: 0.5rem;--bs-navbar-color: #545555;--bs-navbar-hover-color: rgba(31, 78, 182, 0.8);--bs-navbar-disabled-color: rgba(84, 85, 85, 0.75);--bs-navbar-active-color: #1f4eb6;--bs-navbar-brand-padding-y: 0.3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: #545555;--bs-navbar-brand-hover-color: #1f4eb6;--bs-navbar-nav-link-padding-x: 0.5rem;--bs-navbar-toggler-padding-y: 0.25;--bs-navbar-toggler-padding-x: 0;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23545555' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(84, 85, 85, 0);--bs-navbar-toggler-border-radius: 0.25rem;--bs-navbar-toggler-focus-width: 0.25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;display:-webkit-flex;flex-wrap:inherit;-webkit-flex-wrap:inherit;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;-webkit-flex-basis:100%;flex-grow:1;-webkit-flex-grow:1;align-items:center;-webkit-align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:rgba(0,0,0,0);border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);transition:var(--bs-navbar-toggler-transition)}@media(prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color: #545555;--bs-navbar-hover-color: rgba(31, 78, 182, 0.8);--bs-navbar-disabled-color: rgba(84, 85, 85, 0.75);--bs-navbar-active-color: #1f4eb6;--bs-navbar-brand-color: #545555;--bs-navbar-brand-hover-color: #1f4eb6;--bs-navbar-toggler-border-color: rgba(84, 85, 85, 0);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23545555' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23545555' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: 0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: 1px;--bs-card-border-color: rgba(0, 0, 0, 0.175);--bs-card-border-radius: 0.25rem;--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(0.25rem - 1px);--bs-card-cap-padding-y: 0.5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(52, 58, 64, 0.25);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: #fff;--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: 0.75rem;position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0}.card>.list-group:last-child{border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-0.5*var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header-tabs{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-bottom:calc(-1*var(--bs-card-cap-padding-y));margin-left:calc(-0.5*var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-left:calc(-0.5*var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media(min-width: 576px){.card-group{display:flex;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap}.card-group>.card{flex:1 0 0%;-webkit-flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}}.accordion{--bs-accordion-color: #343a40;--bs-accordion-bg: #fff;--bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;--bs-accordion-border-color: #dee2e6;--bs-accordion-border-width: 1px;--bs-accordion-border-radius: 0.25rem;--bs-accordion-inner-border-radius: calc(0.25rem - 1px);--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: #343a40;--bs-accordion-btn-bg: #fff;--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23343a40'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2310335b'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color: #93c0f1;--bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: #10335b;--bs-accordion-active-bg: #d4e6f9}.accordion-button{position:relative;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media(prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1*var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;-webkit-flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media(prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:not(:first-of-type){border-top:0}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%237db3ee'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%237db3ee'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: rgba(52, 58, 64, 0.75);--bs-breadcrumb-item-padding-x: 0.5rem;--bs-breadcrumb-item-active-color: rgba(52, 58, 64, 0.75);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, ">") /* rtl: var(--bs-breadcrumb-divider, ">") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: 0.75rem;--bs-pagination-padding-y: 0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: #2761e3;--bs-pagination-bg: #fff;--bs-pagination-border-width: 1px;--bs-pagination-border-color: #dee2e6;--bs-pagination-border-radius: 0.25rem;--bs-pagination-hover-color: #1f4eb6;--bs-pagination-hover-bg: #f8f9fa;--bs-pagination-hover-border-color: #dee2e6;--bs-pagination-focus-color: #1f4eb6;--bs-pagination-focus-bg: #e9ecef;--bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #2780e3;--bs-pagination-active-border-color: #2780e3;--bs-pagination-disabled-color: rgba(52, 58, 64, 0.75);--bs-pagination-disabled-bg: #e9ecef;--bs-pagination-disabled-border-color: #dee2e6;display:flex;display:-webkit-flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(1px*-1)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: 0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: 0.5rem}.pagination-sm{--bs-pagination-padding-x: 0.5rem;--bs-pagination-padding-y: 0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius: 0.2em}.badge{--bs-badge-padding-x: 0.65em;--bs-badge-padding-y: 0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: 0.25rem;display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: 0 solid var(--bs-alert-border-color);--bs-alert-border-radius: 0.25rem;--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-default{--bs-alert-color: var(--bs-default-text-emphasis);--bs-alert-bg: var(--bs-default-bg-subtle);--bs-alert-border-color: var(--bs-default-border-subtle);--bs-alert-link-color: var(--bs-default-text-emphasis)}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:.5rem}}.progress,.progress-stacked{--bs-progress-height: 0.5rem;--bs-progress-font-size:0.75rem;--bs-progress-bg: #e9ecef;--bs-progress-border-radius: 0.25rem;--bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #2780e3;--bs-progress-bar-transition: width 0.6s ease;display:flex;display:-webkit-flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg)}.progress-bar{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;justify-content:center;-webkit-justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media(prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media(prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: #343a40;--bs-list-group-bg: #fff;--bs-list-group-border-color: #dee2e6;--bs-list-group-border-width: 1px;--bs-list-group-border-radius: 0.25rem;--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: 0.5rem;--bs-list-group-action-color: rgba(52, 58, 64, 0.75);--bs-list-group-action-hover-color: #000;--bs-list-group-action-hover-bg: #f8f9fa;--bs-list-group-action-active-color: #343a40;--bs-list-group-action-active-bg: #e9ecef;--bs-list-group-disabled-color: rgba(52, 58, 64, 0.75);--bs-list-group-disabled-bg: #fff;--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #2780e3;--bs-list-group-active-border-color: #2780e3;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1*var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-default{--bs-list-group-color: var(--bs-default-text-emphasis);--bs-list-group-bg: var(--bs-default-bg-subtle);--bs-list-group-border-color: var(--bs-default-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-default-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-default-border-subtle);--bs-list-group-active-color: var(--bs-default-bg-subtle);--bs-list-group-active-bg: var(--bs-default-text-emphasis);--bs-list-group-active-border-color: var(--bs-default-text-emphasis)}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #000;--bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity: 0.5;--bs-btn-close-hover-opacity: 0.75;--bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: 0.25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:rgba(0,0,0,0) var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: 0.75rem;--bs-toast-padding-y: 0.5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(255, 255, 255, 0.85);--bs-toast-border-width: 1px;--bs-toast-border-color: rgba(0, 0, 0, 0.175);--bs-toast-border-radius: 0.25rem;--bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-toast-header-color: rgba(52, 58, 64, 0.75);--bs-toast-header-bg: rgba(255, 255, 255, 0.85);--bs-toast-header-border-color: rgba(0, 0, 0, 0.175);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:-o-max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color)}.toast-header .btn-close{margin-right:calc(-0.5*var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: 0.5rem;--bs-modal-color: ;--bs-modal-bg: #fff;--bs-modal-border-color: rgba(0, 0, 0, 0.175);--bs-modal-border-width: 1px;--bs-modal-border-radius: 0.5rem;--bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-modal-inner-border-radius: calc(0.5rem - 1px);--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: #dee2e6;--bs-modal-header-border-width: 1px;--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: 0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: #dee2e6;--bs-modal-footer-border-width: 1px;position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0, -50px)}@media(prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: 0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y)*.5) calc(var(--bs-modal-header-padding-x)*.5);margin:calc(-0.5*var(--bs-modal-header-padding-y)) calc(-0.5*var(--bs-modal-header-padding-x)) calc(-0.5*var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:flex-end;-webkit-justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap)*.5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap)*.5)}@media(min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media(min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media(min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0}.modal-fullscreen .modal-body{overflow-y:auto}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: 0.5rem;--bs-tooltip-padding-y: 0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color: #fff;--bs-tooltip-bg: #000;--bs-tooltip-border-radius: 0.25rem;--bs-tooltip-opacity: 0.9;--bs-tooltip-arrow-width: 0.8rem;--bs-tooltip-arrow-height: 0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:rgba(0,0,0,0);border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) 0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:0.875rem;--bs-popover-bg: #fff;--bs-popover-border-width: 1px;--bs-popover-border-color: rgba(0, 0, 0, 0.175);--bs-popover-border-radius: 0.5rem;--bs-popover-inner-border-radius: calc(0.5rem - 1px);--bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: 0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: #e9ecef;--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: #343a40;--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: 0.5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:"";border-color:rgba(0,0,0,0);border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-0.5*var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) 0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y;-webkit-touch-action:pan-y;-moz-touch-action:pan-y;-ms-touch-action:pan-y;-o-touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:center;-webkit-justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;display:-webkit-flex;justify-content:center;-webkit-justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;-webkit-flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid rgba(0,0,0,0);border-bottom:10px solid rgba(0,0,0,0);opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-border-width: 0.25em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:rgba(0,0,0,0)}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: 0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: #343a40;--bs-offcanvas-bg: #fff;--bs-offcanvas-border-width: 1px;--bs-offcanvas-border-color: rgba(0, 0, 0, 0.175);--bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-offcanvas-transition: transform 0.3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media(max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 575.98px)and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media(max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media(min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 767.98px)and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media(max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media(min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 991.98px)and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media(max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media(min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1199.98px)and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media(max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media(min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1399.98px)and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media(max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media(min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media(prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y)*.5) calc(var(--bs-offcanvas-padding-x)*.5);margin-top:calc(-0.5*var(--bs-offcanvas-padding-y));margin-right:calc(-0.5*var(--bs-offcanvas-padding-x));margin-bottom:calc(-0.5*var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;-webkit-flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);mask-size:200% 100%;-webkit-mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%;-webkit-mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-default{color:#fff !important;background-color:RGBA(var(--bs-default-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#fff !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#fff !important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important}.link-default{color:RGBA(var(--bs-default-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-default-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-default:hover,.link-default:focus{color:RGBA(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, var(--bs-link-underline-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(31, 102, 182, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(31, 102, 182, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(50, 146, 19, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(50, 146, 19, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(122, 67, 150, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(122, 67, 150, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(204, 94, 19, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(204, 94, 19, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(204, 0, 46, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(204, 0, 46, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;-webkit-flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;align-items:center;-webkit-align-items:center;align-self:stretch;-webkit-align-self:stretch}.vstack{display:flex;display:-webkit-flex;flex:1 1 auto;-webkit-flex:1 1 auto;flex-direction:column;-webkit-flex-direction:column;align-self:stretch;-webkit-align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;-webkit-align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.focus-ring-default{--bs-focus-ring-color: rgba(var(--bs-default-rgb), var(--bs-focus-ring-opacity))}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-default{--bs-border-opacity: 1;border-color:rgba(var(--bs-default-rgb), var(--bs-border-opacity)) !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: 0.1}.border-opacity-25{--bs-border-opacity: 0.25}.border-opacity-50{--bs-border-opacity: 0.5}.border-opacity-75{--bs-border-opacity: 0.75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.325rem + 0.9vw) !important}.fs-2{font-size:calc(1.29rem + 0.48vw) !important}.fs-3{font-size:calc(1.27rem + 0.24vw) !important}.fs-4{font-size:1.25rem !important}.fs-5{font-size:1.1rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-default{--bs-text-opacity: 1;color:rgba(var(--bs-default-rgb), var(--bs-text-opacity)) !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: 0.1}.link-opacity-10-hover:hover{--bs-link-opacity: 0.1}.link-opacity-25{--bs-link-opacity: 0.25}.link-opacity-25-hover:hover{--bs-link-opacity: 0.25}.link-opacity-50{--bs-link-opacity: 0.5}.link-opacity-50-hover:hover{--bs-link-opacity: 0.5}.link-opacity-75{--bs-link-opacity: 0.75}.link-opacity-75-hover:hover{--bs-link-opacity: 0.75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-default{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-default-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: 0.1}.link-underline-opacity-25{--bs-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: 0.25}.link-underline-opacity-50{--bs-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: 0.5}.link-underline-opacity-75{--bs-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: 0.75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-default{--bs-bg-opacity: 1;background-color:rgba(var(--bs-default-rgb), var(--bs-bg-opacity)) !important}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}.bg-default{color:#fff}.bg-primary{color:#fff}.bg-secondary{color:#fff}.bg-success{color:#fff}.bg-info{color:#fff}.bg-warning{color:#fff}.bg-danger{color:#fff}.bg-light{color:#000}.bg-dark{color:#fff}@media(min-width: 1200px){.fs-1{font-size:2rem !important}.fs-2{font-size:1.65rem !important}.fs-3{font-size:1.45rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}.bg-blue{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #2780e3;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #613d7c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #613d7c;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #e83e8c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #e83e8c;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #ff0039;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #f0ad4e;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #f0ad4e;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ff7518;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #3fb618;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #9954bb;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #343a40}.bg-default{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-primary{--bslib-color-fg: #2780e3}.bg-primary{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #343a40}.bg-secondary{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #3fb618}.bg-success{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff}.text-info{--bslib-color-fg: #9954bb}.bg-info{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff}.text-warning{--bslib-color-fg: #ff7518}.bg-warning{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff}.text-danger{--bslib-color-fg: #ff0039}.bg-danger{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #343a40}.bg-dark{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #4053e9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #4053e9;color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: #3e65ba;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #3e65ba;color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: #7466c0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #7466c0;color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: #7d4d9f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #7d4d9f;color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: #7792a7;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #7792a7;color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #7d7c92;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #7d7c92;color:#fff}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: #319692;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #319692;color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #fff;--bslib-color-bg: #249dc5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #249dc5;color:#fff}.bg-gradient-blue-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #556ed3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #556ed3;color:#fff}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4d3dec;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #4d3dec;color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: #6422c3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #6422c3;color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: #9a22c9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #9a22c9;color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: #a30aa8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #a30aa8;color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: #9d4fb0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #9d4fb0;color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #a3389b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #a3389b;color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: #56529b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #56529b;color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: #4a5ace;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4a5ace;color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #7a2bdc;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #7a2bdc;color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4a58a5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #4a58a5;color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #632bab;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #632bab;color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: #973d82;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #973d82;color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: #a02561;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #a02561;color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: #9a6a6a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #9a6a6a;color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #a05354;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #a05354;color:#fff}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: #536d54;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #536d54;color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: #477587;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #477587;color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #774695;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #774695;color:#fff}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: #9b58af;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #9b58af;color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #b42cb5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #b42cb5;color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: #b23e86;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #b23e86;color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: #f1256b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #f1256b;color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #fff;--bslib-color-bg: #eb6a73;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #eb6a73;color:#fff}.bg-gradient-pink-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #f1545e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #f1545e;color:#fff}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: #a46e5e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #a46e5e;color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #fff;--bslib-color-bg: #987690;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #987690;color:#fff}.bg-gradient-pink-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #c8479f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #c8479f;color:#fff}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: #a9337d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #a9337d;color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #c20683;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c20683;color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: #c01854;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #c01854;color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: #f6195a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #f6195a;color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #fff;--bslib-color-bg: #f94541;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #f94541;color:#fff}.bg-gradient-red-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #ff2f2c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #ff2f2c;color:#fff}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: #b2492c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #b2492c;color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #fff;--bslib-color-bg: #a6505f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6505f;color:#fff}.bg-gradient-red-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #d6226d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #d6226d;color:#fff}.bg-gradient-orange-blue{--bslib-color-fg: #fff;--bslib-color-bg: #a09b8a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #a09b8a;color:#fff}.bg-gradient-orange-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #b96e90;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #b96e90;color:#fff}.bg-gradient-orange-purple{--bslib-color-fg: #fff;--bslib-color-bg: #b78060;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #b78060;color:#fff}.bg-gradient-orange-pink{--bslib-color-fg: #fff;--bslib-color-bg: #ed8167;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #ed8167;color:#fff}.bg-gradient-orange-red{--bslib-color-fg: #fff;--bslib-color-bg: #f66846;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #f66846;color:#fff}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: #f69738;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #f69738;color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: #a9b138;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #a9b138;color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: #9db86b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #9db86b;color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #cd897a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #cd897a;color:#fff}.bg-gradient-yellow-blue{--bslib-color-fg: #fff;--bslib-color-bg: #a97969;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #a97969;color:#fff}.bg-gradient-yellow-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #c24d6f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c24d6f;color:#fff}.bg-gradient-yellow-purple{--bslib-color-fg: #fff;--bslib-color-bg: #c05f40;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #c05f40;color:#fff}.bg-gradient-yellow-pink{--bslib-color-fg: #fff;--bslib-color-bg: #f65f46;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #f65f46;color:#fff}.bg-gradient-yellow-red{--bslib-color-fg: #fff;--bslib-color-bg: #ff4625;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #ff4625;color:#fff}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: #f98b2e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #f98b2e;color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #fff;--bslib-color-bg: #b28f18;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #b28f18;color:#fff}.bg-gradient-yellow-teal{--bslib-color-fg: #fff;--bslib-color-bg: #a6974b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6974b;color:#fff}.bg-gradient-yellow-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #d66859;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #d66859;color:#fff}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: #35a069;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #35a069;color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #4f746f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #4f746f;color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: #4d8640;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #4d8640;color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: #838646;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #838646;color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: #8c6d25;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #8c6d25;color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: #86b22e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #86b22e;color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #8c9c18;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #8c9c18;color:#fff}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: #33be4b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #33be4b;color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #638f59;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #638f59;color:#fff}.bg-gradient-teal-blue{--bslib-color-fg: #fff;--bslib-color-bg: #23acb5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #23acb5;color:#fff}.bg-gradient-teal-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #3c7fbb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3c7fbb;color:#fff}.bg-gradient-teal-purple{--bslib-color-fg: #fff;--bslib-color-bg: #3a918c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #3a918c;color:#fff}.bg-gradient-teal-pink{--bslib-color-fg: #fff;--bslib-color-bg: #709193;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #709193;color:#fff}.bg-gradient-teal-red{--bslib-color-fg: #fff;--bslib-color-bg: #797971;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #797971;color:#fff}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: #73be7a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #73be7a;color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #79a764;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #79a764;color:#fff}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: #2cc164;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #2cc164;color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #509aa5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #509aa5;color:#fff}.bg-gradient-cyan-blue{--bslib-color-fg: #fff;--bslib-color-bg: #6b66cb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #6b66cb;color:#fff}.bg-gradient-cyan-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #8539d1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #8539d1;color:#fff}.bg-gradient-cyan-purple{--bslib-color-fg: #fff;--bslib-color-bg: #834ba2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #834ba2;color:#fff}.bg-gradient-cyan-pink{--bslib-color-fg: #fff;--bslib-color-bg: #b94ba8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #b94ba8;color:#fff}.bg-gradient-cyan-red{--bslib-color-fg: #fff;--bslib-color-bg: #c23287;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #c23287;color:#fff}.bg-gradient-cyan-orange{--bslib-color-fg: #fff;--bslib-color-bg: #bc788f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #bc788f;color:#fff}.bg-gradient-cyan-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #c2617a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #c2617a;color:#fff}.bg-gradient-cyan-green{--bslib-color-fg: #fff;--bslib-color-bg: #757b7a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #757b7a;color:#fff}.bg-gradient-cyan-teal{--bslib-color-fg: #fff;--bslib-color-bg: #6983ad;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #6983ad;color:#fff}.bg-blue{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #2780e3;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #613d7c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #613d7c;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #e83e8c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #e83e8c;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #ff0039;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #f0ad4e;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #f0ad4e;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ff7518;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #3fb618;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #9954bb;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #343a40}.bg-default{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-primary{--bslib-color-fg: #2780e3}.bg-primary{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #343a40}.bg-secondary{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #3fb618}.bg-success{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff}.text-info{--bslib-color-fg: #9954bb}.bg-info{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff}.text-warning{--bslib-color-fg: #ff7518}.bg-warning{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff}.text-danger{--bslib-color-fg: #ff0039}.bg-danger{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #343a40}.bg-dark{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #4053e9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #4053e9;color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: #3e65ba;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #3e65ba;color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: #7466c0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #7466c0;color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: #7d4d9f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #7d4d9f;color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: #7792a7;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #7792a7;color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #7d7c92;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #7d7c92;color:#fff}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: #319692;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #319692;color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #fff;--bslib-color-bg: #249dc5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #249dc5;color:#fff}.bg-gradient-blue-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #556ed3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #556ed3;color:#fff}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4d3dec;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #4d3dec;color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: #6422c3;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #6422c3;color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: #9a22c9;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #9a22c9;color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: #a30aa8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #a30aa8;color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: #9d4fb0;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #9d4fb0;color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #a3389b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #a3389b;color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: #56529b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #56529b;color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: #4a5ace;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #4a5ace;color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #7a2bdc;background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #7a2bdc;color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: #4a58a5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #4a58a5;color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #632bab;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #632bab;color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: #973d82;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #973d82;color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: #a02561;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #a02561;color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: #9a6a6a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #9a6a6a;color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #a05354;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #a05354;color:#fff}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: #536d54;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #536d54;color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: #477587;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #477587;color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #774695;background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #774695;color:#fff}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: #9b58af;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #9b58af;color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #b42cb5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #b42cb5;color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: #b23e86;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #b23e86;color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: #f1256b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #f1256b;color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #fff;--bslib-color-bg: #eb6a73;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #eb6a73;color:#fff}.bg-gradient-pink-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #f1545e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #f1545e;color:#fff}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: #a46e5e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #a46e5e;color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #fff;--bslib-color-bg: #987690;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #987690;color:#fff}.bg-gradient-pink-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #c8479f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #c8479f;color:#fff}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: #a9337d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #a9337d;color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #c20683;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c20683;color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: #c01854;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #c01854;color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: #f6195a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #f6195a;color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #fff;--bslib-color-bg: #f94541;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #f94541;color:#fff}.bg-gradient-red-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #ff2f2c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #ff2f2c;color:#fff}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: #b2492c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #b2492c;color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #fff;--bslib-color-bg: #a6505f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6505f;color:#fff}.bg-gradient-red-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #d6226d;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #d6226d;color:#fff}.bg-gradient-orange-blue{--bslib-color-fg: #fff;--bslib-color-bg: #a09b8a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #a09b8a;color:#fff}.bg-gradient-orange-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #b96e90;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #b96e90;color:#fff}.bg-gradient-orange-purple{--bslib-color-fg: #fff;--bslib-color-bg: #b78060;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #b78060;color:#fff}.bg-gradient-orange-pink{--bslib-color-fg: #fff;--bslib-color-bg: #ed8167;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #ed8167;color:#fff}.bg-gradient-orange-red{--bslib-color-fg: #fff;--bslib-color-bg: #f66846;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #f66846;color:#fff}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: #f69738;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #f69738;color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: #a9b138;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #a9b138;color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: #9db86b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #9db86b;color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #cd897a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #cd897a;color:#fff}.bg-gradient-yellow-blue{--bslib-color-fg: #fff;--bslib-color-bg: #a97969;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #a97969;color:#fff}.bg-gradient-yellow-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #c24d6f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #c24d6f;color:#fff}.bg-gradient-yellow-purple{--bslib-color-fg: #fff;--bslib-color-bg: #c05f40;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #c05f40;color:#fff}.bg-gradient-yellow-pink{--bslib-color-fg: #fff;--bslib-color-bg: #f65f46;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #f65f46;color:#fff}.bg-gradient-yellow-red{--bslib-color-fg: #fff;--bslib-color-bg: #ff4625;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #ff4625;color:#fff}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: #f98b2e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #f98b2e;color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #fff;--bslib-color-bg: #b28f18;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #b28f18;color:#fff}.bg-gradient-yellow-teal{--bslib-color-fg: #fff;--bslib-color-bg: #a6974b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #a6974b;color:#fff}.bg-gradient-yellow-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #d66859;background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #d66859;color:#fff}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: #35a069;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #35a069;color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #4f746f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #4f746f;color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: #4d8640;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #4d8640;color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: #838646;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #838646;color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: #8c6d25;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #8c6d25;color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: #86b22e;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #86b22e;color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #8c9c18;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #8c9c18;color:#fff}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: #33be4b;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #33be4b;color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #638f59;background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #638f59;color:#fff}.bg-gradient-teal-blue{--bslib-color-fg: #fff;--bslib-color-bg: #23acb5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #23acb5;color:#fff}.bg-gradient-teal-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #3c7fbb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #3c7fbb;color:#fff}.bg-gradient-teal-purple{--bslib-color-fg: #fff;--bslib-color-bg: #3a918c;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #3a918c;color:#fff}.bg-gradient-teal-pink{--bslib-color-fg: #fff;--bslib-color-bg: #709193;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #709193;color:#fff}.bg-gradient-teal-red{--bslib-color-fg: #fff;--bslib-color-bg: #797971;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #797971;color:#fff}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: #73be7a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #73be7a;color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #79a764;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #79a764;color:#fff}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: #2cc164;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #2cc164;color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #fff;--bslib-color-bg: #509aa5;background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) #509aa5;color:#fff}.bg-gradient-cyan-blue{--bslib-color-fg: #fff;--bslib-color-bg: #6b66cb;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) #6b66cb;color:#fff}.bg-gradient-cyan-indigo{--bslib-color-fg: #fff;--bslib-color-bg: #8539d1;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) #8539d1;color:#fff}.bg-gradient-cyan-purple{--bslib-color-fg: #fff;--bslib-color-bg: #834ba2;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) #834ba2;color:#fff}.bg-gradient-cyan-pink{--bslib-color-fg: #fff;--bslib-color-bg: #b94ba8;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) #b94ba8;color:#fff}.bg-gradient-cyan-red{--bslib-color-fg: #fff;--bslib-color-bg: #c23287;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) #c23287;color:#fff}.bg-gradient-cyan-orange{--bslib-color-fg: #fff;--bslib-color-bg: #bc788f;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) #bc788f;color:#fff}.bg-gradient-cyan-yellow{--bslib-color-fg: #fff;--bslib-color-bg: #c2617a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) #c2617a;color:#fff}.bg-gradient-cyan-green{--bslib-color-fg: #fff;--bslib-color-bg: #757b7a;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) #757b7a;color:#fff}.bg-gradient-cyan-teal{--bslib-color-fg: #fff;--bslib-color-bg: #6983ad;background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) #6983ad;color:#fff}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}.accordion .accordion-header{font-size:calc(1.29rem + 0.48vw);margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2;color:var(--bs-heading-color);margin-bottom:0}@media(min-width: 1200px){.accordion .accordion-header{font-size:1.65rem}}.accordion .accordion-icon:not(:empty){margin-right:.75rem;display:flex}.accordion .accordion-button:not(.collapsed){box-shadow:none}.accordion .accordion-button:not(.collapsed):focus{box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.bslib-card{overflow:auto}.bslib-card .card-body+.card-body{padding-top:0}.bslib-card .card-body{overflow:auto}.bslib-card .card-body p{margin-top:0}.bslib-card .card-body p:last-child{margin-bottom:0}.bslib-card .card-body{max-height:var(--bslib-card-body-max-height, none)}.bslib-card[data-full-screen=true]>.card-body{max-height:var(--bslib-card-body-max-height-full-screen, none)}.bslib-card .card-header .form-group{margin-bottom:0}.bslib-card .card-header .selectize-control{margin-bottom:0}.bslib-card .card-header .selectize-control .item{margin-right:1.15rem}.bslib-card .card-footer{margin-top:auto}.bslib-card .bslib-navs-card-title{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.bslib-card .bslib-navs-card-title .nav{margin-left:auto}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border=true]){border:none}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border-radius=true]){border-top-left-radius:0;border-top-right-radius:0}[data-full-screen=true]{position:fixed;inset:3.5rem 1rem 1rem;height:auto !important;max-height:none !important;width:auto !important;z-index:1070}.bslib-full-screen-enter{display:none;position:absolute;bottom:var(--bslib-full-screen-enter-bottom, 0.2rem);right:var(--bslib-full-screen-enter-right, 0);top:var(--bslib-full-screen-enter-top);left:var(--bslib-full-screen-enter-left);color:var(--bslib-color-fg, var(--bs-card-color));background-color:var(--bslib-color-bg, var(--bs-card-bg, var(--bs-body-bg)));border:var(--bs-card-border-width) solid var(--bslib-color-fg, var(--bs-card-border-color));box-shadow:0 2px 4px rgba(0,0,0,.15);margin:.2rem .4rem;padding:.55rem !important;font-size:.8rem;cursor:pointer;opacity:.7;z-index:1070}.bslib-full-screen-enter:hover{opacity:1}.card[data-full-screen=false]:hover>*>.bslib-full-screen-enter{display:block}.bslib-has-full-screen .card:hover>*>.bslib-full-screen-enter{display:none}@media(max-width: 575.98px){.bslib-full-screen-enter{display:none !important}}.bslib-full-screen-exit{position:relative;top:1.35rem;font-size:.9rem;cursor:pointer;text-decoration:none;display:flex;float:right;margin-right:2.15rem;align-items:center;color:rgba(var(--bs-body-bg-rgb), 0.8)}.bslib-full-screen-exit:hover{color:rgba(var(--bs-body-bg-rgb), 1)}.bslib-full-screen-exit svg{margin-left:.5rem;font-size:1.5rem}#bslib-full-screen-overlay{position:fixed;inset:0;background-color:rgba(var(--bs-body-color-rgb), 0.6);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);z-index:1069;animation:bslib-full-screen-overlay-enter 400ms cubic-bezier(0.6, 0.02, 0.65, 1) forwards}@keyframes bslib-full-screen-overlay-enter{0%{opacity:0}100%{opacity:1}}.bslib-grid{display:grid !important;gap:var(--bslib-spacer, 1rem);height:var(--bslib-grid-height)}.bslib-grid.grid{grid-template-columns:repeat(var(--bs-columns, 12), minmax(0, 1fr));grid-template-rows:unset;grid-auto-rows:var(--bslib-grid--row-heights);--bslib-grid--row-heights--xs: unset;--bslib-grid--row-heights--sm: unset;--bslib-grid--row-heights--md: unset;--bslib-grid--row-heights--lg: unset;--bslib-grid--row-heights--xl: unset;--bslib-grid--row-heights--xxl: unset}.bslib-grid.grid.bslib-grid--row-heights--xs{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xs)}@media(min-width: 576px){.bslib-grid.grid.bslib-grid--row-heights--sm{--bslib-grid--row-heights: var(--bslib-grid--row-heights--sm)}}@media(min-width: 768px){.bslib-grid.grid.bslib-grid--row-heights--md{--bslib-grid--row-heights: var(--bslib-grid--row-heights--md)}}@media(min-width: 992px){.bslib-grid.grid.bslib-grid--row-heights--lg{--bslib-grid--row-heights: var(--bslib-grid--row-heights--lg)}}@media(min-width: 1200px){.bslib-grid.grid.bslib-grid--row-heights--xl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xl)}}@media(min-width: 1400px){.bslib-grid.grid.bslib-grid--row-heights--xxl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xxl)}}.bslib-grid>*>.shiny-input-container{width:100%}.bslib-grid-item{grid-column:auto/span 1}@media(max-width: 767.98px){.bslib-grid-item{grid-column:1/-1}}@media(max-width: 575.98px){.bslib-grid{grid-template-columns:1fr !important;height:var(--bslib-grid-height-mobile)}.bslib-grid.grid{height:unset !important;grid-auto-rows:var(--bslib-grid--row-heights--xs, auto)}}@media(min-width: 576px){.nav:not(.nav-hidden){display:flex !important;display:-webkit-flex !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column){float:none !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.bslib-nav-spacer{margin-left:auto !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.form-inline{margin-top:auto;margin-bottom:auto}.nav:not(.nav-hidden).nav-stacked{flex-direction:column;-webkit-flex-direction:column;height:100%}.nav:not(.nav-hidden).nav-stacked>.bslib-nav-spacer{margin-top:auto !important}}html{height:100%}.bslib-page-fill{width:100%;height:100%;margin:0;padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}@media(max-width: 575.98px){.bslib-page-fill{height:var(--bslib-page-fill-mobile-height, auto)}}.navbar+.container-fluid:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-sm:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-md:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-lg:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xl:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xxl:has(>.tab-content>.tab-pane.active.html-fill-container){padding-left:0;padding-right:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container{padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child){padding:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]){border-left:none;border-right:none;border-bottom:none}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]){border-radius:0}.navbar+div>.bslib-sidebar-layout{border-top:var(--bslib-sidebar-border)}:root{--bslib-page-sidebar-title-bg: #f8f9fa;--bslib-page-sidebar-title-color: #000}.bslib-page-title{background-color:var(--bslib-page-sidebar-title-bg);color:var(--bslib-page-sidebar-title-color);font-size:1.25rem;font-weight:300;padding:var(--bslib-spacer, 1rem);padding-left:1.5rem;margin-bottom:0;border-bottom:1px solid #dee2e6}.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-sidebar-icon-button-size: calc(var(--bslib-sidebar-icon-size, 1rem) * 2);--bslib-sidebar-padding-icon: calc(var(--bslib-sidebar-icon-button-size, 2rem) * 1.5);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, 0.25rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media(prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.bslib-sidebar-layout[data-bslib-sidebar-border=false]{border:none}.bslib-sidebar-layout[data-bslib-sidebar-border-radius=false]{border-radius:initial}.bslib-sidebar-layout>.main,.bslib-sidebar-layout>.sidebar{grid-row:1/2;border-radius:inherit;overflow:auto}.bslib-sidebar-layout>.main{grid-column:2/3;border-top-left-radius:0;border-bottom-left-radius:0;padding:var(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1/2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout>.sidebar>.sidebar-content>:last-child:not(.sidebar-title){margin-bottom:0}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion{margin-left:calc(-1*var(--bslib-sidebar-padding));margin-right:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child){margin-bottom:1rem}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion .accordion-body{display:flex;flex-direction:column}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:first-child) .accordion-item:first-child{border-top:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child) .accordion-item:last-child{border-bottom:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content.has-accordion>.sidebar-title{border-bottom:none;padding-bottom:0}.bslib-sidebar-layout>.sidebar .shiny-input-container{width:100%}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar>.sidebar-content{padding-top:var(--bslib-sidebar-padding)}.bslib-sidebar-layout>.collapse-toggle{grid-row:1/2;grid-column:1/2;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem)/2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:var(--bslib-sidebar-icon-button-size, 2rem);width:var(--bslib-sidebar-icon-button-size, 2rem);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover>.collapse-icon{opacity:1}.bslib-sidebar-layout .sidebar-title{font-size:1.25rem;line-height:1.25;margin-top:0;margin-bottom:1rem;padding-bottom:1rem;border-bottom:var(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px))}.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/2;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:inherit;border-bottom-left-radius:inherit}.bslib-sidebar-layout.sidebar-right>.sidebar{grid-column:2/3;border-right:none;border-left:var(--bslib-sidebar-vert-border);border-top-left-radius:0;border-bottom-left-radius:0}.bslib-sidebar-layout.sidebar-right>.collapse-toggle{grid-column:2/3;left:var(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-vert-border: none;grid-template-columns:0 minmax(0, 1fr)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right{grid-template-columns:minmax(0, 1fr) 0}.bslib-sidebar-layout.sidebar-collapsed:not(.transitioning)>.sidebar>*{display:none}.bslib-sidebar-layout.sidebar-collapsed>.main{border-radius:inherit}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc(var(--bslib-sidebar-overlap-counter, 0)*(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding)) + var(--bslib-sidebar-icon-size, 1rem)/2);right:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media(min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media(max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open=desktop]{--bslib-sidebar-js-init-collapsed: true}.bslib-sidebar-layout>.sidebar,.bslib-sidebar-layout.sidebar-right>.sidebar{border:none}.bslib-sidebar-layout>.main,.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/3}.bslib-sidebar-layout[data-bslib-sidebar-open=always]{display:block !important}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar{max-height:var(--bslib-sidebar-max-height-mobile);overflow-y:auto;border-top:var(--bslib-sidebar-vert-border)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]){grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always])>.main{opacity:0;transition:opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed>.main{opacity:1}}:root{--bslib-value-box-shadow: none;--bslib-value-box-border-width-auto-yes: var(--bslib-value-box-border-width-baseline);--bslib-value-box-border-width-auto-no: 0;--bslib-value-box-border-width-baseline: 1px}.bslib-value-box{border-width:var(--bslib-value-box-border-width-auto-no, var(--bslib-value-box-border-width-baseline));container-name:bslib-value-box;container-type:inline-size}.bslib-value-box.card{box-shadow:var(--bslib-value-box-shadow)}.bslib-value-box.border-auto{border-width:var(--bslib-value-box-border-width-auto-yes, var(--bslib-value-box-border-width-baseline))}.bslib-value-box.default{--bslib-value-box-bg-default: var(--bs-card-bg, #fff);--bslib-value-box-border-color-default: var(--bs-card-border-color, rgba(0, 0, 0, 0.175));color:var(--bslib-value-box-color);background-color:var(--bslib-value-box-bg, var(--bslib-value-box-bg-default));border-color:var(--bslib-value-box-border-color, var(--bslib-value-box-border-color-default))}.bslib-value-box .value-box-grid{display:grid;grid-template-areas:"left right";align-items:center;overflow:hidden}.bslib-value-box .value-box-showcase{height:100%;max-height:var(---bslib-value-box-showcase-max-h, 100%)}.bslib-value-box .value-box-showcase,.bslib-value-box .value-box-showcase>.html-fill-item{width:100%}.bslib-value-box[data-full-screen=true] .value-box-showcase{max-height:var(---bslib-value-box-showcase-max-h-fs, 100%)}@media screen and (min-width: 575.98px){@container bslib-value-box (max-width: 300px){.bslib-value-box:not(.showcase-bottom) .value-box-grid{grid-template-columns:1fr !important;grid-template-rows:auto auto;grid-template-areas:"top" "bottom"}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-showcase{grid-area:top !important}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-area{grid-area:bottom !important;justify-content:end}}}.bslib-value-box .value-box-area{justify-content:center;padding:1.5rem 1rem;font-size:.9rem;font-weight:500}.bslib-value-box .value-box-area *{margin-bottom:0;margin-top:0}.bslib-value-box .value-box-title{font-size:1rem;margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2}.bslib-value-box .value-box-title:empty::after{content:" "}.bslib-value-box .value-box-value{font-size:calc(1.29rem + 0.48vw);margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2}@media(min-width: 1200px){.bslib-value-box .value-box-value{font-size:1.65rem}}.bslib-value-box .value-box-value:empty::after{content:" "}.bslib-value-box .value-box-showcase{align-items:center;justify-content:center;margin-top:auto;margin-bottom:auto;padding:1rem}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{opacity:.85;min-width:50px;max-width:125%}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{font-size:4rem}.bslib-value-box.showcase-top-right .value-box-grid{grid-template-columns:1fr var(---bslib-value-box-showcase-w, 50%)}.bslib-value-box.showcase-top-right .value-box-grid .value-box-showcase{grid-area:right;margin-left:auto;align-self:start;align-items:end;padding-left:0;padding-bottom:0}.bslib-value-box.showcase-top-right .value-box-grid .value-box-area{grid-area:left;align-self:end}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid{grid-template-columns:auto var(---bslib-value-box-showcase-w-fs, 1fr)}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid>div{align-self:center}.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-showcase{margin-top:0}@container bslib-value-box (max-width: 300px){.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-grid .value-box-showcase{padding-left:1rem}}.bslib-value-box.showcase-left-center .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w, 30%) auto}.bslib-value-box.showcase-left-center[data-full-screen=true] .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w-fs, 1fr) auto}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-showcase{grid-area:left}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-area{grid-area:right}.bslib-value-box.showcase-bottom .value-box-grid{grid-template-columns:1fr;grid-template-rows:1fr var(---bslib-value-box-showcase-h, auto);grid-template-areas:"top" "bottom";overflow:hidden}.bslib-value-box.showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.bslib-value-box.showcase-bottom .value-box-grid .value-box-area{grid-area:top}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid{grid-template-rows:1fr var(---bslib-value-box-showcase-h-fs, 2fr)}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid .value-box-showcase{padding:1rem}[data-bs-theme=dark] .bslib-value-box{--bslib-value-box-shadow: 0 0.5rem 1rem rgb(0 0 0 / 50%)}.html-fill-container{display:flex;flex-direction:column;min-height:0;min-width:0}.html-fill-container>.html-fill-item{flex:1 1 auto;min-height:0;min-width:0}.html-fill-container>:not(.html-fill-item){flex:0 0 auto}.sidebar-item .chapter-number{color:#343a40}.quarto-container{min-height:calc(100vh - 132px)}body.hypothesis-enabled #quarto-header{margin-right:16px}footer.footer .nav-footer,#quarto-header>nav{padding-left:1em;padding-right:1em}footer.footer div.nav-footer p:first-child{margin-top:0}footer.footer div.nav-footer p:last-child{margin-bottom:0}#quarto-content>*{padding-top:14px}#quarto-content>#quarto-sidebar-glass{padding-top:0px}@media(max-width: 991.98px){#quarto-content>*{padding-top:0}#quarto-content .subtitle{padding-top:14px}#quarto-content section:first-of-type h2:first-of-type,#quarto-content section:first-of-type .h2:first-of-type{margin-top:1rem}}.headroom-target,header.headroom{will-change:transform;transition:position 200ms linear;transition:all 200ms linear}header.headroom--pinned{transform:translateY(0%)}header.headroom--unpinned{transform:translateY(-100%)}.navbar-container{width:100%}.navbar-brand{overflow:hidden;text-overflow:ellipsis}.navbar-brand-container{max-width:calc(100% - 115px);min-width:0;display:flex;align-items:center}@media(min-width: 992px){.navbar-brand-container{margin-right:1em}}.navbar-brand.navbar-brand-logo{margin-right:4px;display:inline-flex}.navbar-toggler{flex-basis:content;flex-shrink:0}.navbar .navbar-brand-container{order:2}.navbar .navbar-toggler{order:1}.navbar .navbar-container>.navbar-nav{order:20}.navbar .navbar-container>.navbar-brand-container{margin-left:0 !important;margin-right:0 !important}.navbar .navbar-collapse{order:20}.navbar #quarto-search{order:4;margin-left:auto}.navbar .navbar-toggler{margin-right:.5em}.navbar-collapse .quarto-navbar-tools{margin-left:.5em}.navbar-logo{max-height:24px;width:auto;padding-right:4px}nav .nav-item:not(.compact){padding-top:1px}nav .nav-link i,nav .dropdown-item i{padding-right:1px}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.6rem;padding-right:.6rem}nav .nav-item.compact .nav-link{padding-left:.5rem;padding-right:.5rem;font-size:1.1rem}.navbar .quarto-navbar-tools{order:3}.navbar .quarto-navbar-tools div.dropdown{display:inline-block}.navbar .quarto-navbar-tools .quarto-navigation-tool{color:#545555}.navbar .quarto-navbar-tools .quarto-navigation-tool:hover{color:#1f4eb6}.navbar-nav .dropdown-menu{min-width:220px;font-size:.9rem}.navbar .navbar-nav .nav-link.dropdown-toggle::after{opacity:.75;vertical-align:.175em}.navbar ul.dropdown-menu{padding-top:0;padding-bottom:0}.navbar .dropdown-header{text-transform:uppercase;font-size:.8rem;padding:0 .5rem}.navbar .dropdown-item{padding:.4rem .5rem}.navbar .dropdown-item>i.bi{margin-left:.1rem;margin-right:.25em}.sidebar #quarto-search{margin-top:-1px}.sidebar #quarto-search svg.aa-SubmitIcon{width:16px;height:16px}.sidebar-navigation a{color:inherit}.sidebar-title{margin-top:.25rem;padding-bottom:.5rem;font-size:1.3rem;line-height:1.6rem;visibility:visible}.sidebar-title>a{font-size:inherit;text-decoration:none}.sidebar-title .sidebar-tools-main{margin-top:-6px}@media(max-width: 991.98px){#quarto-sidebar div.sidebar-header{padding-top:.2em}}.sidebar-header-stacked .sidebar-title{margin-top:.6rem}.sidebar-logo{max-width:90%;padding-bottom:.5rem}.sidebar-logo-link{text-decoration:none}.sidebar-navigation li a{text-decoration:none}.sidebar-navigation .quarto-navigation-tool{opacity:.7;font-size:.875rem}#quarto-sidebar>nav>.sidebar-tools-main{margin-left:14px}.sidebar-tools-main{display:inline-flex;margin-left:0px;order:2}.sidebar-tools-main:not(.tools-wide){vertical-align:middle}.sidebar-navigation .quarto-navigation-tool.dropdown-toggle::after{display:none}.sidebar.sidebar-navigation>*{padding-top:1em}.sidebar-item{margin-bottom:.2em;line-height:1rem;margin-top:.4rem}.sidebar-section{padding-left:.5em;padding-bottom:.2em}.sidebar-item .sidebar-item-container{display:flex;justify-content:space-between;cursor:pointer}.sidebar-item-toggle:hover{cursor:pointer}.sidebar-item .sidebar-item-toggle .bi{font-size:.7rem;text-align:center}.sidebar-item .sidebar-item-toggle .bi-chevron-right::before{transition:transform 200ms ease}.sidebar-item .sidebar-item-toggle[aria-expanded=false] .bi-chevron-right::before{transform:none}.sidebar-item .sidebar-item-toggle[aria-expanded=true] .bi-chevron-right::before{transform:rotate(90deg)}.sidebar-item-text{width:100%}.sidebar-navigation .sidebar-divider{margin-left:0;margin-right:0;margin-top:.5rem;margin-bottom:.5rem}@media(max-width: 991.98px){.quarto-secondary-nav{display:block}.quarto-secondary-nav button.quarto-search-button{padding-right:0em;padding-left:2em}.quarto-secondary-nav button.quarto-btn-toggle{margin-left:-0.75rem;margin-right:.15rem}.quarto-secondary-nav nav.quarto-title-breadcrumbs{display:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs{display:flex;align-items:center;padding-right:1em;margin-left:-0.25em}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{text-decoration:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs ol.breadcrumb{margin-bottom:0}}@media(min-width: 992px){.quarto-secondary-nav{display:none}}.quarto-title-breadcrumbs .breadcrumb{margin-bottom:.5em;font-size:.9rem}.quarto-title-breadcrumbs .breadcrumb li:last-of-type a{color:#6c757d}.quarto-secondary-nav .quarto-btn-toggle{color:#595959}.quarto-secondary-nav[aria-expanded=false] .quarto-btn-toggle .bi-chevron-right::before{transform:none}.quarto-secondary-nav[aria-expanded=true] .quarto-btn-toggle .bi-chevron-right::before{transform:rotate(90deg)}.quarto-secondary-nav .quarto-btn-toggle .bi-chevron-right::before{transition:transform 200ms ease}.quarto-secondary-nav{cursor:pointer}.no-decor{text-decoration:none}.quarto-secondary-nav-title{margin-top:.3em;color:#595959;padding-top:4px}.quarto-secondary-nav nav.quarto-page-breadcrumbs{color:#595959}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{color:#595959}.quarto-secondary-nav nav.quarto-page-breadcrumbs a:hover{color:rgba(33,81,191,.8)}.quarto-secondary-nav nav.quarto-page-breadcrumbs .breadcrumb-item::before{color:#8c8c8c}.breadcrumb-item{line-height:1.2rem}div.sidebar-item-container{color:#595959}div.sidebar-item-container:hover,div.sidebar-item-container:focus{color:rgba(33,81,191,.8)}div.sidebar-item-container.disabled{color:rgba(89,89,89,.75)}div.sidebar-item-container .active,div.sidebar-item-container .show>.nav-link,div.sidebar-item-container .sidebar-link>code{color:#2151bf}div.sidebar.sidebar-navigation.rollup.quarto-sidebar-toggle-contents,nav.sidebar.sidebar-navigation:not(.rollup){background-color:#fff}@media(max-width: 991.98px){.sidebar-navigation .sidebar-item a,.nav-page .nav-page-text,.sidebar-navigation{font-size:1rem}.sidebar-navigation ul.sidebar-section.depth1 .sidebar-section-item{font-size:1.1rem}.sidebar-logo{display:none}.sidebar.sidebar-navigation{position:static;border-bottom:1px solid #dee2e6}.sidebar.sidebar-navigation.collapsing{position:fixed;z-index:1000}.sidebar.sidebar-navigation.show{position:fixed;z-index:1000}.sidebar.sidebar-navigation{min-height:100%}nav.quarto-secondary-nav{background-color:#fff;border-bottom:1px solid #dee2e6}.quarto-banner nav.quarto-secondary-nav{background-color:#f8f9fa;color:#545555;border-top:1px solid #dee2e6}.sidebar .sidebar-footer{visibility:visible;padding-top:1rem;position:inherit}.sidebar-tools-collapse{display:block}}#quarto-sidebar{transition:width .15s ease-in}#quarto-sidebar>*{padding-right:1em}@media(max-width: 991.98px){#quarto-sidebar .sidebar-menu-container{white-space:nowrap;min-width:225px}#quarto-sidebar.show{transition:width .15s ease-out}}@media(min-width: 992px){#quarto-sidebar{display:flex;flex-direction:column}.nav-page .nav-page-text,.sidebar-navigation .sidebar-section .sidebar-item{font-size:.875rem}.sidebar-navigation .sidebar-item{font-size:.925rem}.sidebar.sidebar-navigation{display:block;position:sticky}.sidebar-search{width:100%}.sidebar .sidebar-footer{visibility:visible}}@media(min-width: 992px){#quarto-sidebar-glass{display:none}}@media(max-width: 991.98px){#quarto-sidebar-glass{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(255,255,255,0);transition:background-color .15s ease-in;z-index:-1}#quarto-sidebar-glass.collapsing{z-index:1000}#quarto-sidebar-glass.show{transition:background-color .15s ease-out;background-color:rgba(102,102,102,.4);z-index:1000}}.sidebar .sidebar-footer{padding:.5rem 1rem;align-self:flex-end;color:#6c757d;width:100%}.quarto-page-breadcrumbs .breadcrumb-item+.breadcrumb-item,.quarto-page-breadcrumbs .breadcrumb-item{padding-right:.33em;padding-left:0}.quarto-page-breadcrumbs .breadcrumb-item::before{padding-right:.33em}.quarto-sidebar-footer{font-size:.875em}.sidebar-section .bi-chevron-right{vertical-align:middle}.sidebar-section .bi-chevron-right::before{font-size:.9em}.notransition{-webkit-transition:none !important;-moz-transition:none !important;-o-transition:none !important;transition:none !important}.btn:focus:not(:focus-visible){box-shadow:none}.page-navigation{display:flex;justify-content:space-between}.nav-page{padding-bottom:.75em}.nav-page .bi{font-size:1.8rem;vertical-align:middle}.nav-page .nav-page-text{padding-left:.25em;padding-right:.25em}.nav-page a{color:#6c757d;text-decoration:none;display:flex;align-items:center}.nav-page a:hover{color:#1f4eb6}.nav-footer .toc-actions{padding-bottom:.5em;padding-top:.5em}.nav-footer .toc-actions a,.nav-footer .toc-actions a:hover{text-decoration:none}.nav-footer .toc-actions ul{display:flex;list-style:none}.nav-footer .toc-actions ul :first-child{margin-left:auto}.nav-footer .toc-actions ul :last-child{margin-right:auto}.nav-footer .toc-actions ul li{padding-right:1.5em}.nav-footer .toc-actions ul li i.bi{padding-right:.4em}.nav-footer .toc-actions ul li:last-of-type{padding-right:0}.nav-footer{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:baseline;text-align:center;padding-top:.5rem;padding-bottom:.5rem;background-color:#fff}body.nav-fixed{padding-top:64px}.nav-footer-contents{color:#6c757d;margin-top:.25rem}.nav-footer{min-height:3.5em;color:#757575}.nav-footer a{color:#757575}.nav-footer .nav-footer-left{font-size:.825em}.nav-footer .nav-footer-center{font-size:.825em}.nav-footer .nav-footer-right{font-size:.825em}.nav-footer-left .footer-items,.nav-footer-center .footer-items,.nav-footer-right .footer-items{display:inline-flex;padding-top:.3em;padding-bottom:.3em;margin-bottom:0em}.nav-footer-left .footer-items .nav-link,.nav-footer-center .footer-items .nav-link,.nav-footer-right .footer-items .nav-link{padding-left:.6em;padding-right:.6em}@media(min-width: 768px){.nav-footer-left{flex:1 1 0px;text-align:left}}@media(max-width: 575.98px){.nav-footer-left{margin-bottom:1em;flex:100%}}@media(min-width: 768px){.nav-footer-right{flex:1 1 0px;text-align:right}}@media(max-width: 575.98px){.nav-footer-right{margin-bottom:1em;flex:100%}}.nav-footer-center{text-align:center;min-height:3em}@media(min-width: 768px){.nav-footer-center{flex:1 1 0px}}.nav-footer-center .footer-items{justify-content:center}@media(max-width: 767.98px){.nav-footer-center{margin-bottom:1em;flex:100%}}@media(max-width: 767.98px){.nav-footer-center{margin-top:3em;order:10}}.navbar .quarto-reader-toggle.reader .quarto-reader-toggle-btn{background-color:#545555;border-radius:3px}@media(max-width: 991.98px){.quarto-reader-toggle{display:none}}.quarto-reader-toggle.reader.quarto-navigation-tool .quarto-reader-toggle-btn{background-color:#595959;border-radius:3px}.quarto-reader-toggle .quarto-reader-toggle-btn{display:inline-flex;padding-left:.2em;padding-right:.2em;margin-left:-0.2em;margin-right:-0.2em;text-align:center}.navbar .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}#quarto-back-to-top{display:none;position:fixed;bottom:50px;background-color:#fff;border-radius:.25rem;box-shadow:0 .2rem .5rem #6c757d,0 0 .05rem #6c757d;color:#6c757d;text-decoration:none;font-size:.9em;text-align:center;left:50%;padding:.4rem .8rem;transform:translate(-50%, 0)}#quarto-announcement{padding:.5em;display:flex;justify-content:space-between;margin-bottom:0;font-size:.9em}#quarto-announcement .quarto-announcement-content{margin-right:auto}#quarto-announcement .quarto-announcement-content p{margin-bottom:0}#quarto-announcement .quarto-announcement-icon{margin-right:.5em;font-size:1.2em;margin-top:-0.15em}#quarto-announcement .quarto-announcement-action{cursor:pointer}.aa-DetachedSearchButtonQuery{display:none}.aa-DetachedOverlay ul.aa-List,#quarto-search-results ul.aa-List{list-style:none;padding-left:0}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{background-color:#fff;position:absolute;z-index:2000}#quarto-search-results .aa-Panel{max-width:400px}#quarto-search input{font-size:.925rem}@media(min-width: 992px){.navbar #quarto-search{margin-left:.25rem;order:999}}.navbar.navbar-expand-sm #quarto-search,.navbar.navbar-expand-md #quarto-search{order:999}@media(min-width: 992px){.navbar .quarto-navbar-tools{order:900}}@media(min-width: 992px){.navbar .quarto-navbar-tools.tools-end{margin-left:auto !important}}@media(max-width: 991.98px){#quarto-sidebar .sidebar-search{display:none}}#quarto-sidebar .sidebar-search .aa-Autocomplete{width:100%}.navbar .aa-Autocomplete .aa-Form{width:180px}.navbar #quarto-search.type-overlay .aa-Autocomplete{width:40px}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form{background-color:inherit;border:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form:focus-within{box-shadow:none;outline:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper{display:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper:focus-within{display:inherit}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-Label svg,.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-LoadingIndicator svg{width:26px;height:26px;color:#545555;opacity:1}.navbar #quarto-search.type-overlay .aa-Autocomplete svg.aa-SubmitIcon{width:26px;height:26px;color:#545555;opacity:1}.aa-Autocomplete .aa-Form,.aa-DetachedFormContainer .aa-Form{align-items:center;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;color:#343a40;display:flex;line-height:1em;margin:0;position:relative;width:100%}.aa-Autocomplete .aa-Form:focus-within,.aa-DetachedFormContainer .aa-Form:focus-within{box-shadow:rgba(39,128,227,.6) 0 0 0 1px;outline:currentColor none medium}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix{align-items:center;display:flex;flex-shrink:0;order:1}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{cursor:initial;flex-shrink:0;padding:0;text-align:left}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg{color:#343a40;opacity:.5}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton{appearance:none;background:none;border:0;margin:0}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{align-items:center;display:flex;justify-content:center}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapper,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper{order:3;position:relative;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input{appearance:none;background:none;border:0;color:#343a40;font:inherit;height:calc(1.5em + .1rem + 2px);padding:0;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::placeholder,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::placeholder{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input:focus{border-color:none;box-shadow:none;outline:none}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix{align-items:center;display:flex;order:4}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton{align-items:center;background:none;border:0;color:#343a40;opacity:.8;cursor:pointer;display:flex;margin:0;width:calc(1.5em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg{width:calc(1.5em + 0.75rem + calc(1px * 2))}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton{border:none;align-items:center;background:none;color:#343a40;opacity:.4;font-size:.7rem;cursor:pointer;display:none;margin:0;width:calc(1em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden]{display:none}.aa-PanelLayout:empty{display:none}.quarto-search-no-results.no-query{display:none}.aa-Source:has(.no-query){display:none}#quarto-search-results .aa-Panel{border:solid #dee2e6 1px}#quarto-search-results .aa-SourceNoResults{width:398px}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{max-height:65vh;overflow-y:auto;font-size:.925rem}.aa-DetachedOverlay .aa-SourceNoResults,#quarto-search-results .aa-SourceNoResults{height:60px;display:flex;justify-content:center;align-items:center}.aa-DetachedOverlay .search-error,#quarto-search-results .search-error{padding-top:10px;padding-left:20px;padding-right:20px;cursor:default}.aa-DetachedOverlay .search-error .search-error-title,#quarto-search-results .search-error .search-error-title{font-size:1.1rem;margin-bottom:.5rem}.aa-DetachedOverlay .search-error .search-error-title .search-error-icon,#quarto-search-results .search-error .search-error-title .search-error-icon{margin-right:8px}.aa-DetachedOverlay .search-error .search-error-text,#quarto-search-results .search-error .search-error-text{font-weight:300}.aa-DetachedOverlay .search-result-text,#quarto-search-results .search-result-text{font-weight:300;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.2rem;max-height:2.4rem}.aa-DetachedOverlay .aa-SourceHeader .search-result-header,#quarto-search-results .aa-SourceHeader .search-result-header{font-size:.875rem;background-color:#f2f2f2;padding-left:14px;padding-bottom:4px;padding-top:4px}.aa-DetachedOverlay .aa-SourceHeader .search-result-header-no-results,#quarto-search-results .aa-SourceHeader .search-result-header-no-results{display:none}.aa-DetachedOverlay .aa-SourceFooter .algolia-search-logo,#quarto-search-results .aa-SourceFooter .algolia-search-logo{width:110px;opacity:.85;margin:8px;float:right}.aa-DetachedOverlay .search-result-section,#quarto-search-results .search-result-section{font-size:.925em}.aa-DetachedOverlay a.search-result-link,#quarto-search-results a.search-result-link{color:inherit;text-decoration:none}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item,#quarto-search-results li.aa-Item[aria-selected=true] .search-item{background-color:#2780e3}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text-container{color:#fff;background-color:#2780e3}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=true] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-match.mark{color:#fff;background-color:#4b95e8}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item,#quarto-search-results li.aa-Item[aria-selected=false] .search-item{background-color:#fff}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text-container{color:#343a40}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=false] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-match.mark{color:inherit;background-color:#e5effc}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container{background-color:#fff;color:#343a40}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container{padding-top:0px}.aa-DetachedOverlay li.aa-Item .search-result-doc.document-selectable .search-result-text-container,#quarto-search-results li.aa-Item .search-result-doc.document-selectable .search-result-text-container{margin-top:-4px}.aa-DetachedOverlay .aa-Item,#quarto-search-results .aa-Item{cursor:pointer}.aa-DetachedOverlay .aa-Item .search-item,#quarto-search-results .aa-Item .search-item{border-left:none;border-right:none;border-top:none;background-color:#fff;border-color:#dee2e6;color:#343a40}.aa-DetachedOverlay .aa-Item .search-item p,#quarto-search-results .aa-Item .search-item p{margin-top:0;margin-bottom:0}.aa-DetachedOverlay .aa-Item .search-item i.bi,#quarto-search-results .aa-Item .search-item i.bi{padding-left:8px;padding-right:8px;font-size:1.3em}.aa-DetachedOverlay .aa-Item .search-item .search-result-title,#quarto-search-results .aa-Item .search-item .search-result-title{margin-top:.3em;margin-bottom:0em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs,#quarto-search-results .aa-Item .search-item .search-result-crumbs{white-space:nowrap;text-overflow:ellipsis;font-size:.8em;font-weight:300;margin-right:1em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap),#quarto-search-results .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap){max-width:30%;margin-left:auto;margin-top:.5em;margin-bottom:.1rem}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap,#quarto-search-results .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap{flex-basis:100%;margin-top:0em;margin-bottom:.2em;margin-left:37px}.aa-DetachedOverlay .aa-Item .search-result-title-container,#quarto-search-results .aa-Item .search-result-title-container{font-size:1em;display:flex;flex-wrap:wrap;padding:6px 4px 6px 4px}.aa-DetachedOverlay .aa-Item .search-result-text-container,#quarto-search-results .aa-Item .search-result-text-container{padding-bottom:8px;padding-right:8px;margin-left:42px}.aa-DetachedOverlay .aa-Item .search-result-doc-section,.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-doc-section,#quarto-search-results .aa-Item .search-result-more{padding-top:8px;padding-bottom:8px;padding-left:44px}.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-more{font-size:.8em;font-weight:400}.aa-DetachedOverlay .aa-Item .search-result-doc,#quarto-search-results .aa-Item .search-result-doc{border-top:1px solid #dee2e6}.aa-DetachedSearchButton{background:none;border:none}.aa-DetachedSearchButton .aa-DetachedSearchButtonPlaceholder{display:none}.navbar .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:#545555}.sidebar-tools-collapse #quarto-search,.sidebar-tools-main #quarto-search{display:inline}.sidebar-tools-collapse #quarto-search .aa-Autocomplete,.sidebar-tools-main #quarto-search .aa-Autocomplete{display:inline}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton{padding-left:4px;padding-right:4px}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:#595959}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon{margin-top:-3px}.aa-DetachedContainer{background:rgba(255,255,255,.65);width:90%;bottom:0;box-shadow:rgba(222,226,230,.6) 0 0 0 1px;outline:currentColor none medium;display:flex;flex-direction:column;left:0;margin:0;overflow:hidden;padding:0;position:fixed;right:0;top:0;z-index:1101}.aa-DetachedContainer::after{height:32px}.aa-DetachedContainer .aa-SourceHeader{margin:var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px}.aa-DetachedContainer .aa-Panel{background-color:#fff;border-radius:0;box-shadow:none;flex-grow:1;margin:0;padding:0;position:relative}.aa-DetachedContainer .aa-PanelLayout{bottom:0;box-shadow:none;left:0;margin:0;max-height:none;overflow-y:auto;position:absolute;right:0;top:0;width:100%}.aa-DetachedFormContainer{background-color:#fff;border-bottom:1px solid #dee2e6;display:flex;flex-direction:row;justify-content:space-between;margin:0;padding:.5em}.aa-DetachedCancelButton{background:none;font-size:.8em;border:0;border-radius:3px;color:#343a40;cursor:pointer;margin:0 0 0 .5em;padding:0 .5em}.aa-DetachedCancelButton:hover,.aa-DetachedCancelButton:focus{box-shadow:rgba(39,128,227,.6) 0 0 0 1px;outline:currentColor none medium}.aa-DetachedContainer--modal{bottom:inherit;height:auto;margin:0 auto;position:absolute;top:100px;border-radius:6px;max-width:850px}@media(max-width: 575.98px){.aa-DetachedContainer--modal{width:100%;top:0px;border-radius:0px;border:none}}.aa-DetachedContainer--modal .aa-PanelLayout{max-height:var(--aa-detached-modal-max-height);padding-bottom:var(--aa-spacing-half);position:static}.aa-Detached{height:100vh;overflow:hidden}.aa-DetachedOverlay{background-color:rgba(52,58,64,.4);position:fixed;left:0;right:0;top:0;margin:0;padding:0;height:100vh;z-index:1100}.quarto-dashboard.nav-fixed.dashboard-sidebar #quarto-content.quarto-dashboard-content{padding:0em}.quarto-dashboard #quarto-content.quarto-dashboard-content{padding:1em}.quarto-dashboard #quarto-content.quarto-dashboard-content>*{padding-top:0}@media(min-width: 576px){.quarto-dashboard{height:100%}}.quarto-dashboard .card.valuebox.bslib-card.bg-primary{background-color:#5397e9 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-secondary{background-color:#343a40 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-success{background-color:#3aa716 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-info{background-color:rgba(153,84,187,.7019607843) !important}.quarto-dashboard .card.valuebox.bslib-card.bg-warning{background-color:#fa6400 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-danger{background-color:rgba(255,0,57,.7019607843) !important}.quarto-dashboard .card.valuebox.bslib-card.bg-light{background-color:#f8f9fa !important}.quarto-dashboard .card.valuebox.bslib-card.bg-dark{background-color:#343a40 !important}.quarto-dashboard.dashboard-fill{display:flex;flex-direction:column}.quarto-dashboard #quarto-appendix{display:none}.quarto-dashboard #quarto-header #quarto-dashboard-header{border-top:solid 1px #dae0e5;border-bottom:solid 1px #dae0e5}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav{padding-left:1em;padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav .navbar-brand-container{padding-left:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler{margin-right:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler-icon{height:1em;width:1em;background-image:url('data:image/svg+xml,')}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-brand-container{padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-title{font-size:1.1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-nav{font-size:.9em}.quarto-dashboard #quarto-dashboard-header .navbar{padding:0}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-container{padding-left:1em}.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-brand-container .nav-link,.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-nav .nav-link{padding:.7em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-color-scheme-toggle{order:9}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-toggler{margin-left:.5em;order:10}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .nav-link{padding:.5em;height:100%;display:flex;align-items:center}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .active{background-color:#e0e5e9}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{padding:.5em .5em .5em 0;display:flex;flex-direction:row;margin-right:2em;align-items:center}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{margin-right:auto}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{align-self:stretch}@media(min-width: 768px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:8}}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:1000;padding-bottom:.5em}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse .navbar-nav{align-self:stretch}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title{font-size:1.25em;line-height:1.1em;display:flex;flex-direction:row;flex-wrap:wrap;align-items:baseline}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title .navbar-title-text{margin-right:.4em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title a{text-decoration:none;color:inherit}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-subtitle,.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{font-size:.9rem;margin-right:.5em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{margin-left:auto}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-logo{max-height:48px;min-height:30px;object-fit:cover;margin-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-links{order:9;padding-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link-text{margin-left:.25em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link{padding-right:0em;padding-left:.7em;text-decoration:none;color:#545555}.quarto-dashboard .page-layout-custom .tab-content{padding:0;border:none}.quarto-dashboard-img-contain{height:100%;width:100%;object-fit:contain}@media(max-width: 575.98px){.quarto-dashboard .bslib-grid{grid-template-rows:minmax(1em, max-content) !important}.quarto-dashboard .sidebar-content{height:inherit}.quarto-dashboard .page-layout-custom{min-height:100vh}}.quarto-dashboard.dashboard-toolbar>.page-layout-custom,.quarto-dashboard.dashboard-sidebar>.page-layout-custom{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages{padding:0}.quarto-dashboard .callout{margin-bottom:0;margin-top:0}.quarto-dashboard .html-fill-container figure{overflow:hidden}.quarto-dashboard bslib-tooltip .rounded-pill{border:solid #6c757d 1px}.quarto-dashboard bslib-tooltip .rounded-pill .svg{fill:#343a40}.quarto-dashboard .tabset .dashboard-card-no-title .nav-tabs{margin-left:0;margin-right:auto}.quarto-dashboard .tabset .tab-content{border:none}.quarto-dashboard .tabset .card-header .nav-link[role=tab]{margin-top:-6px;padding-top:6px;padding-bottom:6px}.quarto-dashboard .card.valuebox,.quarto-dashboard .card.bslib-value-box{min-height:3rem}.quarto-dashboard .card.valuebox .card-body,.quarto-dashboard .card.bslib-value-box .card-body{padding:0}.quarto-dashboard .bslib-value-box .value-box-value{font-size:clamp(.1em,15cqw,5em)}.quarto-dashboard .bslib-value-box .value-box-showcase .bi{font-size:clamp(.1em,max(18cqw,5.2cqh),5em);text-align:center;height:1em}.quarto-dashboard .bslib-value-box .value-box-showcase .bi::before{vertical-align:1em}.quarto-dashboard .bslib-value-box .value-box-area{margin-top:auto;margin-bottom:auto}.quarto-dashboard .card figure.quarto-float{display:flex;flex-direction:column;align-items:center}.quarto-dashboard .dashboard-scrolling{padding:1em}.quarto-dashboard .full-height{height:100%}.quarto-dashboard .showcase-bottom .value-box-grid{display:grid;grid-template-columns:1fr;grid-template-rows:1fr auto;grid-template-areas:"top" "bottom"}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase i.bi{font-size:4rem}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-area{grid-area:top}.quarto-dashboard .tab-content{margin-bottom:0}.quarto-dashboard .bslib-card .bslib-navs-card-title{justify-content:stretch;align-items:end}.quarto-dashboard .card-header{display:flex;flex-wrap:wrap;justify-content:space-between}.quarto-dashboard .card-header .card-title{display:flex;flex-direction:column;justify-content:center;margin-bottom:0}.quarto-dashboard .tabset .card-toolbar{margin-bottom:1em}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{border:none;gap:var(--bslib-spacer, 1rem)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{padding:0}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.sidebar{border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.collapse-toggle{display:none}@media(max-width: 767.98px){.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{grid-template-columns:1fr;grid-template-rows:max-content 1fr}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{grid-column:1;grid-row:2}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout .sidebar{grid-column:1;grid-row:1}}.quarto-dashboard .sidebar-right .sidebar{padding-left:2.5em}.quarto-dashboard .sidebar-right .collapse-toggle{left:2px}.quarto-dashboard .quarto-dashboard .sidebar-right button.collapse-toggle:not(.transitioning){left:unset}.quarto-dashboard aside.sidebar{padding-left:1em;padding-right:1em;background-color:rgba(52,58,64,.25);color:#343a40}.quarto-dashboard .bslib-sidebar-layout>div.main{padding:.7em}.quarto-dashboard .bslib-sidebar-layout button.collapse-toggle{margin-top:.3em}.quarto-dashboard .bslib-sidebar-layout .collapse-toggle{top:0}.quarto-dashboard .bslib-sidebar-layout.sidebar-collapsed:not(.transitioning):not(.sidebar-right) .collapse-toggle{left:2px}.quarto-dashboard .sidebar>section>.h3:first-of-type{margin-top:0em}.quarto-dashboard .sidebar .h3,.quarto-dashboard .sidebar .h4,.quarto-dashboard .sidebar .h5,.quarto-dashboard .sidebar .h6{margin-top:.5em}.quarto-dashboard .sidebar form{flex-direction:column;align-items:start;margin-bottom:1em}.quarto-dashboard .sidebar form div[class*=oi-][class$=-input]{flex-direction:column}.quarto-dashboard .sidebar form[class*=oi-][class$=-toggle]{flex-direction:row-reverse;align-items:center;justify-content:start}.quarto-dashboard .sidebar form input[type=range]{margin-top:.5em;margin-right:.8em;margin-left:1em}.quarto-dashboard .sidebar label{width:fit-content}.quarto-dashboard .sidebar .card-body{margin-bottom:2em}.quarto-dashboard .sidebar .shiny-input-container{margin-bottom:1em}.quarto-dashboard .sidebar .shiny-options-group{margin-top:0}.quarto-dashboard .sidebar .control-label{margin-bottom:.3em}.quarto-dashboard .card .card-body .quarto-layout-row{align-items:stretch}.quarto-dashboard .toolbar{font-size:.9em;display:flex;flex-direction:row;border-top:solid 1px #bcbfc0;padding:1em;flex-wrap:wrap;background-color:rgba(52,58,64,.25)}.quarto-dashboard .toolbar .cell-output-display{display:flex}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar>*:last-child{margin-right:0}.quarto-dashboard .toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .toolbar .input-daterange{width:inherit}.quarto-dashboard .toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar form{width:fit-content}.quarto-dashboard .toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .toolbar form input[type=date]{width:fit-content}.quarto-dashboard .toolbar form input[type=color]{width:3em}.quarto-dashboard .toolbar form button{padding:.4em}.quarto-dashboard .toolbar form select{width:fit-content}.quarto-dashboard .toolbar>*{font-size:.9em;flex-grow:0}.quarto-dashboard .toolbar .shiny-input-container label{margin-bottom:1px}.quarto-dashboard .toolbar-bottom{margin-top:1em;margin-bottom:0 !important;order:2}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>.tab-content>.tab-pane>*:not(.bslib-sidebar-layout){padding:1em}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>*:not(.tab-content){padding:1em}.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page>.dashboard-toolbar-container>.toolbar-content,.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page:not(.dashboard-sidebar-container)>*:not(.dashboard-toolbar-container){padding:1em}.quarto-dashboard .toolbar-content{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages .tab-pane>.dashboard-toolbar-container .toolbar{border-radius:0;margin-bottom:0}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar{border-bottom:1px solid rgba(0,0,0,.175)}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar-bottom{margin-top:0}.quarto-dashboard .dashboard-toolbar-container:not(.toolbar-toplevel) .toolbar{margin-bottom:1em;border-top:none;border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .vega-embed.has-actions details{width:1.7em;height:2em;position:absolute !important;top:0;right:0}.quarto-dashboard .dashboard-toolbar-container{padding:0}.quarto-dashboard .card .card-header p:last-child,.quarto-dashboard .card .card-footer p:last-child{margin-bottom:0}.quarto-dashboard .card .card-body>.h4:first-child{margin-top:0}.quarto-dashboard .card .card-body{z-index:4}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_length,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_info,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate{text-align:initial}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_filter{text-align:right}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:initial}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;padding-top:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper table{flex-shrink:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons{margin-bottom:.5em;margin-left:auto;width:fit-content;float:right}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons.btn-group{background:#fff;border:none}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn-secondary{background-color:#fff;background-image:none;border:solid #dee2e6 1px;padding:.2em .7em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn span{font-size:.8em;color:#343a40}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{margin-left:.5em;margin-bottom:.5em;padding-top:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.875em}}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.8em}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter{margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter input[type=search]{padding:1px 5px 1px 5px;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length{flex-basis:1 1 50%;margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length select{padding:.4em 3em .4em .5em;font-size:.875em;margin-left:.2em;margin-right:.2em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{flex-shrink:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{margin-left:auto}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate ul.pagination .paginate_button .page-link{font-size:.8em}.quarto-dashboard .card .card-footer{font-size:.9em}.quarto-dashboard .card .card-toolbar{display:flex;flex-grow:1;flex-direction:row;width:100%;flex-wrap:wrap}.quarto-dashboard .card .card-toolbar>*{font-size:.8em;flex-grow:0}.quarto-dashboard .card .card-toolbar>.card-title{font-size:1em;flex-grow:1;align-self:flex-start;margin-top:.1em}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar form{width:fit-content}.quarto-dashboard .card .card-toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=date]{width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=color]{width:3em}.quarto-dashboard .card .card-toolbar form button{padding:.4em}.quarto-dashboard .card .card-toolbar form select{width:fit-content}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .card .card-toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .card .card-toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .card .card-toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange{width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .card .card-toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .card .card-toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .card .card-toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .card .card-toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card-body>table>thead{border-top:none}.quarto-dashboard .card-body>.table>:not(caption)>*>*{background-color:#fff}.tableFloatingHeaderOriginal{background-color:#fff;position:sticky !important;top:0 !important}.dashboard-data-table{margin-top:-1px}div.value-box-area span.observablehq--number{font-size:calc(clamp(.1em,15cqw,5em)*1.25);line-height:1.2;color:inherit;font-family:var(--bs-body-font-family)}.quarto-listing{padding-bottom:1em}.listing-pagination{padding-top:.5em}ul.pagination{float:right;padding-left:8px;padding-top:.5em}ul.pagination li{padding-right:.75em}ul.pagination li.disabled a,ul.pagination li.active a{color:#fff;text-decoration:none}ul.pagination li:last-of-type{padding-right:0}.listing-actions-group{display:flex}.quarto-listing-filter{margin-bottom:1em;width:200px;margin-left:auto}.quarto-listing-sort{margin-bottom:1em;margin-right:auto;width:auto}.quarto-listing-sort .input-group-text{font-size:.8em}.input-group-text{border-right:none}.quarto-listing-sort select.form-select{font-size:.8em}.listing-no-matching{text-align:center;padding-top:2em;padding-bottom:3em;font-size:1em}#quarto-margin-sidebar .quarto-listing-category{padding-top:0;font-size:1rem}#quarto-margin-sidebar .quarto-listing-category-title{cursor:pointer;font-weight:600;font-size:1rem}.quarto-listing-category .category{cursor:pointer}.quarto-listing-category .category.active{font-weight:600}.quarto-listing-category.category-cloud{display:flex;flex-wrap:wrap;align-items:baseline}.quarto-listing-category.category-cloud .category{padding-right:5px}.quarto-listing-category.category-cloud .category-cloud-1{font-size:.75em}.quarto-listing-category.category-cloud .category-cloud-2{font-size:.95em}.quarto-listing-category.category-cloud .category-cloud-3{font-size:1.15em}.quarto-listing-category.category-cloud .category-cloud-4{font-size:1.35em}.quarto-listing-category.category-cloud .category-cloud-5{font-size:1.55em}.quarto-listing-category.category-cloud .category-cloud-6{font-size:1.75em}.quarto-listing-category.category-cloud .category-cloud-7{font-size:1.95em}.quarto-listing-category.category-cloud .category-cloud-8{font-size:2.15em}.quarto-listing-category.category-cloud .category-cloud-9{font-size:2.35em}.quarto-listing-category.category-cloud .category-cloud-10{font-size:2.55em}.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-1{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-2{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-3{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-3{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-4{grid-template-columns:repeat(4, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-4{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-4{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-5{grid-template-columns:repeat(5, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-5{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-5{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-6{grid-template-columns:repeat(6, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-6{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-6{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-7{grid-template-columns:repeat(7, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-7{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-7{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-8{grid-template-columns:repeat(8, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-8{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-8{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-9{grid-template-columns:repeat(9, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-9{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-9{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-10{grid-template-columns:repeat(10, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-10{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-10{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-11{grid-template-columns:repeat(11, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-11{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-11{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-12{grid-template-columns:repeat(12, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-12{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-12{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-grid{gap:1.5em}.quarto-grid-item.borderless{border:none}.quarto-grid-item.borderless .listing-categories .listing-category:last-of-type,.quarto-grid-item.borderless .listing-categories .listing-category:first-of-type{padding-left:0}.quarto-grid-item.borderless .listing-categories .listing-category{border:0}.quarto-grid-link{text-decoration:none;color:inherit}.quarto-grid-link:hover{text-decoration:none;color:inherit}.quarto-grid-item h5.title,.quarto-grid-item .title.h5{margin-top:0;margin-bottom:0}.quarto-grid-item .card-footer{display:flex;justify-content:space-between;font-size:.8em}.quarto-grid-item .card-footer p{margin-bottom:0}.quarto-grid-item p.card-img-top{margin-bottom:0}.quarto-grid-item p.card-img-top>img{object-fit:cover}.quarto-grid-item .card-other-values{margin-top:.5em;font-size:.8em}.quarto-grid-item .card-other-values tr{margin-bottom:.5em}.quarto-grid-item .card-other-values tr>td:first-of-type{font-weight:600;padding-right:1em;padding-left:1em;vertical-align:top}.quarto-grid-item div.post-contents{display:flex;flex-direction:column;text-decoration:none;height:100%}.quarto-grid-item .listing-item-img-placeholder{background-color:rgba(52,58,64,.25);flex-shrink:0}.quarto-grid-item .card-attribution{padding-top:1em;display:flex;gap:1em;text-transform:uppercase;color:#6c757d;font-weight:500;flex-grow:10;align-items:flex-end}.quarto-grid-item .description{padding-bottom:1em}.quarto-grid-item .card-attribution .date{align-self:flex-end}.quarto-grid-item .card-attribution.justify{justify-content:space-between}.quarto-grid-item .card-attribution.start{justify-content:flex-start}.quarto-grid-item .card-attribution.end{justify-content:flex-end}.quarto-grid-item .card-title{margin-bottom:.1em}.quarto-grid-item .card-subtitle{padding-top:.25em}.quarto-grid-item .card-text{font-size:.9em}.quarto-grid-item .listing-reading-time{padding-bottom:.25em}.quarto-grid-item .card-text-small{font-size:.8em}.quarto-grid-item .card-subtitle.subtitle{font-size:.9em;font-weight:600;padding-bottom:.5em}.quarto-grid-item .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}.quarto-grid-item .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}.quarto-grid-item.card-right{text-align:right}.quarto-grid-item.card-right .listing-categories{justify-content:flex-end}.quarto-grid-item.card-left{text-align:left}.quarto-grid-item.card-center{text-align:center}.quarto-grid-item.card-center .listing-description{text-align:justify}.quarto-grid-item.card-center .listing-categories{justify-content:center}table.quarto-listing-table td.image{padding:0px}table.quarto-listing-table td.image img{width:100%;max-width:50px;object-fit:contain}table.quarto-listing-table a{text-decoration:none;word-break:keep-all}table.quarto-listing-table th a{color:inherit}table.quarto-listing-table th a.asc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table th a.desc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table.table-hover td{cursor:pointer}.quarto-post.image-left{flex-direction:row}.quarto-post.image-right{flex-direction:row-reverse}@media(max-width: 767.98px){.quarto-post.image-right,.quarto-post.image-left{gap:0em;flex-direction:column}.quarto-post .metadata{padding-bottom:1em;order:2}.quarto-post .body{order:1}.quarto-post .thumbnail{order:3}}.list.quarto-listing-default div:last-of-type{border-bottom:none}@media(min-width: 992px){.quarto-listing-container-default{margin-right:2em}}div.quarto-post{display:flex;gap:2em;margin-bottom:1.5em;border-bottom:1px solid #dee2e6}@media(max-width: 767.98px){div.quarto-post{padding-bottom:1em}}div.quarto-post .metadata{flex-basis:20%;flex-grow:0;margin-top:.2em;flex-shrink:10}div.quarto-post .thumbnail{flex-basis:30%;flex-grow:0;flex-shrink:0}div.quarto-post .thumbnail img{margin-top:.4em;width:100%;object-fit:cover}div.quarto-post .body{flex-basis:45%;flex-grow:1;flex-shrink:0}div.quarto-post .body h3.listing-title,div.quarto-post .body .listing-title.h3{margin-top:0px;margin-bottom:0px;border-bottom:none}div.quarto-post .body .listing-subtitle{font-size:.875em;margin-bottom:.5em;margin-top:.2em}div.quarto-post .body .description{font-size:.9em}div.quarto-post .body pre code{white-space:pre-wrap}div.quarto-post a{color:#343a40;text-decoration:none}div.quarto-post .metadata{display:flex;flex-direction:column;font-size:.8em;font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";flex-basis:33%}div.quarto-post .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}div.quarto-post .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}div.quarto-post .listing-description{margin-bottom:.5em}div.quarto-about-jolla{display:flex !important;flex-direction:column;align-items:center;margin-top:10%;padding-bottom:1em}div.quarto-about-jolla .about-image{object-fit:cover;margin-left:auto;margin-right:auto;margin-bottom:1.5em}div.quarto-about-jolla img.round{border-radius:50%}div.quarto-about-jolla img.rounded{border-radius:10px}div.quarto-about-jolla .quarto-title h1.title,div.quarto-about-jolla .quarto-title .title.h1{text-align:center}div.quarto-about-jolla .quarto-title .description{text-align:center}div.quarto-about-jolla h2,div.quarto-about-jolla .h2{border-bottom:none}div.quarto-about-jolla .about-sep{width:60%}div.quarto-about-jolla main{text-align:center}div.quarto-about-jolla .about-links{display:flex}@media(min-width: 992px){div.quarto-about-jolla .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-jolla .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-jolla .about-link{color:#626d78;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-jolla .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-jolla .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-jolla .about-link:hover{color:#2761e3}div.quarto-about-jolla .about-link i.bi{margin-right:.15em}div.quarto-about-solana{display:flex !important;flex-direction:column;padding-top:3em !important;padding-bottom:1em}div.quarto-about-solana .about-entity{display:flex !important;align-items:start;justify-content:space-between}@media(min-width: 992px){div.quarto-about-solana .about-entity{flex-direction:row}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity{flex-direction:column-reverse;align-items:center;text-align:center}}div.quarto-about-solana .about-entity .entity-contents{display:flex;flex-direction:column}@media(max-width: 767.98px){div.quarto-about-solana .about-entity .entity-contents{width:100%}}div.quarto-about-solana .about-entity .about-image{object-fit:cover}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-image{margin-bottom:1.5em}}div.quarto-about-solana .about-entity img.round{border-radius:50%}div.quarto-about-solana .about-entity img.rounded{border-radius:10px}div.quarto-about-solana .about-entity .about-links{display:flex;justify-content:left;padding-bottom:1.2em}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-solana .about-entity .about-link{color:#626d78;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-solana .about-entity .about-link:hover{color:#2761e3}div.quarto-about-solana .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-solana .about-contents{padding-right:1.5em;flex-basis:0;flex-grow:1}div.quarto-about-solana .about-contents main.content{margin-top:0}div.quarto-about-solana .about-contents h2,div.quarto-about-solana .about-contents .h2{border-bottom:none}div.quarto-about-trestles{display:flex !important;flex-direction:row;padding-top:3em !important;padding-bottom:1em}@media(max-width: 991.98px){div.quarto-about-trestles{flex-direction:column;padding-top:0em !important}}div.quarto-about-trestles .about-entity{display:flex !important;flex-direction:column;align-items:center;text-align:center;padding-right:1em}@media(min-width: 992px){div.quarto-about-trestles .about-entity{flex:0 0 42%}}div.quarto-about-trestles .about-entity .about-image{object-fit:cover;margin-bottom:1.5em}div.quarto-about-trestles .about-entity img.round{border-radius:50%}div.quarto-about-trestles .about-entity img.rounded{border-radius:10px}div.quarto-about-trestles .about-entity .about-links{display:flex;justify-content:center}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-trestles .about-entity .about-link{color:#626d78;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-trestles .about-entity .about-link:hover{color:#2761e3}div.quarto-about-trestles .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-trestles .about-contents{flex-basis:0;flex-grow:1}div.quarto-about-trestles .about-contents h2,div.quarto-about-trestles .about-contents .h2{border-bottom:none}@media(min-width: 992px){div.quarto-about-trestles .about-contents{border-left:solid 1px #dee2e6;padding-left:1.5em}}div.quarto-about-trestles .about-contents main.content{margin-top:0}div.quarto-about-marquee{padding-bottom:1em}div.quarto-about-marquee .about-contents{display:flex;flex-direction:column}div.quarto-about-marquee .about-image{max-height:550px;margin-bottom:1.5em;object-fit:cover}div.quarto-about-marquee img.round{border-radius:50%}div.quarto-about-marquee img.rounded{border-radius:10px}div.quarto-about-marquee h2,div.quarto-about-marquee .h2{border-bottom:none}div.quarto-about-marquee .about-links{display:flex;justify-content:center;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-marquee .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-marquee .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-marquee .about-link{color:#626d78;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-marquee .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-marquee .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-marquee .about-link:hover{color:#2761e3}div.quarto-about-marquee .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-marquee .about-link{border:none}}div.quarto-about-broadside{display:flex;flex-direction:column;padding-bottom:1em}div.quarto-about-broadside .about-main{display:flex !important;padding-top:0 !important}@media(min-width: 992px){div.quarto-about-broadside .about-main{flex-direction:row;align-items:flex-start}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main{flex-direction:column}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main .about-entity{flex-shrink:0;width:100%;height:450px;margin-bottom:1.5em;background-size:cover;background-repeat:no-repeat}}@media(min-width: 992px){div.quarto-about-broadside .about-main .about-entity{flex:0 10 50%;margin-right:1.5em;width:100%;height:100%;background-size:100%;background-repeat:no-repeat}}div.quarto-about-broadside .about-main .about-contents{padding-top:14px;flex:0 0 50%}div.quarto-about-broadside h2,div.quarto-about-broadside .h2{border-bottom:none}div.quarto-about-broadside .about-sep{margin-top:1.5em;width:60%;align-self:center}div.quarto-about-broadside .about-links{display:flex;justify-content:center;column-gap:20px;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-broadside .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-broadside .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-broadside .about-link{color:#626d78;text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-broadside .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-broadside .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-broadside .about-link:hover{color:#2761e3}div.quarto-about-broadside .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-broadside .about-link{border:none}}.tippy-box[data-theme~=quarto]{background-color:#fff;border:solid 1px #dee2e6;border-radius:.25rem;color:#343a40;font-size:.875rem}.tippy-box[data-theme~=quarto]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=quarto]>.tippy-arrow:after,.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{content:"";position:absolute;z-index:-1}.tippy-box[data-theme~=quarto]>.tippy-arrow:after{border-color:rgba(0,0,0,0);border-style:solid}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-6px}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-6px}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-6px}.tippy-box[data-placement^=left]>.tippy-arrow:before{right:-6px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:after{border-top-color:#dee2e6;border-width:7px 7px 0;top:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow>svg{top:16px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow:after{top:17px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff;bottom:16px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:after{border-bottom-color:#dee2e6;border-width:0 7px 7px;bottom:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow>svg{bottom:15px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow:after{bottom:17px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:after{border-left-color:#dee2e6;border-width:7px 0 7px 7px;left:17px;top:1px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow>svg{left:11px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow:after{left:12px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff;right:16px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:after{border-width:7px 7px 7px 0;right:17px;top:1px;border-right-color:#dee2e6}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow>svg{right:11px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow:after{right:12px}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow{fill:#343a40}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCA2czEuNzk2LS4wMTMgNC42Ny0zLjYxNUM1Ljg1MS45IDYuOTMuMDA2IDggMGMxLjA3LS4wMDYgMi4xNDguODg3IDMuMzQzIDIuMzg1QzE0LjIzMyA2LjAwNSAxNiA2IDE2IDZIMHoiIGZpbGw9InJnYmEoMCwgOCwgMTYsIDAuMikiLz48L3N2Zz4=);background-size:16px 6px;width:16px;height:6px}.top-right{position:absolute;top:1em;right:1em}.visually-hidden{border:0;clip:rect(0 0 0 0);height:auto;margin:0;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none !important}.zindex-bottom{z-index:-1 !important}figure.figure{display:block}.quarto-layout-panel{margin-bottom:1em}.quarto-layout-panel>figure{width:100%}.quarto-layout-panel>figure>figcaption,.quarto-layout-panel>.panel-caption{margin-top:10pt}.quarto-layout-panel>.table-caption{margin-top:0px}.table-caption p{margin-bottom:.5em}.quarto-layout-row{display:flex;flex-direction:row;align-items:flex-start}.quarto-layout-valign-top{align-items:flex-start}.quarto-layout-valign-bottom{align-items:flex-end}.quarto-layout-valign-center{align-items:center}.quarto-layout-cell{position:relative;margin-right:20px}.quarto-layout-cell:last-child{margin-right:0}.quarto-layout-cell figure,.quarto-layout-cell>p{margin:.2em}.quarto-layout-cell img{max-width:100%}.quarto-layout-cell .html-widget{width:100% !important}.quarto-layout-cell div figure p{margin:0}.quarto-layout-cell figure{display:block;margin-inline-start:0;margin-inline-end:0}.quarto-layout-cell table{display:inline-table}.quarto-layout-cell-subref figcaption,figure .quarto-layout-row figure figcaption{text-align:center;font-style:italic}.quarto-figure{position:relative;margin-bottom:1em}.quarto-figure>figure{width:100%;margin-bottom:0}.quarto-figure-left>figure>p,.quarto-figure-left>figure>div{text-align:left}.quarto-figure-center>figure>p,.quarto-figure-center>figure>div{text-align:center}.quarto-figure-right>figure>p,.quarto-figure-right>figure>div{text-align:right}.quarto-figure>figure>div.cell-annotation,.quarto-figure>figure>div code{text-align:left}figure>p:empty{display:none}figure>p:first-child{margin-top:0;margin-bottom:0}figure>figcaption.quarto-float-caption-bottom{margin-bottom:.5em}figure>figcaption.quarto-float-caption-top{margin-top:.5em}div[id^=tbl-]{position:relative}.quarto-figure>.anchorjs-link{position:absolute;top:.6em;right:.5em}div[id^=tbl-]>.anchorjs-link{position:absolute;top:.7em;right:.3em}.quarto-figure:hover>.anchorjs-link,div[id^=tbl-]:hover>.anchorjs-link,h2:hover>.anchorjs-link,.h2:hover>.anchorjs-link,h3:hover>.anchorjs-link,.h3:hover>.anchorjs-link,h4:hover>.anchorjs-link,.h4:hover>.anchorjs-link,h5:hover>.anchorjs-link,.h5:hover>.anchorjs-link,h6:hover>.anchorjs-link,.h6:hover>.anchorjs-link,.reveal-anchorjs-link>.anchorjs-link{opacity:1}#title-block-header{margin-block-end:1rem;position:relative;margin-top:-1px}#title-block-header .abstract{margin-block-start:1rem}#title-block-header .abstract .abstract-title{font-weight:600}#title-block-header a{text-decoration:none}#title-block-header .author,#title-block-header .date,#title-block-header .doi{margin-block-end:.2rem}#title-block-header .quarto-title-block>div{display:flex}#title-block-header .quarto-title-block>div>h1,#title-block-header .quarto-title-block>div>.h1{flex-grow:1}#title-block-header .quarto-title-block>div>button{flex-shrink:0;height:2.25rem;margin-top:0}@media(min-width: 992px){#title-block-header .quarto-title-block>div>button{margin-top:5px}}tr.header>th>p:last-of-type{margin-bottom:0px}table,table.table{margin-top:.5rem;margin-bottom:.5rem}caption,.table-caption{padding-top:.5rem;padding-bottom:.5rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-top{margin-top:.5rem;margin-bottom:.25rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-bottom{padding-top:.25rem;margin-bottom:.5rem;text-align:center}.utterances{max-width:none;margin-left:-8px}iframe{margin-bottom:1em}details{margin-bottom:1em}details[show]{margin-bottom:0}details>summary{color:#6c757d}details>summary>p:only-child{display:inline}pre.sourceCode,code.sourceCode{position:relative}dd code:not(.sourceCode),p code:not(.sourceCode){white-space:pre-wrap}code{white-space:pre}@media print{code{white-space:pre-wrap}}pre>code{display:block}pre>code.sourceCode{white-space:pre}pre>code.sourceCode>span>a:first-child::before{text-decoration:none}pre.code-overflow-wrap>code.sourceCode{white-space:pre-wrap}pre.code-overflow-scroll>code.sourceCode{white-space:pre}code a:any-link{color:inherit;text-decoration:none}code a:hover{color:inherit;text-decoration:underline}ul.task-list{padding-left:1em}[data-tippy-root]{display:inline-block}.tippy-content .footnote-back{display:none}.footnote-back{margin-left:.2em}.tippy-content{overflow-x:auto}.quarto-embedded-source-code{display:none}.quarto-unresolved-ref{font-weight:600}.quarto-cover-image{max-width:35%;float:right;margin-left:30px}.cell-output-display .widget-subarea{margin-bottom:1em}.cell-output-display:not(.no-overflow-x),.knitsql-table:not(.no-overflow-x){overflow-x:auto}.panel-input{margin-bottom:1em}.panel-input>div,.panel-input>div>div{display:inline-block;vertical-align:top;padding-right:12px}.panel-input>p:last-child{margin-bottom:0}.layout-sidebar{margin-bottom:1em}.layout-sidebar .tab-content{border:none}.tab-content>.page-columns.active{display:grid}div.sourceCode>iframe{width:100%;height:300px;margin-bottom:-0.5em}a{text-underline-offset:3px}div.ansi-escaped-output{font-family:monospace;display:block}/*! +* +* ansi colors from IPython notebook's +* +* we also add `bright-[color]-` synonyms for the `-[color]-intense` classes since +* that seems to be what ansi_up emits +* +*/.ansi-black-fg{color:#3e424d}.ansi-black-bg{background-color:#3e424d}.ansi-black-intense-black,.ansi-bright-black-fg{color:#282c36}.ansi-black-intense-black,.ansi-bright-black-bg{background-color:#282c36}.ansi-red-fg{color:#e75c58}.ansi-red-bg{background-color:#e75c58}.ansi-red-intense-red,.ansi-bright-red-fg{color:#b22b31}.ansi-red-intense-red,.ansi-bright-red-bg{background-color:#b22b31}.ansi-green-fg{color:#00a250}.ansi-green-bg{background-color:#00a250}.ansi-green-intense-green,.ansi-bright-green-fg{color:#007427}.ansi-green-intense-green,.ansi-bright-green-bg{background-color:#007427}.ansi-yellow-fg{color:#ddb62b}.ansi-yellow-bg{background-color:#ddb62b}.ansi-yellow-intense-yellow,.ansi-bright-yellow-fg{color:#b27d12}.ansi-yellow-intense-yellow,.ansi-bright-yellow-bg{background-color:#b27d12}.ansi-blue-fg{color:#208ffb}.ansi-blue-bg{background-color:#208ffb}.ansi-blue-intense-blue,.ansi-bright-blue-fg{color:#0065ca}.ansi-blue-intense-blue,.ansi-bright-blue-bg{background-color:#0065ca}.ansi-magenta-fg{color:#d160c4}.ansi-magenta-bg{background-color:#d160c4}.ansi-magenta-intense-magenta,.ansi-bright-magenta-fg{color:#a03196}.ansi-magenta-intense-magenta,.ansi-bright-magenta-bg{background-color:#a03196}.ansi-cyan-fg{color:#60c6c8}.ansi-cyan-bg{background-color:#60c6c8}.ansi-cyan-intense-cyan,.ansi-bright-cyan-fg{color:#258f8f}.ansi-cyan-intense-cyan,.ansi-bright-cyan-bg{background-color:#258f8f}.ansi-white-fg{color:#c5c1b4}.ansi-white-bg{background-color:#c5c1b4}.ansi-white-intense-white,.ansi-bright-white-fg{color:#a1a6b2}.ansi-white-intense-white,.ansi-bright-white-bg{background-color:#a1a6b2}.ansi-default-inverse-fg{color:#fff}.ansi-default-inverse-bg{background-color:#000}.ansi-bold{font-weight:bold}.ansi-underline{text-decoration:underline}:root{--quarto-body-bg: #fff;--quarto-body-color: #343a40;--quarto-text-muted: #6c757d;--quarto-border-color: #dee2e6;--quarto-border-width: 1px;--quarto-border-radius: 0.25rem}table.gt_table{color:var(--quarto-body-color);font-size:1em;width:100%;background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_column_spanner_outer{color:var(--quarto-body-color);background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_col_heading{color:var(--quarto-body-color);font-weight:bold;background-color:rgba(0,0,0,0)}table.gt_table thead.gt_col_headings{border-bottom:1px solid currentColor;border-top-width:inherit;border-top-color:var(--quarto-border-color)}table.gt_table thead.gt_col_headings:not(:first-child){border-top-width:1px;border-top-color:var(--quarto-border-color)}table.gt_table td.gt_row{border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-width:0px}table.gt_table tbody.gt_table_body{border-top-width:1px;border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-color:currentColor}div.columns{display:initial;gap:initial}div.column{display:inline-block;overflow-x:initial;vertical-align:top;width:50%}.code-annotation-tip-content{word-wrap:break-word}.code-annotation-container-hidden{display:none !important}dl.code-annotation-container-grid{display:grid;grid-template-columns:min-content auto}dl.code-annotation-container-grid dt{grid-column:1}dl.code-annotation-container-grid dd{grid-column:2}pre.sourceCode.code-annotation-code{padding-right:0}code.sourceCode .code-annotation-anchor{z-index:100;position:relative;float:right;background-color:rgba(0,0,0,0)}input[type=checkbox]{margin-right:.5ch}:root{--mermaid-bg-color: #fff;--mermaid-edge-color: #343a40;--mermaid-node-fg-color: #343a40;--mermaid-fg-color: #343a40;--mermaid-fg-color--lighter: #4b545c;--mermaid-fg-color--lightest: #626d78;--mermaid-font-family: Source Sans Pro, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;--mermaid-label-bg-color: #fff;--mermaid-label-fg-color: #2780e3;--mermaid-node-bg-color: rgba(39, 128, 227, 0.1);--mermaid-node-fg-color: #343a40}@media print{:root{font-size:11pt}#quarto-sidebar,#TOC,.nav-page{display:none}.page-columns .content{grid-column-start:page-start}.fixed-top{position:relative}.panel-caption,.figure-caption,figcaption{color:#666}}.code-copy-button{position:absolute;top:0;right:0;border:0;margin-top:5px;margin-right:5px;background-color:rgba(0,0,0,0);z-index:3}.code-copy-button:focus{outline:none}.code-copy-button-tooltip{font-size:.75em}pre.sourceCode:hover>.code-copy-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}pre.sourceCode:hover>.code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}pre.sourceCode:hover>.code-copy-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}pre.sourceCode:hover>.code-copy-button-checked:hover>.bi::before{background-image:url('data:image/svg+xml,')}main ol ol,main ul ul,main ol ul,main ul ol{margin-bottom:1em}ul>li:not(:has(>p))>ul,ol>li:not(:has(>p))>ul,ul>li:not(:has(>p))>ol,ol>li:not(:has(>p))>ol{margin-bottom:0}ul>li:not(:has(>p))>ul>li:has(>p),ol>li:not(:has(>p))>ul>li:has(>p),ul>li:not(:has(>p))>ol>li:has(>p),ol>li:not(:has(>p))>ol>li:has(>p){margin-top:1rem}body{margin:0}main.page-columns>header>h1.title,main.page-columns>header>.title.h1{margin-bottom:0}@media(min-width: 992px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] 35px [page-end-inset page-end] 5fr [screen-end-inset] 1.5em}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(850px - 3em)) [body-content-end] 3em [body-end] 50px [body-end-outset] minmax(0px, 250px) [page-end-inset] minmax(50px, 100px) [page-end] 1fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] minmax(25px, 50px) [body-end-outset] minmax(50px, 150px) [page-end-inset] minmax(25px, 50px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(50px, 100px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(0px, 200px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(50px, 150px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] minmax(25px, 50px) [body-end-outset] minmax(50px, 150px) [page-end-inset] minmax(25px, 50px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 991.98px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1250px - 3em)) [body-content-end body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1.5em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(75px, 150px) [page-end-inset] 25px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(800px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(25px, 50px) [page-end-inset] 50px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 35px [body-end-outset] minmax(75px, 145px) [page-end-inset] 35px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(750px - 3em)) [body-content-end] 1.5em [body-end] 50px [body-end-outset] minmax(75px, 150px) [page-end-inset] 25px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 767.98px){body .page-columns,body.fullcontent:not(.floating):not(.docked) .page-columns,body.slimcontent:not(.floating):not(.docked) .page-columns,body.docked .page-columns,body.docked.slimcontent .page-columns,body.docked.fullcontent .page-columns,body.floating .page-columns,body.floating.slimcontent .page-columns,body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}nav[role=doc-toc]{display:none}}body,.page-row-navigation{grid-template-rows:[page-top] max-content [contents-top] max-content [contents-bottom] max-content [page-bottom]}.page-rows-contents{grid-template-rows:[content-top] minmax(max-content, 1fr) [content-bottom] minmax(60px, max-content) [page-bottom]}.page-full{grid-column:screen-start/screen-end !important}.page-columns>*{grid-column:body-content-start/body-content-end}.page-columns.column-page>*{grid-column:page-start/page-end}.page-columns.column-page-left .page-columns.page-full>*,.page-columns.column-page-left>*{grid-column:page-start/body-content-end}.page-columns.column-page-right .page-columns.page-full>*,.page-columns.column-page-right>*{grid-column:body-content-start/page-end}.page-rows{grid-auto-rows:auto}.header{grid-column:screen-start/screen-end;grid-row:page-top/contents-top}#quarto-content{padding:0;grid-column:screen-start/screen-end;grid-row:contents-top/contents-bottom}body.floating .sidebar.sidebar-navigation{grid-column:page-start/body-start;grid-row:content-top/page-bottom}body.docked .sidebar.sidebar-navigation{grid-column:screen-start/body-start;grid-row:content-top/page-bottom}.sidebar.toc-left{grid-column:page-start/body-start;grid-row:content-top/page-bottom}.sidebar.margin-sidebar{grid-column:body-end/page-end;grid-row:content-top/page-bottom}.page-columns .content{grid-column:body-content-start/body-content-end;grid-row:content-top/content-bottom;align-content:flex-start}.page-columns .page-navigation{grid-column:body-content-start/body-content-end;grid-row:content-bottom/page-bottom}.page-columns .footer{grid-column:screen-start/screen-end;grid-row:contents-bottom/page-bottom}.page-columns .column-body{grid-column:body-content-start/body-content-end}.page-columns .column-body-fullbleed{grid-column:body-start/body-end}.page-columns .column-body-outset{grid-column:body-start-outset/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset table{background:#fff}.page-columns .column-body-outset-left{grid-column:body-start-outset/body-content-end;z-index:998;opacity:.999}.page-columns .column-body-outset-left table{background:#fff}.page-columns .column-body-outset-right{grid-column:body-content-start/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset-right table{background:#fff}.page-columns .column-page{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-page table{background:#fff}.page-columns .column-page-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset table{background:#fff}.page-columns .column-page-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-inset-left table{background:#fff}.page-columns .column-page-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset-right figcaption table{background:#fff}.page-columns .column-page-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-left table{background:#fff}.page-columns .column-page-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-page-right figcaption table{background:#fff}#quarto-content.page-columns #quarto-margin-sidebar,#quarto-content.page-columns #quarto-sidebar{z-index:1}@media(max-width: 991.98px){#quarto-content.page-columns #quarto-margin-sidebar.collapse,#quarto-content.page-columns #quarto-sidebar.collapse,#quarto-content.page-columns #quarto-margin-sidebar.collapsing,#quarto-content.page-columns #quarto-sidebar.collapsing{z-index:1055}}#quarto-content.page-columns main.column-page,#quarto-content.page-columns main.column-page-right,#quarto-content.page-columns main.column-page-left{z-index:0}.page-columns .column-screen-inset{grid-column:screen-start-inset/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:screen-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:screen-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:screen-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:screen-start/screen-end;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}.zindex-content{z-index:998;opacity:.999}.zindex-modal{z-index:1055;opacity:.999}.zindex-over-content{z-index:999;opacity:.999}img.img-fluid.column-screen,img.img-fluid.column-screen-inset-shaded,img.img-fluid.column-screen-inset,img.img-fluid.column-screen-inset-left,img.img-fluid.column-screen-inset-right,img.img-fluid.column-screen-left,img.img-fluid.column-screen-right{width:100%}@media(min-width: 992px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.column-sidebar{grid-column:page-start/body-start !important;z-index:998}.column-leftmargin{grid-column:screen-start-inset/body-start !important;z-index:998}.no-row-height{height:1em;overflow:visible}}@media(max-width: 991.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.no-row-height{height:1em;overflow:visible}.page-columns.page-full{overflow:visible}.page-columns.toc-left .margin-caption,.page-columns.toc-left div.aside,.page-columns.toc-left aside:not(.footnotes):not(.sidebar),.page-columns.toc-left .column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.page-columns.toc-left .no-row-height{height:initial;overflow:initial}}@media(max-width: 767.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.no-row-height{height:initial;overflow:initial}#quarto-margin-sidebar{display:none}#quarto-sidebar-toc-left{display:none}.hidden-sm{display:none}}.panel-grid{display:grid;grid-template-rows:repeat(1, 1fr);grid-template-columns:repeat(24, 1fr);gap:1em}.panel-grid .g-col-1{grid-column:auto/span 1}.panel-grid .g-col-2{grid-column:auto/span 2}.panel-grid .g-col-3{grid-column:auto/span 3}.panel-grid .g-col-4{grid-column:auto/span 4}.panel-grid .g-col-5{grid-column:auto/span 5}.panel-grid .g-col-6{grid-column:auto/span 6}.panel-grid .g-col-7{grid-column:auto/span 7}.panel-grid .g-col-8{grid-column:auto/span 8}.panel-grid .g-col-9{grid-column:auto/span 9}.panel-grid .g-col-10{grid-column:auto/span 10}.panel-grid .g-col-11{grid-column:auto/span 11}.panel-grid .g-col-12{grid-column:auto/span 12}.panel-grid .g-col-13{grid-column:auto/span 13}.panel-grid .g-col-14{grid-column:auto/span 14}.panel-grid .g-col-15{grid-column:auto/span 15}.panel-grid .g-col-16{grid-column:auto/span 16}.panel-grid .g-col-17{grid-column:auto/span 17}.panel-grid .g-col-18{grid-column:auto/span 18}.panel-grid .g-col-19{grid-column:auto/span 19}.panel-grid .g-col-20{grid-column:auto/span 20}.panel-grid .g-col-21{grid-column:auto/span 21}.panel-grid .g-col-22{grid-column:auto/span 22}.panel-grid .g-col-23{grid-column:auto/span 23}.panel-grid .g-col-24{grid-column:auto/span 24}.panel-grid .g-start-1{grid-column-start:1}.panel-grid .g-start-2{grid-column-start:2}.panel-grid .g-start-3{grid-column-start:3}.panel-grid .g-start-4{grid-column-start:4}.panel-grid .g-start-5{grid-column-start:5}.panel-grid .g-start-6{grid-column-start:6}.panel-grid .g-start-7{grid-column-start:7}.panel-grid .g-start-8{grid-column-start:8}.panel-grid .g-start-9{grid-column-start:9}.panel-grid .g-start-10{grid-column-start:10}.panel-grid .g-start-11{grid-column-start:11}.panel-grid .g-start-12{grid-column-start:12}.panel-grid .g-start-13{grid-column-start:13}.panel-grid .g-start-14{grid-column-start:14}.panel-grid .g-start-15{grid-column-start:15}.panel-grid .g-start-16{grid-column-start:16}.panel-grid .g-start-17{grid-column-start:17}.panel-grid .g-start-18{grid-column-start:18}.panel-grid .g-start-19{grid-column-start:19}.panel-grid .g-start-20{grid-column-start:20}.panel-grid .g-start-21{grid-column-start:21}.panel-grid .g-start-22{grid-column-start:22}.panel-grid .g-start-23{grid-column-start:23}@media(min-width: 576px){.panel-grid .g-col-sm-1{grid-column:auto/span 1}.panel-grid .g-col-sm-2{grid-column:auto/span 2}.panel-grid .g-col-sm-3{grid-column:auto/span 3}.panel-grid .g-col-sm-4{grid-column:auto/span 4}.panel-grid .g-col-sm-5{grid-column:auto/span 5}.panel-grid .g-col-sm-6{grid-column:auto/span 6}.panel-grid .g-col-sm-7{grid-column:auto/span 7}.panel-grid .g-col-sm-8{grid-column:auto/span 8}.panel-grid .g-col-sm-9{grid-column:auto/span 9}.panel-grid .g-col-sm-10{grid-column:auto/span 10}.panel-grid .g-col-sm-11{grid-column:auto/span 11}.panel-grid .g-col-sm-12{grid-column:auto/span 12}.panel-grid .g-col-sm-13{grid-column:auto/span 13}.panel-grid .g-col-sm-14{grid-column:auto/span 14}.panel-grid .g-col-sm-15{grid-column:auto/span 15}.panel-grid .g-col-sm-16{grid-column:auto/span 16}.panel-grid .g-col-sm-17{grid-column:auto/span 17}.panel-grid .g-col-sm-18{grid-column:auto/span 18}.panel-grid .g-col-sm-19{grid-column:auto/span 19}.panel-grid .g-col-sm-20{grid-column:auto/span 20}.panel-grid .g-col-sm-21{grid-column:auto/span 21}.panel-grid .g-col-sm-22{grid-column:auto/span 22}.panel-grid .g-col-sm-23{grid-column:auto/span 23}.panel-grid .g-col-sm-24{grid-column:auto/span 24}.panel-grid .g-start-sm-1{grid-column-start:1}.panel-grid .g-start-sm-2{grid-column-start:2}.panel-grid .g-start-sm-3{grid-column-start:3}.panel-grid .g-start-sm-4{grid-column-start:4}.panel-grid .g-start-sm-5{grid-column-start:5}.panel-grid .g-start-sm-6{grid-column-start:6}.panel-grid .g-start-sm-7{grid-column-start:7}.panel-grid .g-start-sm-8{grid-column-start:8}.panel-grid .g-start-sm-9{grid-column-start:9}.panel-grid .g-start-sm-10{grid-column-start:10}.panel-grid .g-start-sm-11{grid-column-start:11}.panel-grid .g-start-sm-12{grid-column-start:12}.panel-grid .g-start-sm-13{grid-column-start:13}.panel-grid .g-start-sm-14{grid-column-start:14}.panel-grid .g-start-sm-15{grid-column-start:15}.panel-grid .g-start-sm-16{grid-column-start:16}.panel-grid .g-start-sm-17{grid-column-start:17}.panel-grid .g-start-sm-18{grid-column-start:18}.panel-grid .g-start-sm-19{grid-column-start:19}.panel-grid .g-start-sm-20{grid-column-start:20}.panel-grid .g-start-sm-21{grid-column-start:21}.panel-grid .g-start-sm-22{grid-column-start:22}.panel-grid .g-start-sm-23{grid-column-start:23}}@media(min-width: 768px){.panel-grid .g-col-md-1{grid-column:auto/span 1}.panel-grid .g-col-md-2{grid-column:auto/span 2}.panel-grid .g-col-md-3{grid-column:auto/span 3}.panel-grid .g-col-md-4{grid-column:auto/span 4}.panel-grid .g-col-md-5{grid-column:auto/span 5}.panel-grid .g-col-md-6{grid-column:auto/span 6}.panel-grid .g-col-md-7{grid-column:auto/span 7}.panel-grid .g-col-md-8{grid-column:auto/span 8}.panel-grid .g-col-md-9{grid-column:auto/span 9}.panel-grid .g-col-md-10{grid-column:auto/span 10}.panel-grid .g-col-md-11{grid-column:auto/span 11}.panel-grid .g-col-md-12{grid-column:auto/span 12}.panel-grid .g-col-md-13{grid-column:auto/span 13}.panel-grid .g-col-md-14{grid-column:auto/span 14}.panel-grid .g-col-md-15{grid-column:auto/span 15}.panel-grid .g-col-md-16{grid-column:auto/span 16}.panel-grid .g-col-md-17{grid-column:auto/span 17}.panel-grid .g-col-md-18{grid-column:auto/span 18}.panel-grid .g-col-md-19{grid-column:auto/span 19}.panel-grid .g-col-md-20{grid-column:auto/span 20}.panel-grid .g-col-md-21{grid-column:auto/span 21}.panel-grid .g-col-md-22{grid-column:auto/span 22}.panel-grid .g-col-md-23{grid-column:auto/span 23}.panel-grid .g-col-md-24{grid-column:auto/span 24}.panel-grid .g-start-md-1{grid-column-start:1}.panel-grid .g-start-md-2{grid-column-start:2}.panel-grid .g-start-md-3{grid-column-start:3}.panel-grid .g-start-md-4{grid-column-start:4}.panel-grid .g-start-md-5{grid-column-start:5}.panel-grid .g-start-md-6{grid-column-start:6}.panel-grid .g-start-md-7{grid-column-start:7}.panel-grid .g-start-md-8{grid-column-start:8}.panel-grid .g-start-md-9{grid-column-start:9}.panel-grid .g-start-md-10{grid-column-start:10}.panel-grid .g-start-md-11{grid-column-start:11}.panel-grid .g-start-md-12{grid-column-start:12}.panel-grid .g-start-md-13{grid-column-start:13}.panel-grid .g-start-md-14{grid-column-start:14}.panel-grid .g-start-md-15{grid-column-start:15}.panel-grid .g-start-md-16{grid-column-start:16}.panel-grid .g-start-md-17{grid-column-start:17}.panel-grid .g-start-md-18{grid-column-start:18}.panel-grid .g-start-md-19{grid-column-start:19}.panel-grid .g-start-md-20{grid-column-start:20}.panel-grid .g-start-md-21{grid-column-start:21}.panel-grid .g-start-md-22{grid-column-start:22}.panel-grid .g-start-md-23{grid-column-start:23}}@media(min-width: 992px){.panel-grid .g-col-lg-1{grid-column:auto/span 1}.panel-grid .g-col-lg-2{grid-column:auto/span 2}.panel-grid .g-col-lg-3{grid-column:auto/span 3}.panel-grid .g-col-lg-4{grid-column:auto/span 4}.panel-grid .g-col-lg-5{grid-column:auto/span 5}.panel-grid .g-col-lg-6{grid-column:auto/span 6}.panel-grid .g-col-lg-7{grid-column:auto/span 7}.panel-grid .g-col-lg-8{grid-column:auto/span 8}.panel-grid .g-col-lg-9{grid-column:auto/span 9}.panel-grid .g-col-lg-10{grid-column:auto/span 10}.panel-grid .g-col-lg-11{grid-column:auto/span 11}.panel-grid .g-col-lg-12{grid-column:auto/span 12}.panel-grid .g-col-lg-13{grid-column:auto/span 13}.panel-grid .g-col-lg-14{grid-column:auto/span 14}.panel-grid .g-col-lg-15{grid-column:auto/span 15}.panel-grid .g-col-lg-16{grid-column:auto/span 16}.panel-grid .g-col-lg-17{grid-column:auto/span 17}.panel-grid .g-col-lg-18{grid-column:auto/span 18}.panel-grid .g-col-lg-19{grid-column:auto/span 19}.panel-grid .g-col-lg-20{grid-column:auto/span 20}.panel-grid .g-col-lg-21{grid-column:auto/span 21}.panel-grid .g-col-lg-22{grid-column:auto/span 22}.panel-grid .g-col-lg-23{grid-column:auto/span 23}.panel-grid .g-col-lg-24{grid-column:auto/span 24}.panel-grid .g-start-lg-1{grid-column-start:1}.panel-grid .g-start-lg-2{grid-column-start:2}.panel-grid .g-start-lg-3{grid-column-start:3}.panel-grid .g-start-lg-4{grid-column-start:4}.panel-grid .g-start-lg-5{grid-column-start:5}.panel-grid .g-start-lg-6{grid-column-start:6}.panel-grid .g-start-lg-7{grid-column-start:7}.panel-grid .g-start-lg-8{grid-column-start:8}.panel-grid .g-start-lg-9{grid-column-start:9}.panel-grid .g-start-lg-10{grid-column-start:10}.panel-grid .g-start-lg-11{grid-column-start:11}.panel-grid .g-start-lg-12{grid-column-start:12}.panel-grid .g-start-lg-13{grid-column-start:13}.panel-grid .g-start-lg-14{grid-column-start:14}.panel-grid .g-start-lg-15{grid-column-start:15}.panel-grid .g-start-lg-16{grid-column-start:16}.panel-grid .g-start-lg-17{grid-column-start:17}.panel-grid .g-start-lg-18{grid-column-start:18}.panel-grid .g-start-lg-19{grid-column-start:19}.panel-grid .g-start-lg-20{grid-column-start:20}.panel-grid .g-start-lg-21{grid-column-start:21}.panel-grid .g-start-lg-22{grid-column-start:22}.panel-grid .g-start-lg-23{grid-column-start:23}}@media(min-width: 1200px){.panel-grid .g-col-xl-1{grid-column:auto/span 1}.panel-grid .g-col-xl-2{grid-column:auto/span 2}.panel-grid .g-col-xl-3{grid-column:auto/span 3}.panel-grid .g-col-xl-4{grid-column:auto/span 4}.panel-grid .g-col-xl-5{grid-column:auto/span 5}.panel-grid .g-col-xl-6{grid-column:auto/span 6}.panel-grid .g-col-xl-7{grid-column:auto/span 7}.panel-grid .g-col-xl-8{grid-column:auto/span 8}.panel-grid .g-col-xl-9{grid-column:auto/span 9}.panel-grid .g-col-xl-10{grid-column:auto/span 10}.panel-grid .g-col-xl-11{grid-column:auto/span 11}.panel-grid .g-col-xl-12{grid-column:auto/span 12}.panel-grid .g-col-xl-13{grid-column:auto/span 13}.panel-grid .g-col-xl-14{grid-column:auto/span 14}.panel-grid .g-col-xl-15{grid-column:auto/span 15}.panel-grid .g-col-xl-16{grid-column:auto/span 16}.panel-grid .g-col-xl-17{grid-column:auto/span 17}.panel-grid .g-col-xl-18{grid-column:auto/span 18}.panel-grid .g-col-xl-19{grid-column:auto/span 19}.panel-grid .g-col-xl-20{grid-column:auto/span 20}.panel-grid .g-col-xl-21{grid-column:auto/span 21}.panel-grid .g-col-xl-22{grid-column:auto/span 22}.panel-grid .g-col-xl-23{grid-column:auto/span 23}.panel-grid .g-col-xl-24{grid-column:auto/span 24}.panel-grid .g-start-xl-1{grid-column-start:1}.panel-grid .g-start-xl-2{grid-column-start:2}.panel-grid .g-start-xl-3{grid-column-start:3}.panel-grid .g-start-xl-4{grid-column-start:4}.panel-grid .g-start-xl-5{grid-column-start:5}.panel-grid .g-start-xl-6{grid-column-start:6}.panel-grid .g-start-xl-7{grid-column-start:7}.panel-grid .g-start-xl-8{grid-column-start:8}.panel-grid .g-start-xl-9{grid-column-start:9}.panel-grid .g-start-xl-10{grid-column-start:10}.panel-grid .g-start-xl-11{grid-column-start:11}.panel-grid .g-start-xl-12{grid-column-start:12}.panel-grid .g-start-xl-13{grid-column-start:13}.panel-grid .g-start-xl-14{grid-column-start:14}.panel-grid .g-start-xl-15{grid-column-start:15}.panel-grid .g-start-xl-16{grid-column-start:16}.panel-grid .g-start-xl-17{grid-column-start:17}.panel-grid .g-start-xl-18{grid-column-start:18}.panel-grid .g-start-xl-19{grid-column-start:19}.panel-grid .g-start-xl-20{grid-column-start:20}.panel-grid .g-start-xl-21{grid-column-start:21}.panel-grid .g-start-xl-22{grid-column-start:22}.panel-grid .g-start-xl-23{grid-column-start:23}}@media(min-width: 1400px){.panel-grid .g-col-xxl-1{grid-column:auto/span 1}.panel-grid .g-col-xxl-2{grid-column:auto/span 2}.panel-grid .g-col-xxl-3{grid-column:auto/span 3}.panel-grid .g-col-xxl-4{grid-column:auto/span 4}.panel-grid .g-col-xxl-5{grid-column:auto/span 5}.panel-grid .g-col-xxl-6{grid-column:auto/span 6}.panel-grid .g-col-xxl-7{grid-column:auto/span 7}.panel-grid .g-col-xxl-8{grid-column:auto/span 8}.panel-grid .g-col-xxl-9{grid-column:auto/span 9}.panel-grid .g-col-xxl-10{grid-column:auto/span 10}.panel-grid .g-col-xxl-11{grid-column:auto/span 11}.panel-grid .g-col-xxl-12{grid-column:auto/span 12}.panel-grid .g-col-xxl-13{grid-column:auto/span 13}.panel-grid .g-col-xxl-14{grid-column:auto/span 14}.panel-grid .g-col-xxl-15{grid-column:auto/span 15}.panel-grid .g-col-xxl-16{grid-column:auto/span 16}.panel-grid .g-col-xxl-17{grid-column:auto/span 17}.panel-grid .g-col-xxl-18{grid-column:auto/span 18}.panel-grid .g-col-xxl-19{grid-column:auto/span 19}.panel-grid .g-col-xxl-20{grid-column:auto/span 20}.panel-grid .g-col-xxl-21{grid-column:auto/span 21}.panel-grid .g-col-xxl-22{grid-column:auto/span 22}.panel-grid .g-col-xxl-23{grid-column:auto/span 23}.panel-grid .g-col-xxl-24{grid-column:auto/span 24}.panel-grid .g-start-xxl-1{grid-column-start:1}.panel-grid .g-start-xxl-2{grid-column-start:2}.panel-grid .g-start-xxl-3{grid-column-start:3}.panel-grid .g-start-xxl-4{grid-column-start:4}.panel-grid .g-start-xxl-5{grid-column-start:5}.panel-grid .g-start-xxl-6{grid-column-start:6}.panel-grid .g-start-xxl-7{grid-column-start:7}.panel-grid .g-start-xxl-8{grid-column-start:8}.panel-grid .g-start-xxl-9{grid-column-start:9}.panel-grid .g-start-xxl-10{grid-column-start:10}.panel-grid .g-start-xxl-11{grid-column-start:11}.panel-grid .g-start-xxl-12{grid-column-start:12}.panel-grid .g-start-xxl-13{grid-column-start:13}.panel-grid .g-start-xxl-14{grid-column-start:14}.panel-grid .g-start-xxl-15{grid-column-start:15}.panel-grid .g-start-xxl-16{grid-column-start:16}.panel-grid .g-start-xxl-17{grid-column-start:17}.panel-grid .g-start-xxl-18{grid-column-start:18}.panel-grid .g-start-xxl-19{grid-column-start:19}.panel-grid .g-start-xxl-20{grid-column-start:20}.panel-grid .g-start-xxl-21{grid-column-start:21}.panel-grid .g-start-xxl-22{grid-column-start:22}.panel-grid .g-start-xxl-23{grid-column-start:23}}main{margin-top:1em;margin-bottom:1em}h1,.h1,h2,.h2{color:inherit;margin-top:2rem;margin-bottom:1rem;font-weight:600}h1.title,.title.h1{margin-top:0}main.content>section:first-of-type>h2:first-child,main.content>section:first-of-type>.h2:first-child{margin-top:0}h2,.h2{border-bottom:1px solid #dee2e6;padding-bottom:.5rem}h3,.h3{font-weight:600}h3,.h3,h4,.h4{opacity:.9;margin-top:1.5rem}h5,.h5,h6,.h6{opacity:.9}.header-section-number{color:#6d7a86}.nav-link.active .header-section-number{color:inherit}mark,.mark{padding:0em}.panel-caption,.figure-caption,.subfigure-caption,.table-caption,figcaption,caption{font-size:.9rem;color:#6d7a86}.quarto-layout-cell[data-ref-parent] caption{color:#6d7a86}.column-margin figcaption,.margin-caption,div.aside,aside,.column-margin{color:#6d7a86;font-size:.825rem}.panel-caption.margin-caption{text-align:inherit}.column-margin.column-container p{margin-bottom:0}.column-margin.column-container>*:not(.collapse):first-child{padding-bottom:.5em;display:block}.column-margin.column-container>*:not(.collapse):not(:first-child){padding-top:.5em;padding-bottom:.5em;display:block}.column-margin.column-container>*.collapse:not(.show){display:none}@media(min-width: 768px){.column-margin.column-container .callout-margin-content:first-child{margin-top:4.5em}.column-margin.column-container .callout-margin-content-simple:first-child{margin-top:3.5em}}.margin-caption>*{padding-top:.5em;padding-bottom:.5em}@media(max-width: 767.98px){.quarto-layout-row{flex-direction:column}}.nav-tabs .nav-item{margin-top:1px;cursor:pointer}.tab-content{margin-top:0px;border-left:#dee2e6 1px solid;border-right:#dee2e6 1px solid;border-bottom:#dee2e6 1px solid;margin-left:0;padding:1em;margin-bottom:1em}@media(max-width: 767.98px){.layout-sidebar{margin-left:0;margin-right:0}}.panel-sidebar,.panel-sidebar .form-control,.panel-input,.panel-input .form-control,.selectize-dropdown{font-size:.9rem}.panel-sidebar .form-control,.panel-input .form-control{padding-top:.1rem}.tab-pane div.sourceCode{margin-top:0px}.tab-pane>p{padding-top:0}.tab-pane>p:nth-child(1){padding-top:0}.tab-pane>p:last-child{margin-bottom:0}.tab-pane>pre:last-child{margin-bottom:0}.tab-content>.tab-pane:not(.active){display:none !important}div.sourceCode{background-color:rgba(233,236,239,.65);border:1px solid rgba(233,236,239,.65);border-radius:.25rem}pre.sourceCode{background-color:rgba(0,0,0,0)}pre.sourceCode{border:none;font-size:.875em;overflow:visible !important;padding:.4em}.callout pre.sourceCode{padding-left:0}div.sourceCode{overflow-y:hidden}.callout div.sourceCode{margin-left:initial}.blockquote{font-size:inherit;padding-left:1rem;padding-right:1.5rem;color:#6d7a86}.blockquote h1:first-child,.blockquote .h1:first-child,.blockquote h2:first-child,.blockquote .h2:first-child,.blockquote h3:first-child,.blockquote .h3:first-child,.blockquote h4:first-child,.blockquote .h4:first-child,.blockquote h5:first-child,.blockquote .h5:first-child{margin-top:0}pre{background-color:initial;padding:initial;border:initial}p pre code:not(.sourceCode),li pre code:not(.sourceCode),pre code:not(.sourceCode){background-color:initial}p code:not(.sourceCode),li code:not(.sourceCode),td code:not(.sourceCode){background-color:#f8f9fa;padding:.2em}nav p code:not(.sourceCode),nav li code:not(.sourceCode),nav td code:not(.sourceCode){background-color:rgba(0,0,0,0);padding:0}td code:not(.sourceCode){white-space:pre-wrap}#quarto-embedded-source-code-modal>.modal-dialog{max-width:1000px;padding-left:1.75rem;padding-right:1.75rem}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body{padding:0}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body div.sourceCode{margin:0;padding:.2rem .2rem;border-radius:0px;border:none}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-header{padding:.7rem}.code-tools-button{font-size:1rem;padding:.15rem .15rem;margin-left:5px;color:#6c757d;background-color:rgba(0,0,0,0);transition:initial;cursor:pointer}.code-tools-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}.code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}.sidebar{will-change:top;transition:top 200ms linear;position:sticky;overflow-y:auto;padding-top:1.2em;max-height:100vh}.sidebar.toc-left,.sidebar.margin-sidebar{top:0px;padding-top:1em}.sidebar.quarto-banner-title-block-sidebar>*{padding-top:1.65em}figure .quarto-notebook-link{margin-top:.5em}.quarto-notebook-link{font-size:.75em;color:#6c757d;margin-bottom:1em;text-decoration:none;display:block}.quarto-notebook-link:hover{text-decoration:underline;color:#2761e3}.quarto-notebook-link::before{display:inline-block;height:.75rem;width:.75rem;margin-bottom:0em;margin-right:.25em;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:.75rem .75rem}.toc-actions i.bi,.quarto-code-links i.bi,.quarto-other-links i.bi,.quarto-alternate-notebooks i.bi,.quarto-alternate-formats i.bi{margin-right:.4em;font-size:.8rem}.quarto-other-links-text-target .quarto-code-links i.bi,.quarto-other-links-text-target .quarto-other-links i.bi{margin-right:.2em}.quarto-other-formats-text-target .quarto-alternate-formats i.bi{margin-right:.1em}.toc-actions i.bi.empty,.quarto-code-links i.bi.empty,.quarto-other-links i.bi.empty,.quarto-alternate-notebooks i.bi.empty,.quarto-alternate-formats i.bi.empty{padding-left:1em}.quarto-notebook h2,.quarto-notebook .h2{border-bottom:none}.quarto-notebook .cell-container{display:flex}.quarto-notebook .cell-container .cell{flex-grow:4}.quarto-notebook .cell-container .cell-decorator{padding-top:1.5em;padding-right:1em;text-align:right}.quarto-notebook .cell-container.code-fold .cell-decorator{padding-top:3em}.quarto-notebook .cell-code code{white-space:pre-wrap}.quarto-notebook .cell .cell-output-stderr pre code,.quarto-notebook .cell .cell-output-stdout pre code{white-space:pre-wrap;overflow-wrap:anywhere}.toc-actions,.quarto-alternate-formats,.quarto-other-links,.quarto-code-links,.quarto-alternate-notebooks{padding-left:0em}.sidebar .toc-actions a,.sidebar .quarto-alternate-formats a,.sidebar .quarto-other-links a,.sidebar .quarto-code-links a,.sidebar .quarto-alternate-notebooks a,.sidebar nav[role=doc-toc] a{text-decoration:none}.sidebar .toc-actions a:hover,.sidebar .quarto-other-links a:hover,.sidebar .quarto-code-links a:hover,.sidebar .quarto-alternate-formats a:hover,.sidebar .quarto-alternate-notebooks a:hover{color:#2761e3}.sidebar .toc-actions h2,.sidebar .toc-actions .h2,.sidebar .quarto-code-links h2,.sidebar .quarto-code-links .h2,.sidebar .quarto-other-links h2,.sidebar .quarto-other-links .h2,.sidebar .quarto-alternate-notebooks h2,.sidebar .quarto-alternate-notebooks .h2,.sidebar .quarto-alternate-formats h2,.sidebar .quarto-alternate-formats .h2,.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-weight:500;margin-bottom:.2rem;margin-top:.3rem;font-family:inherit;border-bottom:0;padding-bottom:0;padding-top:0px}.sidebar .toc-actions>h2,.sidebar .toc-actions>.h2,.sidebar .quarto-code-links>h2,.sidebar .quarto-code-links>.h2,.sidebar .quarto-other-links>h2,.sidebar .quarto-other-links>.h2,.sidebar .quarto-alternate-notebooks>h2,.sidebar .quarto-alternate-notebooks>.h2,.sidebar .quarto-alternate-formats>h2,.sidebar .quarto-alternate-formats>.h2{font-size:.8rem}.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-size:.875rem}.sidebar nav[role=doc-toc]>ul a{border-left:1px solid #e9ecef;padding-left:.6rem}.sidebar .toc-actions h2>ul a,.sidebar .toc-actions .h2>ul a,.sidebar .quarto-code-links h2>ul a,.sidebar .quarto-code-links .h2>ul a,.sidebar .quarto-other-links h2>ul a,.sidebar .quarto-other-links .h2>ul a,.sidebar .quarto-alternate-notebooks h2>ul a,.sidebar .quarto-alternate-notebooks .h2>ul a,.sidebar .quarto-alternate-formats h2>ul a,.sidebar .quarto-alternate-formats .h2>ul a{border-left:none;padding-left:.6rem}.sidebar .toc-actions ul a:empty,.sidebar .quarto-code-links ul a:empty,.sidebar .quarto-other-links ul a:empty,.sidebar .quarto-alternate-notebooks ul a:empty,.sidebar .quarto-alternate-formats ul a:empty,.sidebar nav[role=doc-toc]>ul a:empty{display:none}.sidebar .toc-actions ul,.sidebar .quarto-code-links ul,.sidebar .quarto-other-links ul,.sidebar .quarto-alternate-notebooks ul,.sidebar .quarto-alternate-formats ul{padding-left:0;list-style:none}.sidebar nav[role=doc-toc] ul{list-style:none;padding-left:0;list-style:none}.sidebar nav[role=doc-toc]>ul{margin-left:.45em}.quarto-margin-sidebar nav[role=doc-toc]{padding-left:.5em}.sidebar .toc-actions>ul,.sidebar .quarto-code-links>ul,.sidebar .quarto-other-links>ul,.sidebar .quarto-alternate-notebooks>ul,.sidebar .quarto-alternate-formats>ul{font-size:.8rem}.sidebar nav[role=doc-toc]>ul{font-size:.875rem}.sidebar .toc-actions ul li a,.sidebar .quarto-code-links ul li a,.sidebar .quarto-other-links ul li a,.sidebar .quarto-alternate-notebooks ul li a,.sidebar .quarto-alternate-formats ul li a,.sidebar nav[role=doc-toc]>ul li a{line-height:1.1rem;padding-bottom:.2rem;padding-top:.2rem;color:inherit}.sidebar nav[role=doc-toc] ul>li>ul>li>a{padding-left:1.2em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>a{padding-left:2.4em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>a{padding-left:3.6em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:4.8em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:6em}.sidebar nav[role=doc-toc] ul>li>a.active,.sidebar nav[role=doc-toc] ul>li>ul>li>a.active{border-left:1px solid #2761e3;color:#2761e3 !important}.sidebar nav[role=doc-toc] ul>li>a:hover,.sidebar nav[role=doc-toc] ul>li>ul>li>a:hover{color:#2761e3 !important}kbd,.kbd{color:#343a40;background-color:#f8f9fa;border:1px solid;border-radius:5px;border-color:#dee2e6}.quarto-appendix-contents div.hanging-indent{margin-left:0em}.quarto-appendix-contents div.hanging-indent div.csl-entry{margin-left:1em;text-indent:-1em}.citation a,.footnote-ref{text-decoration:none}.footnotes ol{padding-left:1em}.tippy-content>*{margin-bottom:.7em}.tippy-content>*:last-child{margin-bottom:0}.callout{margin-top:1.25rem;margin-bottom:1.25rem;border-radius:.25rem;overflow-wrap:break-word}.callout .callout-title-container{overflow-wrap:anywhere}.callout.callout-style-simple{padding:.4em .7em;border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout.callout-style-default{border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout .callout-body-container{flex-grow:1}.callout.callout-style-simple .callout-body{font-size:.9rem;font-weight:400}.callout.callout-style-default .callout-body{font-size:.9rem;font-weight:400}.callout:not(.no-icon).callout-titled.callout-style-simple .callout-body{padding-left:1.6em}.callout.callout-titled>.callout-header{padding-top:.2em;margin-bottom:-0.2em}.callout.callout-style-simple>div.callout-header{border-bottom:none;font-size:.9rem;font-weight:600;opacity:75%}.callout.callout-style-default>div.callout-header{border-bottom:none;font-weight:600;opacity:85%;font-size:.9rem;padding-left:.5em;padding-right:.5em}.callout.callout-style-default .callout-body{padding-left:.5em;padding-right:.5em}.callout.callout-style-default .callout-body>:first-child{padding-top:.5rem;margin-top:0}.callout>div.callout-header[data-bs-toggle=collapse]{cursor:pointer}.callout.callout-style-default .callout-header[aria-expanded=false],.callout.callout-style-default .callout-header[aria-expanded=true]{padding-top:0px;margin-bottom:0px;align-items:center}.callout.callout-titled .callout-body>:last-child:not(.sourceCode),.callout.callout-titled .callout-body>div>:last-child:not(.sourceCode){padding-bottom:.5rem;margin-bottom:0}.callout:not(.callout-titled) .callout-body>:first-child,.callout:not(.callout-titled) .callout-body>div>:first-child{margin-top:.25rem}.callout:not(.callout-titled) .callout-body>:last-child,.callout:not(.callout-titled) .callout-body>div>:last-child{margin-bottom:.2rem}.callout.callout-style-simple .callout-icon::before,.callout.callout-style-simple .callout-toggle::before{height:1rem;width:1rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.callout.callout-style-default .callout-icon::before,.callout.callout-style-default .callout-toggle::before{height:.9rem;width:.9rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:.9rem .9rem}.callout.callout-style-default .callout-toggle::before{margin-top:5px}.callout .callout-btn-toggle .callout-toggle::before{transition:transform .2s linear}.callout .callout-header[aria-expanded=false] .callout-toggle::before{transform:rotate(-90deg)}.callout .callout-header[aria-expanded=true] .callout-toggle::before{transform:none}.callout.callout-style-simple:not(.no-icon) div.callout-icon-container{padding-top:.2em;padding-right:.55em}.callout.callout-style-default:not(.no-icon) div.callout-icon-container{padding-top:.1em;padding-right:.35em}.callout.callout-style-default:not(.no-icon) div.callout-title-container{margin-top:-1px}.callout.callout-style-default.callout-caution:not(.no-icon) div.callout-icon-container{padding-top:.3em;padding-right:.35em}.callout>.callout-body>.callout-icon-container>.no-icon,.callout>.callout-header>.callout-icon-container>.no-icon{display:none}div.callout.callout{border-left-color:#6c757d}div.callout.callout-style-default>.callout-header{background-color:#6c757d}div.callout-note.callout{border-left-color:#2780e3}div.callout-note.callout-style-default>.callout-header{background-color:#e9f2fc}div.callout-note:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-tip.callout{border-left-color:#3fb618}div.callout-tip.callout-style-default>.callout-header{background-color:#ecf8e8}div.callout-tip:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-warning.callout{border-left-color:#ff7518}div.callout-warning.callout-style-default>.callout-header{background-color:#fff1e8}div.callout-warning:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-caution.callout{border-left-color:#f0ad4e}div.callout-caution.callout-style-default>.callout-header{background-color:#fef7ed}div.callout-caution:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-important.callout{border-left-color:#ff0039}div.callout-important.callout-style-default>.callout-header{background-color:#ffe6eb}div.callout-important:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important .callout-toggle::before{background-image:url('data:image/svg+xml,')}.quarto-toggle-container{display:flex;align-items:center}.quarto-reader-toggle .bi::before,.quarto-color-scheme-toggle .bi::before{display:inline-block;height:1rem;width:1rem;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.sidebar-navigation{padding-left:20px}.navbar{background-color:#f8f9fa;color:#545555}.navbar .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.quarto-sidebar-toggle{border-color:#dee2e6;border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem;border-style:solid;border-width:1px;overflow:hidden;border-top-width:0px;padding-top:0px !important}.quarto-sidebar-toggle-title{cursor:pointer;padding-bottom:2px;margin-left:.25em;text-align:center;font-weight:400;font-size:.775em}#quarto-content .quarto-sidebar-toggle{background:#fafafa}#quarto-content .quarto-sidebar-toggle-title{color:#343a40}.quarto-sidebar-toggle-icon{color:#dee2e6;margin-right:.5em;float:right;transition:transform .2s ease}.quarto-sidebar-toggle-icon::before{padding-top:5px}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-icon{transform:rotate(-180deg)}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-title{border-bottom:solid #dee2e6 1px}.quarto-sidebar-toggle-contents{background-color:#fff;padding-right:10px;padding-left:10px;margin-top:0px !important;transition:max-height .5s ease}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-contents{padding-top:1em;padding-bottom:10px}@media(max-width: 767.98px){.sidebar-menu-container{padding-bottom:5em}}.quarto-sidebar-toggle:not(.expanded) .quarto-sidebar-toggle-contents{padding-top:0px !important;padding-bottom:0px}nav[role=doc-toc]{z-index:1020}#quarto-sidebar>*,nav[role=doc-toc]>*{transition:opacity .1s ease,border .1s ease}#quarto-sidebar.slow>*,nav[role=doc-toc].slow>*{transition:opacity .4s ease,border .4s ease}.quarto-color-scheme-toggle:not(.alternate).top-right .bi::before{background-image:url('data:image/svg+xml,')}.quarto-color-scheme-toggle.alternate.top-right .bi::before{background-image:url('data:image/svg+xml,')}#quarto-appendix.default{border-top:1px solid #dee2e6}#quarto-appendix.default{background-color:#fff;padding-top:1.5em;margin-top:2em;z-index:998}#quarto-appendix.default .quarto-appendix-heading{margin-top:0;line-height:1.4em;font-weight:600;opacity:.9;border-bottom:none;margin-bottom:0}#quarto-appendix.default .footnotes ol,#quarto-appendix.default .footnotes ol li>p:last-of-type,#quarto-appendix.default .quarto-appendix-contents>p:last-of-type{margin-bottom:0}#quarto-appendix.default .footnotes ol{margin-left:.5em}#quarto-appendix.default .quarto-appendix-secondary-label{margin-bottom:.4em}#quarto-appendix.default .quarto-appendix-bibtex{font-size:.7em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-bibtex code.sourceCode{white-space:pre-wrap}#quarto-appendix.default .quarto-appendix-citeas{font-size:.9em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-heading{font-size:1em !important}#quarto-appendix.default *[role=doc-endnotes]>ol,#quarto-appendix.default .quarto-appendix-contents>*:not(h2):not(.h2){font-size:.9em}#quarto-appendix.default section{padding-bottom:1.5em}#quarto-appendix.default section *[role=doc-endnotes],#quarto-appendix.default section>*:not(a){opacity:.9;word-wrap:break-word}.btn.btn-quarto,div.cell-output-display .btn-quarto{--bs-btn-color: #cacccd;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #cacccd;--bs-btn-hover-bg: #52585d;--bs-btn-hover-border-color: #484e53;--bs-btn-focus-shadow-rgb: 75, 80, 85;--bs-btn-active-color: #fff;--bs-btn-active-bg: #5d6166;--bs-btn-active-border-color: #484e53;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}nav.quarto-secondary-nav.color-navbar{background-color:#f8f9fa;color:#545555}nav.quarto-secondary-nav.color-navbar h1,nav.quarto-secondary-nav.color-navbar .h1,nav.quarto-secondary-nav.color-navbar .quarto-btn-toggle{color:#545555}@media(max-width: 991.98px){body.nav-sidebar .quarto-title-banner{margin-bottom:0;padding-bottom:1em}body.nav-sidebar #title-block-header{margin-block-end:0}}p.subtitle{margin-top:.25em;margin-bottom:.5em}code a:any-link{color:inherit;text-decoration-color:#6c757d}/*! light */div.observablehq table thead tr th{background-color:var(--bs-body-bg)}input,button,select,optgroup,textarea{background-color:var(--bs-body-bg)}.code-annotated .code-copy-button{margin-right:1.25em;margin-top:0;padding-bottom:0;padding-top:3px}.code-annotation-gutter-bg{background-color:#fff}.code-annotation-gutter{background-color:rgba(233,236,239,.65)}.code-annotation-gutter,.code-annotation-gutter-bg{height:100%;width:calc(20px + .5em);position:absolute;top:0;right:0}dl.code-annotation-container-grid dt{margin-right:1em;margin-top:.25rem}dl.code-annotation-container-grid dt{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;color:#4b545c;border:solid #4b545c 1px;border-radius:50%;height:22px;width:22px;line-height:22px;font-size:11px;text-align:center;vertical-align:middle;text-decoration:none}dl.code-annotation-container-grid dt[data-target-cell]{cursor:pointer}dl.code-annotation-container-grid dt[data-target-cell].code-annotation-active{color:#fff;border:solid #aaa 1px;background-color:#aaa}pre.code-annotation-code{padding-top:0;padding-bottom:0}pre.code-annotation-code code{z-index:3}#code-annotation-line-highlight-gutter{width:100%;border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}#code-annotation-line-highlight{margin-left:-4em;width:calc(100% + 4em);border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}code.sourceCode .code-annotation-anchor.code-annotation-active{background-color:var(--quarto-hl-normal-color, #aaaaaa);border:solid var(--quarto-hl-normal-color, #aaaaaa) 1px;color:#e9ecef;font-weight:bolder}code.sourceCode .code-annotation-anchor{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;color:var(--quarto-hl-co-color);border:solid var(--quarto-hl-co-color) 1px;border-radius:50%;height:18px;width:18px;font-size:9px;margin-top:2px}code.sourceCode button.code-annotation-anchor{padding:2px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none}code.sourceCode a.code-annotation-anchor{line-height:18px;text-align:center;vertical-align:middle;cursor:default;text-decoration:none}@media print{.page-columns .column-screen-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:page-start-inset/page-end-inset;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}}.quarto-video{margin-bottom:1em}.table{border-top:1px solid #ebedee;border-bottom:1px solid #ebedee}.table>thead{border-top-width:0;border-bottom:1px solid #b2bac1}.table a{word-break:break-word}.table>:not(caption)>*>*{background-color:unset;color:unset}#quarto-document-content .crosstalk-input .checkbox input[type=checkbox],#quarto-document-content .crosstalk-input .checkbox-inline input[type=checkbox]{position:unset;margin-top:unset;margin-left:unset}#quarto-document-content .row{margin-left:unset;margin-right:unset}.quarto-xref{white-space:nowrap}#quarto-draft-alert{margin-top:0px;margin-bottom:0px;padding:.3em;text-align:center;font-size:.9em}#quarto-draft-alert i{margin-right:.3em}a.external:after{content:"";background-image:url('data:image/svg+xml,');background-size:contain;background-repeat:no-repeat;background-position:center center;margin-left:.2em;padding-right:.75em}div.sourceCode code a.external:after{content:none}a.external:after:hover{cursor:pointer}.quarto-ext-icon{display:inline-block;font-size:.75em;padding-left:.3em}.code-with-filename .code-with-filename-file{margin-bottom:0;padding-bottom:2px;padding-top:2px;padding-left:.7em;border:var(--quarto-border-width) solid var(--quarto-border-color);border-radius:var(--quarto-border-radius);border-bottom:0;border-bottom-left-radius:0%;border-bottom-right-radius:0%}.code-with-filename div.sourceCode,.reveal .code-with-filename div.sourceCode{margin-top:0;border-top-left-radius:0%;border-top-right-radius:0%}.code-with-filename .code-with-filename-file pre{margin-bottom:0}.code-with-filename .code-with-filename-file{background-color:rgba(219,219,219,.8)}.quarto-dark .code-with-filename .code-with-filename-file{background-color:#555}.code-with-filename .code-with-filename-file strong{font-weight:400}.quarto-title-banner{margin-bottom:1em;color:#545555;background:#f8f9fa}.quarto-title-banner a{color:#545555}.quarto-title-banner h1,.quarto-title-banner .h1,.quarto-title-banner h2,.quarto-title-banner .h2{color:#545555}.quarto-title-banner .code-tools-button{color:#878888}.quarto-title-banner .code-tools-button:hover{color:#545555}.quarto-title-banner .code-tools-button>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .quarto-title .title{font-weight:600}.quarto-title-banner .quarto-categories{margin-top:.75em}@media(min-width: 992px){.quarto-title-banner{padding-top:2.5em;padding-bottom:2.5em}}@media(max-width: 991.98px){.quarto-title-banner{padding-top:1em;padding-bottom:1em}}@media(max-width: 767.98px){body.hypothesis-enabled #title-block-header>*{padding-right:20px}}main.quarto-banner-title-block>section:first-child>h2,main.quarto-banner-title-block>section:first-child>.h2,main.quarto-banner-title-block>section:first-child>h3,main.quarto-banner-title-block>section:first-child>.h3,main.quarto-banner-title-block>section:first-child>h4,main.quarto-banner-title-block>section:first-child>.h4{margin-top:0}.quarto-title .quarto-categories{display:flex;flex-wrap:wrap;row-gap:.5em;column-gap:.4em;padding-bottom:.5em;margin-top:.75em}.quarto-title .quarto-categories .quarto-category{padding:.25em .75em;font-size:.65em;text-transform:uppercase;border:solid 1px;border-radius:.25rem;opacity:.6}.quarto-title .quarto-categories .quarto-category a{color:inherit}.quarto-title-meta-container{display:grid;grid-template-columns:1fr auto}.quarto-title-meta-column-end{display:flex;flex-direction:column;padding-left:1em}.quarto-title-meta-column-end a .bi{margin-right:.3em}#title-block-header.quarto-title-block.default .quarto-title-meta{display:grid;grid-template-columns:repeat(2, 1fr);grid-column-gap:1em}#title-block-header.quarto-title-block.default .quarto-title .title{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-author-orcid img{margin-top:-0.2em;height:.8em;width:.8em}#title-block-header.quarto-title-block.default .quarto-title-author-email{opacity:.7}#title-block-header.quarto-title-block.default .quarto-description p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p,#title-block-header.quarto-title-block.default .quarto-title-authors p,#title-block-header.quarto-title-block.default .quarto-title-affiliations p{margin-bottom:.1em}#title-block-header.quarto-title-block.default .quarto-title-meta-heading{text-transform:uppercase;margin-top:1em;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-contents{font-size:.9em}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p.affiliation:last-of-type{margin-bottom:.1em}#title-block-header.quarto-title-block.default p.affiliation{margin-bottom:.1em}#title-block-header.quarto-title-block.default .keywords,#title-block-header.quarto-title-block.default .description,#title-block-header.quarto-title-block.default .abstract{margin-top:0}#title-block-header.quarto-title-block.default .keywords>p,#title-block-header.quarto-title-block.default .description>p,#title-block-header.quarto-title-block.default .abstract>p{font-size:.9em}#title-block-header.quarto-title-block.default .keywords>p:last-of-type,#title-block-header.quarto-title-block.default .description>p:last-of-type,#title-block-header.quarto-title-block.default .abstract>p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .keywords .block-title,#title-block-header.quarto-title-block.default .description .block-title,#title-block-header.quarto-title-block.default .abstract .block-title{margin-top:1em;text-transform:uppercase;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-author{display:grid;grid-template-columns:minmax(max-content, 1fr) 1fr;grid-column-gap:1em}.quarto-title-tools-only{display:flex;justify-content:right}body{-webkit-font-smoothing:antialiased}.badge.bg-light{color:#343a40}.progress .progress-bar{font-size:8px;line-height:8px} diff --git a/_book/site_libs/bootstrap/bootstrap.min.js b/_book/site_libs/bootstrap/bootstrap.min.js new file mode 100644 index 0000000..e8f21f7 --- /dev/null +++ b/_book/site_libs/bootstrap/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.3.1 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),s=t=>{t.dispatchEvent(new Event(i))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},g=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,_=(t,e,n=!0)=>{if(!n)return void g(t);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),g(t))};e.addEventListener(i,a),setTimeout((()=>{r||s(e)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=I(t);return C.has(o)||(o=t),[n,s,o]}function S(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return P(s,{delegateTarget:r}),n.oneOff&&N.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return P(n,{delegateTarget:t}),i.oneOff&&N.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function D(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function $(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&D(t,e,i,r.callable,r.delegationSelector)}function I(t){return t=t.replace(y,""),T[t]||t}const N={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))$(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(w,"");a&&!e.includes(s)||D(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;D(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==I(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=P(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function P(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function M(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function j(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const F={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${j(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${j(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=M(t.dataset[n])}return e},getDataAttribute:(t,e)=>M(t.getAttribute(`data-bs-${j(e)}`))};class H{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?F.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?F.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],r=o(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class W extends H{constructor(t,i){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),N.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.1"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return n(e)},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;N.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},q=".bs.alert",V=`close${q}`,K=`closed${q}`;class Q extends W{static get NAME(){return"alert"}close(){if(N.trigger(this._element,V).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),N.trigger(this._element,K),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}N.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U=".bs.swipe",G=`touchstart${U}`,J=`touchmove${U}`,Z=`touchend${U}`,tt=`pointerdown${U}`,et=`pointerup${U}`,it={endCallback:null,leftCallback:null,rightCallback:null},nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class st extends H{constructor(t,e){super(),this._element=t,t&&st.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return it}static get DefaultType(){return nt}static get NAME(){return"swipe"}dispose(){N.off(this._element,U)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),g(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&g(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(N.on(this._element,tt,(t=>this._start(t))),N.on(this._element,et,(t=>this._end(t))),this._element.classList.add("pointer-event")):(N.on(this._element,G,(t=>this._start(t))),N.on(this._element,J,(t=>this._move(t))),N.on(this._element,Z,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const ot=".bs.carousel",rt=".data-api",at="next",lt="prev",ct="left",ht="right",dt=`slide${ot}`,ut=`slid${ot}`,ft=`keydown${ot}`,pt=`mouseenter${ot}`,mt=`mouseleave${ot}`,gt=`dragstart${ot}`,_t=`load${ot}${rt}`,bt=`click${ot}${rt}`,vt="carousel",yt="active",wt=".active",At=".carousel-item",Et=wt+At,Tt={ArrowLeft:ht,ArrowRight:ct},Ct={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Ot={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class xt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===vt&&this.cycle()}static get Default(){return Ct}static get DefaultType(){return Ot}static get NAME(){return"carousel"}next(){this._slide(at)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(lt)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?N.one(this._element,ut,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void N.one(this._element,ut,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?at:lt;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&N.on(this._element,ft,(t=>this._keydown(t))),"hover"===this._config.pause&&(N.on(this._element,pt,(()=>this.pause())),N.on(this._element,mt,(()=>this._maybeEnableCycle()))),this._config.touch&&st.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))N.on(t,gt,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ct)),rightCallback:()=>this._slide(this._directionToOrder(ht)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new st(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Tt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(wt,this._indicatorsElement);e.classList.remove(yt),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(yt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===at,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>N.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(dt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(yt),i.classList.remove(yt,c,l),this._isSliding=!1,r(ut)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(Et,this._element)}_getItems(){return z.find(At,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===ct?lt:at:t===ct?at:lt}_orderToDirection(t){return p()?t===lt?ct:ht:t===lt?ht:ct}static jQueryInterface(t){return this.each((function(){const e=xt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}N.on(document,bt,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(vt))return;t.preventDefault();const i=xt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===F.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),N.on(window,_t,(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)xt.getOrCreateInstance(e)})),m(xt);const kt=".bs.collapse",Lt=`show${kt}`,St=`shown${kt}`,Dt=`hide${kt}`,$t=`hidden${kt}`,It=`click${kt}.data-api`,Nt="show",Pt="collapse",Mt="collapsing",jt=`:scope .${Pt} .${Pt}`,Ft='[data-bs-toggle="collapse"]',Ht={parent:null,toggle:!0},Wt={parent:"(null|element)",toggle:"boolean"};class Bt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(Ft);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Ht}static get DefaultType(){return Wt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Bt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(N.trigger(this._element,Lt).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Pt),this._element.classList.add(Mt),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt,Nt),this._element.style[e]="",N.trigger(this._element,St)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(N.trigger(this._element,Dt).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(Mt),this._element.classList.remove(Pt,Nt);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt),N.trigger(this._element,$t)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(Nt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Ft);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(jt,this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Bt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}N.on(document,It,Ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))Bt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(Bt);var zt="top",Rt="bottom",qt="right",Vt="left",Kt="auto",Qt=[zt,Rt,qt,Vt],Xt="start",Yt="end",Ut="clippingParents",Gt="viewport",Jt="popper",Zt="reference",te=Qt.reduce((function(t,e){return t.concat([e+"-"+Xt,e+"-"+Yt])}),[]),ee=[].concat(Qt,[Kt]).reduce((function(t,e){return t.concat([e,e+"-"+Xt,e+"-"+Yt])}),[]),ie="beforeRead",ne="read",se="afterRead",oe="beforeMain",re="main",ae="afterMain",le="beforeWrite",ce="write",he="afterWrite",de=[ie,ne,se,oe,re,ae,le,ce,he];function ue(t){return t?(t.nodeName||"").toLowerCase():null}function fe(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function pe(t){return t instanceof fe(t).Element||t instanceof Element}function me(t){return t instanceof fe(t).HTMLElement||t instanceof HTMLElement}function ge(t){return"undefined"!=typeof ShadowRoot&&(t instanceof fe(t).ShadowRoot||t instanceof ShadowRoot)}const _e={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];me(s)&&ue(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});me(n)&&ue(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function be(t){return t.split("-")[0]}var ve=Math.max,ye=Math.min,we=Math.round;function Ae(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ee(){return!/^((?!chrome|android).)*safari/i.test(Ae())}function Te(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&me(t)&&(s=t.offsetWidth>0&&we(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&we(n.height)/t.offsetHeight||1);var r=(pe(t)?fe(t):window).visualViewport,a=!Ee()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ce(t){var e=Te(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Oe(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ge(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function xe(t){return fe(t).getComputedStyle(t)}function ke(t){return["table","td","th"].indexOf(ue(t))>=0}function Le(t){return((pe(t)?t.ownerDocument:t.document)||window.document).documentElement}function Se(t){return"html"===ue(t)?t:t.assignedSlot||t.parentNode||(ge(t)?t.host:null)||Le(t)}function De(t){return me(t)&&"fixed"!==xe(t).position?t.offsetParent:null}function $e(t){for(var e=fe(t),i=De(t);i&&ke(i)&&"static"===xe(i).position;)i=De(i);return i&&("html"===ue(i)||"body"===ue(i)&&"static"===xe(i).position)?e:i||function(t){var e=/firefox/i.test(Ae());if(/Trident/i.test(Ae())&&me(t)&&"fixed"===xe(t).position)return null;var i=Se(t);for(ge(i)&&(i=i.host);me(i)&&["html","body"].indexOf(ue(i))<0;){var n=xe(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Ie(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ne(t,e,i){return ve(t,ye(e,i))}function Pe(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function Me(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const je={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=be(i.placement),l=Ie(a),c=[Vt,qt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Pe("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:Me(t,Qt))}(s.padding,i),d=Ce(o),u="y"===l?zt:Vt,f="y"===l?Rt:qt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=$e(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=Ne(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Oe(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Fe(t){return t.split("-")[1]}var He={top:"auto",right:"auto",bottom:"auto",left:"auto"};function We(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Vt,y=zt,w=window;if(c){var A=$e(i),E="clientHeight",T="clientWidth";A===fe(i)&&"static"!==xe(A=Le(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===zt||(s===Vt||s===qt)&&o===Yt)&&(y=Rt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Vt&&(s!==zt&&s!==Rt||o!==Yt)||(v=qt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&He),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:we(i*s)/s||0,y:we(n*s)/s||0}}({x:f,y:m},fe(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const Be={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:be(e.placement),variation:Fe(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,We(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,We(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ze={passive:!0};const Re={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=fe(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ze)})),a&&l.addEventListener("resize",i.update,ze),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ze)})),a&&l.removeEventListener("resize",i.update,ze)}},data:{}};var qe={left:"right",right:"left",bottom:"top",top:"bottom"};function Ve(t){return t.replace(/left|right|bottom|top/g,(function(t){return qe[t]}))}var Ke={start:"end",end:"start"};function Qe(t){return t.replace(/start|end/g,(function(t){return Ke[t]}))}function Xe(t){var e=fe(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ye(t){return Te(Le(t)).left+Xe(t).scrollLeft}function Ue(t){var e=xe(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ge(t){return["html","body","#document"].indexOf(ue(t))>=0?t.ownerDocument.body:me(t)&&Ue(t)?t:Ge(Se(t))}function Je(t,e){var i;void 0===e&&(e=[]);var n=Ge(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=fe(n),r=s?[o].concat(o.visualViewport||[],Ue(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Je(Se(r)))}function Ze(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ti(t,e,i){return e===Gt?Ze(function(t,e){var i=fe(t),n=Le(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ee();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ye(t),y:l}}(t,i)):pe(e)?function(t,e){var i=Te(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ze(function(t){var e,i=Le(t),n=Xe(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ve(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ve(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ye(t),l=-n.scrollTop;return"rtl"===xe(s||i).direction&&(a+=ve(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Le(t)))}function ei(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?be(s):null,r=s?Fe(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case zt:e={x:a,y:i.y-n.height};break;case Rt:e={x:a,y:i.y+i.height};break;case qt:e={x:i.x+i.width,y:l};break;case Vt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Ie(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Xt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Yt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ii(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Ut:a,c=i.rootBoundary,h=void 0===c?Gt:c,d=i.elementContext,u=void 0===d?Jt:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Pe("number"!=typeof g?g:Me(g,Qt)),b=u===Jt?Zt:Jt,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Je(Se(t)),i=["absolute","fixed"].indexOf(xe(t).position)>=0&&me(t)?$e(t):t;return pe(i)?e.filter((function(t){return pe(t)&&Oe(t,i)&&"body"!==ue(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=ti(t,i,n);return e.top=ve(s.top,e.top),e.right=ye(s.right,e.right),e.bottom=ye(s.bottom,e.bottom),e.left=ve(s.left,e.left),e}),ti(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(pe(y)?y:y.contextElement||Le(t.elements.popper),l,h,r),A=Te(t.elements.reference),E=ei({reference:A,element:v,strategy:"absolute",placement:s}),T=Ze(Object.assign({},v,E)),C=u===Jt?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Jt&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[qt,Rt].indexOf(t)>=0?1:-1,i=[zt,Rt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function ni(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ee:l,h=Fe(n),d=h?a?te:te.filter((function(t){return Fe(t)===h})):Qt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ii(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[be(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const si={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=be(g),b=l||(_!==g&&p?function(t){if(be(t)===Kt)return[];var e=Ve(t);return[Qe(t),e,Qe(e)]}(g):[Ve(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(be(i)===Kt?ni(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,S=L?"width":"height",D=ii(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?qt:Vt:k?Rt:zt;y[S]>w[S]&&($=Ve($));var I=Ve($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every((function(t){return t}))){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==P(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function oi(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ri(t){return[zt,qt,Rt,Vt].some((function(e){return t[e]>=0}))}const ai={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ii(e,{elementContext:"reference"}),a=ii(e,{altBoundary:!0}),l=oi(r,n),c=oi(a,s,o),h=ri(l),d=ri(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},li={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ee.reduce((function(t,i){return t[i]=function(t,e,i){var n=be(t),s=[Vt,zt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Vt,qt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ci={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ei({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},hi={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ii(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=be(e.placement),b=Fe(e.placement),v=!b,y=Ie(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?zt:Vt,D="y"===y?Rt:qt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],M=f?-T[$]/2:0,j=b===Xt?E[$]:T[$],F=b===Xt?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?Ce(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=Ne(0,E[$],W[$]),V=v?E[$]/2-M-q-z-O.mainAxis:j-q-z-O.mainAxis,K=v?-E[$]/2+M+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&$e(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=Ne(f?ye(N,I+V-Y-X):N,I,f?ve(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?zt:Vt,tt="x"===y?Rt:qt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[zt,Vt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=Ne(t,e,i);return n>i?i:n}(at,et,lt):Ne(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function di(t,e,i){void 0===i&&(i=!1);var n,s,o=me(e),r=me(e)&&function(t){var e=t.getBoundingClientRect(),i=we(e.width)/t.offsetWidth||1,n=we(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=Le(e),l=Te(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ue(e)||Ue(a))&&(c=(n=e)!==fe(n)&&me(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Xe(n)),me(e)?((h=Te(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ye(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function ui(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var fi={placement:"bottom",modifiers:[],strategy:"absolute"};function pi(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(F.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...g(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(Ni);for(const i of e){const e=qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ei,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ii)?this:z.prev(this,Ii)[0]||z.next(this,Ii)[0]||z.findOne(Ii,t.delegateTarget.parentNode),o=qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}N.on(document,Si,Ii,qi.dataApiKeydownHandler),N.on(document,Si,Pi,qi.dataApiKeydownHandler),N.on(document,Li,qi.clearMenus),N.on(document,Di,qi.clearMenus),N.on(document,Li,Ii,(function(t){t.preventDefault(),qi.getOrCreateInstance(this).toggle()})),m(qi);const Vi="backdrop",Ki="show",Qi=`mousedown.bs.${Vi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Yi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ui extends H{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return Vi}show(t){if(!this._config.isVisible)return void g(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(Ki),this._emulateAnimation((()=>{g(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),g(t)}))):g(t)}dispose(){this._isAppended&&(N.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),N.on(t,Qi,(()=>{g(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const Gi=".bs.focustrap",Ji=`focusin${Gi}`,Zi=`keydown.tab${Gi}`,tn="backward",en={autofocus:!0,trapElement:null},nn={autofocus:"boolean",trapElement:"element"};class sn extends H{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return en}static get DefaultType(){return nn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),N.off(document,Gi),N.on(document,Ji,(t=>this._handleFocusin(t))),N.on(document,Zi,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,N.off(document,Gi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===tn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?tn:"forward")}}const on=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",rn=".sticky-top",an="padding-right",ln="margin-right";class cn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,an,(e=>e+t)),this._setElementAttributes(on,an,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,an),this._resetElementAttributes(on,an),this._resetElementAttributes(rn,ln)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=F.getDataAttribute(t,e);null!==i?(F.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const hn=".bs.modal",dn=`hide${hn}`,un=`hidePrevented${hn}`,fn=`hidden${hn}`,pn=`show${hn}`,mn=`shown${hn}`,gn=`resize${hn}`,_n=`click.dismiss${hn}`,bn=`mousedown.dismiss${hn}`,vn=`keydown.dismiss${hn}`,yn=`click${hn}.data-api`,wn="modal-open",An="show",En="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},Cn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class On extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new cn,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return Cn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||N.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(wn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(N.trigger(this._element,dn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){N.off(window,hn),N.off(this._dialog,hn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ui({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,N.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){N.on(this._element,vn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),N.on(window,gn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),N.on(this._element,bn,(t=>{N.one(this._element,_n,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(wn),this._resetAdjustments(),this._scrollBar.reset(),N.trigger(this._element,fn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(N.trigger(this._element,un).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(En)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(En),this._queueCallback((()=>{this._element.classList.remove(En),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=On.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}N.on(document,yn,'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),N.one(e,pn,(t=>{t.defaultPrevented||N.one(e,fn,(()=>{a(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&On.getInstance(i).hide(),On.getOrCreateInstance(e).toggle(this)})),R(On),m(On);const xn=".bs.offcanvas",kn=".data-api",Ln=`load${xn}${kn}`,Sn="show",Dn="showing",$n="hiding",In=".offcanvas.show",Nn=`show${xn}`,Pn=`shown${xn}`,Mn=`hide${xn}`,jn=`hidePrevented${xn}`,Fn=`hidden${xn}`,Hn=`resize${xn}`,Wn=`click${xn}${kn}`,Bn=`keydown.dismiss${xn}`,zn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class qn extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||N.trigger(this._element,Nn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new cn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Dn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Sn),this._element.classList.remove(Dn),N.trigger(this._element,Pn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(N.trigger(this._element,Mn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Sn,$n),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new cn).reset(),N.trigger(this._element,Fn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ui({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():N.trigger(this._element,jn)}:null})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_addEventListeners(){N.on(this._element,Bn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():N.trigger(this._element,jn))}))}static jQueryInterface(t){return this.each((function(){const e=qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}N.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;N.one(e,Fn,(()=>{a(this)&&this.focus()}));const i=z.findOne(In);i&&i!==e&&qn.getInstance(i).hide(),qn.getOrCreateInstance(e).toggle(this)})),N.on(window,Ln,(()=>{for(const t of z.find(In))qn.getOrCreateInstance(t).show()})),N.on(window,Hn,(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&qn.getOrCreateInstance(t).hide()})),R(qn),m(qn);const Vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Yn={allowList:Vn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"

"},Un={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Gn={entry:"(string|element|function|null)",selector:"(string|element)"};class Jn extends H{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Yn}static get DefaultType(){return Un}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Gn)}_setContent(t,e,i){const n=z.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return g(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Zn=new Set(["sanitize","allowList","sanitizeFn"]),ts="fade",es="show",is=".modal",ns="hide.bs.modal",ss="hover",os="focus",rs={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},as={allowList:Vn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},ls={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cs extends W{constructor(t,e){if(void 0===vi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),N.off(this._element.closest(is),ns,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=N.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),N.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._queueCallback((()=>{N.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!N.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger[os]=!1,this._activeTrigger[ss]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),N.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ts,es),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ts),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Jn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ts)}_isShown(){return this.tip&&this.tip.classList.contains(es)}_createPopper(t){const e=g(this._config.placement,[this,t,this._element]),i=rs[e.toUpperCase()];return bi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return g(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...g(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)N.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ss?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ss?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");N.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?os:ss]=!0,e._enter()})),N.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?os:ss]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},N.on(this._element.closest(is),ns,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=F.getDataAttributes(this._element);for(const t of Object.keys(e))Zn.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(cs);const hs={...cs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},ds={...cs.DefaultType,content:"(null|string|element|function)"};class us extends cs{static get Default(){return hs}static get DefaultType(){return ds}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=us.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(us);const fs=".bs.scrollspy",ps=`activate${fs}`,ms=`click${fs}`,gs=`load${fs}.data-api`,_s="active",bs="[href]",vs=".nav-link",ys=`${vs}, .nav-item > ${vs}, .list-group-item`,ws={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Es extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ws}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(N.off(this._config.target,ms),N.on(this._config.target,ms,bs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=z.find(bs,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=z.findOne(decodeURI(e.hash),this._element);a(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(_s),this._activateParents(t),N.trigger(this._element,ps,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))z.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(_s);else for(const e of z.parents(t,".nav, .list-group"))for(const t of z.prev(e,ys))t.classList.add(_s)}_clearActiveClass(t){t.classList.remove(_s);const e=z.find(`${bs}.${_s}`,t);for(const t of e)t.classList.remove(_s)}static jQueryInterface(t){return this.each((function(){const e=Es.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(window,gs,(()=>{for(const t of z.find('[data-bs-spy="scroll"]'))Es.getOrCreateInstance(t)})),m(Es);const Ts=".bs.tab",Cs=`hide${Ts}`,Os=`hidden${Ts}`,xs=`show${Ts}`,ks=`shown${Ts}`,Ls=`click${Ts}`,Ss=`keydown${Ts}`,Ds=`load${Ts}`,$s="ArrowLeft",Is="ArrowRight",Ns="ArrowUp",Ps="ArrowDown",Ms="Home",js="End",Fs="active",Hs="fade",Ws="show",Bs=":not(.dropdown-toggle)",zs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Rs=`.nav-link${Bs}, .list-group-item${Bs}, [role="tab"]${Bs}, ${zs}`,qs=`.${Fs}[data-bs-toggle="tab"], .${Fs}[data-bs-toggle="pill"], .${Fs}[data-bs-toggle="list"]`;class Vs extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),N.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?N.trigger(e,Cs,{relatedTarget:t}):null;N.trigger(t,xs,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Fs),this._activate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),N.trigger(t,ks,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Hs)))}_deactivate(t,e){t&&(t.classList.remove(Fs),t.blur(),this._deactivate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),N.trigger(t,Os,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Hs)))}_keydown(t){if(![$s,Is,Ns,Ps,Ms,js].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!l(t)));let i;if([Ms,js].includes(t.key))i=e[t.key===Ms?0:e.length-1];else{const n=[Is,Ps].includes(t.key);i=b(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Vs.getOrCreateInstance(i).show())}_getChildren(){return z.find(Rs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=z.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=z.findOne(t,i);s&&s.classList.toggle(n,e)};n(".dropdown-toggle",Fs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Fs)}_getInnerElement(t){return t.matches(Rs)?t:z.findOne(Rs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Vs.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(document,Ls,zs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||Vs.getOrCreateInstance(this).show()})),N.on(window,Ds,(()=>{for(const t of z.find(qs))Vs.getOrCreateInstance(t)})),m(Vs);const Ks=".bs.toast",Qs=`mouseover${Ks}`,Xs=`mouseout${Ks}`,Ys=`focusin${Ks}`,Us=`focusout${Ks}`,Gs=`hide${Ks}`,Js=`hidden${Ks}`,Zs=`show${Ks}`,to=`shown${Ks}`,eo="hide",io="show",no="showing",so={animation:"boolean",autohide:"boolean",delay:"number"},oo={animation:!0,autohide:!0,delay:5e3};class ro extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return oo}static get DefaultType(){return so}static get NAME(){return"toast"}show(){N.trigger(this._element,Zs).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(eo),d(this._element),this._element.classList.add(io,no),this._queueCallback((()=>{this._element.classList.remove(no),N.trigger(this._element,to),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(N.trigger(this._element,Gs).defaultPrevented||(this._element.classList.add(no),this._queueCallback((()=>{this._element.classList.add(eo),this._element.classList.remove(no,io),N.trigger(this._element,Js)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(io),super.dispose()}isShown(){return this._element.classList.contains(io)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){N.on(this._element,Qs,(t=>this._onInteraction(t,!0))),N.on(this._element,Xs,(t=>this._onInteraction(t,!1))),N.on(this._element,Ys,(t=>this._onInteraction(t,!0))),N.on(this._element,Us,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ro.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(ro),m(ro),{Alert:Q,Button:Y,Carousel:xt,Collapse:Bt,Dropdown:qi,Modal:On,Offcanvas:qn,Popover:us,ScrollSpy:Es,Tab:Vs,Toast:ro,Tooltip:cs}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/_book/site_libs/clipboard/clipboard.min.js b/_book/site_libs/clipboard/clipboard.min.js new file mode 100644 index 0000000..1103f81 --- /dev/null +++ b/_book/site_libs/clipboard/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=1.anchorjs-link,.anchorjs-link:focus{opacity:1}",A.sheet.cssRules.length),A.sheet.insertRule("[data-anchorjs-icon]::after{content:attr(data-anchorjs-icon)}",A.sheet.cssRules.length),A.sheet.insertRule('@font-face{font-family:anchorjs-icons;src:url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype")}',A.sheet.cssRules.length)),h=document.querySelectorAll("[id]"),t=[].map.call(h,function(A){return A.id}),i=0;i\]./()*\\\n\t\b\v\u00A0]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),A=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||A||!1}}}); +// @license-end \ No newline at end of file diff --git a/_book/site_libs/quarto-html/popper.min.js b/_book/site_libs/quarto-html/popper.min.js new file mode 100644 index 0000000..e3726d7 --- /dev/null +++ b/_book/site_libs/quarto-html/popper.min.js @@ -0,0 +1,6 @@ +/** + * @popperjs/core v2.11.7 - MIT License + */ + +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function c(){return!/^((?!chrome|android).)*safari/i.test(f())}function p(e,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);var a=e.getBoundingClientRect(),f=1,p=1;o&&r(e)&&(f=e.offsetWidth>0&&s(a.width)/e.offsetWidth||1,p=e.offsetHeight>0&&s(a.height)/e.offsetHeight||1);var u=(n(e)?t(e):window).visualViewport,l=!c()&&i,d=(a.left+(l&&u?u.offsetLeft:0))/f,h=(a.top+(l&&u?u.offsetTop:0))/p,m=a.width/f,v=a.height/p;return{width:m,height:v,top:h,right:d+m,bottom:h+v,left:d,x:d,y:h}}function u(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function l(e){return e?(e.nodeName||"").toLowerCase():null}function d(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function h(e){return p(d(e)).left+u(e).scrollLeft}function m(e){return t(e).getComputedStyle(e)}function v(e){var t=m(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function y(e,n,o){void 0===o&&(o=!1);var i,a,f=r(n),c=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),m=d(n),y=p(e,c,o),g={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(f||!f&&!o)&&(("body"!==l(n)||v(m))&&(g=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:u(i)),r(n)?((b=p(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):m&&(b.x=h(m))),{x:y.left+g.scrollLeft-b.x,y:y.top+g.scrollTop-b.y,width:y.width,height:y.height}}function g(e){var t=p(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function b(e){return"html"===l(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||d(e)}function x(e){return["html","body","#document"].indexOf(l(e))>=0?e.ownerDocument.body:r(e)&&v(e)?e:x(b(e))}function w(e,n){var r;void 0===n&&(n=[]);var o=x(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualViewport||[],v(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(w(b(s)))}function O(e){return["table","td","th"].indexOf(l(e))>=0}function j(e){return r(e)&&"fixed"!==m(e).position?e.offsetParent:null}function E(e){for(var n=t(e),i=j(e);i&&O(i)&&"static"===m(i).position;)i=j(i);return i&&("html"===l(i)||"body"===l(i)&&"static"===m(i).position)?n:i||function(e){var t=/firefox/i.test(f());if(/Trident/i.test(f())&&r(e)&&"fixed"===m(e).position)return null;var n=b(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(l(n))<0;){var i=m(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var D="top",A="bottom",L="right",P="left",M="auto",k=[D,A,L,P],W="start",B="end",H="viewport",T="popper",R=k.reduce((function(e,t){return e.concat([t+"-"+W,t+"-"+B])}),[]),S=[].concat(k,[M]).reduce((function(e,t){return e.concat([t,t+"-"+W,t+"-"+B])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function q(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e){return e.split("-")[0]}function N(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function I(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function _(e,r,o){return r===H?I(function(e,n){var r=t(e),o=d(e),i=r.visualViewport,a=o.clientWidth,s=o.clientHeight,f=0,p=0;if(i){a=i.width,s=i.height;var u=c();(u||!u&&"fixed"===n)&&(f=i.offsetLeft,p=i.offsetTop)}return{width:a,height:s,x:f+h(e),y:p}}(e,o)):n(r)?function(e,t){var n=p(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(r,o):I(function(e){var t,n=d(e),r=u(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+h(e),c=-r.scrollTop;return"rtl"===m(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:c}}(d(e)))}function F(e,t,o,s){var f="clippingParents"===t?function(e){var t=w(b(e)),o=["absolute","fixed"].indexOf(m(e).position)>=0&&r(e)?E(e):e;return n(o)?t.filter((function(e){return n(e)&&N(e,o)&&"body"!==l(e)})):[]}(e):[].concat(t),c=[].concat(f,[o]),p=c[0],u=c.reduce((function(t,n){var r=_(e,n,s);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),_(e,p,s));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function U(e){return e.split("-")[1]}function z(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function X(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?C(o):null,a=o?U(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case D:t={x:s,y:n.y-r.height};break;case A:t={x:s,y:n.y+n.height};break;case L:t={x:n.x+n.width,y:f};break;case P:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?z(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case W:t[c]=t[c]-(n[p]/2-r[p]/2);break;case B:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function Y(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function G(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function J(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.strategy,s=void 0===a?e.strategy:a,f=r.boundary,c=void 0===f?"clippingParents":f,u=r.rootBoundary,l=void 0===u?H:u,h=r.elementContext,m=void 0===h?T:h,v=r.altBoundary,y=void 0!==v&&v,g=r.padding,b=void 0===g?0:g,x=Y("number"!=typeof b?b:G(b,k)),w=m===T?"reference":T,O=e.rects.popper,j=e.elements[y?w:m],E=F(n(j)?j:j.contextElement||d(e.elements.popper),c,l,s),P=p(e.elements.reference),M=X({reference:P,element:O,strategy:"absolute",placement:i}),W=I(Object.assign({},O,M)),B=m===T?W:P,R={top:E.top-B.top+x.top,bottom:B.bottom-E.bottom+x.bottom,left:E.left-B.left+x.left,right:B.right-E.right+x.right},S=e.modifiersData.offset;if(m===T&&S){var V=S[i];Object.keys(R).forEach((function(e){var t=[L,A].indexOf(e)>=0?1:-1,n=[D,A].indexOf(e)>=0?"y":"x";R[e]+=V[n]*t}))}return R}var K={placement:"bottom",modifiers:[],strategy:"absolute"};function Q(){for(var e=arguments.length,t=new Array(e),n=0;n=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P,L].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},se={left:"right",right:"left",bottom:"top",top:"bottom"};function fe(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var ce={start:"end",end:"start"};function pe(e){return e.replace(/start|end/g,(function(e){return ce[e]}))}function ue(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?S:f,p=U(r),u=p?s?R:R.filter((function(e){return U(e)===p})):k,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=J(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[C(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var le={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,y=C(v),g=f||(y===v||!h?[fe(v)]:function(e){if(C(e)===M)return[];var t=fe(e);return[pe(e),t,pe(t)]}(v)),b=[v].concat(g).reduce((function(e,n){return e.concat(C(n)===M?ue(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,j=!0,E=b[0],k=0;k=0,S=R?"width":"height",V=J(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),q=R?T?L:P:T?A:D;x[S]>w[S]&&(q=fe(q));var N=fe(q),I=[];if(i&&I.push(V[H]<=0),s&&I.push(V[q]<=0,V[N]<=0),I.every((function(e){return e}))){E=B,j=!1;break}O.set(B,I)}if(j)for(var _=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return E=t,"break"},F=h?3:1;F>0;F--){if("break"===_(F))break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function de(e,t,n){return i(e,a(t,n))}var he={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,v=n.tetherOffset,y=void 0===v?0:v,b=J(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=C(t.placement),w=U(t.placement),O=!w,j=z(x),M="x"===j?"y":"x",k=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,V={x:0,y:0};if(k){if(s){var q,N="y"===j?D:P,I="y"===j?A:L,_="y"===j?"height":"width",F=k[j],X=F+b[N],Y=F-b[I],G=m?-H[_]/2:0,K=w===W?B[_]:H[_],Q=w===W?-H[_]:-B[_],Z=t.elements.arrow,$=m&&Z?g(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[N],ne=ee[I],re=de(0,B[_],$[_]),oe=O?B[_]/2-G-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=O?-B[_]/2+G+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&E(t.elements.arrow),se=ae?"y"===j?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(q=null==S?void 0:S[j])?q:0,ce=F+ie-fe,pe=de(m?a(X,F+oe-fe-se):X,F,m?i(Y,ce):Y);k[j]=pe,V[j]=pe-F}if(c){var ue,le="x"===j?D:P,he="x"===j?A:L,me=k[M],ve="y"===M?"height":"width",ye=me+b[le],ge=me-b[he],be=-1!==[D,P].indexOf(x),xe=null!=(ue=null==S?void 0:S[M])?ue:0,we=be?ye:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ge,je=m&&be?function(e,t,n){var r=de(e,t,n);return r>n?n:r}(we,me,Oe):de(m?we:ye,me,m?Oe:ge);k[M]=je,V[M]=je-me}t.modifiersData[r]=V}},requiresIfExists:["offset"]};var me={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=C(n.placement),f=z(s),c=[P,L].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return Y("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:G(e,k))}(o.padding,n),u=g(i),l="y"===f?D:P,d="y"===f?A:L,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],v=E(i),y=v?"y"===f?v.clientHeight||0:v.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],O=y/2-u[c]/2+b,j=de(x,O,w),M=f;n.modifiersData[r]=((t={})[M]=j,t.centerOffset=j-O,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&N(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ve(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(e){return[D,L,A,P].some((function(t){return e[t]>=0}))}var ge={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=J(t,{elementContext:"reference"}),s=J(t,{altBoundary:!0}),f=ve(a,r),c=ve(s,o,i),p=ye(f),u=ye(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},be=Z({defaultModifiers:[ee,te,oe,ie]}),xe=[ee,te,oe,ie,ae,le,he,me,ge],we=Z({defaultModifiers:xe});e.applyStyles=ie,e.arrow=me,e.computeStyles=oe,e.createPopper=we,e.createPopperLite=be,e.defaultModifiers=xe,e.detectOverflow=J,e.eventListeners=ee,e.flip=le,e.hide=ge,e.offset=ae,e.popperGenerator=Z,e.popperOffsets=te,e.preventOverflow=he,Object.defineProperty(e,"__esModule",{value:!0})})); + diff --git a/_book/site_libs/quarto-html/quarto-syntax-highlighting.css b/_book/site_libs/quarto-html/quarto-syntax-highlighting.css new file mode 100644 index 0000000..b30ce57 --- /dev/null +++ b/_book/site_libs/quarto-html/quarto-syntax-highlighting.css @@ -0,0 +1,205 @@ +/* quarto syntax highlight colors */ +:root { + --quarto-hl-ot-color: #003B4F; + --quarto-hl-at-color: #657422; + --quarto-hl-ss-color: #20794D; + --quarto-hl-an-color: #5E5E5E; + --quarto-hl-fu-color: #4758AB; + --quarto-hl-st-color: #20794D; + --quarto-hl-cf-color: #003B4F; + --quarto-hl-op-color: #5E5E5E; + --quarto-hl-er-color: #AD0000; + --quarto-hl-bn-color: #AD0000; + --quarto-hl-al-color: #AD0000; + --quarto-hl-va-color: #111111; + --quarto-hl-bu-color: inherit; + --quarto-hl-ex-color: inherit; + --quarto-hl-pp-color: #AD0000; + --quarto-hl-in-color: #5E5E5E; + --quarto-hl-vs-color: #20794D; + --quarto-hl-wa-color: #5E5E5E; + --quarto-hl-do-color: #5E5E5E; + --quarto-hl-im-color: #00769E; + --quarto-hl-ch-color: #20794D; + --quarto-hl-dt-color: #AD0000; + --quarto-hl-fl-color: #AD0000; + --quarto-hl-co-color: #5E5E5E; + --quarto-hl-cv-color: #5E5E5E; + --quarto-hl-cn-color: #8f5902; + --quarto-hl-sc-color: #5E5E5E; + --quarto-hl-dv-color: #AD0000; + --quarto-hl-kw-color: #003B4F; +} + +/* other quarto variables */ +:root { + --quarto-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +pre > code.sourceCode > span { + color: #003B4F; +} + +code span { + color: #003B4F; +} + +code.sourceCode > span { + color: #003B4F; +} + +div.sourceCode, +div.sourceCode pre.sourceCode { + color: #003B4F; +} + +code span.ot { + color: #003B4F; + font-style: inherit; +} + +code span.at { + color: #657422; + font-style: inherit; +} + +code span.ss { + color: #20794D; + font-style: inherit; +} + +code span.an { + color: #5E5E5E; + font-style: inherit; +} + +code span.fu { + color: #4758AB; + font-style: inherit; +} + +code span.st { + color: #20794D; + font-style: inherit; +} + +code span.cf { + color: #003B4F; + font-weight: bold; + font-style: inherit; +} + +code span.op { + color: #5E5E5E; + font-style: inherit; +} + +code span.er { + color: #AD0000; + font-style: inherit; +} + +code span.bn { + color: #AD0000; + font-style: inherit; +} + +code span.al { + color: #AD0000; + font-style: inherit; +} + +code span.va { + color: #111111; + font-style: inherit; +} + +code span.bu { + font-style: inherit; +} + +code span.ex { + font-style: inherit; +} + +code span.pp { + color: #AD0000; + font-style: inherit; +} + +code span.in { + color: #5E5E5E; + font-style: inherit; +} + +code span.vs { + color: #20794D; + font-style: inherit; +} + +code span.wa { + color: #5E5E5E; + font-style: italic; +} + +code span.do { + color: #5E5E5E; + font-style: italic; +} + +code span.im { + color: #00769E; + font-style: inherit; +} + +code span.ch { + color: #20794D; + font-style: inherit; +} + +code span.dt { + color: #AD0000; + font-style: inherit; +} + +code span.fl { + color: #AD0000; + font-style: inherit; +} + +code span.co { + color: #5E5E5E; + font-style: inherit; +} + +code span.cv { + color: #5E5E5E; + font-style: italic; +} + +code span.cn { + color: #8f5902; + font-style: inherit; +} + +code span.sc { + color: #5E5E5E; + font-style: inherit; +} + +code span.dv { + color: #AD0000; + font-style: inherit; +} + +code span.kw { + color: #003B4F; + font-weight: bold; + font-style: inherit; +} + +.prevent-inlining { + content: " { + // Find any conflicting margin elements and add margins to the + // top to prevent overlap + const marginChildren = window.document.querySelectorAll( + ".column-margin.column-container > *, .margin-caption, .aside" + ); + + let lastBottom = 0; + for (const marginChild of marginChildren) { + if (marginChild.offsetParent !== null) { + // clear the top margin so we recompute it + marginChild.style.marginTop = null; + const top = marginChild.getBoundingClientRect().top + window.scrollY; + if (top < lastBottom) { + const marginChildStyle = window.getComputedStyle(marginChild); + const marginBottom = parseFloat(marginChildStyle["marginBottom"]); + const margin = lastBottom - top + marginBottom; + marginChild.style.marginTop = `${margin}px`; + } + const styles = window.getComputedStyle(marginChild); + const marginTop = parseFloat(styles["marginTop"]); + lastBottom = top + marginChild.getBoundingClientRect().height + marginTop; + } + } +}; + +window.document.addEventListener("DOMContentLoaded", function (_event) { + // Recompute the position of margin elements anytime the body size changes + if (window.ResizeObserver) { + const resizeObserver = new window.ResizeObserver( + throttle(() => { + layoutMarginEls(); + if ( + window.document.body.getBoundingClientRect().width < 990 && + isReaderMode() + ) { + quartoToggleReader(); + } + }, 50) + ); + resizeObserver.observe(window.document.body); + } + + const tocEl = window.document.querySelector('nav.toc-active[role="doc-toc"]'); + const sidebarEl = window.document.getElementById("quarto-sidebar"); + const leftTocEl = window.document.getElementById("quarto-sidebar-toc-left"); + const marginSidebarEl = window.document.getElementById( + "quarto-margin-sidebar" + ); + // function to determine whether the element has a previous sibling that is active + const prevSiblingIsActiveLink = (el) => { + const sibling = el.previousElementSibling; + if (sibling && sibling.tagName === "A") { + return sibling.classList.contains("active"); + } else { + return false; + } + }; + + // fire slideEnter for bootstrap tab activations (for htmlwidget resize behavior) + function fireSlideEnter(e) { + const event = window.document.createEvent("Event"); + event.initEvent("slideenter", true, true); + window.document.dispatchEvent(event); + } + const tabs = window.document.querySelectorAll('a[data-bs-toggle="tab"]'); + tabs.forEach((tab) => { + tab.addEventListener("shown.bs.tab", fireSlideEnter); + }); + + // fire slideEnter for tabby tab activations (for htmlwidget resize behavior) + document.addEventListener("tabby", fireSlideEnter, false); + + // Track scrolling and mark TOC links as active + // get table of contents and sidebar (bail if we don't have at least one) + const tocLinks = tocEl + ? [...tocEl.querySelectorAll("a[data-scroll-target]")] + : []; + const makeActive = (link) => tocLinks[link].classList.add("active"); + const removeActive = (link) => tocLinks[link].classList.remove("active"); + const removeAllActive = () => + [...Array(tocLinks.length).keys()].forEach((link) => removeActive(link)); + + // activate the anchor for a section associated with this TOC entry + tocLinks.forEach((link) => { + link.addEventListener("click", () => { + if (link.href.indexOf("#") !== -1) { + const anchor = link.href.split("#")[1]; + const heading = window.document.querySelector( + `[data-anchor-id="${anchor}"]` + ); + if (heading) { + // Add the class + heading.classList.add("reveal-anchorjs-link"); + + // function to show the anchor + const handleMouseout = () => { + heading.classList.remove("reveal-anchorjs-link"); + heading.removeEventListener("mouseout", handleMouseout); + }; + + // add a function to clear the anchor when the user mouses out of it + heading.addEventListener("mouseout", handleMouseout); + } + } + }); + }); + + const sections = tocLinks.map((link) => { + const target = link.getAttribute("data-scroll-target"); + if (target.startsWith("#")) { + return window.document.getElementById(decodeURI(`${target.slice(1)}`)); + } else { + return window.document.querySelector(decodeURI(`${target}`)); + } + }); + + const sectionMargin = 200; + let currentActive = 0; + // track whether we've initialized state the first time + let init = false; + + const updateActiveLink = () => { + // The index from bottom to top (e.g. reversed list) + let sectionIndex = -1; + if ( + window.innerHeight + window.pageYOffset >= + window.document.body.offsetHeight + ) { + // This is the no-scroll case where last section should be the active one + sectionIndex = 0; + } else { + // This finds the last section visible on screen that should be made active + sectionIndex = [...sections].reverse().findIndex((section) => { + if (section) { + return window.pageYOffset >= section.offsetTop - sectionMargin; + } else { + return false; + } + }); + } + if (sectionIndex > -1) { + const current = sections.length - sectionIndex - 1; + if (current !== currentActive) { + removeAllActive(); + currentActive = current; + makeActive(current); + if (init) { + window.dispatchEvent(sectionChanged); + } + init = true; + } + } + }; + + const inHiddenRegion = (top, bottom, hiddenRegions) => { + for (const region of hiddenRegions) { + if (top <= region.bottom && bottom >= region.top) { + return true; + } + } + return false; + }; + + const categorySelector = "header.quarto-title-block .quarto-category"; + const activateCategories = (href) => { + // Find any categories + // Surround them with a link pointing back to: + // #category=Authoring + try { + const categoryEls = window.document.querySelectorAll(categorySelector); + for (const categoryEl of categoryEls) { + const categoryText = categoryEl.textContent; + if (categoryText) { + const link = `${href}#category=${encodeURIComponent(categoryText)}`; + const linkEl = window.document.createElement("a"); + linkEl.setAttribute("href", link); + for (const child of categoryEl.childNodes) { + linkEl.append(child); + } + categoryEl.appendChild(linkEl); + } + } + } catch { + // Ignore errors + } + }; + function hasTitleCategories() { + return window.document.querySelector(categorySelector) !== null; + } + + function offsetRelativeUrl(url) { + const offset = getMeta("quarto:offset"); + return offset ? offset + url : url; + } + + function offsetAbsoluteUrl(url) { + const offset = getMeta("quarto:offset"); + const baseUrl = new URL(offset, window.location); + + const projRelativeUrl = url.replace(baseUrl, ""); + if (projRelativeUrl.startsWith("/")) { + return projRelativeUrl; + } else { + return "/" + projRelativeUrl; + } + } + + // read a meta tag value + function getMeta(metaName) { + const metas = window.document.getElementsByTagName("meta"); + for (let i = 0; i < metas.length; i++) { + if (metas[i].getAttribute("name") === metaName) { + return metas[i].getAttribute("content"); + } + } + return ""; + } + + async function findAndActivateCategories() { + const currentPagePath = offsetAbsoluteUrl(window.location.href); + const response = await fetch(offsetRelativeUrl("listings.json")); + if (response.status == 200) { + return response.json().then(function (listingPaths) { + const listingHrefs = []; + for (const listingPath of listingPaths) { + const pathWithoutLeadingSlash = listingPath.listing.substring(1); + for (const item of listingPath.items) { + if ( + item === currentPagePath || + item === currentPagePath + "index.html" + ) { + // Resolve this path against the offset to be sure + // we already are using the correct path to the listing + // (this adjusts the listing urls to be rooted against + // whatever root the page is actually running against) + const relative = offsetRelativeUrl(pathWithoutLeadingSlash); + const baseUrl = window.location; + const resolvedPath = new URL(relative, baseUrl); + listingHrefs.push(resolvedPath.pathname); + break; + } + } + } + + // Look up the tree for a nearby linting and use that if we find one + const nearestListing = findNearestParentListing( + offsetAbsoluteUrl(window.location.pathname), + listingHrefs + ); + if (nearestListing) { + activateCategories(nearestListing); + } else { + // See if the referrer is a listing page for this item + const referredRelativePath = offsetAbsoluteUrl(document.referrer); + const referrerListing = listingHrefs.find((listingHref) => { + const isListingReferrer = + listingHref === referredRelativePath || + listingHref === referredRelativePath + "index.html"; + return isListingReferrer; + }); + + if (referrerListing) { + // Try to use the referrer if possible + activateCategories(referrerListing); + } else if (listingHrefs.length > 0) { + // Otherwise, just fall back to the first listing + activateCategories(listingHrefs[0]); + } + } + }); + } + } + if (hasTitleCategories()) { + findAndActivateCategories(); + } + + const findNearestParentListing = (href, listingHrefs) => { + if (!href || !listingHrefs) { + return undefined; + } + // Look up the tree for a nearby linting and use that if we find one + const relativeParts = href.substring(1).split("/"); + while (relativeParts.length > 0) { + const path = relativeParts.join("/"); + for (const listingHref of listingHrefs) { + if (listingHref.startsWith(path)) { + return listingHref; + } + } + relativeParts.pop(); + } + + return undefined; + }; + + const manageSidebarVisiblity = (el, placeholderDescriptor) => { + let isVisible = true; + let elRect; + + return (hiddenRegions) => { + if (el === null) { + return; + } + + // Find the last element of the TOC + const lastChildEl = el.lastElementChild; + + if (lastChildEl) { + // Converts the sidebar to a menu + const convertToMenu = () => { + for (const child of el.children) { + child.style.opacity = 0; + child.style.overflow = "hidden"; + child.style.pointerEvents = "none"; + } + + nexttick(() => { + const toggleContainer = window.document.createElement("div"); + toggleContainer.style.width = "100%"; + toggleContainer.classList.add("zindex-over-content"); + toggleContainer.classList.add("quarto-sidebar-toggle"); + toggleContainer.classList.add("headroom-target"); // Marks this to be managed by headeroom + toggleContainer.id = placeholderDescriptor.id; + toggleContainer.style.position = "fixed"; + + const toggleIcon = window.document.createElement("i"); + toggleIcon.classList.add("quarto-sidebar-toggle-icon"); + toggleIcon.classList.add("bi"); + toggleIcon.classList.add("bi-caret-down-fill"); + + const toggleTitle = window.document.createElement("div"); + const titleEl = window.document.body.querySelector( + placeholderDescriptor.titleSelector + ); + if (titleEl) { + toggleTitle.append( + titleEl.textContent || titleEl.innerText, + toggleIcon + ); + } + toggleTitle.classList.add("zindex-over-content"); + toggleTitle.classList.add("quarto-sidebar-toggle-title"); + toggleContainer.append(toggleTitle); + + const toggleContents = window.document.createElement("div"); + toggleContents.classList = el.classList; + toggleContents.classList.add("zindex-over-content"); + toggleContents.classList.add("quarto-sidebar-toggle-contents"); + for (const child of el.children) { + if (child.id === "toc-title") { + continue; + } + + const clone = child.cloneNode(true); + clone.style.opacity = 1; + clone.style.pointerEvents = null; + clone.style.display = null; + toggleContents.append(clone); + } + toggleContents.style.height = "0px"; + const positionToggle = () => { + // position the element (top left of parent, same width as parent) + if (!elRect) { + elRect = el.getBoundingClientRect(); + } + toggleContainer.style.left = `${elRect.left}px`; + toggleContainer.style.top = `${elRect.top}px`; + toggleContainer.style.width = `${elRect.width}px`; + }; + positionToggle(); + + toggleContainer.append(toggleContents); + el.parentElement.prepend(toggleContainer); + + // Process clicks + let tocShowing = false; + // Allow the caller to control whether this is dismissed + // when it is clicked (e.g. sidebar navigation supports + // opening and closing the nav tree, so don't dismiss on click) + const clickEl = placeholderDescriptor.dismissOnClick + ? toggleContainer + : toggleTitle; + + const closeToggle = () => { + if (tocShowing) { + toggleContainer.classList.remove("expanded"); + toggleContents.style.height = "0px"; + tocShowing = false; + } + }; + + // Get rid of any expanded toggle if the user scrolls + window.document.addEventListener( + "scroll", + throttle(() => { + closeToggle(); + }, 50) + ); + + // Handle positioning of the toggle + window.addEventListener( + "resize", + throttle(() => { + elRect = undefined; + positionToggle(); + }, 50) + ); + + window.addEventListener("quarto-hrChanged", () => { + elRect = undefined; + }); + + // Process the click + clickEl.onclick = () => { + if (!tocShowing) { + toggleContainer.classList.add("expanded"); + toggleContents.style.height = null; + tocShowing = true; + } else { + closeToggle(); + } + }; + }); + }; + + // Converts a sidebar from a menu back to a sidebar + const convertToSidebar = () => { + for (const child of el.children) { + child.style.opacity = 1; + child.style.overflow = null; + child.style.pointerEvents = null; + } + + const placeholderEl = window.document.getElementById( + placeholderDescriptor.id + ); + if (placeholderEl) { + placeholderEl.remove(); + } + + el.classList.remove("rollup"); + }; + + if (isReaderMode()) { + convertToMenu(); + isVisible = false; + } else { + // Find the top and bottom o the element that is being managed + const elTop = el.offsetTop; + const elBottom = + elTop + lastChildEl.offsetTop + lastChildEl.offsetHeight; + + if (!isVisible) { + // If the element is current not visible reveal if there are + // no conflicts with overlay regions + if (!inHiddenRegion(elTop, elBottom, hiddenRegions)) { + convertToSidebar(); + isVisible = true; + } + } else { + // If the element is visible, hide it if it conflicts with overlay regions + // and insert a placeholder toggle (or if we're in reader mode) + if (inHiddenRegion(elTop, elBottom, hiddenRegions)) { + convertToMenu(); + isVisible = false; + } + } + } + } + }; + }; + + const tabEls = document.querySelectorAll('a[data-bs-toggle="tab"]'); + for (const tabEl of tabEls) { + const id = tabEl.getAttribute("data-bs-target"); + if (id) { + const columnEl = document.querySelector( + `${id} .column-margin, .tabset-margin-content` + ); + if (columnEl) + tabEl.addEventListener("shown.bs.tab", function (event) { + const el = event.srcElement; + if (el) { + const visibleCls = `${el.id}-margin-content`; + // walk up until we find a parent tabset + let panelTabsetEl = el.parentElement; + while (panelTabsetEl) { + if (panelTabsetEl.classList.contains("panel-tabset")) { + break; + } + panelTabsetEl = panelTabsetEl.parentElement; + } + + if (panelTabsetEl) { + const prevSib = panelTabsetEl.previousElementSibling; + if ( + prevSib && + prevSib.classList.contains("tabset-margin-container") + ) { + const childNodes = prevSib.querySelectorAll( + ".tabset-margin-content" + ); + for (const childEl of childNodes) { + if (childEl.classList.contains(visibleCls)) { + childEl.classList.remove("collapse"); + } else { + childEl.classList.add("collapse"); + } + } + } + } + } + + layoutMarginEls(); + }); + } + } + + // Manage the visibility of the toc and the sidebar + const marginScrollVisibility = manageSidebarVisiblity(marginSidebarEl, { + id: "quarto-toc-toggle", + titleSelector: "#toc-title", + dismissOnClick: true, + }); + const sidebarScrollVisiblity = manageSidebarVisiblity(sidebarEl, { + id: "quarto-sidebarnav-toggle", + titleSelector: ".title", + dismissOnClick: false, + }); + let tocLeftScrollVisibility; + if (leftTocEl) { + tocLeftScrollVisibility = manageSidebarVisiblity(leftTocEl, { + id: "quarto-lefttoc-toggle", + titleSelector: "#toc-title", + dismissOnClick: true, + }); + } + + // Find the first element that uses formatting in special columns + const conflictingEls = window.document.body.querySelectorAll( + '[class^="column-"], [class*=" column-"], aside, [class*="margin-caption"], [class*=" margin-caption"], [class*="margin-ref"], [class*=" margin-ref"]' + ); + + // Filter all the possibly conflicting elements into ones + // the do conflict on the left or ride side + const arrConflictingEls = Array.from(conflictingEls); + const leftSideConflictEls = arrConflictingEls.filter((el) => { + if (el.tagName === "ASIDE") { + return false; + } + return Array.from(el.classList).find((className) => { + return ( + className !== "column-body" && + className.startsWith("column-") && + !className.endsWith("right") && + !className.endsWith("container") && + className !== "column-margin" + ); + }); + }); + const rightSideConflictEls = arrConflictingEls.filter((el) => { + if (el.tagName === "ASIDE") { + return true; + } + + const hasMarginCaption = Array.from(el.classList).find((className) => { + return className == "margin-caption"; + }); + if (hasMarginCaption) { + return true; + } + + return Array.from(el.classList).find((className) => { + return ( + className !== "column-body" && + !className.endsWith("container") && + className.startsWith("column-") && + !className.endsWith("left") + ); + }); + }); + + const kOverlapPaddingSize = 10; + function toRegions(els) { + return els.map((el) => { + const boundRect = el.getBoundingClientRect(); + const top = + boundRect.top + + document.documentElement.scrollTop - + kOverlapPaddingSize; + return { + top, + bottom: top + el.scrollHeight + 2 * kOverlapPaddingSize, + }; + }); + } + + let hasObserved = false; + const visibleItemObserver = (els) => { + let visibleElements = [...els]; + const intersectionObserver = new IntersectionObserver( + (entries, _observer) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + if (visibleElements.indexOf(entry.target) === -1) { + visibleElements.push(entry.target); + } + } else { + visibleElements = visibleElements.filter((visibleEntry) => { + return visibleEntry !== entry; + }); + } + }); + + if (!hasObserved) { + hideOverlappedSidebars(); + } + hasObserved = true; + }, + {} + ); + els.forEach((el) => { + intersectionObserver.observe(el); + }); + + return { + getVisibleEntries: () => { + return visibleElements; + }, + }; + }; + + const rightElementObserver = visibleItemObserver(rightSideConflictEls); + const leftElementObserver = visibleItemObserver(leftSideConflictEls); + + const hideOverlappedSidebars = () => { + marginScrollVisibility(toRegions(rightElementObserver.getVisibleEntries())); + sidebarScrollVisiblity(toRegions(leftElementObserver.getVisibleEntries())); + if (tocLeftScrollVisibility) { + tocLeftScrollVisibility( + toRegions(leftElementObserver.getVisibleEntries()) + ); + } + }; + + window.quartoToggleReader = () => { + // Applies a slow class (or removes it) + // to update the transition speed + const slowTransition = (slow) => { + const manageTransition = (id, slow) => { + const el = document.getElementById(id); + if (el) { + if (slow) { + el.classList.add("slow"); + } else { + el.classList.remove("slow"); + } + } + }; + + manageTransition("TOC", slow); + manageTransition("quarto-sidebar", slow); + }; + const readerMode = !isReaderMode(); + setReaderModeValue(readerMode); + + // If we're entering reader mode, slow the transition + if (readerMode) { + slowTransition(readerMode); + } + highlightReaderToggle(readerMode); + hideOverlappedSidebars(); + + // If we're exiting reader mode, restore the non-slow transition + if (!readerMode) { + slowTransition(!readerMode); + } + }; + + const highlightReaderToggle = (readerMode) => { + const els = document.querySelectorAll(".quarto-reader-toggle"); + if (els) { + els.forEach((el) => { + if (readerMode) { + el.classList.add("reader"); + } else { + el.classList.remove("reader"); + } + }); + } + }; + + const setReaderModeValue = (val) => { + if (window.location.protocol !== "file:") { + window.localStorage.setItem("quarto-reader-mode", val); + } else { + localReaderMode = val; + } + }; + + const isReaderMode = () => { + if (window.location.protocol !== "file:") { + return window.localStorage.getItem("quarto-reader-mode") === "true"; + } else { + return localReaderMode; + } + }; + let localReaderMode = null; + + const tocOpenDepthStr = tocEl?.getAttribute("data-toc-expanded"); + const tocOpenDepth = tocOpenDepthStr ? Number(tocOpenDepthStr) : 1; + + // Walk the TOC and collapse/expand nodes + // Nodes are expanded if: + // - they are top level + // - they have children that are 'active' links + // - they are directly below an link that is 'active' + const walk = (el, depth) => { + // Tick depth when we enter a UL + if (el.tagName === "UL") { + depth = depth + 1; + } + + // It this is active link + let isActiveNode = false; + if (el.tagName === "A" && el.classList.contains("active")) { + isActiveNode = true; + } + + // See if there is an active child to this element + let hasActiveChild = false; + for (child of el.children) { + hasActiveChild = walk(child, depth) || hasActiveChild; + } + + // Process the collapse state if this is an UL + if (el.tagName === "UL") { + if (tocOpenDepth === -1 && depth > 1) { + // toc-expand: false + el.classList.add("collapse"); + } else if ( + depth <= tocOpenDepth || + hasActiveChild || + prevSiblingIsActiveLink(el) + ) { + el.classList.remove("collapse"); + } else { + el.classList.add("collapse"); + } + + // untick depth when we leave a UL + depth = depth - 1; + } + return hasActiveChild || isActiveNode; + }; + + // walk the TOC and expand / collapse any items that should be shown + if (tocEl) { + updateActiveLink(); + walk(tocEl, 0); + } + + // Throttle the scroll event and walk peridiocally + window.document.addEventListener( + "scroll", + throttle(() => { + if (tocEl) { + updateActiveLink(); + walk(tocEl, 0); + } + if (!isReaderMode()) { + hideOverlappedSidebars(); + } + }, 5) + ); + window.addEventListener( + "resize", + throttle(() => { + if (tocEl) { + updateActiveLink(); + walk(tocEl, 0); + } + if (!isReaderMode()) { + hideOverlappedSidebars(); + } + }, 10) + ); + hideOverlappedSidebars(); + highlightReaderToggle(isReaderMode()); +}); + +// grouped tabsets +window.addEventListener("pageshow", (_event) => { + function getTabSettings() { + const data = localStorage.getItem("quarto-persistent-tabsets-data"); + if (!data) { + localStorage.setItem("quarto-persistent-tabsets-data", "{}"); + return {}; + } + if (data) { + return JSON.parse(data); + } + } + + function setTabSettings(data) { + localStorage.setItem( + "quarto-persistent-tabsets-data", + JSON.stringify(data) + ); + } + + function setTabState(groupName, groupValue) { + const data = getTabSettings(); + data[groupName] = groupValue; + setTabSettings(data); + } + + function toggleTab(tab, active) { + const tabPanelId = tab.getAttribute("aria-controls"); + const tabPanel = document.getElementById(tabPanelId); + if (active) { + tab.classList.add("active"); + tabPanel.classList.add("active"); + } else { + tab.classList.remove("active"); + tabPanel.classList.remove("active"); + } + } + + function toggleAll(selectedGroup, selectorsToSync) { + for (const [thisGroup, tabs] of Object.entries(selectorsToSync)) { + const active = selectedGroup === thisGroup; + for (const tab of tabs) { + toggleTab(tab, active); + } + } + } + + function findSelectorsToSyncByLanguage() { + const result = {}; + const tabs = Array.from( + document.querySelectorAll(`div[data-group] a[id^='tabset-']`) + ); + for (const item of tabs) { + const div = item.parentElement.parentElement.parentElement; + const group = div.getAttribute("data-group"); + if (!result[group]) { + result[group] = {}; + } + const selectorsToSync = result[group]; + const value = item.innerHTML; + if (!selectorsToSync[value]) { + selectorsToSync[value] = []; + } + selectorsToSync[value].push(item); + } + return result; + } + + function setupSelectorSync() { + const selectorsToSync = findSelectorsToSyncByLanguage(); + Object.entries(selectorsToSync).forEach(([group, tabSetsByValue]) => { + Object.entries(tabSetsByValue).forEach(([value, items]) => { + items.forEach((item) => { + item.addEventListener("click", (_event) => { + setTabState(group, value); + toggleAll(value, selectorsToSync[group]); + }); + }); + }); + }); + return selectorsToSync; + } + + const selectorsToSync = setupSelectorSync(); + for (const [group, selectedName] of Object.entries(getTabSettings())) { + const selectors = selectorsToSync[group]; + // it's possible that stale state gives us empty selections, so we explicitly check here. + if (selectors) { + toggleAll(selectedName, selectors); + } + } +}); + +function throttle(func, wait) { + let waiting = false; + return function () { + if (!waiting) { + func.apply(this, arguments); + waiting = true; + setTimeout(function () { + waiting = false; + }, wait); + } + }; +} + +function nexttick(func) { + return setTimeout(func, 0); +} diff --git a/_book/site_libs/quarto-html/tippy.css b/_book/site_libs/quarto-html/tippy.css new file mode 100644 index 0000000..e6ae635 --- /dev/null +++ b/_book/site_libs/quarto-html/tippy.css @@ -0,0 +1 @@ +.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1} \ No newline at end of file diff --git a/_book/site_libs/quarto-html/tippy.umd.min.js b/_book/site_libs/quarto-html/tippy.umd.min.js new file mode 100644 index 0000000..ca292be --- /dev/null +++ b/_book/site_libs/quarto-html/tippy.umd.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],t):(e=e||self).tippy=t(e.Popper)}(this,(function(e){"use strict";var t={passive:!0,capture:!0},n=function(){return document.body};function r(e,t,n){if(Array.isArray(e)){var r=e[t];return null==r?Array.isArray(n)?n[t]:n:r}return e}function o(e,t){var n={}.toString.call(e);return 0===n.indexOf("[object")&&n.indexOf(t+"]")>-1}function i(e,t){return"function"==typeof e?e.apply(void 0,t):e}function a(e,t){return 0===t?e:function(r){clearTimeout(n),n=setTimeout((function(){e(r)}),t)};var n}function s(e,t){var n=Object.assign({},e);return t.forEach((function(e){delete n[e]})),n}function u(e){return[].concat(e)}function c(e,t){-1===e.indexOf(t)&&e.push(t)}function p(e){return e.split("-")[0]}function f(e){return[].slice.call(e)}function l(e){return Object.keys(e).reduce((function(t,n){return void 0!==e[n]&&(t[n]=e[n]),t}),{})}function d(){return document.createElement("div")}function v(e){return["Element","Fragment"].some((function(t){return o(e,t)}))}function m(e){return o(e,"MouseEvent")}function g(e){return!(!e||!e._tippy||e._tippy.reference!==e)}function h(e){return v(e)?[e]:function(e){return o(e,"NodeList")}(e)?f(e):Array.isArray(e)?e:f(document.querySelectorAll(e))}function b(e,t){e.forEach((function(e){e&&(e.style.transitionDuration=t+"ms")}))}function y(e,t){e.forEach((function(e){e&&e.setAttribute("data-state",t)}))}function w(e){var t,n=u(e)[0];return null!=n&&null!=(t=n.ownerDocument)&&t.body?n.ownerDocument:document}function E(e,t,n){var r=t+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(t){e[r](t,n)}))}function O(e,t){for(var n=t;n;){var r;if(e.contains(n))return!0;n=null==n.getRootNode||null==(r=n.getRootNode())?void 0:r.host}return!1}var x={isTouch:!1},C=0;function T(){x.isTouch||(x.isTouch=!0,window.performance&&document.addEventListener("mousemove",A))}function A(){var e=performance.now();e-C<20&&(x.isTouch=!1,document.removeEventListener("mousemove",A)),C=e}function L(){var e=document.activeElement;if(g(e)){var t=e._tippy;e.blur&&!t.state.isVisible&&e.blur()}}var D=!!("undefined"!=typeof window&&"undefined"!=typeof document)&&!!window.msCrypto,R=Object.assign({appendTo:n,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),k=Object.keys(R);function P(e){var t=(e.plugins||[]).reduce((function(t,n){var r,o=n.name,i=n.defaultValue;o&&(t[o]=void 0!==e[o]?e[o]:null!=(r=R[o])?r:i);return t}),{});return Object.assign({},e,t)}function j(e,t){var n=Object.assign({},t,{content:i(t.content,[e])},t.ignoreAttributes?{}:function(e,t){return(t?Object.keys(P(Object.assign({},R,{plugins:t}))):k).reduce((function(t,n){var r=(e.getAttribute("data-tippy-"+n)||"").trim();if(!r)return t;if("content"===n)t[n]=r;else try{t[n]=JSON.parse(r)}catch(e){t[n]=r}return t}),{})}(e,t.plugins));return n.aria=Object.assign({},R.aria,n.aria),n.aria={expanded:"auto"===n.aria.expanded?t.interactive:n.aria.expanded,content:"auto"===n.aria.content?t.interactive?null:"describedby":n.aria.content},n}function M(e,t){e.innerHTML=t}function V(e){var t=d();return!0===e?t.className="tippy-arrow":(t.className="tippy-svg-arrow",v(e)?t.appendChild(e):M(t,e)),t}function I(e,t){v(t.content)?(M(e,""),e.appendChild(t.content)):"function"!=typeof t.content&&(t.allowHTML?M(e,t.content):e.textContent=t.content)}function S(e){var t=e.firstElementChild,n=f(t.children);return{box:t,content:n.find((function(e){return e.classList.contains("tippy-content")})),arrow:n.find((function(e){return e.classList.contains("tippy-arrow")||e.classList.contains("tippy-svg-arrow")})),backdrop:n.find((function(e){return e.classList.contains("tippy-backdrop")}))}}function N(e){var t=d(),n=d();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=d();function o(n,r){var o=S(t),i=o.box,a=o.content,s=o.arrow;r.theme?i.setAttribute("data-theme",r.theme):i.removeAttribute("data-theme"),"string"==typeof r.animation?i.setAttribute("data-animation",r.animation):i.removeAttribute("data-animation"),r.inertia?i.setAttribute("data-inertia",""):i.removeAttribute("data-inertia"),i.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?i.setAttribute("role",r.role):i.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||I(a,e.props),r.arrow?s?n.arrow!==r.arrow&&(i.removeChild(s),i.appendChild(V(r.arrow))):i.appendChild(V(r.arrow)):s&&i.removeChild(s)}return r.className="tippy-content",r.setAttribute("data-state","hidden"),I(r,e.props),t.appendChild(n),n.appendChild(r),o(e.props,e.props),{popper:t,onUpdate:o}}N.$$tippy=!0;var B=1,H=[],U=[];function _(o,s){var v,g,h,C,T,A,L,k,M=j(o,Object.assign({},R,P(l(s)))),V=!1,I=!1,N=!1,_=!1,F=[],W=a(we,M.interactiveDebounce),X=B++,Y=(k=M.plugins).filter((function(e,t){return k.indexOf(e)===t})),$={id:X,reference:o,popper:d(),popperInstance:null,props:M,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:Y,clearDelayTimeouts:function(){clearTimeout(v),clearTimeout(g),cancelAnimationFrame(h)},setProps:function(e){if($.state.isDestroyed)return;ae("onBeforeUpdate",[$,e]),be();var t=$.props,n=j(o,Object.assign({},t,l(e),{ignoreAttributes:!0}));$.props=n,he(),t.interactiveDebounce!==n.interactiveDebounce&&(ce(),W=a(we,n.interactiveDebounce));t.triggerTarget&&!n.triggerTarget?u(t.triggerTarget).forEach((function(e){e.removeAttribute("aria-expanded")})):n.triggerTarget&&o.removeAttribute("aria-expanded");ue(),ie(),J&&J(t,n);$.popperInstance&&(Ce(),Ae().forEach((function(e){requestAnimationFrame(e._tippy.popperInstance.forceUpdate)})));ae("onAfterUpdate",[$,e])},setContent:function(e){$.setProps({content:e})},show:function(){var e=$.state.isVisible,t=$.state.isDestroyed,o=!$.state.isEnabled,a=x.isTouch&&!$.props.touch,s=r($.props.duration,0,R.duration);if(e||t||o||a)return;if(te().hasAttribute("disabled"))return;if(ae("onShow",[$],!1),!1===$.props.onShow($))return;$.state.isVisible=!0,ee()&&(z.style.visibility="visible");ie(),de(),$.state.isMounted||(z.style.transition="none");if(ee()){var u=re(),p=u.box,f=u.content;b([p,f],0)}A=function(){var e;if($.state.isVisible&&!_){if(_=!0,z.offsetHeight,z.style.transition=$.props.moveTransition,ee()&&$.props.animation){var t=re(),n=t.box,r=t.content;b([n,r],s),y([n,r],"visible")}se(),ue(),c(U,$),null==(e=$.popperInstance)||e.forceUpdate(),ae("onMount",[$]),$.props.animation&&ee()&&function(e,t){me(e,t)}(s,(function(){$.state.isShown=!0,ae("onShown",[$])}))}},function(){var e,t=$.props.appendTo,r=te();e=$.props.interactive&&t===n||"parent"===t?r.parentNode:i(t,[r]);e.contains(z)||e.appendChild(z);$.state.isMounted=!0,Ce()}()},hide:function(){var e=!$.state.isVisible,t=$.state.isDestroyed,n=!$.state.isEnabled,o=r($.props.duration,1,R.duration);if(e||t||n)return;if(ae("onHide",[$],!1),!1===$.props.onHide($))return;$.state.isVisible=!1,$.state.isShown=!1,_=!1,V=!1,ee()&&(z.style.visibility="hidden");if(ce(),ve(),ie(!0),ee()){var i=re(),a=i.box,s=i.content;$.props.animation&&(b([a,s],o),y([a,s],"hidden"))}se(),ue(),$.props.animation?ee()&&function(e,t){me(e,(function(){!$.state.isVisible&&z.parentNode&&z.parentNode.contains(z)&&t()}))}(o,$.unmount):$.unmount()},hideWithInteractivity:function(e){ne().addEventListener("mousemove",W),c(H,W),W(e)},enable:function(){$.state.isEnabled=!0},disable:function(){$.hide(),$.state.isEnabled=!1},unmount:function(){$.state.isVisible&&$.hide();if(!$.state.isMounted)return;Te(),Ae().forEach((function(e){e._tippy.unmount()})),z.parentNode&&z.parentNode.removeChild(z);U=U.filter((function(e){return e!==$})),$.state.isMounted=!1,ae("onHidden",[$])},destroy:function(){if($.state.isDestroyed)return;$.clearDelayTimeouts(),$.unmount(),be(),delete o._tippy,$.state.isDestroyed=!0,ae("onDestroy",[$])}};if(!M.render)return $;var q=M.render($),z=q.popper,J=q.onUpdate;z.setAttribute("data-tippy-root",""),z.id="tippy-"+$.id,$.popper=z,o._tippy=$,z._tippy=$;var G=Y.map((function(e){return e.fn($)})),K=o.hasAttribute("aria-expanded");return he(),ue(),ie(),ae("onCreate",[$]),M.showOnCreate&&Le(),z.addEventListener("mouseenter",(function(){$.props.interactive&&$.state.isVisible&&$.clearDelayTimeouts()})),z.addEventListener("mouseleave",(function(){$.props.interactive&&$.props.trigger.indexOf("mouseenter")>=0&&ne().addEventListener("mousemove",W)})),$;function Q(){var e=$.props.touch;return Array.isArray(e)?e:[e,0]}function Z(){return"hold"===Q()[0]}function ee(){var e;return!(null==(e=$.props.render)||!e.$$tippy)}function te(){return L||o}function ne(){var e=te().parentNode;return e?w(e):document}function re(){return S(z)}function oe(e){return $.state.isMounted&&!$.state.isVisible||x.isTouch||C&&"focus"===C.type?0:r($.props.delay,e?0:1,R.delay)}function ie(e){void 0===e&&(e=!1),z.style.pointerEvents=$.props.interactive&&!e?"":"none",z.style.zIndex=""+$.props.zIndex}function ae(e,t,n){var r;(void 0===n&&(n=!0),G.forEach((function(n){n[e]&&n[e].apply(n,t)})),n)&&(r=$.props)[e].apply(r,t)}function se(){var e=$.props.aria;if(e.content){var t="aria-"+e.content,n=z.id;u($.props.triggerTarget||o).forEach((function(e){var r=e.getAttribute(t);if($.state.isVisible)e.setAttribute(t,r?r+" "+n:n);else{var o=r&&r.replace(n,"").trim();o?e.setAttribute(t,o):e.removeAttribute(t)}}))}}function ue(){!K&&$.props.aria.expanded&&u($.props.triggerTarget||o).forEach((function(e){$.props.interactive?e.setAttribute("aria-expanded",$.state.isVisible&&e===te()?"true":"false"):e.removeAttribute("aria-expanded")}))}function ce(){ne().removeEventListener("mousemove",W),H=H.filter((function(e){return e!==W}))}function pe(e){if(!x.isTouch||!N&&"mousedown"!==e.type){var t=e.composedPath&&e.composedPath()[0]||e.target;if(!$.props.interactive||!O(z,t)){if(u($.props.triggerTarget||o).some((function(e){return O(e,t)}))){if(x.isTouch)return;if($.state.isVisible&&$.props.trigger.indexOf("click")>=0)return}else ae("onClickOutside",[$,e]);!0===$.props.hideOnClick&&($.clearDelayTimeouts(),$.hide(),I=!0,setTimeout((function(){I=!1})),$.state.isMounted||ve())}}}function fe(){N=!0}function le(){N=!1}function de(){var e=ne();e.addEventListener("mousedown",pe,!0),e.addEventListener("touchend",pe,t),e.addEventListener("touchstart",le,t),e.addEventListener("touchmove",fe,t)}function ve(){var e=ne();e.removeEventListener("mousedown",pe,!0),e.removeEventListener("touchend",pe,t),e.removeEventListener("touchstart",le,t),e.removeEventListener("touchmove",fe,t)}function me(e,t){var n=re().box;function r(e){e.target===n&&(E(n,"remove",r),t())}if(0===e)return t();E(n,"remove",T),E(n,"add",r),T=r}function ge(e,t,n){void 0===n&&(n=!1),u($.props.triggerTarget||o).forEach((function(r){r.addEventListener(e,t,n),F.push({node:r,eventType:e,handler:t,options:n})}))}function he(){var e;Z()&&(ge("touchstart",ye,{passive:!0}),ge("touchend",Ee,{passive:!0})),(e=$.props.trigger,e.split(/\s+/).filter(Boolean)).forEach((function(e){if("manual"!==e)switch(ge(e,ye),e){case"mouseenter":ge("mouseleave",Ee);break;case"focus":ge(D?"focusout":"blur",Oe);break;case"focusin":ge("focusout",Oe)}}))}function be(){F.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),F=[]}function ye(e){var t,n=!1;if($.state.isEnabled&&!xe(e)&&!I){var r="focus"===(null==(t=C)?void 0:t.type);C=e,L=e.currentTarget,ue(),!$.state.isVisible&&m(e)&&H.forEach((function(t){return t(e)})),"click"===e.type&&($.props.trigger.indexOf("mouseenter")<0||V)&&!1!==$.props.hideOnClick&&$.state.isVisible?n=!0:Le(e),"click"===e.type&&(V=!n),n&&!r&&De(e)}}function we(e){var t=e.target,n=te().contains(t)||z.contains(t);"mousemove"===e.type&&n||function(e,t){var n=t.clientX,r=t.clientY;return e.every((function(e){var t=e.popperRect,o=e.popperState,i=e.props.interactiveBorder,a=p(o.placement),s=o.modifiersData.offset;if(!s)return!0;var u="bottom"===a?s.top.y:0,c="top"===a?s.bottom.y:0,f="right"===a?s.left.x:0,l="left"===a?s.right.x:0,d=t.top-r+u>i,v=r-t.bottom-c>i,m=t.left-n+f>i,g=n-t.right-l>i;return d||v||m||g}))}(Ae().concat(z).map((function(e){var t,n=null==(t=e._tippy.popperInstance)?void 0:t.state;return n?{popperRect:e.getBoundingClientRect(),popperState:n,props:M}:null})).filter(Boolean),e)&&(ce(),De(e))}function Ee(e){xe(e)||$.props.trigger.indexOf("click")>=0&&V||($.props.interactive?$.hideWithInteractivity(e):De(e))}function Oe(e){$.props.trigger.indexOf("focusin")<0&&e.target!==te()||$.props.interactive&&e.relatedTarget&&z.contains(e.relatedTarget)||De(e)}function xe(e){return!!x.isTouch&&Z()!==e.type.indexOf("touch")>=0}function Ce(){Te();var t=$.props,n=t.popperOptions,r=t.placement,i=t.offset,a=t.getReferenceClientRect,s=t.moveTransition,u=ee()?S(z).arrow:null,c=a?{getBoundingClientRect:a,contextElement:a.contextElement||te()}:o,p=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!s}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(e){var t=e.state;if(ee()){var n=re().box;["placement","reference-hidden","escaped"].forEach((function(e){"placement"===e?n.setAttribute("data-placement",t.placement):t.attributes.popper["data-popper-"+e]?n.setAttribute("data-"+e,""):n.removeAttribute("data-"+e)})),t.attributes.popper={}}}}];ee()&&u&&p.push({name:"arrow",options:{element:u,padding:3}}),p.push.apply(p,(null==n?void 0:n.modifiers)||[]),$.popperInstance=e.createPopper(c,z,Object.assign({},n,{placement:r,onFirstUpdate:A,modifiers:p}))}function Te(){$.popperInstance&&($.popperInstance.destroy(),$.popperInstance=null)}function Ae(){return f(z.querySelectorAll("[data-tippy-root]"))}function Le(e){$.clearDelayTimeouts(),e&&ae("onTrigger",[$,e]),de();var t=oe(!0),n=Q(),r=n[0],o=n[1];x.isTouch&&"hold"===r&&o&&(t=o),t?v=setTimeout((function(){$.show()}),t):$.show()}function De(e){if($.clearDelayTimeouts(),ae("onUntrigger",[$,e]),$.state.isVisible){if(!($.props.trigger.indexOf("mouseenter")>=0&&$.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(e.type)>=0&&V)){var t=oe(!1);t?g=setTimeout((function(){$.state.isVisible&&$.hide()}),t):h=requestAnimationFrame((function(){$.hide()}))}}else ve()}}function F(e,n){void 0===n&&(n={});var r=R.plugins.concat(n.plugins||[]);document.addEventListener("touchstart",T,t),window.addEventListener("blur",L);var o=Object.assign({},n,{plugins:r}),i=h(e).reduce((function(e,t){var n=t&&_(t,o);return n&&e.push(n),e}),[]);return v(e)?i[0]:i}F.defaultProps=R,F.setDefaultProps=function(e){Object.keys(e).forEach((function(t){R[t]=e[t]}))},F.currentInput=x;var W=Object.assign({},e.applyStyles,{effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow)}}),X={mouseover:"mouseenter",focusin:"focus",click:"click"};var Y={name:"animateFill",defaultValue:!1,fn:function(e){var t;if(null==(t=e.props.render)||!t.$$tippy)return{};var n=S(e.popper),r=n.box,o=n.content,i=e.props.animateFill?function(){var e=d();return e.className="tippy-backdrop",y([e],"hidden"),e}():null;return{onCreate:function(){i&&(r.insertBefore(i,r.firstElementChild),r.setAttribute("data-animatefill",""),r.style.overflow="hidden",e.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(i){var e=r.style.transitionDuration,t=Number(e.replace("ms",""));o.style.transitionDelay=Math.round(t/10)+"ms",i.style.transitionDuration=e,y([i],"visible")}},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&y([i],"hidden")}}}};var $={clientX:0,clientY:0},q=[];function z(e){var t=e.clientX,n=e.clientY;$={clientX:t,clientY:n}}var J={name:"followCursor",defaultValue:!1,fn:function(e){var t=e.reference,n=w(e.props.triggerTarget||t),r=!1,o=!1,i=!0,a=e.props;function s(){return"initial"===e.props.followCursor&&e.state.isVisible}function u(){n.addEventListener("mousemove",f)}function c(){n.removeEventListener("mousemove",f)}function p(){r=!0,e.setProps({getReferenceClientRect:null}),r=!1}function f(n){var r=!n.target||t.contains(n.target),o=e.props.followCursor,i=n.clientX,a=n.clientY,s=t.getBoundingClientRect(),u=i-s.left,c=a-s.top;!r&&e.props.interactive||e.setProps({getReferenceClientRect:function(){var e=t.getBoundingClientRect(),n=i,r=a;"initial"===o&&(n=e.left+u,r=e.top+c);var s="horizontal"===o?e.top:r,p="vertical"===o?e.right:n,f="horizontal"===o?e.bottom:r,l="vertical"===o?e.left:n;return{width:p-l,height:f-s,top:s,right:p,bottom:f,left:l}}})}function l(){e.props.followCursor&&(q.push({instance:e,doc:n}),function(e){e.addEventListener("mousemove",z)}(n))}function d(){0===(q=q.filter((function(t){return t.instance!==e}))).filter((function(e){return e.doc===n})).length&&function(e){e.removeEventListener("mousemove",z)}(n)}return{onCreate:l,onDestroy:d,onBeforeUpdate:function(){a=e.props},onAfterUpdate:function(t,n){var i=n.followCursor;r||void 0!==i&&a.followCursor!==i&&(d(),i?(l(),!e.state.isMounted||o||s()||u()):(c(),p()))},onMount:function(){e.props.followCursor&&!o&&(i&&(f($),i=!1),s()||u())},onTrigger:function(e,t){m(t)&&($={clientX:t.clientX,clientY:t.clientY}),o="focus"===t.type},onHidden:function(){e.props.followCursor&&(p(),c(),i=!0)}}}};var G={name:"inlinePositioning",defaultValue:!1,fn:function(e){var t,n=e.reference;var r=-1,o=!1,i=[],a={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(o){var a=o.state;e.props.inlinePositioning&&(-1!==i.indexOf(a.placement)&&(i=[]),t!==a.placement&&-1===i.indexOf(a.placement)&&(i.push(a.placement),e.setProps({getReferenceClientRect:function(){return function(e){return function(e,t,n,r){if(n.length<2||null===e)return t;if(2===n.length&&r>=0&&n[0].left>n[1].right)return n[r]||t;switch(e){case"top":case"bottom":var o=n[0],i=n[n.length-1],a="top"===e,s=o.top,u=i.bottom,c=a?o.left:i.left,p=a?o.right:i.right;return{top:s,bottom:u,left:c,right:p,width:p-c,height:u-s};case"left":case"right":var f=Math.min.apply(Math,n.map((function(e){return e.left}))),l=Math.max.apply(Math,n.map((function(e){return e.right}))),d=n.filter((function(t){return"left"===e?t.left===f:t.right===l})),v=d[0].top,m=d[d.length-1].bottom;return{top:v,bottom:m,left:f,right:l,width:l-f,height:m-v};default:return t}}(p(e),n.getBoundingClientRect(),f(n.getClientRects()),r)}(a.placement)}})),t=a.placement)}};function s(){var t;o||(t=function(e,t){var n;return{popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat(((null==(n=e.popperOptions)?void 0:n.modifiers)||[]).filter((function(e){return e.name!==t.name})),[t])})}}(e.props,a),o=!0,e.setProps(t),o=!1)}return{onCreate:s,onAfterUpdate:s,onTrigger:function(t,n){if(m(n)){var o=f(e.reference.getClientRects()),i=o.find((function(e){return e.left-2<=n.clientX&&e.right+2>=n.clientX&&e.top-2<=n.clientY&&e.bottom+2>=n.clientY})),a=o.indexOf(i);r=a>-1?a:r}},onHidden:function(){r=-1}}}};var K={name:"sticky",defaultValue:!1,fn:function(e){var t=e.reference,n=e.popper;function r(t){return!0===e.props.sticky||e.props.sticky===t}var o=null,i=null;function a(){var s=r("reference")?(e.popperInstance?e.popperInstance.state.elements.reference:t).getBoundingClientRect():null,u=r("popper")?n.getBoundingClientRect():null;(s&&Q(o,s)||u&&Q(i,u))&&e.popperInstance&&e.popperInstance.update(),o=s,i=u,e.state.isMounted&&requestAnimationFrame(a)}return{onMount:function(){e.props.sticky&&a()}}}};function Q(e,t){return!e||!t||(e.top!==t.top||e.right!==t.right||e.bottom!==t.bottom||e.left!==t.left)}return F.setDefaultProps({plugins:[Y,J,G,K],render:N}),F.createSingleton=function(e,t){var n;void 0===t&&(t={});var r,o=e,i=[],a=[],c=t.overrides,p=[],f=!1;function l(){a=o.map((function(e){return u(e.props.triggerTarget||e.reference)})).reduce((function(e,t){return e.concat(t)}),[])}function v(){i=o.map((function(e){return e.reference}))}function m(e){o.forEach((function(t){e?t.enable():t.disable()}))}function g(e){return o.map((function(t){var n=t.setProps;return t.setProps=function(o){n(o),t.reference===r&&e.setProps(o)},function(){t.setProps=n}}))}function h(e,t){var n=a.indexOf(t);if(t!==r){r=t;var s=(c||[]).concat("content").reduce((function(e,t){return e[t]=o[n].props[t],e}),{});e.setProps(Object.assign({},s,{getReferenceClientRect:"function"==typeof s.getReferenceClientRect?s.getReferenceClientRect:function(){var e;return null==(e=i[n])?void 0:e.getBoundingClientRect()}}))}}m(!1),v(),l();var b={fn:function(){return{onDestroy:function(){m(!0)},onHidden:function(){r=null},onClickOutside:function(e){e.props.showOnCreate&&!f&&(f=!0,r=null)},onShow:function(e){e.props.showOnCreate&&!f&&(f=!0,h(e,i[0]))},onTrigger:function(e,t){h(e,t.currentTarget)}}}},y=F(d(),Object.assign({},s(t,["overrides"]),{plugins:[b].concat(t.plugins||[]),triggerTarget:a,popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat((null==(n=t.popperOptions)?void 0:n.modifiers)||[],[W])})})),w=y.show;y.show=function(e){if(w(),!r&&null==e)return h(y,i[0]);if(!r||null!=e){if("number"==typeof e)return i[e]&&h(y,i[e]);if(o.indexOf(e)>=0){var t=e.reference;return h(y,t)}return i.indexOf(e)>=0?h(y,e):void 0}},y.showNext=function(){var e=i[0];if(!r)return y.show(0);var t=i.indexOf(r);y.show(i[t+1]||e)},y.showPrevious=function(){var e=i[i.length-1];if(!r)return y.show(e);var t=i.indexOf(r),n=i[t-1]||e;y.show(n)};var E=y.setProps;return y.setProps=function(e){c=e.overrides||c,E(e)},y.setInstances=function(e){m(!0),p.forEach((function(e){return e()})),o=e,m(!1),v(),l(),p=g(y),y.setProps({triggerTarget:a})},p=g(y),y},F.delegate=function(e,n){var r=[],o=[],i=!1,a=n.target,c=s(n,["target"]),p=Object.assign({},c,{trigger:"manual",touch:!1}),f=Object.assign({touch:R.touch},c,{showOnCreate:!0}),l=F(e,p);function d(e){if(e.target&&!i){var t=e.target.closest(a);if(t){var r=t.getAttribute("data-tippy-trigger")||n.trigger||R.trigger;if(!t._tippy&&!("touchstart"===e.type&&"boolean"==typeof f.touch||"touchstart"!==e.type&&r.indexOf(X[e.type])<0)){var s=F(t,f);s&&(o=o.concat(s))}}}}function v(e,t,n,o){void 0===o&&(o=!1),e.addEventListener(t,n,o),r.push({node:e,eventType:t,handler:n,options:o})}return u(l).forEach((function(e){var n=e.destroy,a=e.enable,s=e.disable;e.destroy=function(e){void 0===e&&(e=!0),e&&o.forEach((function(e){e.destroy()})),o=[],r.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),r=[],n()},e.enable=function(){a(),o.forEach((function(e){return e.enable()})),i=!1},e.disable=function(){s(),o.forEach((function(e){return e.disable()})),i=!0},function(e){var n=e.reference;v(n,"touchstart",d,t),v(n,"mouseover",d),v(n,"focusin",d),v(n,"click",d)}(e)})),l},F.hideAll=function(e){var t=void 0===e?{}:e,n=t.exclude,r=t.duration;U.forEach((function(e){var t=!1;if(n&&(t=g(n)?e.reference===n:e.popper===n.popper),!t){var o=e.props.duration;e.setProps({duration:r}),e.hide(),e.state.isDestroyed||e.setProps({duration:o})}}))},F.roundArrow='',F})); + diff --git a/_book/site_libs/quarto-nav/headroom.min.js b/_book/site_libs/quarto-nav/headroom.min.js new file mode 100644 index 0000000..b08f1df --- /dev/null +++ b/_book/site_libs/quarto-nav/headroom.min.js @@ -0,0 +1,7 @@ +/*! + * headroom.js v0.12.0 - Give your page some headroom. Hide your header until you need it + * Copyright (c) 2020 Nick Williams - http://wicky.nillia.ms/headroom.js + * License: MIT + */ + +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(t=t||self).Headroom=n()}(this,function(){"use strict";function t(){return"undefined"!=typeof window}function d(t){return function(t){return t&&t.document&&function(t){return 9===t.nodeType}(t.document)}(t)?function(t){var n=t.document,o=n.body,s=n.documentElement;return{scrollHeight:function(){return Math.max(o.scrollHeight,s.scrollHeight,o.offsetHeight,s.offsetHeight,o.clientHeight,s.clientHeight)},height:function(){return t.innerHeight||s.clientHeight||o.clientHeight},scrollY:function(){return void 0!==t.pageYOffset?t.pageYOffset:(s||o.parentNode||o).scrollTop}}}(t):function(t){return{scrollHeight:function(){return Math.max(t.scrollHeight,t.offsetHeight,t.clientHeight)},height:function(){return Math.max(t.offsetHeight,t.clientHeight)},scrollY:function(){return t.scrollTop}}}(t)}function n(t,s,e){var n,o=function(){var n=!1;try{var t={get passive(){n=!0}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){n=!1}return n}(),i=!1,r=d(t),l=r.scrollY(),a={};function c(){var t=Math.round(r.scrollY()),n=r.height(),o=r.scrollHeight();a.scrollY=t,a.lastScrollY=l,a.direction=ls.tolerance[a.direction],e(a),l=t,i=!1}function h(){i||(i=!0,n=requestAnimationFrame(c))}var u=!!o&&{passive:!0,capture:!1};return t.addEventListener("scroll",h,u),c(),{destroy:function(){cancelAnimationFrame(n),t.removeEventListener("scroll",h,u)}}}function o(t){return t===Object(t)?t:{down:t,up:t}}function s(t,n){n=n||{},Object.assign(this,s.options,n),this.classes=Object.assign({},s.options.classes,n.classes),this.elem=t,this.tolerance=o(this.tolerance),this.offset=o(this.offset),this.initialised=!1,this.frozen=!1}return s.prototype={constructor:s,init:function(){return s.cutsTheMustard&&!this.initialised&&(this.addClass("initial"),this.initialised=!0,setTimeout(function(t){t.scrollTracker=n(t.scroller,{offset:t.offset,tolerance:t.tolerance},t.update.bind(t))},100,this)),this},destroy:function(){this.initialised=!1,Object.keys(this.classes).forEach(this.removeClass,this),this.scrollTracker.destroy()},unpin:function(){!this.hasClass("pinned")&&this.hasClass("unpinned")||(this.addClass("unpinned"),this.removeClass("pinned"),this.onUnpin&&this.onUnpin.call(this))},pin:function(){this.hasClass("unpinned")&&(this.addClass("pinned"),this.removeClass("unpinned"),this.onPin&&this.onPin.call(this))},freeze:function(){this.frozen=!0,this.addClass("frozen")},unfreeze:function(){this.frozen=!1,this.removeClass("frozen")},top:function(){this.hasClass("top")||(this.addClass("top"),this.removeClass("notTop"),this.onTop&&this.onTop.call(this))},notTop:function(){this.hasClass("notTop")||(this.addClass("notTop"),this.removeClass("top"),this.onNotTop&&this.onNotTop.call(this))},bottom:function(){this.hasClass("bottom")||(this.addClass("bottom"),this.removeClass("notBottom"),this.onBottom&&this.onBottom.call(this))},notBottom:function(){this.hasClass("notBottom")||(this.addClass("notBottom"),this.removeClass("bottom"),this.onNotBottom&&this.onNotBottom.call(this))},shouldUnpin:function(t){return"down"===t.direction&&!t.top&&t.toleranceExceeded},shouldPin:function(t){return"up"===t.direction&&t.toleranceExceeded||t.top},addClass:function(t){this.elem.classList.add.apply(this.elem.classList,this.classes[t].split(" "))},removeClass:function(t){this.elem.classList.remove.apply(this.elem.classList,this.classes[t].split(" "))},hasClass:function(t){return this.classes[t].split(" ").every(function(t){return this.classList.contains(t)},this.elem)},update:function(t){t.isOutOfBounds||!0!==this.frozen&&(t.top?this.top():this.notTop(),t.bottom?this.bottom():this.notBottom(),this.shouldUnpin(t)?this.unpin():this.shouldPin(t)&&this.pin())}},s.options={tolerance:{up:0,down:0},offset:0,scroller:t()?window:null,classes:{frozen:"headroom--frozen",pinned:"headroom--pinned",unpinned:"headroom--unpinned",top:"headroom--top",notTop:"headroom--not-top",bottom:"headroom--bottom",notBottom:"headroom--not-bottom",initial:"headroom"}},s.cutsTheMustard=!!(t()&&function(){}.bind&&"classList"in document.documentElement&&Object.assign&&Object.keys&&requestAnimationFrame),s}); diff --git a/_book/site_libs/quarto-nav/quarto-nav.js b/_book/site_libs/quarto-nav/quarto-nav.js new file mode 100644 index 0000000..38cc430 --- /dev/null +++ b/_book/site_libs/quarto-nav/quarto-nav.js @@ -0,0 +1,325 @@ +const headroomChanged = new CustomEvent("quarto-hrChanged", { + detail: {}, + bubbles: true, + cancelable: false, + composed: false, +}); + +const announceDismiss = () => { + const annEl = window.document.getElementById("quarto-announcement"); + if (annEl) { + annEl.remove(); + + const annId = annEl.getAttribute("data-announcement-id"); + window.localStorage.setItem(`quarto-announce-${annId}`, "true"); + } +}; + +const announceRegister = () => { + const annEl = window.document.getElementById("quarto-announcement"); + if (annEl) { + const annId = annEl.getAttribute("data-announcement-id"); + const isDismissed = + window.localStorage.getItem(`quarto-announce-${annId}`) || false; + if (isDismissed) { + announceDismiss(); + return; + } else { + annEl.classList.remove("hidden"); + } + + const actionEl = annEl.querySelector(".quarto-announcement-action"); + if (actionEl) { + actionEl.addEventListener("click", function (e) { + e.preventDefault(); + // Hide the bar immediately + announceDismiss(); + }); + } + } +}; + +window.document.addEventListener("DOMContentLoaded", function () { + let init = false; + + announceRegister(); + + // Manage the back to top button, if one is present. + let lastScrollTop = window.pageYOffset || document.documentElement.scrollTop; + const scrollDownBuffer = 5; + const scrollUpBuffer = 35; + const btn = document.getElementById("quarto-back-to-top"); + const hideBackToTop = () => { + btn.style.display = "none"; + }; + const showBackToTop = () => { + btn.style.display = "inline-block"; + }; + if (btn) { + window.document.addEventListener( + "scroll", + function () { + const currentScrollTop = + window.pageYOffset || document.documentElement.scrollTop; + + // Shows and hides the button 'intelligently' as the user scrolls + if (currentScrollTop - scrollDownBuffer > lastScrollTop) { + hideBackToTop(); + lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; + } else if (currentScrollTop < lastScrollTop - scrollUpBuffer) { + showBackToTop(); + lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; + } + + // Show the button at the bottom, hides it at the top + if (currentScrollTop <= 0) { + hideBackToTop(); + } else if ( + window.innerHeight + currentScrollTop >= + document.body.offsetHeight + ) { + showBackToTop(); + } + }, + false + ); + } + + function throttle(func, wait) { + var timeout; + return function () { + const context = this; + const args = arguments; + const later = function () { + clearTimeout(timeout); + timeout = null; + func.apply(context, args); + }; + + if (!timeout) { + timeout = setTimeout(later, wait); + } + }; + } + + function headerOffset() { + // Set an offset if there is are fixed top navbar + const headerEl = window.document.querySelector("header.fixed-top"); + if (headerEl) { + return headerEl.clientHeight; + } else { + return 0; + } + } + + function footerOffset() { + const footerEl = window.document.querySelector("footer.footer"); + if (footerEl) { + return footerEl.clientHeight; + } else { + return 0; + } + } + + function dashboardOffset() { + const dashboardNavEl = window.document.getElementById( + "quarto-dashboard-header" + ); + if (dashboardNavEl !== null) { + return dashboardNavEl.clientHeight; + } else { + return 0; + } + } + + function updateDocumentOffsetWithoutAnimation() { + updateDocumentOffset(false); + } + + function updateDocumentOffset(animated) { + // set body offset + const topOffset = headerOffset(); + const bodyOffset = topOffset + footerOffset() + dashboardOffset(); + const bodyEl = window.document.body; + bodyEl.setAttribute("data-bs-offset", topOffset); + bodyEl.style.paddingTop = topOffset + "px"; + + // deal with sidebar offsets + const sidebars = window.document.querySelectorAll( + ".sidebar, .headroom-target" + ); + sidebars.forEach((sidebar) => { + if (!animated) { + sidebar.classList.add("notransition"); + // Remove the no transition class after the animation has time to complete + setTimeout(function () { + sidebar.classList.remove("notransition"); + }, 201); + } + + if (window.Headroom && sidebar.classList.contains("sidebar-unpinned")) { + sidebar.style.top = "0"; + sidebar.style.maxHeight = "100vh"; + } else { + sidebar.style.top = topOffset + "px"; + sidebar.style.maxHeight = "calc(100vh - " + topOffset + "px)"; + } + }); + + // allow space for footer + const mainContainer = window.document.querySelector(".quarto-container"); + if (mainContainer) { + mainContainer.style.minHeight = "calc(100vh - " + bodyOffset + "px)"; + } + + // link offset + let linkStyle = window.document.querySelector("#quarto-target-style"); + if (!linkStyle) { + linkStyle = window.document.createElement("style"); + linkStyle.setAttribute("id", "quarto-target-style"); + window.document.head.appendChild(linkStyle); + } + while (linkStyle.firstChild) { + linkStyle.removeChild(linkStyle.firstChild); + } + if (topOffset > 0) { + linkStyle.appendChild( + window.document.createTextNode(` + section:target::before { + content: ""; + display: block; + height: ${topOffset}px; + margin: -${topOffset}px 0 0; + }`) + ); + } + if (init) { + window.dispatchEvent(headroomChanged); + } + init = true; + } + + // initialize headroom + var header = window.document.querySelector("#quarto-header"); + if (header && window.Headroom) { + const headroom = new window.Headroom(header, { + tolerance: 5, + onPin: function () { + const sidebars = window.document.querySelectorAll( + ".sidebar, .headroom-target" + ); + sidebars.forEach((sidebar) => { + sidebar.classList.remove("sidebar-unpinned"); + }); + updateDocumentOffset(); + }, + onUnpin: function () { + const sidebars = window.document.querySelectorAll( + ".sidebar, .headroom-target" + ); + sidebars.forEach((sidebar) => { + sidebar.classList.add("sidebar-unpinned"); + }); + updateDocumentOffset(); + }, + }); + headroom.init(); + + let frozen = false; + window.quartoToggleHeadroom = function () { + if (frozen) { + headroom.unfreeze(); + frozen = false; + } else { + headroom.freeze(); + frozen = true; + } + }; + } + + window.addEventListener( + "hashchange", + function (e) { + if ( + getComputedStyle(document.documentElement).scrollBehavior !== "smooth" + ) { + window.scrollTo(0, window.pageYOffset - headerOffset()); + } + }, + false + ); + + // Observe size changed for the header + const headerEl = window.document.querySelector("header.fixed-top"); + if (headerEl && window.ResizeObserver) { + const observer = new window.ResizeObserver(() => { + setTimeout(updateDocumentOffsetWithoutAnimation, 0); + }); + observer.observe(headerEl, { + attributes: true, + childList: true, + characterData: true, + }); + } else { + window.addEventListener( + "resize", + throttle(updateDocumentOffsetWithoutAnimation, 50) + ); + } + setTimeout(updateDocumentOffsetWithoutAnimation, 250); + + // fixup index.html links if we aren't on the filesystem + if (window.location.protocol !== "file:") { + const links = window.document.querySelectorAll("a"); + for (let i = 0; i < links.length; i++) { + if (links[i].href) { + links[i].dataset.originalHref = links[i].href; + links[i].href = links[i].href.replace(/\/index\.html/, "/"); + } + } + + // Fixup any sharing links that require urls + // Append url to any sharing urls + const sharingLinks = window.document.querySelectorAll( + "a.sidebar-tools-main-item, a.quarto-navigation-tool, a.quarto-navbar-tools, a.quarto-navbar-tools-item" + ); + for (let i = 0; i < sharingLinks.length; i++) { + const sharingLink = sharingLinks[i]; + const href = sharingLink.getAttribute("href"); + if (href) { + sharingLink.setAttribute( + "href", + href.replace("|url|", window.location.href) + ); + } + } + + // Scroll the active navigation item into view, if necessary + const navSidebar = window.document.querySelector("nav#quarto-sidebar"); + if (navSidebar) { + // Find the active item + const activeItem = navSidebar.querySelector("li.sidebar-item a.active"); + if (activeItem) { + // Wait for the scroll height and height to resolve by observing size changes on the + // nav element that is scrollable + const resizeObserver = new ResizeObserver((_entries) => { + // The bottom of the element + const elBottom = activeItem.offsetTop; + const viewBottom = navSidebar.scrollTop + navSidebar.clientHeight; + + // The element height and scroll height are the same, then we are still loading + if (viewBottom !== navSidebar.scrollHeight) { + // Determine if the item isn't visible and scroll to it + if (elBottom >= viewBottom) { + navSidebar.scrollTop = elBottom; + } + + // stop observing now since we've completed the scroll + resizeObserver.unobserve(navSidebar); + } + }); + resizeObserver.observe(navSidebar); + } + } + } +}); diff --git a/_book/site_libs/quarto-search/autocomplete.umd.js b/_book/site_libs/quarto-search/autocomplete.umd.js new file mode 100644 index 0000000..ae0063a --- /dev/null +++ b/_book/site_libs/quarto-search/autocomplete.umd.js @@ -0,0 +1,3 @@ +/*! @algolia/autocomplete-js 1.11.1 | MIT License | © Algolia, Inc. and contributors | https://github.com/algolia/autocomplete */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@algolia/autocomplete-js"]={})}(this,(function(e){"use strict";function t(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function n(e){for(var n=1;n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,u,a=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=n.return&&(u=n.return(),Object(u)!==u))return}finally{if(c)throw o}}return a}}(e,t)||c(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||c(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){if(e){if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function x(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function N(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r=3||2===n&&r>=4||1===n&&r>=10);function i(t,n,r){if(o&&void 0!==r){var i=r[0].__autocomplete_algoliaCredentials,u={"X-Algolia-Application-Id":i.appId,"X-Algolia-API-Key":i.apiKey};e.apply(void 0,[t].concat(D(n),[{headers:u}]))}else e.apply(void 0,[t].concat(D(n)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("clickedObjectIDsAfterSearch",B(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("clickedObjectIDs",B(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("convertedObjectIDsAfterSearch",B(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("convertedObjectIDs",B(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&t.reduce((function(e,t){var n=t.items,r=k(t,A);return[].concat(D(e),D(q(N(N({},r),{},{objectIDs:(null==n?void 0:n.map((function(e){return e.objectID})))||r.objectIDs})).map((function(e){return{items:n,payload:e}}))))}),[]).forEach((function(e){var t=e.items;return i("viewedObjectIDs",[e.payload],t)}))},viewedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function F(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function L(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function U(e){return U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},U(e)}function M(e){return function(e){if(Array.isArray(e))return H(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return H(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return H(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function H(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&z({onItemsChange:r,items:n,insights:a,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;function l(e){t({algoliaInsightsPlugin:{__algoliaSearchParameters:W({clickAnalytics:!0},e?{userToken:e}:{}),insights:a}})}u("addAlgoliaAgent","insights-plugin"),l(),u("onUserTokenChange",l),u("getUserToken",null,(function(e,t){l(t)})),n((function(e){var t=e.item,n=e.state,r=e.event,i=e.source;L(t)&&o({state:n,event:r,insights:a,item:t,insightsEvents:[W({eventName:"Item Selected"},j({item:t,items:i.getItems().filter(L)}))]})})),r((function(e){var t=e.item,n=e.source,r=e.state,o=e.event;L(t)&&i({state:r,event:o,insights:a,item:t,insightsEvents:[W({eventName:"Item Active"},j({item:t,items:n.getItems().filter(L)}))]})}))},onStateChange:function(e){var t=e.state;c({state:t})},__autocomplete_pluginOptions:e}}function J(e,t){var n=t;return{then:function(t,r){return J(e.then(Y(t,n,e),Y(r,n,e)),n)},catch:function(t){return J(e.catch(Y(t,n,e)),n)},finally:function(t){return t&&n.onCancelList.push(t),J(e.finally(Y(t&&function(){return n.onCancelList=[],t()},n,e)),n)},cancel:function(){n.isCanceled=!0;var e=n.onCancelList;n.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===n.isCanceled}}}function X(e){return J(e,{isCanceled:!1,onCancelList:[]})}function Y(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}function Z(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var o=(null===t?-1:t)+e;return o<=-1||o>=n?null===r?null:0:o}function ee(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function te(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:d(),plugins:o,initialState:he({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(ye(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:O,onResolve:O};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=te(te({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return m(e)})).then((function(e){return e.map((function(e){return he(he({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:he({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function Se(e){return Se="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Se(e)}function je(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Pe(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var He,Ve,We,Ke=null,Qe=(He=-1,Ve=-1,We=void 0,function(e){var t=++He;return Promise.resolve(e).then((function(e){return We&&t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function et(e){return et="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},et(e)}var tt=["props","refresh","store"],nt=["inputElement","formElement","panelElement"],rt=["inputElement"],ot=["inputElement","maxLength"],it=["source"],ut=["item","source"];function at(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function lt(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ft(e){var t=e.props,n=e.refresh,r=e.store,o=st(e,tt);return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,i=e.panelElement;function u(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,i].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return lt({onTouchStart:u,onMouseDown:u,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},st(e,nt))},getRootProps:function(e){return lt({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?r.getState().collections.map((function(e){var n=e.source;return ie(t.id,"list",n)})).join(" "):void 0,"aria-labelledby":ie(t.id,"label")},e)},getFormProps:function(e){return e.inputElement,lt({action:"",noValidate:!0,role:"search",onSubmit:function(i){var u;i.preventDefault(),t.onSubmit(lt({event:i,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(u=e.inputElement)||void 0===u||u.blur()},onReset:function(i){var u;i.preventDefault(),t.onReset(lt({event:i,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(u=e.inputElement)||void 0===u||u.focus()}},st(e,rt))},getLabelProps:function(e){return lt({htmlFor:ie(t.id,"input"),id:ie(t.id,"label")},e)},getInputProps:function(e){var i;function u(e){(t.openOnFocus||Boolean(r.getState().query))&&$e(lt({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var a=e||{};a.inputElement;var l=a.maxLength,c=void 0===l?512:l,s=st(a,ot),f=oe(r.getState()),p=function(e){return Boolean(e&&e.match(ue))}((null===(i=t.environment.navigator)||void 0===i?void 0:i.userAgent)||""),m=t.enterKeyHint||(null!=f&&f.itemUrl&&!p?"go":"search");return lt({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?ie(t.id,"item-".concat(r.getState().activeItemId),null==f?void 0:f.source):void 0,"aria-controls":r.getState().isOpen?r.getState().collections.map((function(e){var n=e.source;return ie(t.id,"list",n)})).join(" "):void 0,"aria-labelledby":ie(t.id,"label"),value:r.getState().completion||r.getState().query,id:ie(t.id,"input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:m,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:c,type:"search",onChange:function(e){$e(lt({event:e,props:t,query:e.currentTarget.value.slice(0,c),refresh:n,store:r},o))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,i=Ze(e,Ge);if("ArrowUp"===t.key||"ArrowDown"===t.key){var u=function(){var e=oe(o.getState()),t=n.environment.document.getElementById(ie(n.id,"item-".concat(o.getState().activeItemId),null==e?void 0:e.source));t&&(t.scrollIntoViewIfNeeded?t.scrollIntoViewIfNeeded(!1):t.scrollIntoView(!1))},a=function(){var e=oe(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,u=e.itemInputValue,a=e.itemUrl,l=e.source;l.onActive(Xe({event:t,item:n,itemInputValue:u,itemUrl:a,refresh:r,source:l,state:o.getState()},i))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?$e(Xe({event:t,props:n,query:o.getState().query,refresh:r,store:o},i)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),a(),setTimeout(u,0)})):(o.dispatch(t.key,{}),a(),u())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||o.pendingRequests.cancelAll());t.preventDefault();var l=oe(o.getState()),c=l.item,s=l.itemInputValue,f=l.itemUrl,p=l.source;if(t.metaKey||t.ctrlKey)void 0!==f&&(p.onSelect(Xe({event:t,item:c,itemInputValue:s,itemUrl:f,refresh:r,source:p,state:o.getState()},i)),n.navigator.navigateNewTab({itemUrl:f,item:c,state:o.getState()}));else if(t.shiftKey)void 0!==f&&(p.onSelect(Xe({event:t,item:c,itemInputValue:s,itemUrl:f,refresh:r,source:p,state:o.getState()},i)),n.navigator.navigateNewWindow({itemUrl:f,item:c,state:o.getState()}));else if(t.altKey);else{if(void 0!==f)return p.onSelect(Xe({event:t,item:c,itemInputValue:s,itemUrl:f,refresh:r,source:p,state:o.getState()},i)),void n.navigator.navigate({itemUrl:f,item:c,state:o.getState()});$e(Xe({event:t,nextState:{isOpen:!1},props:n,query:s,refresh:r,store:o},i)).then((function(){p.onSelect(Xe({event:t,item:c,itemInputValue:s,itemUrl:f,refresh:r,source:p,state:o.getState()},i))}))}}}(lt({event:e,props:t,refresh:n,store:r},o))},onFocus:u,onBlur:O,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||u(n)}},s)},getPanelProps:function(e){return lt({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.source,o=st(n,it);return lt({role:"listbox","aria-labelledby":ie(t.id,"label"),id:ie(t.id,"list",r)},o)},getItemProps:function(e){var i=e.item,u=e.source,a=st(e,ut);return lt({id:ie(t.id,"item-".concat(i.__autocomplete_id),u),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=oe(r.getState());if(null!==r.getState().activeItemId&&t){var u=t.item,a=t.itemInputValue,l=t.itemUrl,c=t.source;c.onActive(lt({event:e,item:u,itemInputValue:a,itemUrl:l,refresh:n,source:c,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=u.getItemInputValue({item:i,state:r.getState()}),l=u.getItemUrl({item:i,state:r.getState()});(l?Promise.resolve():$e(lt({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){u.onSelect(lt({event:e,item:i,itemInputValue:a,itemUrl:l,refresh:n,source:u,state:r.getState()},o))}))}},a)}}}function pt(e){return pt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},pt(e)}function mt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function vt(e){for(var t=1;t=5&&((o||!e&&5===r)&&(u.push(r,0,o,n),r=6),e&&(u.push(r,e,0,n),r=6)),o=""},l=0;l"===t?(r=1,o=""):o=t+o[0]:i?t===i?i="":o+=t:'"'===t||"'"===t?i=t:">"===t?(a(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[l][c+1])?(a(),3===r&&(u=u[0]),r=u,(u=u[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(a(),r=2):o+=t),3===r&&"!--"===o&&(r=4,u=u[0])}return a(),u}(e)),t),arguments,[])).length>1?t:t[0]}var kt=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n};function xt(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return"The element ".concat(JSON.stringify(t)," is not in the document."),n}return t}function Nt(){for(var e=arguments.length,t=new Array(e),n=0;n2&&(u.children=arguments.length>3?Jt.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(i in e.defaultProps)void 0===u[i]&&(u[i]=e.defaultProps[i]);return sn(e,u,r,o,null)}function sn(e,t,n,r,o){var i={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++Yt:o};return null==o&&null!=Xt.vnode&&Xt.vnode(i),i}function fn(e){return e.children}function pn(e,t){this.props=e,this.context=t}function mn(e,t){if(null==t)return e.__?mn(e.__,e.__.__k.indexOf(e)+1):null;for(var n;tt&&Zt.sort(nn));yn.__r=0}function bn(e,t,n,r,o,i,u,a,l,c){var s,f,p,m,v,d,y,b=r&&r.__k||on,g=b.length;for(n.__k=[],s=0;s0?sn(m.type,m.props,m.key,m.ref?m.ref:null,m.__v):m)){if(m.__=n,m.__b=n.__b+1,null===(p=b[s])||p&&m.key==p.key&&m.type===p.type)b[s]=void 0;else for(f=0;f=0;t--)if((n=e.__k[t])&&(r=On(n)))return r;return null}function _n(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||un.test(t)?n:n+"px"}function Sn(e,t,n,r,o){var i;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||_n(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||_n(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])i=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+i]=n,n?r||e.addEventListener(t,i?Pn:jn,i):e.removeEventListener(t,i?Pn:jn,i);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function jn(e){return this.l[e.type+!1](Xt.event?Xt.event(e):e)}function Pn(e){return this.l[e.type+!0](Xt.event?Xt.event(e):e)}function wn(e,t,n,r,o,i,u,a,l){var c,s,f,p,m,v,d,y,b,g,h,O,_,S,j,P=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(l=n.__h,a=t.__e=n.__e,t.__h=null,i=[a]),(c=Xt.__b)&&c(t);try{e:if("function"==typeof P){if(y=t.props,b=(c=P.contextType)&&r[c.__c],g=c?b?b.props.value:c.__:r,n.__c?d=(s=t.__c=n.__c).__=s.__E:("prototype"in P&&P.prototype.render?t.__c=s=new P(y,g):(t.__c=s=new pn(y,g),s.constructor=P,s.render=Cn),b&&b.sub(s),s.props=y,s.state||(s.state={}),s.context=g,s.__n=r,f=s.__d=!0,s.__h=[],s._sb=[]),null==s.__s&&(s.__s=s.state),null!=P.getDerivedStateFromProps&&(s.__s==s.state&&(s.__s=an({},s.__s)),an(s.__s,P.getDerivedStateFromProps(y,s.__s))),p=s.props,m=s.state,s.__v=t,f)null==P.getDerivedStateFromProps&&null!=s.componentWillMount&&s.componentWillMount(),null!=s.componentDidMount&&s.__h.push(s.componentDidMount);else{if(null==P.getDerivedStateFromProps&&y!==p&&null!=s.componentWillReceiveProps&&s.componentWillReceiveProps(y,g),!s.__e&&null!=s.shouldComponentUpdate&&!1===s.shouldComponentUpdate(y,s.__s,g)||t.__v===n.__v){for(t.__v!==n.__v&&(s.props=y,s.state=s.__s,s.__d=!1),s.__e=!1,t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),h=0;h0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(xn);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Tn(e){return function(e){if(Array.isArray(e))return qn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return qn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return qn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function qn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n",""":'"',"'":"'"},Fn=new RegExp(/\w/i),Ln=/&(amp|quot|lt|gt|#39);/g,Un=RegExp(Ln.source);function Mn(e,t){var n,r,o,i=e[t],u=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,a=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return Fn.test((o=i.value)&&Un.test(o)?o.replace(Ln,(function(e){return Rn[e]})):o)||a!==u?i.isHighlighted:a}function Hn(e){return Hn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Hn(e)}function Vn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Wn(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ur(e){return function(e){if(Array.isArray(e))return ar(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ar(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ar(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ar(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0;if(!O.value.core.openOnFocus&&!t.query)return n;var r=Boolean(y.current||O.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:br,options:e}}))})),j=f(n({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},O.value.core.initialState)),P={getEnvironmentProps:O.value.renderer.getEnvironmentProps,getFormProps:O.value.renderer.getFormProps,getInputProps:O.value.renderer.getInputProps,getItemProps:O.value.renderer.getItemProps,getLabelProps:O.value.renderer.getLabelProps,getListProps:O.value.renderer.getListProps,getPanelProps:O.value.renderer.getPanelProps,getRootProps:O.value.renderer.getRootProps},w={setActiveItemId:S.value.setActiveItemId,setQuery:S.value.setQuery,setCollections:S.value.setCollections,setIsOpen:S.value.setIsOpen,setStatus:S.value.setStatus,setContext:S.value.setContext,refresh:S.value.refresh,navigator:S.value.navigator},I=m((function(){return Ct.bind(O.value.renderer.renderer.createElement)})),A=m((function(){return Gt({autocomplete:S.value,autocompleteScopeApi:w,classNames:O.value.renderer.classNames,environment:O.value.core.environment,isDetached:_.value,placeholder:O.value.core.placeholder,propGetters:P,setIsModalOpen:k,state:j.current,translations:O.value.renderer.translations})}));function E(){Ht(A.value.panel,{style:_.value?{}:yr({panelPlacement:O.value.renderer.panelPlacement,container:A.value.root,form:A.value.form,environment:O.value.core.environment})})}function D(e){j.current=e;var t={autocomplete:S.value,autocompleteScopeApi:w,classNames:O.value.renderer.classNames,components:O.value.renderer.components,container:O.value.renderer.container,html:I.value,dom:A.value,panelContainer:_.value?A.value.detachedContainer:O.value.renderer.panelContainer,propGetters:P,state:j.current,renderer:O.value.renderer.renderer},r=!b(e)&&!y.current&&O.value.renderer.renderNoResults||O.value.renderer.render;!function(e){var t=e.autocomplete,r=e.autocompleteScopeApi,o=e.dom,i=e.propGetters,u=e.state;Vt(o.root,i.getRootProps(n({state:u,props:t.getRootProps({})},r))),Vt(o.input,i.getInputProps(n({state:u,props:t.getInputProps({inputElement:o.input}),inputElement:o.input},r))),Ht(o.label,{hidden:"stalled"===u.status}),Ht(o.loadingIndicator,{hidden:"stalled"!==u.status}),Ht(o.clearButton,{hidden:!u.query}),Ht(o.detachedSearchButtonQuery,{textContent:u.query}),Ht(o.detachedSearchButtonPlaceholder,{hidden:Boolean(u.query)})}(t),function(e,t){var r=t.autocomplete,o=t.autocompleteScopeApi,u=t.classNames,a=t.html,l=t.dom,c=t.panelContainer,s=t.propGetters,f=t.state,p=t.components,m=t.renderer;if(f.isOpen){c.contains(l.panel)||"loading"===f.status||c.appendChild(l.panel),l.panel.classList.toggle("aa-Panel--stalled","stalled"===f.status);var v=f.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var l=e.source,c=e.items;return m.createElement("section",{key:t,className:u.source,"data-autocomplete-source-id":l.sourceId},l.templates.header&&m.createElement("div",{className:u.sourceHeader},l.templates.header({components:p,createElement:m.createElement,Fragment:m.Fragment,items:c,source:l,state:f,html:a})),l.templates.noResults&&0===c.length?m.createElement("div",{className:u.sourceNoResults},l.templates.noResults({components:p,createElement:m.createElement,Fragment:m.Fragment,source:l,state:f,html:a})):m.createElement("ul",i({className:u.list},s.getListProps(n({state:f,props:r.getListProps({source:l})},o))),c.map((function(e){var t=r.getItemProps({item:e,source:l});return m.createElement("li",i({key:t.id,className:u.item},s.getItemProps(n({state:f,props:t},o))),l.templates.item({components:p,createElement:m.createElement,Fragment:m.Fragment,item:e,state:f,html:a}))}))),l.templates.footer&&m.createElement("div",{className:u.sourceFooter},l.templates.footer({components:p,createElement:m.createElement,Fragment:m.Fragment,items:c,source:l,state:f,html:a})))})),d=m.createElement(m.Fragment,null,m.createElement("div",{className:u.panelLayout},v),m.createElement("div",{className:"aa-GradientBottom"})),y=v.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(n(n({children:d,state:f,sections:v,elements:y},m),{},{components:p,html:a},o),l.panel)}else c.contains(l.panel)&&c.removeChild(l.panel)}(r,t)}function C(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};l();var t=O.value.renderer,n=t.components,r=u(t,gr);g.current=qt(r,O.value.core,{components:Bt(n,(function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")})),initialState:j.current},e),v(),c(),S.value.refresh().then((function(){D(j.current)}))}function k(e){requestAnimationFrame((function(){var t=O.value.core.environment.document.body.contains(A.value.detachedOverlay);e!==t&&(e?(O.value.core.environment.document.body.appendChild(A.value.detachedOverlay),O.value.core.environment.document.body.classList.add("aa-Detached"),A.value.input.focus()):(O.value.core.environment.document.body.removeChild(A.value.detachedOverlay),O.value.core.environment.document.body.classList.remove("aa-Detached")))}))}return a((function(){var e=S.value.getEnvironmentProps({formElement:A.value.form,panelElement:A.value.panel,inputElement:A.value.input});return Ht(O.value.core.environment,e),function(){Ht(O.value.core.environment,Object.keys(e).reduce((function(e,t){return n(n({},e),{},o({},t,void 0))}),{}))}})),a((function(){var e=_.value?O.value.core.environment.document.body:O.value.renderer.panelContainer,t=_.value?A.value.detachedOverlay:A.value.panel;return _.value&&j.current.isOpen&&k(!0),D(j.current),function(){e.contains(t)&&e.removeChild(t)}})),a((function(){var e=O.value.renderer.container;return e.appendChild(A.value.root),function(){e.removeChild(A.value.root)}})),a((function(){var e=p((function(e){D(e.state)}),0);return h.current=function(t){var n=t.state,r=t.prevState;(_.value&&r.isOpen!==n.isOpen&&k(n.isOpen),_.value||!n.isOpen||r.isOpen||E(),n.query!==r.query)&&O.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){h.current=void 0}})),a((function(){var e=p((function(){var e=_.value;_.value=O.value.core.environment.matchMedia(O.value.renderer.detachedMediaQuery).matches,e!==_.value?C({}):requestAnimationFrame(E)}),20);return O.value.core.environment.addEventListener("resize",e),function(){O.value.core.environment.removeEventListener("resize",e)}})),a((function(){if(!_.value)return function(){};function e(e){A.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=O.value.core.environment.matchMedia(getComputedStyle(O.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),a((function(){return requestAnimationFrame(E),function(){}})),n(n({},w),{},{update:C,destroy:function(){l()}})},e.getAlgoliaFacets=function(e){var t=hr({transformResponse:function(e){return e.facetHits}}),r=e.queries.map((function(e){return n(n({},e),{},{type:"facet"})}));return t(n(n({},e),{},{queries:r}))},e.getAlgoliaResults=Or,Object.defineProperty(e,"__esModule",{value:!0})})); + diff --git a/_book/site_libs/quarto-search/fuse.min.js b/_book/site_libs/quarto-search/fuse.min.js new file mode 100644 index 0000000..adc2835 --- /dev/null +++ b/_book/site_libs/quarto-search/fuse.min.js @@ -0,0 +1,9 @@ +/** + * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io) + * + * Copyright (c) 2022 Kiro Risk (http://kiro.me) + * All Rights Reserved. Apache Software License 2.0 + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ +var e,t;e=this,t=function(){"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3,n=new Map,r=Math.pow(10,t);return{get:function(t){var i=t.match(C).length;if(n.has(i))return n.get(i);var o=1/Math.pow(i,.5*e),c=parseFloat(Math.round(o*r)/r);return n.set(i,c),c},clear:function(){n.clear()}}}var $=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.getFn,i=void 0===n?I.getFn:n,o=t.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o;r(this,e),this.norm=E(c,3),this.getFn=i,this.isCreated=!1,this.setIndexRecords()}return o(e,[{key:"setSources",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.docs=e}},{key:"setIndexRecords",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.records=e}},{key:"setKeys",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.keys=t,this._keysMap={},t.forEach((function(t,n){e._keysMap[t.id]=n}))}},{key:"create",value:function(){var e=this;!this.isCreated&&this.docs.length&&(this.isCreated=!0,g(this.docs[0])?this.docs.forEach((function(t,n){e._addString(t,n)})):this.docs.forEach((function(t,n){e._addObject(t,n)})),this.norm.clear())}},{key:"add",value:function(e){var t=this.size();g(e)?this._addString(e,t):this._addObject(e,t)}},{key:"removeAt",value:function(e){this.records.splice(e,1);for(var t=e,n=this.size();t2&&void 0!==arguments[2]?arguments[2]:{},r=n.getFn,i=void 0===r?I.getFn:r,o=n.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o,a=new $({getFn:i,fieldNormWeight:c});return a.setKeys(e.map(_)),a.setSources(t),a.create(),a}function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.errors,r=void 0===n?0:n,i=t.currentLocation,o=void 0===i?0:i,c=t.expectedLocation,a=void 0===c?0:c,s=t.distance,u=void 0===s?I.distance:s,h=t.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=r/e.length;if(l)return f;var d=Math.abs(a-o);return u?f+d/u:d?1:f}function N(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:I.minMatchCharLength,n=[],r=-1,i=-1,o=0,c=e.length;o=t&&n.push([r,i]),r=-1)}return e[o-1]&&o-r>=t&&n.push([r,o-1]),n}var P=32;function W(e){for(var t={},n=0,r=e.length;n1&&void 0!==arguments[1]?arguments[1]:{},o=i.location,c=void 0===o?I.location:o,a=i.threshold,s=void 0===a?I.threshold:a,u=i.distance,h=void 0===u?I.distance:u,l=i.includeMatches,f=void 0===l?I.includeMatches:l,d=i.findAllMatches,v=void 0===d?I.findAllMatches:d,g=i.minMatchCharLength,y=void 0===g?I.minMatchCharLength:g,p=i.isCaseSensitive,m=void 0===p?I.isCaseSensitive:p,k=i.ignoreLocation,M=void 0===k?I.ignoreLocation:k;if(r(this,e),this.options={location:c,threshold:s,distance:h,includeMatches:f,findAllMatches:v,minMatchCharLength:y,isCaseSensitive:m,ignoreLocation:M},this.pattern=m?t:t.toLowerCase(),this.chunks=[],this.pattern.length){var b=function(e,t){n.chunks.push({pattern:e,alphabet:W(e),startIndex:t})},x=this.pattern.length;if(x>P){for(var w=0,L=x%P,S=x-L;w3&&void 0!==arguments[3]?arguments[3]:{},i=r.location,o=void 0===i?I.location:i,c=r.distance,a=void 0===c?I.distance:c,s=r.threshold,u=void 0===s?I.threshold:s,h=r.findAllMatches,l=void 0===h?I.findAllMatches:h,f=r.minMatchCharLength,d=void 0===f?I.minMatchCharLength:f,v=r.includeMatches,g=void 0===v?I.includeMatches:v,y=r.ignoreLocation,p=void 0===y?I.ignoreLocation:y;if(t.length>P)throw new Error(w(P));for(var m,k=t.length,M=e.length,b=Math.max(0,Math.min(o,M)),x=u,L=b,S=d>1||g,_=S?Array(M):[];(m=e.indexOf(t,L))>-1;){var O=R(t,{currentLocation:m,expectedLocation:b,distance:a,ignoreLocation:p});if(x=Math.min(O,x),L=m+k,S)for(var j=0;j=z;q-=1){var B=q-1,J=n[e.charAt(B)];if(S&&(_[B]=+!!J),K[q]=(K[q+1]<<1|1)&J,F&&(K[q]|=(A[q+1]|A[q])<<1|1|A[q+1]),K[q]&$&&(C=R(t,{errors:F,currentLocation:B,expectedLocation:b,distance:a,ignoreLocation:p}))<=x){if(x=C,(L=B)<=b)break;z=Math.max(1,2*b-L)}}if(R(t,{errors:F+1,currentLocation:b,expectedLocation:b,distance:a,ignoreLocation:p})>x)break;A=K}var U={isMatch:L>=0,score:Math.max(.001,C)};if(S){var V=N(_,d);V.length?g&&(U.indices=V):U.isMatch=!1}return U}(e,n,i,{location:c+o,distance:a,threshold:s,findAllMatches:u,minMatchCharLength:h,includeMatches:r,ignoreLocation:l}),p=y.isMatch,m=y.score,k=y.indices;p&&(g=!0),v+=m,p&&k&&(d=[].concat(f(d),f(k)))}));var y={isMatch:g,score:g?v/this.chunks.length:1};return g&&r&&(y.indices=d),y}}]),e}(),z=function(){function e(t){r(this,e),this.pattern=t}return o(e,[{key:"search",value:function(){}}],[{key:"isMultiMatch",value:function(e){return D(e,this.multiRegex)}},{key:"isSingleMatch",value:function(e){return D(e,this.singleRegex)}}]),e}();function D(e,t){var n=e.match(t);return n?n[1]:null}var K=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e===this.pattern;return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"exact"}},{key:"multiRegex",get:function(){return/^="(.*)"$/}},{key:"singleRegex",get:function(){return/^=(.*)$/}}]),n}(z),q=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=-1===e.indexOf(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"$/}},{key:"singleRegex",get:function(){return/^!(.*)$/}}]),n}(z),B=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"prefix-exact"}},{key:"multiRegex",get:function(){return/^\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^\^(.*)$/}}]),n}(z),J=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-prefix-exact"}},{key:"multiRegex",get:function(){return/^!\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^!\^(.*)$/}}]),n}(z),U=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}],[{key:"type",get:function(){return"suffix-exact"}},{key:"multiRegex",get:function(){return/^"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^(.*)\$$/}}]),n}(z),V=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-suffix-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^!(.*)\$$/}}]),n}(z),G=function(e){a(n,e);var t=l(n);function n(e){var i,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=o.location,a=void 0===c?I.location:c,s=o.threshold,u=void 0===s?I.threshold:s,h=o.distance,l=void 0===h?I.distance:h,f=o.includeMatches,d=void 0===f?I.includeMatches:f,v=o.findAllMatches,g=void 0===v?I.findAllMatches:v,y=o.minMatchCharLength,p=void 0===y?I.minMatchCharLength:y,m=o.isCaseSensitive,k=void 0===m?I.isCaseSensitive:m,M=o.ignoreLocation,b=void 0===M?I.ignoreLocation:M;return r(this,n),(i=t.call(this,e))._bitapSearch=new T(e,{location:a,threshold:u,distance:l,includeMatches:d,findAllMatches:g,minMatchCharLength:p,isCaseSensitive:k,ignoreLocation:b}),i}return o(n,[{key:"search",value:function(e){return this._bitapSearch.searchIn(e)}}],[{key:"type",get:function(){return"fuzzy"}},{key:"multiRegex",get:function(){return/^"(.*)"$/}},{key:"singleRegex",get:function(){return/^(.*)$/}}]),n}(z),H=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){for(var t,n=0,r=[],i=this.pattern.length;(t=e.indexOf(this.pattern,n))>-1;)n=t+i,r.push([t,n-1]);var o=!!r.length;return{isMatch:o,score:o?0:1,indices:r}}}],[{key:"type",get:function(){return"include"}},{key:"multiRegex",get:function(){return/^'"(.*)"$/}},{key:"singleRegex",get:function(){return/^'(.*)$/}}]),n}(z),Q=[K,H,B,J,V,U,q,G],X=Q.length,Y=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/;function Z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.split("|").map((function(e){for(var n=e.trim().split(Y).filter((function(e){return e&&!!e.trim()})),r=[],i=0,o=n.length;i1&&void 0!==arguments[1]?arguments[1]:{},i=n.isCaseSensitive,o=void 0===i?I.isCaseSensitive:i,c=n.includeMatches,a=void 0===c?I.includeMatches:c,s=n.minMatchCharLength,u=void 0===s?I.minMatchCharLength:s,h=n.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=n.findAllMatches,d=void 0===f?I.findAllMatches:f,v=n.location,g=void 0===v?I.location:v,y=n.threshold,p=void 0===y?I.threshold:y,m=n.distance,k=void 0===m?I.distance:m;r(this,e),this.query=null,this.options={isCaseSensitive:o,includeMatches:a,minMatchCharLength:u,findAllMatches:d,ignoreLocation:l,location:g,threshold:p,distance:k},this.pattern=o?t:t.toLowerCase(),this.query=Z(this.pattern,this.options)}return o(e,[{key:"searchIn",value:function(e){var t=this.query;if(!t)return{isMatch:!1,score:1};var n=this.options,r=n.includeMatches;e=n.isCaseSensitive?e:e.toLowerCase();for(var i=0,o=[],c=0,a=0,s=t.length;a-1&&(n.refIndex=e.idx),t.matches.push(n)}}))}function ve(e,t){t.score=e.score}function ge(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.includeMatches,i=void 0===r?I.includeMatches:r,o=n.includeScore,c=void 0===o?I.includeScore:o,a=[];return i&&a.push(de),c&&a.push(ve),e.map((function(e){var n=e.idx,r={item:t[n],refIndex:n};return a.length&&a.forEach((function(t){t(e,r)})),r}))}var ye=function(){function e(n){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0;r(this,e),this.options=t(t({},I),i),this.options.useExtendedSearch,this._keyStore=new S(this.options.keys),this.setCollection(n,o)}return o(e,[{key:"setCollection",value:function(e,t){if(this._docs=e,t&&!(t instanceof $))throw new Error("Incorrect 'index' type");this._myIndex=t||F(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}},{key:"add",value:function(e){k(e)&&(this._docs.push(e),this._myIndex.add(e))}},{key:"remove",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return!1},t=[],n=0,r=this._docs.length;n1&&void 0!==arguments[1]?arguments[1]:{},n=t.limit,r=void 0===n?-1:n,i=this.options,o=i.includeMatches,c=i.includeScore,a=i.shouldSort,s=i.sortFn,u=i.ignoreFieldNorm,h=g(e)?g(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e);return fe(h,{ignoreFieldNorm:u}),a&&h.sort(s),y(r)&&r>-1&&(h=h.slice(0,r)),ge(h,this._docs,{includeMatches:o,includeScore:c})}},{key:"_searchStringList",value:function(e){var t=re(e,this.options),n=this._myIndex.records,r=[];return n.forEach((function(e){var n=e.v,i=e.i,o=e.n;if(k(n)){var c=t.searchIn(n),a=c.isMatch,s=c.score,u=c.indices;a&&r.push({item:n,idx:i,matches:[{score:s,value:n,norm:o,indices:u}]})}})),r}},{key:"_searchLogical",value:function(e){var t=this,n=function(e,t){var n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).auto,r=void 0===n||n,i=function e(n){var i=Object.keys(n),o=ue(n);if(!o&&i.length>1&&!se(n))return e(le(n));if(he(n)){var c=o?n[ce]:i[0],a=o?n[ae]:n[c];if(!g(a))throw new Error(x(c));var s={keyId:j(c),pattern:a};return r&&(s.searcher=re(a,t)),s}var u={children:[],operator:i[0]};return i.forEach((function(t){var r=n[t];v(r)&&r.forEach((function(t){u.children.push(e(t))}))})),u};return se(e)||(e=le(e)),i(e)}(e,this.options),r=function e(n,r,i){if(!n.children){var o=n.keyId,c=n.searcher,a=t._findMatches({key:t._keyStore.get(o),value:t._myIndex.getValueForItemAtKeyId(r,o),searcher:c});return a&&a.length?[{idx:i,item:r,matches:a}]:[]}for(var s=[],u=0,h=n.children.length;u1&&void 0!==arguments[1]?arguments[1]:{},n=t.getFn,r=void 0===n?I.getFn:n,i=t.fieldNormWeight,o=void 0===i?I.fieldNormWeight:i,c=e.keys,a=e.records,s=new $({getFn:r,fieldNormWeight:o});return s.setKeys(c),s.setIndexRecords(a),s},ye.config=I,function(){ne.push.apply(ne,arguments)}(te),ye},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Fuse=t(); \ No newline at end of file diff --git a/_book/site_libs/quarto-search/quarto-search.js b/_book/site_libs/quarto-search/quarto-search.js new file mode 100644 index 0000000..d788a95 --- /dev/null +++ b/_book/site_libs/quarto-search/quarto-search.js @@ -0,0 +1,1290 @@ +const kQueryArg = "q"; +const kResultsArg = "show-results"; + +// If items don't provide a URL, then both the navigator and the onSelect +// function aren't called (and therefore, the default implementation is used) +// +// We're using this sentinel URL to signal to those handlers that this +// item is a more item (along with the type) and can be handled appropriately +const kItemTypeMoreHref = "0767FDFD-0422-4E5A-BC8A-3BE11E5BBA05"; + +window.document.addEventListener("DOMContentLoaded", function (_event) { + // Ensure that search is available on this page. If it isn't, + // should return early and not do anything + var searchEl = window.document.getElementById("quarto-search"); + if (!searchEl) return; + + const { autocomplete } = window["@algolia/autocomplete-js"]; + + let quartoSearchOptions = {}; + let language = {}; + const searchOptionEl = window.document.getElementById( + "quarto-search-options" + ); + if (searchOptionEl) { + const jsonStr = searchOptionEl.textContent; + quartoSearchOptions = JSON.parse(jsonStr); + language = quartoSearchOptions.language; + } + + // note the search mode + if (quartoSearchOptions.type === "overlay") { + searchEl.classList.add("type-overlay"); + } else { + searchEl.classList.add("type-textbox"); + } + + // Used to determine highlighting behavior for this page + // A `q` query param is expected when the user follows a search + // to this page + const currentUrl = new URL(window.location); + const query = currentUrl.searchParams.get(kQueryArg); + const showSearchResults = currentUrl.searchParams.get(kResultsArg); + const mainEl = window.document.querySelector("main"); + + // highlight matches on the page + if (query && mainEl) { + // perform any highlighting + highlight(escapeRegExp(query), mainEl); + + // fix up the URL to remove the q query param + const replacementUrl = new URL(window.location); + replacementUrl.searchParams.delete(kQueryArg); + window.history.replaceState({}, "", replacementUrl); + } + + // function to clear highlighting on the page when the search query changes + // (e.g. if the user edits the query or clears it) + let highlighting = true; + const resetHighlighting = (searchTerm) => { + if (mainEl && highlighting && query && searchTerm !== query) { + clearHighlight(query, mainEl); + highlighting = false; + } + }; + + // Clear search highlighting when the user scrolls sufficiently + const resetFn = () => { + resetHighlighting(""); + window.removeEventListener("quarto-hrChanged", resetFn); + window.removeEventListener("quarto-sectionChanged", resetFn); + }; + + // Register this event after the initial scrolling and settling of events + // on the page + window.addEventListener("quarto-hrChanged", resetFn); + window.addEventListener("quarto-sectionChanged", resetFn); + + // Responsively switch to overlay mode if the search is present on the navbar + // Note that switching the sidebar to overlay mode requires more coordinate (not just + // the media query since we generate different HTML for sidebar overlays than we do + // for sidebar input UI) + const detachedMediaQuery = + quartoSearchOptions.type === "overlay" ? "all" : "(max-width: 991px)"; + + // If configured, include the analytics client to send insights + const plugins = configurePlugins(quartoSearchOptions); + + let lastState = null; + const { setIsOpen, setQuery, setCollections } = autocomplete({ + container: searchEl, + detachedMediaQuery: detachedMediaQuery, + defaultActiveItemId: 0, + panelContainer: "#quarto-search-results", + panelPlacement: quartoSearchOptions["panel-placement"], + debug: false, + openOnFocus: true, + plugins, + classNames: { + form: "d-flex", + }, + placeholder: language["search-text-placeholder"], + translations: { + clearButtonTitle: language["search-clear-button-title"], + detachedCancelButtonText: language["search-detached-cancel-button-title"], + submitButtonTitle: language["search-submit-button-title"], + }, + initialState: { + query, + }, + getItemUrl({ item }) { + return item.href; + }, + onStateChange({ state }) { + // If this is a file URL, note that + + // Perhaps reset highlighting + resetHighlighting(state.query); + + // If the panel just opened, ensure the panel is positioned properly + if (state.isOpen) { + if (lastState && !lastState.isOpen) { + setTimeout(() => { + positionPanel(quartoSearchOptions["panel-placement"]); + }, 150); + } + } + + // Perhaps show the copy link + showCopyLink(state.query, quartoSearchOptions); + + lastState = state; + }, + reshape({ sources, state }) { + return sources.map((source) => { + try { + const items = source.getItems(); + + // Validate the items + validateItems(items); + + // group the items by document + const groupedItems = new Map(); + items.forEach((item) => { + const hrefParts = item.href.split("#"); + const baseHref = hrefParts[0]; + const isDocumentItem = hrefParts.length === 1; + + const items = groupedItems.get(baseHref); + if (!items) { + groupedItems.set(baseHref, [item]); + } else { + // If the href for this item matches the document + // exactly, place this item first as it is the item that represents + // the document itself + if (isDocumentItem) { + items.unshift(item); + } else { + items.push(item); + } + groupedItems.set(baseHref, items); + } + }); + + const reshapedItems = []; + let count = 1; + for (const [_key, value] of groupedItems) { + const firstItem = value[0]; + reshapedItems.push({ + ...firstItem, + type: kItemTypeDoc, + }); + + const collapseMatches = quartoSearchOptions["collapse-after"]; + const collapseCount = + typeof collapseMatches === "number" ? collapseMatches : 1; + + if (value.length > 1) { + const target = `search-more-${count}`; + const isExpanded = + state.context.expanded && + state.context.expanded.includes(target); + + const remainingCount = value.length - collapseCount; + + for (let i = 1; i < value.length; i++) { + if (collapseMatches && i === collapseCount) { + reshapedItems.push({ + target, + title: isExpanded + ? language["search-hide-matches-text"] + : remainingCount === 1 + ? `${remainingCount} ${language["search-more-match-text"]}` + : `${remainingCount} ${language["search-more-matches-text"]}`, + type: kItemTypeMore, + href: kItemTypeMoreHref, + }); + } + + if (isExpanded || !collapseMatches || i < collapseCount) { + reshapedItems.push({ + ...value[i], + type: kItemTypeItem, + target, + }); + } + } + } + count += 1; + } + + return { + ...source, + getItems() { + return reshapedItems; + }, + }; + } catch (error) { + // Some form of error occurred + return { + ...source, + getItems() { + return [ + { + title: error.name || "An Error Occurred While Searching", + text: + error.message || + "An unknown error occurred while attempting to perform the requested search.", + type: kItemTypeError, + }, + ]; + }, + }; + } + }); + }, + navigator: { + navigate({ itemUrl }) { + if (itemUrl !== offsetURL(kItemTypeMoreHref)) { + window.location.assign(itemUrl); + } + }, + navigateNewTab({ itemUrl }) { + if (itemUrl !== offsetURL(kItemTypeMoreHref)) { + const windowReference = window.open(itemUrl, "_blank", "noopener"); + if (windowReference) { + windowReference.focus(); + } + } + }, + navigateNewWindow({ itemUrl }) { + if (itemUrl !== offsetURL(kItemTypeMoreHref)) { + window.open(itemUrl, "_blank", "noopener"); + } + }, + }, + getSources({ state, setContext, setActiveItemId, refresh }) { + return [ + { + sourceId: "documents", + getItemUrl({ item }) { + if (item.href) { + return offsetURL(item.href); + } else { + return undefined; + } + }, + onSelect({ + item, + state, + setContext, + setIsOpen, + setActiveItemId, + refresh, + }) { + if (item.type === kItemTypeMore) { + toggleExpanded(item, state, setContext, setActiveItemId, refresh); + + // Toggle more + setIsOpen(true); + } + }, + getItems({ query }) { + if (query === null || query === "") { + return []; + } + + const limit = quartoSearchOptions.limit; + if (quartoSearchOptions.algolia) { + return algoliaSearch(query, limit, quartoSearchOptions.algolia); + } else { + // Fuse search options + const fuseSearchOptions = { + isCaseSensitive: false, + shouldSort: true, + minMatchCharLength: 2, + limit: limit, + }; + + return readSearchData().then(function (fuse) { + return fuseSearch(query, fuse, fuseSearchOptions); + }); + } + }, + templates: { + noResults({ createElement }) { + const hasQuery = lastState.query; + + return createElement( + "div", + { + class: `quarto-search-no-results${ + hasQuery ? "" : " no-query" + }`, + }, + language["search-no-results-text"] + ); + }, + header({ items, createElement }) { + // count the documents + const count = items.filter((item) => { + return item.type === kItemTypeDoc; + }).length; + + if (count > 0) { + return createElement( + "div", + { class: "search-result-header" }, + `${count} ${language["search-matching-documents-text"]}` + ); + } else { + return createElement( + "div", + { class: "search-result-header-no-results" }, + `` + ); + } + }, + footer({ _items, createElement }) { + if ( + quartoSearchOptions.algolia && + quartoSearchOptions.algolia["show-logo"] + ) { + const libDir = quartoSearchOptions.algolia["libDir"]; + const logo = createElement("img", { + src: offsetURL( + `${libDir}/quarto-search/search-by-algolia.svg` + ), + class: "algolia-search-logo", + }); + return createElement( + "a", + { href: "http://www.algolia.com/" }, + logo + ); + } + }, + + item({ item, createElement }) { + return renderItem( + item, + createElement, + state, + setActiveItemId, + setContext, + refresh, + quartoSearchOptions + ); + }, + }, + }, + ]; + }, + }); + + window.quartoOpenSearch = () => { + setIsOpen(false); + setIsOpen(true); + focusSearchInput(); + }; + + document.addEventListener("keyup", (event) => { + const { key } = event; + const kbds = quartoSearchOptions["keyboard-shortcut"]; + const focusedEl = document.activeElement; + + const isFormElFocused = [ + "input", + "select", + "textarea", + "button", + "option", + ].find((tag) => { + return focusedEl.tagName.toLowerCase() === tag; + }); + + if ( + kbds && + kbds.includes(key) && + !isFormElFocused && + !document.activeElement.isContentEditable + ) { + event.preventDefault(); + window.quartoOpenSearch(); + } + }); + + // Remove the labeleledby attribute since it is pointing + // to a non-existent label + if (quartoSearchOptions.type === "overlay") { + const inputEl = window.document.querySelector( + "#quarto-search .aa-Autocomplete" + ); + if (inputEl) { + inputEl.removeAttribute("aria-labelledby"); + } + } + + function throttle(func, wait) { + let waiting = false; + return function () { + if (!waiting) { + func.apply(this, arguments); + waiting = true; + setTimeout(function () { + waiting = false; + }, wait); + } + }; + } + + // If the main document scrolls dismiss the search results + // (otherwise, since they're floating in the document they can scroll with the document) + window.document.body.onscroll = throttle(() => { + // Only do this if we're not detached + // Bug #7117 + // This will happen when the keyboard is shown on ios (resulting in a scroll) + // which then closed the search UI + if (!window.matchMedia(detachedMediaQuery).matches) { + setIsOpen(false); + } + }, 50); + + if (showSearchResults) { + setIsOpen(true); + focusSearchInput(); + } +}); + +function configurePlugins(quartoSearchOptions) { + const autocompletePlugins = []; + const algoliaOptions = quartoSearchOptions.algolia; + if ( + algoliaOptions && + algoliaOptions["analytics-events"] && + algoliaOptions["search-only-api-key"] && + algoliaOptions["application-id"] + ) { + const apiKey = algoliaOptions["search-only-api-key"]; + const appId = algoliaOptions["application-id"]; + + // Aloglia insights may not be loaded because they require cookie consent + // Use deferred loading so events will start being recorded when/if consent + // is granted. + const algoliaInsightsDeferredPlugin = deferredLoadPlugin(() => { + if ( + window.aa && + window["@algolia/autocomplete-plugin-algolia-insights"] + ) { + window.aa("init", { + appId, + apiKey, + useCookie: true, + }); + + const { createAlgoliaInsightsPlugin } = + window["@algolia/autocomplete-plugin-algolia-insights"]; + // Register the insights client + const algoliaInsightsPlugin = createAlgoliaInsightsPlugin({ + insightsClient: window.aa, + onItemsChange({ insights, insightsEvents }) { + const events = insightsEvents.flatMap((event) => { + // This API limits the number of items per event to 20 + const chunkSize = 20; + const itemChunks = []; + const eventItems = event.items; + for (let i = 0; i < eventItems.length; i += chunkSize) { + itemChunks.push(eventItems.slice(i, i + chunkSize)); + } + // Split the items into multiple events that can be sent + const events = itemChunks.map((items) => { + return { + ...event, + items, + }; + }); + return events; + }); + + for (const event of events) { + insights.viewedObjectIDs(event); + } + }, + }); + return algoliaInsightsPlugin; + } + }); + + // Add the plugin + autocompletePlugins.push(algoliaInsightsDeferredPlugin); + return autocompletePlugins; + } +} + +// For plugins that may not load immediately, create a wrapper +// plugin and forward events and plugin data once the plugin +// is initialized. This is useful for cases like cookie consent +// which may prevent the analytics insights event plugin from initializing +// immediately. +function deferredLoadPlugin(createPlugin) { + let plugin = undefined; + let subscribeObj = undefined; + const wrappedPlugin = () => { + if (!plugin && subscribeObj) { + plugin = createPlugin(); + if (plugin && plugin.subscribe) { + plugin.subscribe(subscribeObj); + } + } + return plugin; + }; + + return { + subscribe: (obj) => { + subscribeObj = obj; + }, + onStateChange: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.onStateChange) { + plugin.onStateChange(obj); + } + }, + onSubmit: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.onSubmit) { + plugin.onSubmit(obj); + } + }, + onReset: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.onReset) { + plugin.onReset(obj); + } + }, + getSources: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.getSources) { + return plugin.getSources(obj); + } else { + return Promise.resolve([]); + } + }, + data: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.data) { + plugin.data(obj); + } + }, + }; +} + +function validateItems(items) { + // Validate the first item + if (items.length > 0) { + const item = items[0]; + const missingFields = []; + if (item.href == undefined) { + missingFields.push("href"); + } + if (!item.title == undefined) { + missingFields.push("title"); + } + if (!item.text == undefined) { + missingFields.push("text"); + } + + if (missingFields.length === 1) { + throw { + name: `Error: Search index is missing the ${missingFields[0]} field.`, + message: `The items being returned for this search do not include all the required fields. Please ensure that your index items include the ${missingFields[0]} field or use index-fields in your _quarto.yml file to specify the field names.`, + }; + } else if (missingFields.length > 1) { + const missingFieldList = missingFields + .map((field) => { + return `${field}`; + }) + .join(", "); + + throw { + name: `Error: Search index is missing the following fields: ${missingFieldList}.`, + message: `The items being returned for this search do not include all the required fields. Please ensure that your index items includes the following fields: ${missingFieldList}, or use index-fields in your _quarto.yml file to specify the field names.`, + }; + } + } +} + +let lastQuery = null; +function showCopyLink(query, options) { + const language = options.language; + lastQuery = query; + // Insert share icon + const inputSuffixEl = window.document.body.querySelector( + ".aa-Form .aa-InputWrapperSuffix" + ); + + if (inputSuffixEl) { + let copyButtonEl = window.document.body.querySelector( + ".aa-Form .aa-InputWrapperSuffix .aa-CopyButton" + ); + + if (copyButtonEl === null) { + copyButtonEl = window.document.createElement("button"); + copyButtonEl.setAttribute("class", "aa-CopyButton"); + copyButtonEl.setAttribute("type", "button"); + copyButtonEl.setAttribute("title", language["search-copy-link-title"]); + copyButtonEl.onmousedown = (e) => { + e.preventDefault(); + e.stopPropagation(); + }; + + const linkIcon = "bi-clipboard"; + const checkIcon = "bi-check2"; + + const shareIconEl = window.document.createElement("i"); + shareIconEl.setAttribute("class", `bi ${linkIcon}`); + copyButtonEl.appendChild(shareIconEl); + inputSuffixEl.prepend(copyButtonEl); + + const clipboard = new window.ClipboardJS(".aa-CopyButton", { + text: function (_trigger) { + const copyUrl = new URL(window.location); + copyUrl.searchParams.set(kQueryArg, lastQuery); + copyUrl.searchParams.set(kResultsArg, "1"); + return copyUrl.toString(); + }, + }); + clipboard.on("success", function (e) { + // Focus the input + + // button target + const button = e.trigger; + const icon = button.querySelector("i.bi"); + + // flash "checked" + icon.classList.add(checkIcon); + icon.classList.remove(linkIcon); + setTimeout(function () { + icon.classList.remove(checkIcon); + icon.classList.add(linkIcon); + }, 1000); + }); + } + + // If there is a query, show the link icon + if (copyButtonEl) { + if (lastQuery && options["copy-button"]) { + copyButtonEl.style.display = "flex"; + } else { + copyButtonEl.style.display = "none"; + } + } + } +} + +/* Search Index Handling */ +// create the index +var fuseIndex = undefined; +var shownWarning = false; + +// fuse index options +const kFuseIndexOptions = { + keys: [ + { name: "title", weight: 20 }, + { name: "section", weight: 20 }, + { name: "text", weight: 10 }, + ], + ignoreLocation: true, + threshold: 0.1, +}; + +async function readSearchData() { + // Initialize the search index on demand + if (fuseIndex === undefined) { + if (window.location.protocol === "file:" && !shownWarning) { + window.alert( + "Search requires JavaScript features disabled when running in file://... URLs. In order to use search, please run this document in a web server." + ); + shownWarning = true; + return; + } + const fuse = new window.Fuse([], kFuseIndexOptions); + + // fetch the main search.json + const response = await fetch(offsetURL("search.json")); + if (response.status == 200) { + return response.json().then(function (searchDocs) { + searchDocs.forEach(function (searchDoc) { + fuse.add(searchDoc); + }); + fuseIndex = fuse; + return fuseIndex; + }); + } else { + return Promise.reject( + new Error( + "Unexpected status from search index request: " + response.status + ) + ); + } + } + + return fuseIndex; +} + +function inputElement() { + return window.document.body.querySelector(".aa-Form .aa-Input"); +} + +function focusSearchInput() { + setTimeout(() => { + const inputEl = inputElement(); + if (inputEl) { + inputEl.focus(); + } + }, 50); +} + +/* Panels */ +const kItemTypeDoc = "document"; +const kItemTypeMore = "document-more"; +const kItemTypeItem = "document-item"; +const kItemTypeError = "error"; + +function renderItem( + item, + createElement, + state, + setActiveItemId, + setContext, + refresh, + quartoSearchOptions +) { + switch (item.type) { + case kItemTypeDoc: + return createDocumentCard( + createElement, + "file-richtext", + item.title, + item.section, + item.text, + item.href, + item.crumbs, + quartoSearchOptions + ); + case kItemTypeMore: + return createMoreCard( + createElement, + item, + state, + setActiveItemId, + setContext, + refresh + ); + case kItemTypeItem: + return createSectionCard( + createElement, + item.section, + item.text, + item.href + ); + case kItemTypeError: + return createErrorCard(createElement, item.title, item.text); + default: + return undefined; + } +} + +function createDocumentCard( + createElement, + icon, + title, + section, + text, + href, + crumbs, + quartoSearchOptions +) { + const iconEl = createElement("i", { + class: `bi bi-${icon} search-result-icon`, + }); + const titleEl = createElement("p", { class: "search-result-title" }, title); + const titleContents = [iconEl, titleEl]; + const showParent = quartoSearchOptions["show-item-context"]; + if (crumbs && showParent) { + let crumbsOut = undefined; + const crumbClz = ["search-result-crumbs"]; + if (showParent === "root") { + crumbsOut = crumbs.length > 1 ? crumbs[0] : undefined; + } else if (showParent === "parent") { + crumbsOut = crumbs.length > 1 ? crumbs[crumbs.length - 2] : undefined; + } else { + crumbsOut = crumbs.length > 1 ? crumbs.join(" > ") : undefined; + crumbClz.push("search-result-crumbs-wrap"); + } + + const crumbEl = createElement( + "p", + { class: crumbClz.join(" ") }, + crumbsOut + ); + titleContents.push(crumbEl); + } + + const titleContainerEl = createElement( + "div", + { class: "search-result-title-container" }, + titleContents + ); + + const textEls = []; + if (section) { + const sectionEl = createElement( + "p", + { class: "search-result-section" }, + section + ); + textEls.push(sectionEl); + } + const descEl = createElement("p", { + class: "search-result-text", + dangerouslySetInnerHTML: { + __html: text, + }, + }); + textEls.push(descEl); + + const textContainerEl = createElement( + "div", + { class: "search-result-text-container" }, + textEls + ); + + const containerEl = createElement( + "div", + { + class: "search-result-container", + }, + [titleContainerEl, textContainerEl] + ); + + const linkEl = createElement( + "a", + { + href: offsetURL(href), + class: "search-result-link", + }, + containerEl + ); + + const classes = ["search-result-doc", "search-item"]; + if (!section) { + classes.push("document-selectable"); + } + + return createElement( + "div", + { + class: classes.join(" "), + }, + linkEl + ); +} + +function createMoreCard( + createElement, + item, + state, + setActiveItemId, + setContext, + refresh +) { + const moreCardEl = createElement( + "div", + { + class: "search-result-more search-item", + onClick: (e) => { + // Handle expanding the sections by adding the expanded + // section to the list of expanded sections + toggleExpanded(item, state, setContext, setActiveItemId, refresh); + e.stopPropagation(); + }, + }, + item.title + ); + + return moreCardEl; +} + +function toggleExpanded(item, state, setContext, setActiveItemId, refresh) { + const expanded = state.context.expanded || []; + if (expanded.includes(item.target)) { + setContext({ + expanded: expanded.filter((target) => target !== item.target), + }); + } else { + setContext({ expanded: [...expanded, item.target] }); + } + + refresh(); + setActiveItemId(item.__autocomplete_id); +} + +function createSectionCard(createElement, section, text, href) { + const sectionEl = createSection(createElement, section, text, href); + return createElement( + "div", + { + class: "search-result-doc-section search-item", + }, + sectionEl + ); +} + +function createSection(createElement, title, text, href) { + const descEl = createElement("p", { + class: "search-result-text", + dangerouslySetInnerHTML: { + __html: text, + }, + }); + + const titleEl = createElement("p", { class: "search-result-section" }, title); + const linkEl = createElement( + "a", + { + href: offsetURL(href), + class: "search-result-link", + }, + [titleEl, descEl] + ); + return linkEl; +} + +function createErrorCard(createElement, title, text) { + const descEl = createElement("p", { + class: "search-error-text", + dangerouslySetInnerHTML: { + __html: text, + }, + }); + + const titleEl = createElement("p", { + class: "search-error-title", + dangerouslySetInnerHTML: { + __html: ` ${title}`, + }, + }); + const errorEl = createElement("div", { class: "search-error" }, [ + titleEl, + descEl, + ]); + return errorEl; +} + +function positionPanel(pos) { + const panelEl = window.document.querySelector( + "#quarto-search-results .aa-Panel" + ); + const inputEl = window.document.querySelector( + "#quarto-search .aa-Autocomplete" + ); + + if (panelEl && inputEl) { + panelEl.style.top = `${Math.round(panelEl.offsetTop)}px`; + if (pos === "start") { + panelEl.style.left = `${Math.round(inputEl.left)}px`; + } else { + panelEl.style.right = `${Math.round(inputEl.offsetRight)}px`; + } + } +} + +/* Highlighting */ +// highlighting functions +function highlightMatch(query, text) { + if (text) { + const start = text.toLowerCase().indexOf(query.toLowerCase()); + if (start !== -1) { + const startMark = ""; + const endMark = ""; + + const end = start + query.length; + text = + text.slice(0, start) + + startMark + + text.slice(start, end) + + endMark + + text.slice(end); + const startInfo = clipStart(text, start); + const endInfo = clipEnd( + text, + startInfo.position + startMark.length + endMark.length + ); + text = + startInfo.prefix + + text.slice(startInfo.position, endInfo.position) + + endInfo.suffix; + + return text; + } else { + return text; + } + } else { + return text; + } +} + +function clipStart(text, pos) { + const clipStart = pos - 50; + if (clipStart < 0) { + // This will just return the start of the string + return { + position: 0, + prefix: "", + }; + } else { + // We're clipping before the start of the string, walk backwards to the first space. + const spacePos = findSpace(text, pos, -1); + return { + position: spacePos.position, + prefix: "", + }; + } +} + +function clipEnd(text, pos) { + const clipEnd = pos + 200; + if (clipEnd > text.length) { + return { + position: text.length, + suffix: "", + }; + } else { + const spacePos = findSpace(text, clipEnd, 1); + return { + position: spacePos.position, + suffix: spacePos.clipped ? "…" : "", + }; + } +} + +function findSpace(text, start, step) { + let stepPos = start; + while (stepPos > -1 && stepPos < text.length) { + const char = text[stepPos]; + if (char === " " || char === "," || char === ":") { + return { + position: step === 1 ? stepPos : stepPos - step, + clipped: stepPos > 1 && stepPos < text.length, + }; + } + stepPos = stepPos + step; + } + + return { + position: stepPos - step, + clipped: false, + }; +} + +// removes highlighting as implemented by the mark tag +function clearHighlight(searchterm, el) { + const childNodes = el.childNodes; + for (let i = childNodes.length - 1; i >= 0; i--) { + const node = childNodes[i]; + if (node.nodeType === Node.ELEMENT_NODE) { + if ( + node.tagName === "MARK" && + node.innerText.toLowerCase() === searchterm.toLowerCase() + ) { + el.replaceChild(document.createTextNode(node.innerText), node); + } else { + clearHighlight(searchterm, node); + } + } + } +} + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string +} + +// highlight matches +function highlight(term, el) { + const termRegex = new RegExp(term, "ig"); + const childNodes = el.childNodes; + + // walk back to front avoid mutating elements in front of us + for (let i = childNodes.length - 1; i >= 0; i--) { + const node = childNodes[i]; + + if (node.nodeType === Node.TEXT_NODE) { + // Search text nodes for text to highlight + const text = node.nodeValue; + + let startIndex = 0; + let matchIndex = text.search(termRegex); + if (matchIndex > -1) { + const markFragment = document.createDocumentFragment(); + while (matchIndex > -1) { + const prefix = text.slice(startIndex, matchIndex); + markFragment.appendChild(document.createTextNode(prefix)); + + const mark = document.createElement("mark"); + mark.appendChild( + document.createTextNode( + text.slice(matchIndex, matchIndex + term.length) + ) + ); + markFragment.appendChild(mark); + + startIndex = matchIndex + term.length; + matchIndex = text.slice(startIndex).search(new RegExp(term, "ig")); + if (matchIndex > -1) { + matchIndex = startIndex + matchIndex; + } + } + if (startIndex < text.length) { + markFragment.appendChild( + document.createTextNode(text.slice(startIndex, text.length)) + ); + } + + el.replaceChild(markFragment, node); + } + } else if (node.nodeType === Node.ELEMENT_NODE) { + // recurse through elements + highlight(term, node); + } + } +} + +/* Link Handling */ +// get the offset from this page for a given site root relative url +function offsetURL(url) { + var offset = getMeta("quarto:offset"); + return offset ? offset + url : url; +} + +// read a meta tag value +function getMeta(metaName) { + var metas = window.document.getElementsByTagName("meta"); + for (let i = 0; i < metas.length; i++) { + if (metas[i].getAttribute("name") === metaName) { + return metas[i].getAttribute("content"); + } + } + return ""; +} + +function algoliaSearch(query, limit, algoliaOptions) { + const { getAlgoliaResults } = window["@algolia/autocomplete-preset-algolia"]; + + const applicationId = algoliaOptions["application-id"]; + const searchOnlyApiKey = algoliaOptions["search-only-api-key"]; + const indexName = algoliaOptions["index-name"]; + const indexFields = algoliaOptions["index-fields"]; + const searchClient = window.algoliasearch(applicationId, searchOnlyApiKey); + const searchParams = algoliaOptions["params"]; + const searchAnalytics = !!algoliaOptions["analytics-events"]; + + return getAlgoliaResults({ + searchClient, + queries: [ + { + indexName: indexName, + query, + params: { + hitsPerPage: limit, + clickAnalytics: searchAnalytics, + ...searchParams, + }, + }, + ], + transformResponse: (response) => { + if (!indexFields) { + return response.hits.map((hit) => { + return hit.map((item) => { + return { + ...item, + text: highlightMatch(query, item.text), + }; + }); + }); + } else { + const remappedHits = response.hits.map((hit) => { + return hit.map((item) => { + const newItem = { ...item }; + ["href", "section", "title", "text", "crumbs"].forEach( + (keyName) => { + const mappedName = indexFields[keyName]; + if ( + mappedName && + item[mappedName] !== undefined && + mappedName !== keyName + ) { + newItem[keyName] = item[mappedName]; + delete newItem[mappedName]; + } + } + ); + newItem.text = highlightMatch(query, newItem.text); + return newItem; + }); + }); + return remappedHits; + } + }, + }); +} + +let subSearchTerm = undefined; +let subSearchFuse = undefined; +const kFuseMaxWait = 125; + +async function fuseSearch(query, fuse, fuseOptions) { + let index = fuse; + // Fuse.js using the Bitap algorithm for text matching which runs in + // O(nm) time (no matter the structure of the text). In our case this + // means that long search terms mixed with large index gets very slow + // + // This injects a subIndex that will be used once the terms get long enough + // Usually making this subindex is cheap since there will typically be + // a subset of results matching the existing query + if (subSearchFuse !== undefined && query.startsWith(subSearchTerm)) { + // Use the existing subSearchFuse + index = subSearchFuse; + } else if (subSearchFuse !== undefined) { + // The term changed, discard the existing fuse + subSearchFuse = undefined; + subSearchTerm = undefined; + } + + // Search using the active fuse + const then = performance.now(); + const resultsRaw = await index.search(query, fuseOptions); + const now = performance.now(); + + const results = resultsRaw.map((result) => { + const addParam = (url, name, value) => { + const anchorParts = url.split("#"); + const baseUrl = anchorParts[0]; + const sep = baseUrl.search("\\?") > 0 ? "&" : "?"; + anchorParts[0] = baseUrl + sep + name + "=" + value; + return anchorParts.join("#"); + }; + + return { + title: result.item.title, + section: result.item.section, + href: addParam(result.item.href, kQueryArg, query), + text: highlightMatch(query, result.item.text), + crumbs: result.item.crumbs, + }; + }); + + // If we don't have a subfuse and the query is long enough, go ahead + // and create a subfuse to use for subsequent queries + if ( + now - then > kFuseMaxWait && + subSearchFuse === undefined && + resultsRaw.length < fuseOptions.limit + ) { + subSearchTerm = query; + subSearchFuse = new window.Fuse([], kFuseIndexOptions); + resultsRaw.forEach((rr) => { + subSearchFuse.add(rr.item); + }); + } + return results; +} diff --git a/_quarto.yml b/_quarto.yml new file mode 100644 index 0000000..0d469f0 --- /dev/null +++ b/_quarto.yml @@ -0,0 +1,44 @@ +project: + type: book + +book: + title: "R-Instat Climatic Guide" + author: "Roger Stern, Danny Parsons, David Stern, Francis Torgbor & James Musyoka" + date: "13/06/2024" + chapters: + - index.qmd + - Chapter_1_About_this_guide.qmd + - Chapter_2_More_Practice_with_RInstat.qmd + - Chapter_3_Using_RInstat_effectively.qmd + - Chapter_4_Getting_the_data_into_shape.qmd + - Chapter_5_Quantity_and_quality.qmd + - Chapter_6_Preparing_summaries.qmd + - Chapter_7_Tailored_Products.qmd + - Chapter_8_Efficient_use_of_RInstat_and_R.qmd + - Chapter_9_Gridded_Data.qmd + - Chapter_10_Comparing_Data_from_Different_Sources.qmd + - Chapter_11_Drawing_Maps.qmd + - Chapter_12_Extremes.qmd + - Chapter_13_PICSA__Long_Before_the_season.qmd + - Chapter_14_The_Seasonal_forecast.qmd + - Chapter_15_Fitting_and_using_stochastic_models.qmd + - Chapter_16_Withinday_data.qmd + - Chapter_17_Circular_data_and_wind_roses.qmd + - Chapter_18_Temperatures.qmd + - Chapter_19_Drought_Indices__SPI.qmd + - Chapter_20_Climate_Normals.qmd + - Chapter_21_Various.qmd + - Chapter_22_References.qmd + - Chapter_23_Index.qmd + + +bibliography: references.bib + +format: + html: + theme: cosmo + pdf: + documentclass: scrreprt + + + diff --git a/cover.png b/cover.png new file mode 100644 index 0000000000000000000000000000000000000000..e1f5bc61d11049afe5b5dc2a67a3a32f406be964 GIT binary patch literal 51194 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

sLQu|F-aZhE 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�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 Vyw!|9>LU1OnX%cT*addJ{|^#&e**vj literal 0 HcmV?d00001 diff --git a/index.qmd b/index.qmd new file mode 100644 index 0000000..a9c6dd5 --- /dev/null +++ b/index.qmd @@ -0,0 +1,2 @@ +# Acknowledgments +[To be added.]{.mark} \ No newline at end of file diff --git a/index.tex b/index.tex new file mode 100644 index 0000000..3352174 --- /dev/null +++ b/index.tex @@ -0,0 +1,15418 @@ +% Options for packages loaded elsewhere +\PassOptionsToPackage{unicode}{hyperref} +\PassOptionsToPackage{hyphens}{url} +\PassOptionsToPackage{dvipsnames,svgnames,x11names}{xcolor} +% +\documentclass[ + letterpaper, + DIV=11, + numbers=noendperiod]{scrreprt} + +\usepackage{amsmath,amssymb} +\usepackage{iftex} +\ifPDFTeX + \usepackage[T1]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols +\else % if luatex or xetex + \usepackage{unicode-math} + \defaultfontfeatures{Scale=MatchLowercase} + \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} +\fi +\usepackage{lmodern} +\ifPDFTeX\else + % xetex/luatex font selection +\fi +% Use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\IfFileExists{microtype.sty}{% use microtype if available + \usepackage[]{microtype} + \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +\makeatletter +\@ifundefined{KOMAClassName}{% if non-KOMA class + \IfFileExists{parskip.sty}{% + \usepackage{parskip} + }{% else + \setlength{\parindent}{0pt} + \setlength{\parskip}{6pt plus 2pt minus 1pt}} +}{% if KOMA class + \KOMAoptions{parskip=half}} +\makeatother +\usepackage{xcolor} +\ifLuaTeX + \usepackage{luacolor} + \usepackage[soul]{lua-ul} +\else + \usepackage{soul} + +\fi +\setlength{\emergencystretch}{3em} % prevent overfull lines +\setcounter{secnumdepth}{5} +% Make \paragraph and \subparagraph free-standing +\makeatletter +\ifx\paragraph\undefined\else + \let\oldparagraph\paragraph + \renewcommand{\paragraph}{ + \@ifstar + \xxxParagraphStar + \xxxParagraphNoStar + } + \newcommand{\xxxParagraphStar}[1]{\oldparagraph*{#1}\mbox{}} + \newcommand{\xxxParagraphNoStar}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else + \let\oldsubparagraph\subparagraph + \renewcommand{\subparagraph}{ + \@ifstar + \xxxSubParagraphStar + \xxxSubParagraphNoStar + } + \newcommand{\xxxSubParagraphStar}[1]{\oldsubparagraph*{#1}\mbox{}} + \newcommand{\xxxSubParagraphNoStar}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +\makeatother + + +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}\usepackage{longtable,booktabs,array} +\usepackage{calc} % for calculating minipage widths +% Correct order of tables after \paragraph or \subparagraph +\usepackage{etoolbox} +\makeatletter +\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} +\makeatother +% Allow footnotes in longtable head/foot +\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} +\makesavenoteenv{longtable} +\usepackage{graphicx} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +% Set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother + +\KOMAoption{captions}{tableheading} +\makeatletter +\@ifpackageloaded{bookmark}{}{\usepackage{bookmark}} +\makeatother +\makeatletter +\@ifpackageloaded{caption}{}{\usepackage{caption}} +\AtBeginDocument{% +\ifdefined\contentsname + \renewcommand*\contentsname{Table of contents} +\else + \newcommand\contentsname{Table of contents} +\fi +\ifdefined\listfigurename + \renewcommand*\listfigurename{List of Figures} +\else + \newcommand\listfigurename{List of Figures} +\fi +\ifdefined\listtablename + \renewcommand*\listtablename{List of Tables} +\else + \newcommand\listtablename{List of Tables} +\fi +\ifdefined\figurename + \renewcommand*\figurename{Figure} +\else + \newcommand\figurename{Figure} +\fi +\ifdefined\tablename + \renewcommand*\tablename{Table} +\else + \newcommand\tablename{Table} +\fi +} +\@ifpackageloaded{float}{}{\usepackage{float}} +\floatstyle{ruled} +\@ifundefined{c@chapter}{\newfloat{codelisting}{h}{lop}}{\newfloat{codelisting}{h}{lop}[chapter]} +\floatname{codelisting}{Listing} +\newcommand*\listoflistings{\listof{codelisting}{List of Listings}} +\makeatother +\makeatletter +\makeatother +\makeatletter +\@ifpackageloaded{caption}{}{\usepackage{caption}} +\@ifpackageloaded{subcaption}{}{\usepackage{subcaption}} +\makeatother +\ifLuaTeX + \usepackage{selnolig} % disable illegal ligatures +\fi +\usepackage{bookmark} + +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\urlstyle{same} % disable monospaced font for URLs +\hypersetup{ + pdftitle={R-Instat Climatic Guide}, + pdfauthor={Roger Stern, Danny Parsons, David Stern, Francis Torgbor \& James Musyoka}, + colorlinks=true, + linkcolor={blue}, + filecolor={Maroon}, + citecolor={Blue}, + urlcolor={Blue}, + pdfcreator={LaTeX via pandoc}} + +\title{R-Instat Climatic Guide} +\author{Roger Stern, Danny Parsons, David Stern, Francis Torgbor \& +James Musyoka} +\date{2025-01-06} + +\begin{document} +\maketitle + +\renewcommand*\contentsname{Table of contents} +{ +\hypersetup{linkcolor=} +\setcounter{tocdepth}{2} +\tableofcontents +} +\bookmarksetup{startatroot} + +\chapter{Acknowledgments}\label{acknowledgments} + +\hl{To be added.} + +\bookmarksetup{startatroot} + +\chapter{About this guide}\label{about-this-guide} + +\section{Who is this guide for?}\label{who-is-this-guide-for} + +This guide is concerned with the analysis of climatic data. It is for +four types of reader: The first is those concerned with the collection +and subsequent use of their climatic data. This includes staff of +national meteorological services, (NMSs) who are often the custodians of +the historical climatic data for their country. There are many others +who collect climatic data, for example schools and colleges, farms, +agricultural institutes and many individuals. + +Second is the users who need results from an analysis of historical +climatic data. They may undertake analyses themselves, or, at least, +need to know what is possible from the data. They are in many walks of +life, including agriculture, health, flood prevention, water supply, +renewable energy, building, tourism and insurance. + +The other two groups are concerned more with teaching and learning +statistics. Looking at climatic data is an application of interest to +many people; partly because of the effects that climate has on many +areas. Also because of the many issues of climate change. + +So, the third group is those who teach statistics. This guide shows how +simple statistical ideas are used in solving practical problems in one +application area. The key concepts of sensible data handling are the +same whatever the area of application. + +The final group consists of those who have to learn statistics. Many +people recognize that they need statistics skills for their work but +sometimes find their statistics courses are difficult to relate to +real-life applications. The materials here are complementary, by +starting with the application and considering the statistical ideas that +are needed to process the data. + +These groups overlap. For example, many users of climatic data are also +conscious of their need for further training in statistics. + +\section{Why is it needed?}\label{why-is-it-needed} + +Many organizations have devoted more effort to collecting climatic data +than to their subsequent analysis. This is like other areas where +monitoring data are collected routinely. One way that climatic data is +perhaps different is that much of the data has an important immediate +use. It is an input for the short-term forecasts and for other immediate +monitoring of the current season. This might be termed a ``spatial +need'' in that these applications benefit from lots of data from +different places at the same time. These data are then stored, and this +guide is for a ``time series need''. Most of the analyses in this guide +are for long records in time. They may be for one, or more, points in +space. + +Sometimes the excuse for the lack of analysis is that the quality of the +data is suspect. This is not a good reason, because one way to improve +data quality is to analyze the existing data to demonstrate their +importance and shortcomings. + +It is also useful if those who collect data can do their own analysis, +or at least be involved in the analysis. This is highly motivating for +staff and an excellent way to encourage good data quality. + +Some familiarity with the use of software (under Windows) is assumed. +Knowledge of statistics is useful, but not essential for most chapters. +Indeed, though this guide cannot substitute for a conventional +statistics book, users can learn many general ideas through seeing where +different techniques are useful. + +\section{What software is used?}\label{what-software-is-used} + +This guide uses the R Statistical system (R Core Team, 2018). It mainly +uses R through a graphical user interface, called R-Instat. An earlier +version of this guide (Stern, Rijks, Dale, \& Knock, 2006) was for a +simple statistics package, called Instat. Like the original Instat, +R-Instat combines a general statistics package with a special additional +menu to simplify the analysis of climatic data. + +R-Instat is designed to support improved learning of statistics in +general as well as providing a wide range of special dialogues to +simplify, and hence facilitate, the analysis of climatic data. + +\section{What is in this guide?}\label{what-is-in-this-guide} + +Illustrations and `route maps' are provided in all chapters for those +who just wish to study particular topics. We hope that some users will +enjoy the way the ideas unfold in successive chapters but do not assume +that readers will wish to look at every chapter. Most chapters are in a +``tutorial'' style, so readers can follow, and practice at the same +time. There is considerable repetition, to support users to ``dip into'' +the chapters they need. + +How much practice is needed, depends on the user's current experience in +statistical computing. Those who are relatively inexperienced, or have +never used a statistics package, may be surprised at how easy the ideas +and the software are. However, beginners need practice, so just reading +the guide will not be so effective. + +Those with experience of a statistics package should find that R-Instat +is like many other statistics packages. Then practice is not so +important, because they should be able to visualize the results from +just reading the text. + +We assume R-Instat has already been installed, see +\href{http://r-instat.org/index.html}{\ul{http://r-instat.org/index.html}}. + +Chapters 2 and 3 provide practice of using R-Instat in general. Climatic +data are used, but not the special climatic menu. They assume initial +knowledge of R-Instat that could be from the two initial tutorials. +Beginners should go through these tutorials, while others may just need +to see the corresponding videos. + +Chapters 4 to 7 show the use of the R-Instat climatic menu. The +structure of the climatic menu mirrors the main menus. It has items in +the order that is usually needed in an analysis. First is +\textbf{\emph{File}}, to input the data, then \textbf{\emph{Prepare}}, +to organise them for analysis, then \textbf{\emph{Describe}}, to analyse +the data without assuming a particular (statistical) model. Lastly, the +menu includes some special modelling items. + +If your need is to analyze your own climatic data as quickly as +possible, then you may choose to omit Chapters 2 and 3 initially. +Chapter 4 describes the R-Instat ``climatic system''. This is then +assumed in later chapters. Chapter 5 is on initial exploration of the +data and on quality control. Chapter 6 produces and analyses +``standard'' summaries, such as rainfall totals, while Chapter 7 +examines ``tailored products'' such as the start of the rains. + +Chapter 8 examines further features of R-Instat, particularly for users +of climatic data who may wish to migrate from R-Instat to using R +itself. There are inevitable limits to the efficient processing of data +with a menu-driven package. This idea is already introduced in Chapter 3 +where Section 3.5 is titled ``Don't let the computer laugh at you''. +Hence, for example, Chapter 8 considers how particular climatic analyses +can be done, using tools in R that are currently absent from R-Instat. + +The remaining chapters examine more specialised topics. Chapter 9 is on +the input and analysis of gridded satellite and reanalysis data. Chapter +10 is on mapping and 11 introduces the important area of extremes. + +The PICSA (Participatory Integrated Climate Services for Agriculture) +project is described briefly in Section 1.6 and in more detail in +Chapter 12. + +The remaining chapters are on a range of further topics including the +(statistical approach to) the seasonal forecast, the use of stochastic +models, the processing of within-day data (e.g.~from automatic stations) +and the analysis of circular data, particularly for wind direction. + +All the data sets used for illustration are supplied in the R-Instat +``library''. Chapter 3 describes how the data are organized, so readers +can substitute their own data for the examples in later chapters. + +The analysis of the climatic records is often a two-stage process. The +first stage reduces the raw, often daily, data to a semi-processed form +with key summaries that correspond to users\textquotesingle{} needs. The +second stage involves processing these summaries. + +This two-stage process is typical of the processing of many types of +data and is one reason why users often find their statistics training +did not seem relevant to real-world problems. Many courses use only +small sets of semi-processed data that are tailored to the topic being +taught. However, the real world starts with primary data, and these are +often quite large. + +\section{Climatology, statistics, and +computing?}\label{climatology-statistics-and-computing} + +Readers who are not confident in statistics should recognize the three +different subjects that are in this guide, namely climatology, +statistics, and computing. The material becomes easier if you separate +these subjects as far as possible. + +R is a programming language and those who are already adept in R may +find they do not need the R-Instat menus and dialogues but can use +RStudio more efficiently for the same analyses. In contrast, beginners +in R, sometimes find it difficult to use in their statistics courses. +They are still trying to master the computing ideas, and this becomes +mixed with the statistical objectives. + +Computing ideas are raised at various points in this guide, because +users sometimes limit the analyses they conduct, by not exploiting the +software fully. So, we show how R-Instat can be used in different ways, +to solve problems raised by users in their needs for data analysis. +These sections should be recognized as largely computing topics and +perhaps omitted initially by those who have less interest in using R +itself. + +Statistics and climatology have two features in common. Both are +relevant to a wide range of applications and many specialists in those +application areas treat both statisticians and climatologists as an +unwelcome nuisance! Perhaps by working together, they can be welcomed +more. + +\section{Climate Services for +Agriculture}\label{climate-services-for-agriculture} + +Many countries have projects on climate and agriculture. These projects +often concentrate on sharing the information on the short-term and +seasonal forecasts with producers. We outline one such project, called +PICSA (Participatory Integrated Climate Services for Agriculture). More +information on PICSA is here: +\href{https://research.reading.ac.uk/picsa/}{\ul{https://research.reading.ac.uk/picsa/}}. + +The different component of PICSA are shown in Fig. 1.6a + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 1.6a The PICSA project}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=5.64347in,height=4.15038in]{media/image1407.png} \\ +\end{longtable} + +A distinguishing feature of PICSA is the first panel in Fig. 1.6 and +this is in addition to the forecasting activities. The first panel is on +aspects that are based on an analysis of the historical climatic +records, that are shared with small-scale farmers, before the seasonal +forecast is available. The National Met Service (NMS) is a key partner +in each country and provides analyses of the historical data. These +analyses use the methods described in Chapters 6 and 7 of this guide and +are from the climatic stations that are as close as possible to +different groups of farmers. PICSA is described in Chapter 12. + +\section{The Climsoft Climate Data Management +System}\label{the-climsoft-climate-data-management-system} + +Climsoft is a free and open source system for the entry and management +of primary climatic data. The initial screen is shown in Fig. 1.7a. It +has facilities for the entry and checking of data from paper records, +and for the transfer of data from previous systems, and from automatic +stations. The data, and metadata are currently held in a mysql database. + +Climsoft is designed particularly for National Met Services (NMSs), but +can be used by any other organisation that has to manage historical +climatic or other related data. A wide range of elements are +pre-defined, but others can be added for hydrology, pollution or other +aspects. Data can be at any scale, e.g.~daily, 10-minute. + +Climsoft includes some products, but not many. Instead, R-Instat can +read data directly from Climsoft, or exported from Climsoft, and is +designed as the products' partner to Climsoft. In later versions of +Climsoft the plan is for some of the R-routines in R-Instat to become +part of Climsoft. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 1.7a The main Climsoft menu}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=5.75635in,height=3.96937in]{media/image1396.png} \\ +\end{longtable} + +\bookmarksetup{startatroot} + +\chapter{More Practice with R-Instat}\label{more-practice-with-r-instat} + +\section{Introduction}\label{introduction} + +To use climatic data fully it is important to be able to deliver +products. The two examples in this chapter describe the steps and the +endpoint in this process. Data are supplied in the right form for the +analysis. The objectives are specified, and your task is to prepare the +tables and graphs for a report and a presentation. + +Some familiarity with R-Instat is assumed. There are two initial +tutorials and following those is enough preparation. If you have already +used a statistics package before, then the examples below may be +sufficient for you, even without the tutorials. This chapter is also +designed to provide practice with R-Instat. + +The first problem builds on a study in Southern Zambia. This is the most +drought-prone area of the country. Everyone knew that there is +\textquotesingle climate change\textquotesingle! Some farmers were +emigrating North, citing climate change as their reason. However, a +local non-governmental organization (NGO) called the Conservation +Farming Unit, questioned this reasoning for the rainfall data. They are +not convinced that any climate change has necessarily affected the +farming practices. They, therefore, commissioned a study that used daily +climatic data from several stations in Southern Zambia. The results were +supplied as a report, and presentations of the results were also made to +the NGO and to the local FAO Officers. The results confirmed evidence of +climate change in the temperature data, but not in the rainfall. The key +conclusions were later made into short plays that were broadcast on +local radio and played at village meetings. + +Here we use data from Moorings, a site in Southern Zambia. The daily +data, on rainfall, are from 1922 to 2009. Here, partly for simplicity, +we largely use the monthly summaries. + +For the work, we draw an analogy with the preparation of a meal. The +first key requirement is that you have the food, which here is the +climatic data. In a real meal, the food may be supplied in a form that +is ready for cooking, or it may need preparation prior to cooking. Here +the data are in pre-packed form, so the analysis can proceed quickly. + +You also need the right tools. In a kitchen, they are the saucepans, +etc, while here they are just the computer, together with the required +software. + +You need some general cooking skills. These are the basic computing +skills, plus initial skills of R-Instat, at least from the tutorial. + +Finally, your objectives must be clear. This corresponds to having a +specific meal in mind so that a recipe can be used. Of course, you may +have to adapt slightly as you go along. You might find some oddities in +the data, just as cooks must improvise if they suddenly find that one of +the ingredients is not available. + +If everything is well organized, the cook can prepare the meal very +quickly. This is just what is done in the products in this chapter. This +leaves time to make sure the dishes, for us the results, are presented +attractively. Then users will enjoy consuming what is presented. + +Section 2.2 describes the data for this first task. Trends in the +rainfall are examined in Section 2.3. A second problem, in Section 2.4, +examines whether satellite data on sunshine hours resembles +corresponding station data. Daily data from Dodoma, Tanzania, are used. + +The data for each of these case studies are in the R-Instat library. The +presentation is designed so users can repeat the analyses on their +laptops. + +Graphs are produced in each of these sections and the general methods +for graphics in R-Instat is outlined in Section 2.5. Section 3.5 then +adds a warning. R-Instat provides an easy-to-use click and point way of +using the R programming language. It should help users to solve may +problems. But a click-and-point system is not the right tool for all +problems. We describe a problem that may require more programming +skills, at least if you wish to prevent your computer from laughing at +you! + +This chapter demonstrates R-Instat as a simple general statistics +package and the File, Prepare and Describe menus are used. It +illustrates that a general statistics package is an appropriate tool for +many climatic problems. It is also designed to consolidate your +experience in using R-Instat. The special climatic menu is introduced in +chapter 4. + +\section{The Moorings data}\label{the-moorings-data} + +Monthly data are used in this part of the chapter. Daily data are the +starting point in most of this guide because many of the objectives +require daily data. But here the emphasis is on objectives for which the +monthly data are suitable. + +The data are already in an R-Instat file. Hence, they can be opened from +the library in R-Instat library. + +From the opening screen in R-Instat, select \textbf{\emph{File +\textgreater{} Open From Library}} as shown in Fig. 2.2a. Choose +\textbf{\emph{Load From Instat Collection}}, Then \textbf{\emph{Browse}} +to the \textbf{\emph{Climatic}} directory then to +\textbf{\emph{Zambia}}. \textbf{\emph{Select}} the file called +\textbf{\emph{Moorings\_July.rds}} to give the screen shown in Fig. +2.2b. Press \textbf{\emph{Ok}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5694}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4167}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.2a File \textgreater{} Open from Library}} + +\textbf{\emph{(Climatic \textgreater{} Zambia \textgreater{} +Moorings.RDS)}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.2b Ready to import Moorings.RDS}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.35845in,height=3.04612in]{media/image 1404.png} +& \includegraphics{media/image1409.png}\{ width=``2.430002187226597in'' +hei ght=``2.7552777777777777in''\} \\ +\end{longtable} + +The resulting data are shown in Fig. 2.2c. There are 2 data frames. The +one called Moorings has daily data. + +\textbf{\emph{Move to the second data frame}} as shown in Fig. 2.2c +which shows the monthly totals. They are the total rainfall in mm and +the total number of rain days. A rain day was defined as a day with more +than 0.85mm\footnote{This threshold is like the value of 1mm sometimes + suggested by WMO. The smallest value usually recorded is 0.1mm, but we + find stations are not equally conscientious in recording very small + amounts. So, if 0.1mm is used, then it is harder to compare the + pattern of rainfall at different stations. Records also differ in + their attitudes on rounding. So, some records have far fewer values of + 0.9 or 1.1mm than others. There is also an old issue that some + stations used to measure in inches and the smallest value was then + 0.01 inches. This translates to 0.3mm and higher values are 0.5, 0.8 + and 1mm. So 0.9mm is not possible in data that used to be in inches. + Hence the threshold of 0.85mm is a practical way of implementing ``1mm + and above''.}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.2c The Moorings monthly data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.2d Boxplot dialogue on the Describe menu}} + +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} Boxplot}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=1.84414in,height=3.4744in]{media/image1423.pn g} +& +\includegraphics[width=3.09565in,height=2.32934in]{media/image141 6.png} \\ +\end{longtable} + +Rainfall in Southern Zambia is from November to April. Hence, we analyze +the data by season, rather than by year. There are 88 seasons from 1922 +to 2009 and 1056 monthly values, as indicated in Fig. 2.2c. + +The task is to write a short report that describes the patterns of +rainfall. One aim is to assess whether there is obvious evidence of +change in the pattern of rainfall. This evidence might justify +requesting the data from multiple stations, to undertake a more detailed +study. The first step is to explore the data, and then consider how +appropriate results could be presented. To explore we start with a +boxplot to show the seasonal pattern of the rainfall totals. + +Choose the Boxplot dialogue from the Describe menu, with +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} Boxplot}}, +as shown in Fog. 2.2d. Complete the dialogue as shown in Fig. 2.2e. The +resulting graph is shown in Fig. 2.2f\footnote{The body of the boxplot + is not blue by default. For this, choose \textbf{\emph{Boxplot + Options}} in Fig. 2.2e, then choose the \textbf{\emph{Geom + Parameters}} tab and change the \textbf{\emph{Fill colour}} to your + choice.}. This shows the total rainfall was typically 200mm in each of +December to February. There was always some rain in each of these +months, and the records were over 500mm. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.2e Completed boxplot dialogue}} + +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} Boxplot}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.2f Boxplot of monthly rainfall totals}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.10142in,height=3.54022in]{media/image1413 .png} +& +\includegraphics[width=2.96615in,height=3.09526in]{media/image1424.p ng} \\ +\end{longtable} + +Change the variable from rain to \textbf{\emph{raindays}} in Fig. 2.2e +to give the corresponding boxplots for the number of raindays in the +month, Fig. 2.2g. This shows that typically one day in two are rainy in +December to February. Occasionally most of the days are rainy. + +Boxplots are essentially a 5-number summary of the data, (with potential +outliers also shown). The \textbf{\emph{Prepare \textgreater{} Column: +Reshape \textgreater{} Column Summaries, Fig. 2.2h,}} dialogue can +provide the same summaries numerically. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.2g The number of rain days}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.2h Summary dialogue on the Prepare menu}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.2808in,height=3.43955in]{media/image1408.png} & +\includegraphics[width=2.72443in,height=2.69121in]{media/image1421.png} \\ +\end{longtable} + +Summarise both the monthly totals and the number of raindays, with the +month as the factor, as shown in Fig. 2.2i. Then choose the Summaries +button and complete the sub-dialogue as shown in Fig. 2.2j. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.2i The Summary dialogue}} + +\textbf{\emph{Prepare \textgreater{} Column: Reshape \textgreater{} +Column Summaries}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.2j Summaries sub-dialogue}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.20563in,height=3.34338in]{media/image107 9.png} +& +\includegraphics[width=2.73372in,height=3.67453in]{media/image1065.png} \\ +\end{longtable} + +The results are in a third data frame. It just has 12 rows as shown in +Fig. 2.2k. The summaries are clearer if they are in order (which we did +already for Fig. 2.2k). + +\textbf{\emph{Right-click in the name field}} of this data frame and +choose the option to \textbf{\emph{Reorder columns}}, Fig. 2.2l. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.2k Resulting summary data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig 2.2l Right-click menu to reorder columns}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.51673in,height=2.44292in]{media/image1078.png} +& +\includegraphics[width=2.41931in,height=2.46411in]{media/image1074.png} \\ +\end{longtable} + +In the Reorder dialogue, use the \textbf{\emph{arrow keys}} to change +the position of the columns in the data frame. + +With the summaries in a sensible order, they are now transferred to the +results (output) window. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.2m Reorder the resulting columns}} + +\textbf{\emph{Right-Click \textgreater{} Reorder Column(s)}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.2n Simplify column names}} + +\textbf{\emph{Right-click \textgreater{} Rename Column}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.09828in,height=2.21875in]{media/image1080. png} +& +\includegraphics[width=3.0263in,height=2.08349in]{media/image1077.p ng} \\ +\end{longtable} + +Before this, we renamed some of the columns to give shorter names. This +again used the \textbf{\emph{right-click}} menu, Fig 2.2l. The rename +dialogue is shown in Fig. 2.2n. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4444}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5417}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.2o View Data dialogue}} + +\textbf{\emph{Prepare \textgreater{} Data Frame \textgreater{} View +Data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.2n The Monthly number of rain days}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image1091.png} \{width=``2.7121620734908136in'' +height=``2.720417760279965in''\} & +\includegraphics[width=3.3783in,height=2.30157in]{media/image1 075.jpg} \\ +\end{longtable} + +Now use the \textbf{\emph{Prepare \textgreater{} Data Frame +\textgreater{} View Data}} dialogue, Fig. 2.2o, to transfer the rainfall +totals and then the number of rain days to the results window. The +results for the number of rain days are shown in Fig. 2.2p. + +\section{The objectives}\label{the-objectives} + +Section 2.2 explored the data and examined the seasonal pattern of the +rainfall at Moorings. It also made use of the three menus, File, Prepare +and Describe and well as the right-click menu. The main objective, +however, was to see if there is evidence of rainfall change rather than +to investigate the seasonal pattern. + +We first examine the annual totals and the total number of rain days. +These are the totals from July to June, so they cover each season. + +Some ``housekeeping'' is a preliminary. The 3\textsuperscript{rd} +data-frame is no longer needed. Right-click on the bottom tab a and +choose the option to delete, Fig. 2.3a. The dialogue shown in Fig. 2.3b +opens. Just press ok. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3068}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6818}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3a Right-click on the bottom tab}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3b Delete a data frame}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.15289in,height=1.68759in]{media/image1086.png} +& +\includegraphics[width=3.80764in,height=2.32324in]{media/image1081.png} \\ +\end{longtable} + +Use \textbf{\emph{Prepare \textgreater{} Column: Reshape \textgreater{} +Column Summaries}} and complete the dialogue and sub-dialogue as shown +in Fig. 2.3c and Fig. 2.3d to produce the seasonal totals. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3c Produce the annual totals}} + +\textbf{\emph{Prepare \textgreater{} Column: Reshape \textgreater{} +Column Summaries}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3d The Summaries sub-dialogue}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\begin{minipage}[t]{\linewidth}\raggedright +\begin{figure}[H] + +{\centering \includegraphics[width=3.19367in,height=3.34039in]{media/image1057 .png} + +} + +\caption{C:\textbackslash Users\textbackslash R +OGERS\textasciitilde1\textbackslash AppData\textbackslash Local\textbackslash Temp\textbackslash SN +AGHTML1b0bb1d.PNG} + +\end{figure}% +\end{minipage} & +\includegraphics[width=2.83124in,height=3.80561in]{media/image1048.pn g} \\ +\end{longtable} + +The results are shown in Fig. 2.3 e after the steps explained below. +First, notice in Fig. 2.3e that there were only 4 months in the first +season, and the annual summary was therefore set to missing\footnote{This + is partly because the ``Omit Missing Values'' checkbox in Fig. 2.3c + was left unchecked. Coping with missing values in the data, when + summaries are calculated, is a complex issue. It is discussed in + detail in Chapter 6.}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3e Resulting annual data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3f Menu for a text substring}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.94072in,height=3.52182in]{media/image1092.png} +& +\includegraphics[width=3.02793in,height=2.81264in]{media/image1053.png} \\ +\end{longtable} + +A numeric column for the year (season) is needed for the time series +graphs. Hence, as shown below, we produce the second column, called +s\_yr, also shown in Fig. 2.3e. + +Use \textbf{\emph{Prepare \textgreater{} Column: Text \textgreater{} +Transform}}, Fig. 2.3f. Complete the resulting dialogue, as shown in +Fig. 2.3g, to give just the starting year of the season. The resulting +variable is shown in Fig. 2.3e. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5694}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4167}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3g The Substring Option}} + +\textbf{\emph{Prepare \textgreater{} Column:Text \textgreater{} +Transform}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3h Convert Column to Numeric}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.45986in,height=3.00122in]{media/imag e1056.png} +& \includegraphics{media/image1076.png}\{ width=``2.003675634295713in'' +hei ght=``2.8906255468066493in''\} \\ +\end{longtable} + +Use the \textbf{\emph{right-click}} menu, Fig. 2.3h to convert the +resulting s\_yr column to numeric. + +After a little further housekeeping from the right-click menu, to +\textbf{\emph{rename}}, \textbf{\emph{re-orde}}r and +\textbf{\emph{delete}} columns, the annual data are as shown in Fig. +2.3e above. + +Now for the time-series graphs. They can be produced using the +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} Line +Plot}} dialogue, but this type of graph is just what is needed for the +PICSA-style rainfall graphs, so we use the special climatic menu for the +first time. + +Use \textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} Rainfall +Graph}}. Complete as shown in Fig. 2.3i. Press the \textbf{PICSA +Options} button and complete the Lines ab as shown in Fig. 2.3j to add +(and label) a horizontal line for the mean. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3i PICSA Rainfall graph dialogue}} + +\textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} Rainfall +Graph}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3j Add a line showing the mean}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.79572in,height=2.51954in]{media/image1059.png} +& +\includegraphics[width=3.26365in,height=2.3179in]{media/image10 55.png} \\ +\end{longtable} + +The resulting graph is shown in Fig 2.3k\footnote{The graph in Fig. 2.4k + also starts from 0. This used the Yaxis tab in Fig. 2.3j.}. +\textbf{\emph{Return to the dialogue}} and put \textbf{\emph{raindays}} +as the y-variable to give the results in Fig. 2.3l. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3k Seasonal rainfall totals}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3l Number of rain days}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.01733in,height=1.50165in]{media/image1058.png} +& +\includegraphics[width=2.87199in,height=1.42931in]{media/image1064.png} \\ +\end{longtable} + +These graphs indicate large inter-annual variability, but they don't +seem to show a trend. That is important because, if you can attribute +your farming problems to climate change, then there may be nothing you +can do. But coping with the variability is what farmers have always had +to do. + +With results such as shown in Fig. 2.3k and 2.3l you can start comparing +risks for different options in your farming and in other enterprises. +That sort of idea is discussed in PICSA workshops. + +Some may find the graph shown above to be convincing evidence that, with +rainfall, the pressing problem is variability, rather than change. We +stress that there IS climate change, and similar graphs with temperature +data show a trend. If the temperatures have changed, then the ``system'' +has changed, and it follows that other elements including rainfall will +be affected. Currently, however, with this sort of analysis, it is +usually not yet possible to determine which way the pattern of rainfall +may change. It is difficult to detect a small change when the +inter-annual variability is so large. And, even if a change is detected, +coping as well as possible with the variability must be a good thing to +do. + +Some people are not convinced by graphs such as are shown above. A +common statement is that the annual totals that might still be similar, +but the season is shorter, because planting is delayed, etc. We examine +this in more detail in Chapter 7. There the daily data are used to +define the start, end and length of the season as well as to examine dry +spells and extremes during the season. With the monthly total, the +examination can start by repeating the analysis above, but just for +November and December, when the season starts. + +\textbf{\emph{Return to the monthly data frame}} and +\textbf{\emph{filter}} to examine just those months. So, make sure you +are on the monthly data. \textbf{\emph{Right click}} as usual and choose +\textbf{\emph{Filter}}, Fig. 2.3m + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.2679}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.7225}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3m Right-click for Filter}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3n The filter dialogue}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.88588in,height=3.65868in]{media/image1104.png} +& +\includegraphics{media/image1106.png}\includegraphics{media/image1106.png}\includegraphics[width=3.24375in,height=3.2541in]{media/image1107.png} \\ +\end{longtable} + +In Fig. 2.3n, click to \textbf{\emph{Define new Filter}}. Complete the +sub-dialogue as shown in Fig. 2.3o. The steps are as follows: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi})} +\item + \textbf{\emph{Choose the month}} column +\item + \textbf{\emph{Select Nov and Dec}} as shown in Fig. 2.3p +\item + Click to \textbf{\emph{Add Condition}} +\item + Press \textbf{\emph{Return}} +\end{enumerate} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3o Defining the filter}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3p The filtered data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.99193in,height=2.85751in]{media/image1135.png} +& +\includegraphics[width=2.05557in,height=2.97506in]{media/image1131.png} \\ +\end{longtable} + +Back on the main filter dialogue, just \textbf{\emph{press Ok}}. The +data are now as shown in Fig. 2.3p. The first column is in red and this +shows a filter is in operation. Also, at the bottom of the data frame, +you see there are now 176 rows (months) of data to analyse, out of the +original 1062 rows. + +The other data have not gone away. If ever you wish to return, then just +press right-click as before, Fig. 2.3m and choose the last option to +\textbf{\emph{Remove Current Filter}}. + +Now it is quick to repeat the steps above for this analysis. It is +simpler to recall the last dialogues as shown in Fig. 2.3q. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3q Recall the last dialogues}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3r The Column Statistics dialogue}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.60356in,height=2.74636in]{media/image1112.png} +& +\includegraphics[width=3.31515in,height=3.4576in]{media/image1130.png} \\ +\end{longtable} + +The Column Statistics dialogue and sub-dialogue remain completed from +before, Fig. 2.3r. So just \textbf{\emph{press Ok}}. + +The new columns have added to the existing annual sheet. So, go straight +to the PICSA Rainfall Graphs dialogue again. \textbf{\emph{Choose the +new variable}} for the November-December totals and press OK. The mean +is now 286mm for the 2 months. Repeat for the number of rain days to +give the graphs for the filtered data, see Fig. 2.3s and 2.3t. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4821}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3s Rainfall totals Nov-Dec}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.3t Number of rain days Nov-Dec}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.96668in,height=1.47644in]{media/image1136.png} +& +\includegraphics[width=3.03197in,height=1.50893in]{media/image1120.png} \\ +\end{longtable} + +One feature of the data in Fig. 2.3s is that had the record started in +1981, then it might have given an impression of an upward trend in the +rainfall total. The longer record shows that this sort of conclusion +should be treated with considerable caution! + +These graphs start to satisfy the objective of examining the rainfall +data in Southern Zambia for trends. The results should be considered as +provisional if only because they are from just a single station and only +use the monthly data. We suggest they make a case for a more complete +analysis with multiple stations. + +\section{Comparing satellite and station +data}\label{comparing-satellite-and-station-data} + +Our proposed objective is to report on the feasibility of using +satellite estimates of sunshine hours to supplement the information from +station data. The station network for sunshine or radiation is sparse in +many countries. Where it exists the records often have many missing +values. + +Estimates of daily hours of sunshine are also available from the +EUMETSAT CMSAF (Climate Monitoring Satellite Application Facility) for +about 5km square pixels. The data are available from 1983 and may be +downloaded free of charge. These data are in NetCDF files and examples +from a few locations have been downloaded and are the R-Instat library. + +Data from Dodoma, Tanzania was analysed in the second tutorial and the +same dataset is used here. In this exercise, these data are merged with +the corresponding satellite data and the two variables are then +compared. + +As in the tutorial use \textbf{\emph{File \textgreater{} Open From +Library}}. Choose the \textbf{\emph{Instat collection}}. Browse to the +\textbf{\emph{Climatic directory}} and choose the \textbf{\emph{Original +Climatic Guide datasets}}. Choose just the \textbf{\emph{Dodoma}} sheet, +Fig. 2.4a. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4a Importing the Dodoma data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4b Add a Date column}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.17958in,height=2.6814in]{media/image1083.png} & +\includegraphics[width=2.83037in,height=2.6954in]{media/image1101.png} \\ +\end{longtable} + +Once imported use \textbf{\emph{Prepare \textgreater{} Column: Date +\textgreater{} Make Date}}, Fig. 2.4b to construct a date column from +the Year, Month, Day columns. Name the resulting column as +\textbf{\emph{Date}}, see Fig. 2.4b. + +Now use \textbf{\emph{File \textgreater{} Import and Tidy NetCDF File}}, +Fig. 2.4c. Choose the option \textbf{\emph{From Library}} and the file +that starts \textbf{\emph{CMSAF\_SDU}} (for sunshine duration). This +file contains just the data from the nearest pixel to the Dodoma station +data. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6723}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3164}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4c Import the CMSAF satellite data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4d Change the name to Date}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.98774in,height=1.78115in]{media/image1088.png} +& +\includegraphics[width=3.03993in,height=1.77358in]{media/image1085.png} \\ +\end{longtable} + +Once imported, \textbf{\emph{right-click}} to change the name of the +last column from \textbf{\emph{time\_date}} to \textbf{\emph{Date}}, +i.e.~to the same name as in the station data, Fig. 2.4d\footnote{R is + case sensitive. So Date and date are different variable names. Hence + make sure you use Date as the new name.}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4867}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4956}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4e The Merge dialogue}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4f Sub-dialogue to add just SDU}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.11179in,height=2.50767in]{media/image1111.png} +& +\includegraphics[width=3.24524in,height=2.27735in]{media/image1093.png} \\ +\end{longtable} + +Use \textbf{\emph{Prepare \textgreater{} Column: Reshape \textgreater{} +Merge}} and complete the dialogue as shown in Fig. 2.4e. It chooses to +match on the Date columns, which is what we want. That is why we gave +them the same name in the two data frames\footnote{If the names of your + date columns are not the same, then use the Options sub-dialogue to + tell R-Instat which columns to match.}. + +The SDU column is all we need from the satellite data. So, press the +\textbf{\emph{Merge Options}} button in Fig. 2.4e. Use the +\textbf{\emph{Columns to Include}} tab and complete as shown in Fig. +2.4f. Press \textbf{\emph{Return}} and then Ok. + +Now check, using \textbf{\emph{Describe \textgreater{} One Variable +\textgreater{} Summarise}} on the merged data. Choose all the columns +and press Ok. The results are in Fig. 2.4g. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4g Results from One Variable Summarise}} + +\textbf{\emph{From Describe \textgreater{} One Variable \textgreater{} +Summarise}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4h Generate columns from the Date}} + +\textbf{\emph{Prepare \textgreater{} Column: Date \textgreater{} Make +Date}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.24941in,height=2.5164in]{media/image10 97.png} +& +\includegraphics[width=2.79982in,height=3.59451in]{media/image1096.pn g} \\ +\end{longtable} + +An encouraging sign in Fig. 2.4g is that summary statistics for the Sunh +(from the station) and SDU (from the satellite) are almost identical. +The maximum of 16 hours for SDU is a little concerning, because that is +probably longer than the maximum day length at Dodoma. + +Some ``housekeeping'' is useful, because the results in Fig. 2.4g also +show there are some missing values in the year and day of month +column\footnote{The missing values are because a full join was used in + the merging process. The satellite data are up to 2015, while the + observed data are to 2013. One way of avoiding the problem is to use a + Left Join instead.}. + +\textbf{\emph{Right-click}} and \textbf{\emph{delete the first 3 +columns}}. Then generate them again (without missing values) using +\textbf{\emph{Prepare \textgreater{} Column: Date \textgreater{} Use +Date}} dialogue, Fig. 2.4h. Then use Describe \textgreater{} One +Variable \textgreater{} Summarise again to confirm the new columns do +not have missing values. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4i Resulting merged data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4j Correlations dialogue}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.285in,height=2.76021in]{media/image1095.png} & +\includegraphics[width=2.79248in,height=2.81191in]{media/image1108.png} \\ +\end{longtable} + +\textbf{\emph{Right-Click}} and choose \textbf{\emph{Reorder +Column(s)}}. The resulting data should be like that shown in Fig. 2.4i. + +We are now ready to compare the satellite data (SDU) with the station +values (sunh). + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6723}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3164}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4k Correlations sub-dialogue}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4l Results}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.90561in,height=3.1245in]{media/image1162.png} & +\includegraphics[width=3.09444in,height=3.09444in]{media/image1186.png} \\ +\end{longtable} + +Use \textbf{\emph{Describe \textgreater{} Multivariate \textgreater{} +Correlations}}. and enter SDU and sunh, Fig. 2.4j. Click on +\textbf{\emph{Options}} and choose \textbf{\emph{Scatter Matrix}}. Fig. +2.4k. The results are in Fig. 2.4l. + +The results in Fig. 2.4l look promising. The shape of the satellite +(bottom right) and station data (top left) look similar and the +correlation is a reasonably satisfactory 0.87. + +What is next? These data (both sunh and SDU) are time series. Time +series have seasonality, and this should usually be reflected in the +analysis. + +So, return to the \textbf{\emph{correlations dialogue}} and +sub-dialogue, Fig. 2.4k and \textbf{\emph{add the month factor}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4m Including months in the analysis}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4n The Histogram dialogue}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.93056in,height=2.93056in]{media/image1164.png} +& +\includegraphics[width=3.06435in,height=2.49359in]{media/image1177.png} \\ +\end{longtable} + +The results in Fig. 2.4m show that the shape of both variables depends +on the month. In particular (as expected) there is often less sun in the +rainy season (November to April) and the correlations are then higher. +The display, in Fig. 2.4m, is also confusing as there are now too many +groups to see clearly what is happening. + +It is time to split up the components of the results in Fig. 2.4m to +compare the satellite and station data in more detail. + +Use \textbf{\emph{Describe \textgreater{} Specific \textgreater{} +Histogram}}, Fig. 2.4n. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4o A set of density graphs}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4p Include facets in the graph}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.85615in,height=2.82179in]{media/image1176.png} +& +\includegraphics[width=3.22242in,height=2.83336in]{media/image1178.png} \\ +\end{longtable} + +Change the button at the top of Fig. 2.4o to Density and click on Plot +Options. + +In the sub-dialogue, Fig. 2.4p tick the checkbox to include facets and +include the month factor. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4q Multiple variables}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4r Resulting graphs}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=1.83833in,height=1.87551in]{media/image1169.png} +& +\includegraphics[width=4.20039in,height=2.09042in]{media/image1182.png} \\ +\end{longtable} + +Return to the main dialogue, and click to include multiple variables, +Fig. 2.4q. Include Sunh and SDU and press Ok. The graphs from Fig. 2.4m +are now overlaid, so they can easily be compared, and displayed +separately for each month. Fig. 2.4r shows the pattern is similar in +each month. We also see the sharp peaks in the dry months, particularly +from June to October, when most days have about 10 hours of sunshine per +day. + +Fig. 2.4r shows the pattern of sunshine is similar from the satellite +and station data. It does not, however, show whether a day in any month +with more sunshine at the station (sunh), also had more sunshine from +the satellite data (SDU). For this, we look at the scatterplot from Fig. +2.4m again broken into the monthly facets. + +Use \textbf{\emph{Describe \textgreater{} Specific \textgreater{} +Scatterplot}} and complete the dialogue as shown in Fig. 2.4s. Press on +\textbf{\emph{Plot Options}} and include the months as facets, Fig. +2.4t, just as earlier in Fig. 2.4p. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6743}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3143}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4s Scatterplot dialogue}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4t Plotting sub-dialogue}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.0505in,height=2.89282in]{media/image1181.png} & +\includegraphics[width=2.94465in,height=2.46556in]{media/image1187.png} \\ +\end{longtable} + +The resulting set of graphs is shown in Fig. 2.4u. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 2.4u Scatterplots for each month}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.13145in,height=3.05146in]{media/image1163.png} \\ +\end{longtable} + +Our initial objective was to examine whether the satellite estimates may +be useful in Tanzania to supplement the station data. The results are +promising, but this just the start. There are many possible next steps, +including an examination of the occasions when the two variables differ +substantially. The analysis should also be extended to multiple +stations. We also need more numerical summaries to measure how close the +two variables are. Chapter 10 considers this subject in more detail. + +\section{In conclusion}\label{in-conclusion} + +\hl{To be added} + +\bookmarksetup{startatroot} + +\chapter{Using R-Instat effectively}\label{using-r-instat-effectively} + +\section{Introduction}\label{introduction-1} + +R-Instat is simply a front end to the R programming language, Wikipedia +(2019). R started in the 1990s and consists of a relatively small core, +that is maintained by the R development core team. There are then also +over 12 thousand packages that extend R's capabilities. About 200 of +these packages are included (behind the scenes) in R-Instat. + +The front end in R-Instat is written in Visual Basic.Net. This front end +provides the menus and dialogues that are used to run R-Instat. The +default view of R-Instat is shown in Fig. 3.1a. It has 2 windows, one +showing part of the data and the other is for the results or output. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9833}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.1a}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.15875in,height=3.27184in]{media/image1134.png} \\ +\end{longtable} + +R-Instat looks a little like a spreadsheet package, but there are +differences. One, shown in Fig. 3.1, is that the results are in a +separate window, rather than on successive sheets. Also, the data shown +in Fig. 3.1a are stored in an R data frame (behind the scenes) and what +you see is often only a small part of these data. + +Current spreadsheets have a limit of about 1million rows. This not a +limit in R, (or therefore in R-Instat) where your machine's memory +imposes a limit that is usually larger. However, the effort of +continually copying all the data to the front end would slow R-Instat +and hence (by default) we just show the first 1000 rows of data and the +first 30 columns\footnote{Use Tools \textgreater{} Options + \textgreater{} Data View to change these values. However, this may + have a speed effect on R-Instat.}. + +One way to see all the data in the current data frame\footnote{This is + the Dodoma data used in Chapter 2. Use \textbf{\emph{File + \textgreater{} Open from Library \textgreater{} Instat \textgreater{} + Climatic \textgreater{} Original Climate Guide Data}} and choose + \textbf{\emph{Dodoma}} to open these data.} is shown in Fig. 3.1b. +Just \textbf{\emph{right-click}} on the tab at the bottom and choose +\textbf{\emph{View Data Frame,}} Fig. 3.1c. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3164}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6723}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.1b}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.1c}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.13743in,height=2.04389in]{media/image1149.png} +& +\includegraphics[width=3.90648in,height=2.84051in]{media/image1146.png} \\ +\end{longtable} + +The same result could alternatively be done through +\textbf{\emph{Prepare \textgreater{} Data Frame \textgreater{} View +data}} as shown in Fig. 3.1d. This gives a dialogue. From here, as shown +in Fig. 3.1e, you can choose any of the open Data Frames. Then click Ok +to again show the data in R, Fig. 3.1c. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3164}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6723}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.1d}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.1e}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.99875in,height=2.47723in]{media/image1148.png} +& +\includegraphics[width=2.97072in,height=2.98024in]{media/image1160.png} \\ +\end{longtable} + +The menu and dialogue in Fig. 3.1d and 3.1e are all part of the +``front-end'' of R-Instat. When you click Ok, R-Instat constructs an R +command and sends it to R. The results are then returned to the +front-end. + +The output (results) window shows the R command that has been sent, as +well as the output, if any. \textbf{\emph{Right-click}} in the +\textbf{\emph{Output Window}}, Fig. 3.1f, if you wish to turn this off +for future commands. + +In the data window \textbf{\emph{right-click in the name field}} to +provide some common options, Fig. 3.1g. Alternatively, each of these +options is available from the \textbf{\emph{Prepare Menu}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.1f}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.1g}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.02417in,height=2.06322in]{media/image1174.png} +& +\includegraphics[width=2.97675in,height=2.69in]{media/image1151.png} \\ +\end{longtable} + +The data and output windows are the most important in R-Instat. There +are four more windows. The use of the two metadata windows is described +in Section 3.2 and the Log plus Script Windows are described in Section +3.3. + +\section{Column and data frame +metadata}\label{column-and-data-frame-metadata} + +The R data frames used through R-Instat contain data together with some +metadata. The name of each variable is part of the metadata as is a +label for each variable. R-Instat has data in a set of +\textbf{\emph{data-sheets}}. An R-Instat \textbf{\emph{data sheet}} is +an R data frame with added metadata. The added information includes +information on key columns together with links to other sheets. This +helps R-Instat keep track of multiple data frames that are connected, +such as the monthly summaries calculated from the daily data. A data +sheet also keeps information on objects that have been produced and +saved, such as graphs and models. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.2aThe toolbar and View menu}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=5.88428in,height=2.32151in]{media/image1179.png} \\ +\end{longtable} + +Use the +\includegraphics[width=0.32343in,height=0.29291in]{media/image1147.png} +icon on the toolbar, (Fig. 3.2a) or \textbf{\emph{View \textgreater{} +Column Metadata}} to see the metadata currently associated with each +open data frame. An example is in the top left in Fig. 3.2b. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9833}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.2b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.19318in,height=3.7589in]{media/image1152.png} \\ +\end{longtable} + +As with Excel you can open multiple data frames when using R-Instat. The +column metadata shown in Fig. 3.2b has tabs at the bottom, just like the +data (also shown in Fig. 3.2b), so you can check on the metadata for any +data frame. An R-Instat \textbf{\emph{data book}} is the set of open +\textbf{\emph{data sheets.}} + +Using \textbf{\emph{View \textgreater{} Data Frame Metadata}}, Fig. 3.2b +(top right) opens another window in which each row shows the metadata on +a data sheet. The information in Fig. 3.2b includes the name of the +sheet, an optional descriptive label, and the number of columns +currently in the sheet. + +If you use \textbf{\emph{File \textgreater{} Save As \textgreater{} File +Data As,}} Fig. 3.2c, at any stage, then R-Instat saves the whole data +book, i.e.~all the data frames, together with all the associated meta +data, into a single file. This file has the extension RDS and this data +book can later be re-opened in R-Instat\footnote{An R data book is + special to R-Instat. Hence these RDS files cannot be opened directly + in R, for example in RStudio. We describe, in Section 3.3 how you can + transfer your R-Instat work to RStudio.}. Good practice is usually to +work on a single topic in each data book, i.e.~the different data sheets +are usually interconnected. As with Excel, there is nothing stopping you +having all sorts of unconnected data sheets in the same book, but this +usually complicates your work. + +Some tasks are made simpler through the Column Metadata window, Fig. +3.2d. You can double-click in the name field of any column to change the +name. You can add or change the label in the same way, Fig. 3.2. For +numeric columns R chooses the number of significant figures to display. +That is also shown in the metadata and can be changed\footnote{Changing + the number of significant figures does not change any of the data in R + at all. It just changes how it is presented in the grid. If you do + want to change the number, then use the R-Instat Calculator with + Prepare \textgreater{} Column: Calculate \textgreater{} Calculations, + where the maths keyboard has round and various other functions that + can be applied.}. In addition, as shown in Fig. 3.2c, right clicking +on the left-hand side gives the same popup menu of common tasks as is +available from the data view. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.2c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.2d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.74799in,height=2.10738in]{media/image1137.png} +& +\includegraphics[width=3.16879in,height=3.74325in]{media/image1226.png} \\ +\end{longtable} + +Each Window button in the toolbar, Fig. 3.2e and the Options in the View +Menu, Fig. 3.2f act like an on-off switch. So now use the curly arrow to +reset to the default of the data and output windows side by side. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.2e}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.2f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.77954in,height=2.55545in]{media/image1225.png} +& +\includegraphics[width=2.18067in,height=2.70153in]{media/image1219.png} \\ +\end{longtable} + +In this section we have added more of the 6 Windows available in +R-Instat. The opposite is also useful. Once in the default layout, +switching off the Data Window gives just the Output (Results) Window. Or +switch off the Output Window to look at more columns of data. However, +in that case remember to switch on the Output window to see any further +results. + +\section{Graphs}\label{graphs} + +Base R has a comprehensive graphics system, and this is used by many R +packages. The grammar of graphics, Wilkinson (2005) is an influential +book and has led to the exciting ggplot package (gg for grammar of +graphics) and graphics system in R. One challenge we had in constructing +R-Instat was to make the ggplot system easy to use. Almost all the +graphs in this guide use this system. One example that does not, is the +adjusted boxplot shown in Fig. 3.5i. + +In this section we describe key concepts of the ggplot system and of our +implementation. + +One concept is ``facets''. Fig. 2.4u is an example of a facetted graph, +where there is one facet for each month. The default is for the x and y +scales to be the same for each graph\footnote{This can be changed if not + appropriate.}, so the months can be compared easily. Also, you are not +diverted by lots of axis scales for each month. + +Some multiple graphs show different information in each pane, as was +seen in Fig. 2.4m. + +Within a graph you can have multiple layers. So, there are 2 layers in +Fig. 2.4r, one for the station and the other for the satellite data. In +Chapter 10 one layer in a map shows the districts in a country and +another shows the position of each climatic station. + +In each layer there is a geometric shape, or geom. A geom may be a +point, a line, a boxplot etc. + +In R-Instat the common geoms have their own dialogue as shown in Fig. +3.3a. We choose a boxplot in Fig. 3.3b for Tmax at Dodoma by month. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3182}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6705}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.3a}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.3b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.72331in,height=2.96851in]{media/image1224.png} +& +\includegraphics[width=2.9609in,height=3.38168in]{media/image1222.png} \\ +\end{longtable} + +Every graphics dialogue includes the option to save the resulting graph, +by giving it a name. In Fig. 3.3b we called the graph Tmax\_boxplot. +This ggplot graph is now saved as part of the metadata associated with +the Dodoma data frame. + +If you don't give a name, then the default name of last\_graph is given +automatically. But, of course, that name is overwritten when you do the +next graph. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4867}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4956}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.3c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.3d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.01445in,height=2.81191in]{media/image1230.png} +& +\includegraphics[width=3.03488in,height=2.83132in]{media/image1239.png} \\ +\end{longtable} + +Double-click in the graph, Fig, 3.3d to turn it blue. This also produces +the popup menu and the graph can be copied to the clipboard. + +An alternative is shown in Fig. 3.3e. \textbf{\emph{Click}} on graph +icon +\includegraphics[width=0.31567in,height=0.25254in]{media/image1236.png} +in the toolbar to show the last graph in R's viewer. This only shows a +single graph, but the Window can be resized and, as shown in Fig. 3.3e, +there are now many options to save the graph, or to copy it to the +clipboard. + +This toolbar option is only for the most recent graph. The +\textbf{\emph{Describe \textgreater{} View Graph}} dialogue, Fig. 3.3f +provides the option to view any of the saved graphs in this +way\footnote{Sometimes the graph in the R viewer does not seem to + appear, or it appears and then disappears again. This is because it is + on a totally separate window. In this case look in the R-Instat icon + in the taskbar at the bottom of the screen.}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4937}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4979}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.3e The R graph viewer}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.3f Options for viewing graphs}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.93383in,height=3.1794in]{media/image1213.png} & +\includegraphics[width=3.04079in,height=2.08133in]{media/image1235.png} \\ +\end{longtable} + +We use the dialogue in Fig. 3.3f to show a third way to examine graphs; +one that makes use of the excellent plotly package. This is called the +Interactive Viewer in Fig. 3.3f. This opens the graph in a browser +(though you don't need to be online) as shown in Fig. 3.3g. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig.3.3g The (plotly) interactive viewer for ggplot +graphs}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.0783in,height=3.51257in]{media/image1218.png} \\ +\end{longtable} + +In Fig. 3.3g the data for October are shown. This demonstrates that the +boxplot shows the median (30.6°C), the quartiles, etc. In addition, you +can hover over any point to find its value and zoom if a part of the +plot is of special interest. This is a system worth exploring, so we add +a second example. This also shows the value of facets in a graph. + +Use \textbf{\emph{Describe \textgreater{} Specific \textgreater{} +Scatterplot}} to examine Tmax as the Y variable against Tmin as the X, +Fig. 3.3h. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.3h Initial use of scatterplot (geom point)}} + +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} Scatter +Plot}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.3i Resulting graph}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.12971in,height=2.95417in]{media/image1192 .png} +& +\includegraphics[width=2.70165in,height=2.91952in]{media/image1202.p ng} \\ +\end{longtable} + +The resulting graph is relatively uninformative, except to demonstrate +there is a lot of data. And you don't need a special graphics system for +a single graph like this. It does show there are a few outlying points +that require closer investigation. + +More concerning, as a principle, is that these are time series data. One +property of time series is the seasonality and we could allow for this +by looking separately at each month. + +Return to the dialogue in Fig. 3.3h. Click on \textbf{\emph{Plot +Options}} and add the \textbf{\emph{month}} factor as a facet, Fig. +3.3j. Press Return on the sub-dialogue. Then make the \textbf{\emph{By +Variable}} also the \textbf{\emph{month}} factor and the +L\textbf{\emph{abel Variable}} the \textbf{\emph{Date}}. Click OK to +produce the result shown in Fig. 3.3k. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.3j Plot options sub-dialogue}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.3kTmax v Tmin by month}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.64658in,height=2.24218in]{media/image1201.png} +& +\includegraphics[width=3.07205in,height=3.2636in]{media/image1209.png} \\ +\end{longtable} + +One feature of the graph in Fig. 3.3k is that there is the same x and y +scales for each graph. This is appropriate here and has then the big +advantage that the graph is not cluttered with many axes, so the data +are more easily compared. + +As with the overall graph in Fig 3.3i, one aspect to be investigated, +from Fig. 3.3k, is the outliers. This is easily done via the interactive +viewer. So, return to \textbf{\emph{Describe \textgreater{} View Graph}} +and choose the last graph, possibly called scatter\_Tmax.Tmin from Fig. +3.3h (or just last\_graph if no name was given). + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig 3.3l Interactive view}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.16175in,height=2.64806in]{media/image1210.png} \\ +\end{longtable} + +The new feature in Fig. 3.3l is that you can now hover over any point +and see the values in more detail. The example shown in Fig. 3.3l is +that on 9 October 1989 both Tmax and Tmin were 15.6°C. Worth checking! +From the graph 15.6°C is very sensible for Tmin but not for +Tmax\footnote{The extra feature in Fig. 3.4 is the date of each outlier, + which helps in the quality control. This is provided by the label + argument in the \textbf{\emph{Describe \textgreater{} Specific + \textgreater{} Scatter Plot}} dialogue in Fig. 3.4h.}. + +Other dialogues also provide useful graphs. As an example, use +\textbf{\emph{Describe \textgreater{} Multivariate \textgreater{} +Correlations}}, Fig. 3.3m as in Chapter 2. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3143}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6743}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.3m}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.3n}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.70613in,height=1.98484in]{media/image1216.png} +& +\includegraphics[width=3.30684in,height=3.20808in]{media/image1200.png} \\ +\end{longtable} + +Complete the dialogue as shown in Fig. 3.3n. Click on the Options button +and complete the sub-dialogue as shown in Fig. 3.3o. The resulting +display is in Fig. 3.3p. + +For the data this indicates that both Tmax and Tmin have roughly normal +distributions each month. The correlations are quite low. As with the +other graphs more detail can be found from the plotly interactive +display. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6761}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3125}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.3o Correlations sub-dialogue}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.3p Distributions, scatterplot and correlations}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.62941in,height=2.82749in]{media/image1184.png} +& +\includegraphics[width=3.32619in,height=3.1183in]{media/image1189.png} \\ +\end{longtable} + +This is an example of a graphical display where the different panes show +different types of display. Indeed, one pane is numeric. We used to +think that a display in a graph was distinct from displaying tables of +results. But Fig. 3.3p is like a 2 by 2 table, one cell of which +contains numbers, while the others contain graphs. + +Finish this section with a little ``housekeeping''. Several objects +(graphs) have been produced and perhaps are now no longer needed. Use +\textbf{\emph{Prepare \textgreater{} R Objects \textgreater{} Delete}}, +Fig. 3.3q. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3200}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6686}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.3q Menu to manage R objects}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.3r Delete objects no longer needed}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.28768in,height=2.87769in]{media/image1197.png} +& +\includegraphics[width=3.70709in,height=2.59417in]{media/image1203.png} \\ +\end{longtable} + +We choose to delete all the objects, Fig. 3.3r. + +\section{The log and script windows}\label{the-log-and-script-windows} + +The final two Windows in R-Instat are for the Log Window and the Script +Window. + +The R programming language is very powerful, but with a relatively steep +learning curve. R-Instat gives easy access to a subset of R. However, a +click-and-point system always has limitations. We consider here some +options if these limitations are ever a constraint. + +The log file keeps a record of all the R-commands that have been issued +during a session of R-Instat. Use the toolbar option +\includegraphics[width=0.28851in,height=0.27649in]{media/image1276.png}, +Fig. 3.2e, or \textbf{\emph{View \textgreater{} Log Window}} to open the +log file. + +In the Log file, the \textbf{\emph{right-click menu}} gives various +options, Fig. 3.4a, including saving the log file. That action is the +same as using \textbf{\emph{File \textgreater{} Save As \textgreater{} +Save Log As}}, shown earlier in Fig. 3.2c. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3125}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6761}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.4a The Log Window}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.4b The Filter Dialogue}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.02577in,height=1.6994in]{media/image1293.png} & +\includegraphics[width=2.95569in,height=2.96513in]{media/image1280.png} \\ +\end{longtable} + +The Log file keeps an exact record of what you have done so far in your +R-Instat work. That is useful. If, later, you ever had to justify how +you produced results, then this is your record of what was done. + +If you need to ask for help, then we will usually want to relate +anything extra to the best you have been able to do so far. A skilled R +user can see exactly what was done through the log file. + +If R is used directly, then we suggest it be used through RStudio. The +log file can be run in RStudio and should produce the same results. +Hence, an analysis could start in R-Instat and then continue in RStudio +if further results are needed that cannot be done through R-Instat. + +Sometimes a dialogue can almost do an analysis, but not quite. If small +changes are needed to a command then they can be done, in R-Instat, with +the Script Window + +A guide called ``Reading, Tweaking and Using R Commands'', +\hl{reference} allows users to adapt the commands behind any dialogue. +This situation is illustrated with an example. + +We show how to use adjusted boxplots (Hubert \& Vandervieren, 2008) for +each month with the rainfall data from Dodoma. This is first illustrated +with the ordinary boxplots that are available (and very useful). +However, for the rainfall we would like to have adjusted boxplots +because of the skewness of the data. They are available in the R +package, called \textbf{\emph{robustbase}} \hl{reference} that is +already used by R-Instat. But adjusted boxplots are not yet available -- +at least when this guide was first written. + +First the data are filtered for just the rain days. Then the boxplots +are produced. + +With the Dodoma data, as used in Chapter 2, use the +\textbf{\emph{right-click}} menu (or \textbf{\emph{Prepare +\textgreater{} Data Frame \textgreater{} Filter}}) to give the Filter +dialogue, Fig. 3.4b. Note, in Fig. 3.4b, that the Ok button is not yet +enabled. There is also a Script button on the bottom right of the +dialogue, and this is also disabled. Every dialogue has the same set of +five buttons at the bottom. Hence, every dialogue has a +\textbf{\emph{Script}} button and here we show how it can be used. In +Fig. 3.4b, press on the \textbf{\emph{Define New Filter}} button to open +the Filter sub-dialogue. In the sub-dialogue, Fig. 3.4c. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3182}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6705}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.4c The filter sub-dialogue}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.4d The filter dialogue completed}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.16753in,height=2.70312in]{media/image1305.png} +& +\includegraphics[width=2.76678in,height=2.77561in]{media/image1283.png} \\ +\end{longtable} + +In the sub-dialogue, choose the \textbf{\emph{Rain}} variable and make +the condition as \textbf{\emph{Rain \textgreater{} 0.85}}. Then click +the \textbf{\emph{Add Condition}} button, then press the +\textbf{\emph{Return}} button. A filter has now been selected and hence +the Ok button is now enabled. We don't need the To Script button at this +stage, but note that it has also been enabled. + +Now use the \textbf{\emph{Describe \textgreater{} Specific +\textgreater{} Boxplot}} dialogue and complete it as shown in Fig. 3.4e. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.7256}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.2622}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.4e The boxplot dialogue}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.4f Boxplots with width proportional to the number +of rain days}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.80512in,height=3.20375in]{media/image1273.png} +& \includegraphics[width=3.125in,height=3.125in]{media/image1330.png} \\ +\end{longtable} + +The results are in Fig. 3.4f. They are useful, and pleasantly colourful, +but the number of outliers shows that the ordinary boxplot is not ideal +for data that are as skew as daily rainfall. + +So, return to the boxplot dialogue in Fig. 3.4e and press the +\textbf{\emph{To Script}} button. The commands are as shown in Fig. 3.4g + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{1.0000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.4g Script window for the boxplot commands}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\begin{minipage}[t]{\linewidth}\raggedright +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + Dodoma \textless- + data\_book\$get\_data\_frame(data\_name="Dodoma\_merge") +\item + last\_graph \textless- ggplot2::ggplot(data=Dodoma\_merge, + mapping=ggplot2::aes(y=Rain, x=month)) + + ggplot2::geom\_boxplot(varwidth=TRUE, outlier.colour="red") + + theme\_grey() +\item + data\_book\$add\_graph(graph\_name="last\_graph", graph=last\_graph, + data\_name="Dodoma") +\item + data\_book\$get\_graphs(data\_name="Dodoma", + graph\_name="last\_graph") +\item + rm(list=c("last\_graph", "Dodoma")) +\end{enumerate} +\end{minipage} \\ +\end{longtable} + +The second line -- that starts last\_graph is the only line that needs +to change. The equivalent command, from the robustbase package, is as +follows: + +last\_graph \textless- robustbase::adjbox(Rain \textasciitilde{} month, +data =Dodoma\_merge, col="red", varwidth=TRUE). + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.4h}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.05943in,height=2.58261in]{media/image1304.png} \\ +\end{longtable} + +So paste or type that command into the Script Window, which should then +look as shown in Fig. 3.4h. To run the commands from the Script Window +click on the Run All button at the top of Fig. 3.4h. + +If there is an error, then correct the typing into Fig. 3.4h. Now, to be +cautious, right-click, see Fig. 3.4h and this permits you to run the +commands one line at a time. It is highly likely that line 2 is the +problem so first go to line 1 and then run line 1, using Run Current +Line, or pressing \textless Ctrl\textgreater{} + +\textless Enter\textgreater. Do the same for line 2. If that works then +continue with the rest of the lines and the graph, shown in Fig. 3.4i +should appear. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.4i Skew boxplot}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.06298in,height=2.5414in]{media/image1323.png} \\ +\end{longtable} + +This example has used the Script Window for a new command. More often +the script window is for more modest changes, where an option is added +or changed for an existing command. + +If the command above were in a new package, that was not currently +loaded into R-Instat, then the code in line 2 would not be recognised. +In that case you would have add an extra line at the top of the script +window to load the package, +e.g.~\textbf{\emph{install.packages("robustbase").}} This assumes you +are connected to the internet. It also only need be done once. This +package is then installed in R and can be used on subsequent occasions +in R-Instat without that line being added. + +\section{Don't let the computer laugh at +you!}\label{dont-let-the-computer-laugh-at-you} + +R-Instat is designed to facilitate the analysis of climatic data. This +may be through using the general facilities (File, Prepare, Describe and +Model menus), or through using the special climatic menu that is +introduced in Chapter 4. + +R-Instat is simply a click and point front-end to the R programming +language. It is particularly for users who do not wish to spend time +mastering the R language. There is also a special guide for those who +would wish to start with R-Instat and then consider migrating to using R +``properly''. + +All software has limitations and it is important to recognise when using +R-Instat, or perhaps your favourite spreadsheet package is not the +correct solution for your work. We give an example below. Otherwise you +may fall into the ``copy-paste'' trap. This is where you do a very +routine job repeatedly, e.g.~copy \textgreater{} paste, copy +\textgreater{} paste, \ldots. Humans are not good at boring and +repetitive jobs and they make mistakes. + +Computers, on the other hand, can be programmed to handle repetitive +tasks brilliantly and very quickly. That's why, if the computer watches +you doing copy \textgreater paste, copy \textgreater{} paste etc, while +it has little to do -- then it is probably laughing at you! + +Here is an example. It is of a type we discuss in more detail in Chapter +4. Here it is mainly designed to help you to recognise when your +software, and perhaps your skill set is insufficient for the task in +hand. + +Climatic data from Garoua, Cameroon have been provided by the Cameroon +Met Service and are now available in the R-Instat library, Fig. 3.5a. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.5a Garoua data in R-Instat}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.5b Maximum temperature data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.74137in,height=2.05602in]{media/image1318.png} +& +\includegraphics[width=3.35332in,height=2.04787in]{media/image1309.png} \\ +\end{longtable} + +Fig. 3.5a shows the ``standard'' layout of the data for R-Instat +climatic analyses. Spreadsheet packages like Excel, recognise this as a +``list''\footnote{Though a ``list'' is something different in R.}. Each +column in Fig. 3.5a is of a single ``type'' -- most are numeric. The +different elements each have their own column. In Fig. 3.5a each row has +the data for a single day. In this file there 21915 rows (days) of data. + +The starting point for these data looked very different. Some of the +initial data for Tmax are shown in Fig. 3.5b. In Fig. 3.5b each day of +the month has its own column, so there are 31 columns in the sheet. We +find this to be a common ``shape''. One additional problem in Fig. 3.5b +is that each sheet has only about 3 years of data, so they are split +across 16 different sheets. + +The rainfall is in a different ``shape'' to the temperatures as shown in +Fig. 3.5c and Fig. 3.5d. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.5c Rainfall data for Garoua}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 3.5d More of the year of rainfall data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.05325in,height=1.69806in]{media/image1296.png} +& +\includegraphics[width=3.16018in,height=1.72026in]{media/image1302.png} \\ +\end{longtable} + +For the rainfall, each year is in a separate sheet. At the bottom of +each sheet there are some monthly and annual totals. Hence the rainfall +is a mixture of data and summary values. + +There are three obvious ways you can proceed to change the shape of the +data from Fig. 3.5b, c and d into the shape shown in Fig. 3.5a. The +first is to use Excel (or another spreadsheet), the second is to use +R-Instat and the third is to write a program, using R commands -- or +another language, such as Python. + +What might you do with a spreadsheet? Here is a possible way: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi})} +\item + It would be good to have all the years of data in a single sheet. + Start with the first year, which is 1999 for the rainfall. Copy just + the data -- not the monthly summaries -- into a new sheet. +\item + Now go to the next year, i.e.~2000 and copy the data below those of + + \begin{enumerate} + \def\labelenumii{\arabic{enumii}.} + \setcounter{enumii}{1998} + \tightlist + \item + \end{enumerate} +\item + Now go to 2001 and copy and paste again. The computer is starting to + laugh, and you have a long way to go. +\item + You persevere and have all the years in your new sheet. +\item + Now you want to paste the February data below January, etc. This is 11 + more goes at copy \textgreater{} paste. +\item + You are bored, so you look briefly at the temperature data in Fig. + 3.5d. You realise, in horror, that you will have 31 copy + \textgreater{} paste to do there, with one column currently for each + month. +\item + You give up, realising there must be a better way. That's partly + because you realise the computer is laughing hysterically! +\end{enumerate} + +We took the third option and wrote a program in R. In Chapter 4 we +examine whether using R-Instat would be possible (without the computer +laughing at you too much). + +However, there is a general message. R-Instat is merely executing R +commands through a click-and-point environment. This approach will +always be limited, for some tasks, compared to using the command +language directly. So, should you find that an analysis requires a lot +of repetition from you, then check whether it is time to use R directly. + +When you start using R-Instat it does not mean you need to abandon using +a spreadsheet. Similarly using R directly does not necessarily mean +abandoning R-Instat. When you use R-Instat it automatically generates a +log file with the R commands. This file runs in RStudio. So, you could +then continue using R directly (through RStudio) for those tasks where +R-Instat has been found to be limiting. + +\bookmarksetup{startatroot} + +\chapter{Getting the data into shape}\label{getting-the-data-into-shape} + +\section{Introduction}\label{introduction-2} + +R-Instat provides a menu-driven front-end to R. It is designed to make +it easy to analyse any sort of data, including climatic data. The +climatic menu is designed to make many analyses of the historical +climatic records even easier. Most of this guide uses the various menus +and dialogues in this special climatic menu. + +If your analysis is not practical using the special climatic menu it may +still be possible using the general menus in R-Instat. After all many +climatic analyses are done with other statistical software and they do +not have a special climatic menu. + +``Click and point'' systems all have limitations, or they would lose the +simplicity of use that is a major driving force in their production. If +your analyses cannot be done using R-Instat, then one strategy would be +to use R itself. The ``tweaking'' guide shows how R-Instat can be +extended, but you may also find that using RStudio is not as hard as you +feared. + +This Chapter introduce the climatic menu in R-Instat and shows how +climatic data is arranged for analysis. + +\section{Climatic data that is +``ready''}\label{climatic-data-that-is-ready} + +In Chapters 2 and 3 we examined data from Moorings, Zambia and Dodoma in +Tanzania that were both in the right ``shape'' for an immediate +analysis. Here we illustrate with more examples that are ``ready''. In +the following sections of this chapter we show how the Climatic menu, or +the general Prepare menu can help to organise data into the same shape. + +If your data are already in the same shape as the examples below then +much of the content from Section 4.4 can be omitted. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.2a Importing a csv file}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.2b Data for 2 stations from Guinea}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.87481in,height=2.91749in]{media/image1303.png} +& +\includegraphics[width=3.18946in,height=2.27875in]{media/image1299.png} \\ +\end{longtable} + +Go to \textbf{\emph{File \textgreater{} Open from Library}}. Choose +\textbf{\emph{Load From Instat Collection}}, then +\textbf{\emph{Browse}}. Go to the \textbf{\emph{Climatic directory}} and +then \textbf{\emph{Guinea}}. The data we require are in 2 forms, both an +R file with the RDS extension and a csv file that can be read into +Excel. + +\textbf{\emph{Use}} the file \textbf{\emph{Guinea2.csv}}. + +The new feature, compared to the data in Chapter 2, is that there are +multiple stations. Right-click in the first Column, Fig. 4.2c, and +choose the Levels/Labels dialogue. The result, in Fig 4.2d shows there +are 2 stations, Kankan with about 24 thousand rows (days) and Koundara +with about 16 thousand days. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.2c Choose Levels/Labels}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.2d The Levels/Labels dialogue confirms 2 stations}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.1535in,height=3.25292in]{media/image1306.png} & +\includegraphics[width=3.7725in,height=2.58565in]{media/image1275.png} \\ +\end{longtable} + +A second data file is from Western Kenya. Go back to the +\textbf{\emph{File \textgreater{} Open From Library}} dialogue. +\textbf{\emph{Browse}} again to the \textbf{\emph{climatic}} directory. +Choose \textbf{\emph{Kenya}} and then the file +\textbf{\emph{WesternKenya.RDS}}. + +This opens 3 data frames in R-Instat, 2 of which are shown in Fig. 4.2e +and Fig. 4.2f. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.2e Name and location of each station}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.2f Rainfall data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.90665in,height=2.77973in]{media/image1281.png} +& +\includegraphics[width=2.21072in,height=2.81451in]{media/image1271.png} \\ +\end{longtable} + +Fig. 4.2e gives details of each station. The locations are included, +which will be useful, in Chapter xxx when we draw maps. Fig. 4.2f gives +the rainfall data for just over 50 stations. There are over 600 thousand +rows (days) of data in total. + +The third example is again from the \textbf{\emph{Instat files}} in the +\textbf{\emph{Climatic directory}}. Choose \textbf{\emph{Original +Climatic Guide Datasets}}, which is an Excel file. R-Instat can import +multiple sheets together, but here we just need the single sheet called +\textbf{\emph{Bulmonth}}, Fig. 4.2g. The data are monthly from Bulawayo +in Zimbabwe from 1951. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.2g Importing monthly data from Bulawayo}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.2h Monthly data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.00521in,height=2.77952in]{media/image1254.png} +& +\includegraphics[width=3.07685in,height=2.67713in]{media/image1246.png} \\ +\end{longtable} + +The final example is from an R package. From \textbf{\emph{File +\textgreater{} Open From Library}} use the \textbf{\emph{Open from R}} +option, Fig. 4.2i. This gives access to all the datasets provided with +the R packages that are in R-Instat. Scroll down the \textbf{\emph{From +Package}} list to the \textbf{\emph{OpenAir}} package. There is only one +data set. Open it to give the data shown in Fig. 4.2j + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.2i Choosing the openair package}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.2j Hourly data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.0401in,height=2.73756in]{media/image1238.png} & +\includegraphics[width=2.88612in,height=2.9989in]{media/image1240.png} \\ +\end{longtable} + +These examples show what is assumed in R-Instat to analyse the data. +Data for multiple elements and from multiple sites can be in a single +data frame. The multiple elements are in successive variables, i.e.~they +``go across'', while the multiple stations ``go down''. The station name +or ID is a factor column. + +The dates are also needed, either in a single variable, Fig. 4.2j or in +multiple variables as in Fig. 4.2h and Fig. 4.2f. + +\section{The R-Instat Climatic +System}\label{the-r-instat-climatic-system} + +Analyses usually proceed using the following general menus: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + The \textbf{\emph{File menu}} is used to read the data +\item + The \textbf{\emph{Prepare menu}} is to organise the data ready for + analysis +\item + The \textbf{\emph{Describe menu}} is for descriptive statistics, + i.e.~graphs and tables. +\item + The \textbf{\emph{Model menu}} fits and examines statistical models + for the data +\end{enumerate} + +This is shown by the structure of the R-Instat menus shown in Fig. 4.3a. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.3a The R-Instat menus}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.3b The Climatic menu}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.93274in,height=1.61806in]{media/image237.png} & +\includegraphics[width=2.94928in,height=3.43809in]{media/image230.png} \\ +\end{longtable} + +The same applies to climatic data and hence the special climatic menu is +arranged in the same order, Fig. 4.3b. We now examine some of the +initial menu items in turn. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.3c The Climatic \textgreater{} File menu}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.3d The Climatic \textgreater{} Tidy and Examine +menu}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.90215in,height=1.30645in]{media/image1234.png} +& +\includegraphics[width=3.19258in,height=2.46625in]{media/image1288.png} \\ +\end{longtable} + +Fig. 4.3c shows the \textbf{\emph{Climatic \textgreater{} File}} menu. +Often the data will be loaded using the main File menu as for all the +examples in Section 4.2 above. This used the \textbf{\emph{File +\textgreater{} Open from Library}} dialogue, but the \textbf{\emph{File +\textgreater{} Open}} dialogue is often used for the data files. + +Some options in Fig. 4.3c, such as the importing of NetCDF files are in +both menus. Others, like Climsoft are just in this menu. Climsoft is a +data management system specially to manage climatic data. It was +described in general in Section 1.7 and importing from Climsoft is +described in Section 4.5. + +Fig. 4.3d shows the \textbf{\emph{Tidy and Examine}} menu. The first +dialogue is used to ``tidy'' climatic data that are not yet in the shape +of those in the examples shown in Section 4.2. The idea of Tidy data is +useful and is described well by \hl{Wickham 2014.} He gives a variety of +examples, with the most complex being climatic data. The remaining items +in the menu in Fig. 4.2b are all also in the main Prepare menu. They may +be needed if the tidying is too tricky for the special +\textbf{\emph{Tidy Daily Data}} dialogue. They are also for further +checks. For example, for daily data there should be no duplicate days in +the record for the same station. Section 4.8 gives an example where this +is not the case. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3164}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6723}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.3e The Climatic \textgreater{} dates menu}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.3f The dialogue to define a data frame as +climatic}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.40168in,height=1.3685in]{media/image1287.png} & +\includegraphics[width=3.6608in,height=4.27093in]{media/image1300.png} \\ +\end{longtable} + +Next in the preparation is to check that the file has date columns that +are ready for the subsequent analyses, Fig. 4.3e. This menu is a copy of +the \textbf{\emph{Prepare \textgreater{} Column: Date}} menu which can +be used instead. + +This leads to the \textbf{\emph{Define Climatic Data}} dialogue shown in +Fig. 4.3f. The example in Fig. 4.3f is for the 2 stations in Guinee, but +using the second copy of the file, called Guinee2.rds. This was prepared +earlier and saved as an RDS file. The fact it is ready for analysis is +saved as part of the metadata for this data frame. + +The subsequent dialogues in the climatic menu all assume the data have +been defined as climatic, i.e.~have used the dialogue in Fig. 4.3f. +That's the ``climatic system'' in R-Instat. + +Some readers may be concerned that they are in a rush to analyse their +data and were not prepared for these initial steps. However, if your +data are in ``good shape'' then they take only a few minutes. If not, +then in many analyses these ``organising of data'' steps do take the +time. Once this has been done the analyses can proceed quickly. + +These organising steps are only done the first time you use the data. +Then save the data using \textbf{\emph{File \textgreater{} Save As +\textgreater{} Save Data As}} so the climatic information is remembered. +You can therefore continue later, with these data, going straight to the +subsequent items in the climatic menu. + +If you choose, instead, to save the data frame using \textbf{\emph{File +\textgreater{} Export \textgreater{} Export Dataset}} this has the +advantage that you can view and use the data in other software. The only +problem is that the special climatic information from Fig. 4.3f isn't +saved. So, when you resume, then start with the \textbf{\emph{Define +Climatic Data}} dialogue. + +\section{Tidying the Data}\label{tidying-the-data} + +You can ignore this section if your data are already in the shape +discussed in Section 4.2. Often this is not the case. + +The first example was previously prepared for the original Instat. It is +56 years of daily data from Samaru in Northern Nigeria. Use +\textbf{\emph{File \textgreater{} Open from Library}}. Choose +\textbf{\emph{Instat data}}, B\textbf{\emph{rowse}} to the +\textbf{\emph{Climatic directory,}} choose \textbf{\emph{Original +Climatic Guide Datasets}}. There untick the first option and choose the +sheet called \textbf{\emph{Samaru56}}, Fig. 4.4a. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4a Open Samaru56}} + +\textbf{\emph{File \textgreater{} Open from Library \textgreater{} +Instat \textgreater{} Browse \textgreater{} Climatic}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4b The ``shape'' of the Samaru56 data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.98895in,height=2.90026in]{media/image1262.p ng} +& +\includegraphics[width=3.08981in,height=2.92662in]{media/image1278. png} \\ +\end{longtable} + +The data are shown in Fig. 4.4b. They are from 1928 and each year is in +a separate column. All columns are of length 366, in Fig. 4.4b, and +there is a special code for February 29\textsuperscript{th} in non-leap +years. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4c Tidying the Samaru data}} + +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +Tidy Daily Data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4d Issues in the data -- no surprises}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.17122in,height=3.30076in]{media/image1 279.png} +& +\includegraphics[width=2.49872in,height=2.51703in]{media/image1270.p ng} \\ +\end{longtable} + +Use \textbf{\emph{Climatic \textgreater{} Tidy and Examine +\textgreater{} Tidy Daily Data}} and complete the dialogue as shown in +Fig. 4.4c. This will not work, because we know, from Fig. 4.4b, that +there are values on invalid dates, i.e.~on Feb 29 in non-leap years. The +results are in Fig. 4.4d. We see that day 60 (which we knew about) is +the only problem. So we can proceed. + +Return to the dialogue in Fig. 4.4c, \textbf{\emph{tick the option above +to ignore data on invalid dates}}. Press \textbf{\emph{Ok}} again. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4306}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5556}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4e Samaru data reshaped}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4f Using the date variable}} + +\textbf{\emph{Climatic \textgreater{} Dates \textgreater{} Use Date}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image1269.png} \{width=``2.555686789151356in'' he +ight=``3.7988068678915137in''\} & +\includegraphics[width=3.0078in,height=3.88967in]{media/image 1260.png} \\ +\end{longtable} + +The results are in Fig. 4.4e. The tidy data now has 20454 rows (days). +Also, as shown in Fig. 4.4e is that there is no longer any need for a +special code for February 29\textsuperscript{th} in non-leap years. + +The date column has been included in the data in Fig. 4.4e. The next +step is the \textbf{\emph{Climatic \textgreater{} Dates \textgreater{} +Use Date}} dialogue, completed as in Fig. 4.4f. This adds 4 new columns +to the data file. We then do some housekeeping, with +\textbf{\emph{Right-Click}} and \textbf{\emph{Reorder Columns}} to give +the data as shown in Fig. 4.4g. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4444}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5417}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4g Data ready to be defined as climatic}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4h Defining the data as climatic}} + +\textbf{\emph{Climatic \textgreater{} Define Climatic Data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image1277.png}\{width=``2.641606517935258in'' h +eight=``2.5361253280839895in''\} & +\includegraphics[width=3.01996in,height=3.58434in]{media/image12 08.png} \\ +\end{longtable} + +Now use \textbf{\emph{Climatic \textgreater{} Define Climatic Data}}. +The dialogue fills automatically which is a good sign. The Check Unique +also indicates the Date column can be a key field. Press Ok and the data +are now ready for the analysis in R-Instat. They can be saved as an RDS +file and/or exported as a csv file. + +These steps should not have taken long. But this was a single element +(rain) from a single station. + +A second example is data from Garoua, Cameroon. The rainfall first, and +initially in Excel, Fig. 4.4i. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4i Rainfall data from Garoua}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=5.61702in,height=2.67347in]{media/image1211.png} \\ +\end{longtable} + +There are (at least 4 complications with these data, compared to the +shape we would like. + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + There are some trace values, given as TR in the data, Fig. 4.4i +\item + Each year is on a separate Excel sheet. +\item + There are summary values, i.e.~there are daily data and analysed data + together in Fig. 4.4i. +\item + The months ``go across''. +\end{enumerate} + +We change the trace issue in Excel. They are rare and only up to 2005. +R-Instat does not (yet) cope with trace\footnote{We could alternatively + have used Climatic \textgreater{} Tidy and Examine \textgreater{} + Replace Values in R-Instat and then changed the columns to be numeric. + But it is simpler to do a Find and Replace in Excel.}. We choose to +replace the TR by 0 in each sheet. This is easily done in Excel. The +data are saved as ``Garoua Daily Rainfall data 1999-July2013NOTR.xlxs''. + +In R-Instat save any files you wish, then use \textbf{\emph{File +\textgreater{} Close Data File}} to clear your data. + +Then use \textbf{\emph{File \textgreater{} Open from Library +\textgreater{} Instat file, Browse, Climatic, Cameroon}}. +\textbf{\emph{Open the Garoua rainfall file with the TR removed}}, Fig. +4.4j\textbf{\emph{.}} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4867}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4956}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4j Importing the Garoua rainfall}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4k Complete the importing dialogue}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.01272in,height=3.05008in]{media/image1199.png} +& +\includegraphics[width=3.09552in,height=3.03215in]{media/image1212.png} \\ +\end{longtable} + +\textbf{\emph{Click to select all the sheets}}, and to import only the +first \textbf{\emph{31 data rows}}, Fig. 4.4k. Press \textbf{\emph{Ok}}. + +The 15 Excel sheets have imported into 15 R data frames, Fig. 4.4l and +we check quickly that each has the 31 rows and 13 columns. Also, that +all the columns are numeric. All seems alright. The next step is to +append the years together. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4l The Garoua rainfall data imported}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4m Appending the years}} + +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +Append}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.75543in,height=2.54747in]{media/image1206.png} +& +\includegraphics[width=3.26418in,height=2.49398in]{media/image1 204.png} \\ +\end{longtable} + +Use \textbf{\emph{Climatic \textgreater{} Tidy and Examine +\textgreater{} Append}} and use \textbf{\emph{all the sheets}}, Fig. +4.4m. Press \textbf{\emph{Ok}}. + +The 15 years of data are now in a single data frame, Fig. 4.4n, and the +Append dialogue has added an extra variable that contains the Year. We +need the year, but it is ``hidden'' inside X2013.Stats'', etc. The next +dialogue is in Prepare, rather than Climatic. + +Use \textbf{\emph{Prepare \textgreater{} Column: Text \textgreater{} +Transform}} and complete the dialogue as shown in Fig. 4.4o + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4n Data in a single data frame}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4o Extract the Year number}} + +\textbf{\emph{Prepare \textgreater{} Column: Text \textgreater{} +Transform}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.78174in,height=2.53985in]{media/image1221.png} +& \begin{minipage}[t]{\linewidth}\raggedright +\begin{figure}[H] + +{\centering \includegraphics[width=3.19492in,height=2.77211in]{media/image119 8.png} + +} + +\caption{C:\textbackslash Users\\ +\ROGERS\textasciitilde1\textbackslash AppData\textbackslash Local\textbackslash Temp\textbackslash S +NAGHTML109fd672.PNG} + +\end{figure}%\strut +\end{minipage} \\ +\end{longtable} + +This adds a new column called yr, Fig. 4.4p. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4p The year is now available}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4q Sort the data using the year column}} + +\textbf{\emph{Right-click \textgreater{} Sort or Prepare \textgreater{} +Data Frame \textgreater{} Sort}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.90099in,height=2.36191in]{media/image1188.pn g} +& \begin{minipage}[t]{\linewidth}\raggedright +\begin{figure}[H] + +{\centering \includegraphics[width=3.0999in,height=3.01361in]{media/image119 3.png} + +} + +\caption{C:\textbackslash Users\textbackslash R +OGERS\textasciitilde1\textbackslash AppData\textbackslash Local\textbackslash Temp\textbackslash SN +AGHTML10a74ad5.PNG} + +\end{figure}% +\end{minipage} \\ +\end{longtable} + +Nearly there. Use \textbf{\emph{Climatic \textgreater{} Tidy and Examine +\textgreater{} Tidy Daily Data}} as shown in Fig. 4.4r. Earlier, in Fig. +4.4c, each year was in a column. Now each month is in its own column. +Complete Fig. 4.4r as shown. As with the first run earlier (Fig. 4.4c) +we first check on any errors, rather than simply ignoring them. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5694}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4167}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4r Tidy the daily data}} + +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +Tidy Daily Data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4s An error is reported. The yr column should be +numeric}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.414in,height=3.80027in]{media/image 1233.png} & +\includegraphics{media/image1229.png} \{width=``2.59626968503937in'' hei +ght=``0.6789588801399825in''\} \\ +\end{longtable} + +There is an error! This can happen. Reading the message is says the +``year column must be numeric''. + +Looking back to Fig. 4.4p we see the year column is given as yr (c), so +it is a character, or text column. So \textbf{\emph{right-click}} and +\textbf{\emph{change it to numeric.}} Then \textbf{\emph{return to the +dialogue}} in Fig. 4.4r and press \textbf{\emph{Ok}} again. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4t Some issues with the data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4u The tidy Garoua data -- at last!}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.96368in,height=2.59991in]{media/image1237.png} +& +\includegraphics[width=2.65291in,height=3.45157in]{media/image1228.png} \\ +\end{longtable} + +The results are in Fig. 4.4t. Our troubles are not over, because we +learn there are 8 non-existent days with rainfall. Fortunately, most +have zero and this was probably just a simple error. But the data shows +there was 13.7mm on 31 September 2006, and this is a puzzle. +Unfortunately, we have no way of checking this value now. So, we return +to the dialogue in Fig. 4.4r and change the options to ignore these +days. The result is in Fig. 4.4u. + +If you now wish to proceed with the analysis of the rainfall data, then +the next steps are just the same as for the Samaru data, i.e.~first the +\textbf{\emph{Climatic \textgreater{} Dates \textgreater{} Use Date}} +dialogue, Fig. 4.4f and then the \textbf{\emph{Climatic \textgreater{} +Define Climatic Data}}, Fig. 4.4h. However, we may first want to +reorganise the Tmax and Tmin data, and then merge the 3 elements, before +defining the climatic data. We leave this largely as an exercise but +provide a few hints below. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4v Garoua Tmax data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.4w A problem with the data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.0164in,height=2.72469in]{media/image1223.png} & +\includegraphics[width=2.94236in,height=2.44857in]{media/image1183.png} \\ +\end{longtable} + +Part of the Tmax data are shown in Excel in Fig. 4.4v. There are again +multiple sheets and this time each column is a day of the month. So, +there are now 31 columns of data. This is the third option, when using +the \textbf{\emph{Climatic \textgreater{} Tidy and Examine +\textgreater{} Tidy Daily Data}} dialogue. For the Samaru data, the +years were in separate columns in Fig. 4.4c, and the months in Fig. +4.4r. This time it is the day of the month. That is quite a common +layout. + +On importing all the data for Tmax there is a common problem on the +sheet called Page 10. The immediate indication is that some values in +X25 (25\textsuperscript{th} of the month) have many decimals. This is +because the column name is X25 (c), so it is a character or text column +and not numeric. This is because one value is given as 35.B. Perhaps it +should be 35.8? + +Hence note all the columns in Page 10 that are text columns. These are +easily corrected in Excel. Then the tidying of the data follows similar +steps to that for the rainfall. + +Once the Tmax and Tmin data have been tidied, the \textbf{\emph{Climatic +\textgreater{} Tidy and Examine \textgreater{} Merge}} dialogue is used +to merge the elements into a single data frame. + +\section{Transferring data from +Climsoft}\label{transferring-data-from-climsoft} + +Climsoft is a comprehensive system for the entry and management of +climatic data. The main menu is shown in Fig. 4.5a. It is designed for +the entry (or transfer) of climatic data of any sort. It is also +particularly useful for capturing and managing data from automatic +stations. + +It also includes facilities for the scanned paper records and hence +facilitates the checking of the computerised data against the originals. + +CLIMSOFT has its own products but is also designed to work smoothly with +R-Instat. Hence R-Instat can produce products and applications for +CLIMSOFT. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.5a The main CLIMSOFT menu}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=4.76951in,height=3.3581in]{media/image1227.png} \\ +\end{longtable} + +There are two ways to transfer data from Climsoft into R-Instat. If +Climsoft is on your machine, or is available from your machine, then +R-Instat can read the Climsoft database directly. Otherwise Climsoft can +export tidy data that is in the form that is easily used by R-Instat. +Both methods are shown here. + +Use \textbf{\emph{Climatic \textgreater{} File \textgreater{} Climsoft}} +to transfer data directly from a Climsoft database, Fig. 4.5b. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.5b Import data from Climsoft}} + +\textbf{\emph{Climatic \textgreater{} File \textgreater{} Climsoft}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.5c Connect to the database}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\begin{minipage}[t]{\linewidth}\raggedright +\begin{figure}[H] + +{\centering \includegraphics[width=3.18567in,height=3.17203in]{media/image123 2.png} + +} + +\caption{C:\textbackslash Users\\ +\ROGERS\textasciitilde1\textbackslash AppData\textbackslash Local\textbackslash Temp\textbackslash S +NAGHTML117998d8.PNG} + +\end{figure}%\strut +\end{minipage} & \begin{minipage}[t]{\linewidth}\raggedright +\begin{figure}[H] + +{\centering \includegraphics[width=2.37748in,height=2.49245in]{media/image1217.png} + +} + +\caption{C:\textbackslash Users\textbackslash ROGERS\textasciitilde1\textbackslash App +Data\textbackslash Local\textbackslash Temp\textbackslash SNAGHTML117 +f6eae.PNG} + +\end{figure}%% +\begin{figure}[H] + +{\centering \includegraphics[width=2.77051in,height=0.62078in]{media/image1207.png} + +} + +\caption{C:\textbackslash Users\textbackslash ROGERS\textasciitilde1\textbackslash App +Data\textbackslash Local\textbackslash Temp\textbackslash SNAGHTML118 +11950.PNG} + +\end{figure}% +\end{minipage} \\ +\end{longtable} + +In Fig. 4.5b \textbf{\emph{Click}} on the \textbf{\emph{Establish +Connection}} button to give the screen shown in Fig. 4.5c. This is +already set to the main database, so you probably do not need to change +that name. We chose to add \_test\_, Fig. 4.5c to use the tutorial +database. Then click on \textbf{\emph{Enter Password}} and enter your +Climsoft password shown at the bottom of Fig. 4.5c. + +The sub-dialogue now says \textbf{\emph{Connected}}, Fig. 4.5d and you +can press \textbf{\emph{Return}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.5d Connected}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.5e Transfer just the station data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.62513in,height=2.76403in]{media/image1167.png} +& +\includegraphics[width=3.3454in,height=3.29135in]{media/image1157.png} \\ +\end{longtable} + +The main dialogue, in Fig. 4.5e now has all the station identifiers. We +choose them all and press Ok. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4867}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4956}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.5f Station data imported from Climsoft}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.5g Add observation data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.70723in,height=2.13959in]{media/image1145.png} +& +\includegraphics[width=3.24578in,height=3.18499in]{media/image1156.png} \\ +\end{longtable} + +This gives the station information in Fig. 4.5f for all 122 stations in +the tutorial database. + +Now return to the Climsoft dialogue and tick the box for the observation +data. Now the Elements are chosen, and we have selected Tmax, Tmin and +rainfall in Fig. 4.5g. The Start Date and End Date are left blank so all +the data is transferred. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.5h The data are imported}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.5i Add a Date column}} + +\textbf{\emph{Climatic \textgreater{} Dates \textgreater{} Make Date}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.1909in,height=2.25732in]{media/image115 5.png} +& +\includegraphics[width=2.80877in,height=2.60524in]{media/image1166.png} \\ +\end{longtable} + +The data in R-Instat are in Fig. 4.5h. There are 6 columns, first the +station, then the element given in 3 different ways, then the date and +finally the data. + +The date column is a date-time variable, because the data may be +sub-daily. Use the \textbf{\emph{Climatic \textgreater{} Dates +\textgreater{} Make Date}} dialogue as shown in Fig. 4.5i. This adds an +R date column. + +Had we exported just a single element then the data would now be almost +ready. As in Section 4.4, just use \textbf{\emph{Climatic \textgreater{} +Dates \textgreater{} Use Date}} and then \textbf{\emph{Climatic +\textgreater{} Define Climatic Data}}. + +However, as we imported 3 elements (Tmax, Tmin and Rain) we have one +further step, because they are currently all in a single column. They +need to be in separate columns. + +First use Right-click on one of the element columns, Fig. 4.5j, and +convert it to a factor column. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4444}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5417}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.5j Make the Element column a factor}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.5k Unstack the data on the 3 elements}} + +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +Unstack}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image1153.png} \{width=``2.6682010061242343in'' h +eight=``2.0810804899387576in''\} & +\begin{minipage}[t]{\linewidth}\raggedright +\begin{figure}[H] + +{\centering \includegraphics[width=3.215in,height=3.11831in]{media/image11 43.png} + +} + +\caption{C:\textbackslash Use +rs\textbackslash ROGERS\textasciitilde1\textbackslash AppData\textbackslash Local\textbackslash Temp\\ +\SNAGHTML120afa21.PNG} + +\end{figure}%\strut +\end{minipage} \\ +\end{longtable} + +Use \textbf{\emph{Climatic \textgreater{} Tidy and Examine +\textgreater{} Unstack}} and complete the dialogue as shown in Fig 4.5k. +The data are in Fig. 4.5m and are in just the right ``shape'' for +R-Instat. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.5l The data ready for R-Instat}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.5m Climsoft dialogue to export data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.02697in,height=2.7565in]{media/image1154.png} & +\includegraphics[width=2.93707in,height=2.77433in]{media/image1129.png} \\ +\end{longtable} + +The second way is for data to be exported from Climsoft that can then be +imported into R-Instat. + +For this option the CLIMSOFT user starts with the \textbf{\emph{Products +option}} in Fig. 4.5a. The products menu is shown in Fig 4.5m. Select +\textbf{\emph{Data}} as the Product category and \textbf{\emph{Daily}}, +as shown in Fig. 4.5m. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9836}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.5n Screen to export daily data from Climsoft}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.1309in,height=3.18939in]{media/image1180.png} \\ +\end{longtable} + +The resulting screen in Climsoft is shown in Fig. 4.5n. Complete it as +shown and then press to \textbf{\emph{Start Extraction,}} Fig. 4.5n. The +resulting data are shown in Fig. 4.5o. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6087}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3696}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.5o Ooops!}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.14224in,height=2.18435in]{media/image1190.png} +& \\ +\end{longtable} + +\section{Satellite data}\label{satellite-data} + +\section{What can go wrong?}\label{what-can-go-wrong} + +Nothing may go wrong in organising your data ready for analysis. Even +so, it is often frustrating, particularly to those who are relatively +inexperienced in these tasks, that the organising stage takes so long, +and is also often quite difficult. What can we say except perhaps +``Welcome to the real world''! + +But it is annoying that these steps come first and may be more difficult +and time-consuming that the subsequent analyses. These problems are +general and are not limited to climatic data, but that may be small +comfort as you hoped to proceed quickly and then have more time for +other activities! + +In addition, things may take longer, because of additional problems in +the data. We look at some examples in this section. You need to become a +super-critical data detective. Here we show how and why. + +The first problem is very common. It was earlier shown in Fig. 4.4w and +we repeat it in Fig. 4.7a. A column that should be numeric has a (c) +after it, in R-Instat. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4867}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4956}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.7a Numeric data imports as character (text)}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.7b Filter in Excel to see the problem}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.94236in,height=2.44857in]{media/image1183.png} +& +\includegraphics[width=2.25108in,height=3.28884in]{media/image1165.png} \\ +\end{longtable} + +This indicates it is a character, or text, column. The ``cure'' is +usually to return to Excel and correct the error there. In Excel, once +you know where to look, then one way is to set up a filter and then +check on the column that R-Instat has shown has the problem. In Fig. +4.7b we filter on column Z for the 25\textsuperscript{th} and find the +bottom entries are not in order. A more careful look shows the bottom +value to be 38.B when it possibly should have been 38.8. Other character +columns on this same sheet were when a number was typed with a space and +no decimal, e.g.~38 6 instead of 38.6 on the 10\textsuperscript{th} of +the month. + +A check that is often useful is Climatic \textgreater{} Tidy and Examine +\textgreater{} One Variable Summaries. This is the Examining part of +this menu. To show its use, look again at the Dodoma data that was +introduced in Chapter 2. So, \textbf{\emph{File \textgreater{} Open from +Library \textgreater{} Instat Data \textgreater{} Browse \textgreater{} +Climatic Directory \textgreater{} Instat Guide datasets \textgreater{} +Dodoma}}. + +The data are shown in Fig. 4.7c. On \textbf{\emph{row 120 make a +deliberate mistake}}, i.e.~double click on April 30 and change the +\textbf{\emph{30 into 31}}. That's not a possible day! + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4167}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5694}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.7c Dodoma with an error added}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.7d Add a date column}} + +\textbf{\emph{Climatic \textgreater{} Dates \textgreater{} Make Date}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image1175.png}\{w idth=``2.5625590551181103in'' +he ight=``2.680066710411199in''\} & +\includegraphics[width=3.47766in,height=2.74552in]{media/image 1170.png} \\ +\end{longtable} + +Add a date column using \textbf{\emph{Climatic \textgreater{} Dates +\textgreater{} Make Date}} and complete the dialogue as shown in Fig. +4.7d. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig 4.7e Examine the data}} + +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +One Variable Summarise}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.7f Resulting summaries}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.72794in,height=2.4675in]{media/image1161.pn g} +& +\includegraphics[width=3.288in,height=1.92416in]{media/image11 72.png} \\ +\end{longtable} + +Use \textbf{\emph{Climatic \textgreater{} Tidy and Examine +\textgreater{} One Variable Summarise}} as shown in Fig. 4.7e. The +results are in Fig. 4.7f. + +Examine these results for each column in turn. The results are +encouraging. The Year goes from 1935 to 2013. The day of the month is +from 1 to 31 -- which is fine. + +The rainfall is from 0 (zero) to 119.8. Sometimes it is from -9999 in +which case the missing values need to be recoded\footnote{Use Climatic + \textgreater{} Tidy and Examine \textgreater{} Replace Values.}. Here +they seem fine, and it is encouraging tht there are less than 100 +missing values overall. Similarly, the limits for Tmax, Tmin and Sunh +all seem reasonable. + +The last column is the Date and there is one missing value -- as we +know, because this time we caused it! There should not be missing values +in the date column. You need to do something about it. + +The first step in solving the problem (assuming we don't know it) is to +filter the data, choosing just the days when Date1 == NA. To do this, +right-click in any column and choose Filter, Fig, 4.7g. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.7g Filter to locate the problem}} + +\textbf{\emph{Right-click \textgreater{} Filter}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.7h The Filter sub-dialogue}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.90139in,height=3.37899in]{media/image1173. png} +& +\includegraphics[width=3.08032in,height=2.35522in]{media/image1194. png} \\ +\end{longtable} + +In the Filter dialogue, choose the button to Define New Filter, and +complete the sub-dialogue as shown in Fig. 4.7h. Click to Add Condition +then \textbf{\emph{Return}} and \textbf{\emph{Ok}}. + +The filtered data, Fig. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.7i The filtered data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=5.6186in,height=1.29478in]{media/image1098.png} \\ +\end{longtable} + +This shows it is row 120 that is causing the problem. The correction can +be made immediately, or you may like to remove the filter first and then +check that there was no value on April 30 in that year. + +Data from Thaba Tseka in Lesotho initially seemed easy to process. Use +\textbf{\emph{File \textgreater{} Open from Library \textgreater{} +Instat \textgreater{} Browse \textgreater{} Climatic \textgreater{} +Lesotho}} and the file \textbf{\emph{Thaba\_Tseka\_Original}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.7j The Thaba-Tseka rainfall data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=5.52843in,height=2.33853in]{media/image1109.png} \\ +\end{longtable} + +The data have been exported from a previous version of Climsoft (see +Sections 1.6 and 4.5). They include a lot of station details but seem in +exactly the right shape to make quick progress. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4306}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5556}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.7k Add a date column}} + +\textbf{\emph{Climatic \textgreater{} Dates \textgreater{} Make Date}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.7l Define Climatic Data}} + +\textbf{\emph{Climatic \textgreater{} Define Climatic Data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image1102.png}\{ width=``2.5451115485564304in'' h +eight=``3.125343394575678in''\} & +\includegraphics[width=2.67072in,height=3.16907in]{media/image1 087.png} \\ +\end{longtable} + +Define a date column from \textbf{\emph{Climatic \textgreater{} Dates +\textgreater{} Make Date, Fig. 4.7k,}} and then check, with +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +One Variable Summarise}}, as in Fig. 4.7e. All seems fine so far. + +So, the last step. Use \textbf{\emph{Climatic \textgreater{} Define +Climatic Data}} as in Fig. 4.7l. Complete the year, month, day fields, +as the names are not recognised automatically. Also, obs is the rain +column. + +Finally check for uniqueness, Fig. 3.7m. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.7m A problem - duplicates}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.7n Check on the Duplicates}} + +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +Duplicates}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.85934in,height=2.02184in]{media/image1094. png} +& \begin{minipage}[t]{\linewidth}\raggedright +\begin{figure}[H] + +{\centering \includegraphics[width=3.06174in,height=3.21424in]{media/image1103 .png} + +} + +\caption{C:\textbackslash Users\textbackslash ROGE +RS\textasciitilde1\textbackslash AppData\textbackslash Local\textbackslash Temp\textbackslash SNAG +HTML199cd2c0.PNG} + +\end{figure}% +\end{minipage} \\ +\end{longtable} + +The message in Fig. 4.7m indicates a problem. There are apparently +duplicate values in the data. + +As suggested in Fig. 4.7m use \textbf{\emph{Climatic \textgreater{} Tidy +and Examine \textgreater{} Duplicates}} and complete as shown in Fig. +4.7n. This produces a new logical column, that is first examined through +\textbf{\emph{Climatic \textgreater{} Tidy and Explore \textgreater{} +One Variable Summarise}}, Fig. 4.7o. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.7o Find how often there are duplicates}} + +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +One Variable Summarise}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.7p The results}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.94966in,height=2.66714in]{media/image1099. png} +& +\includegraphics[width=3.03407in,height=1.09115in]{media/image1082. png} \\ +\end{longtable} + +If there were no duplicates, then this column would be FALSE all the +time. We learn, from the result in Fig. 4.7p that it is TRUE on 364 +rows. There are then at least 2 values for each day, so up to 182 days +have duplicate values. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.7r Filter sub-dialogue}} + +\textbf{\emph{Right Click \textgreater{} Filter \textgreater{} Define +New Filter}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 4.7s The filtered data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.78962in,height=1.47657in]{media/image1089.p ng} +& +\includegraphics[width=3.21415in,height=3.32519in]{media/image109 0.png} \\ +\end{longtable} + +Use the \textbf{\emph{right-click and Filter}} dialogue. Then Define new +Filter and complete the sub-dialogue as shown in Fig. 4.7r. Then +\textbf{\emph{Return}}, and \textbf{\emph{Ok}} to show the filtered data +in Fig. 4.7s. + +The possible problem becomes clearer from an examination of the data +from the first 4 days. They are consecutive, from 18\textsuperscript{th} +to 21\textsuperscript{st} January 1987. It looks as though a value might +have been put on one day, and then corrected to the previous day. But +both versions of the data have been exported from Climsoft, and without +any indication of which version is the more recent. + +Now, having been a data detective -- it is probably time to go back to +the source of the data. This could be to check against the paper copy, +or to see whether the data could be exported without the +duplicates\footnote{This issue was with Climsoft Version 3.2. The + problem has been resolved in later versions.}. + +\section{What's next?}\label{whats-next} + +\hl{I would like to describe some of the sets of software to be used in +later chapters -- in addition to those so far. In particular I am +looking for examples from countries (in addition to Kenya) where there +could be quite a number of stations. One possibility is Rwanda, where we +have permission to use 4 stations. I wonder about Germany -- partly +because of its potential for comparing satellite and station data. +Lesotho -- I could ask, and Guyana. Later possibly Haiti, but the data +aren't quite ready yet. Maybe Ghana, we currently have permission to use +2 stations.} + +\bookmarksetup{startatroot} + +\chapter{Quantity and quality?}\label{quantity-and-quality} + +\section{Introduction}\label{introduction-3} + +Starting from this Chapter, we assume the data for analysis are ``tidy'' +and are defined as a climatic data frame in R-Instat. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5978}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3804}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.1a The Check Data menu}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.07127in,height=2.67218in]{media/image1116.png} +& \\ +\end{longtable} + +This chapter shows different ways to now look at the data. For many +applications this stage can be done quickly, and the work then proceeds +with the analyses described in the following chapters. But omit this +stare at your peril. We often find users have gone immediately to the +analyses they need, only to have to return later to look more critically +at their data. + +From now on, in this guide, we will also assume that you are reasonably +comfortable in your use of R-Instat. In Section 5.2 we outline what that +means. + +Section 5.3 shows how to get a quick inventory of the data. We also +consider how to tabulate and graph the primary, usually daily, data. +Then Section 5.3 examines the data via boxplots. Boxplots are primarily +an exploratory tool, but can also be used for presentation graphs. + +Finally, we consider some formal quality control checks on the data. +What oddities might be in the data and what can be done about them. + +\section{An inventory -- what data do I +have?}\label{an-inventory-what-data-do-i-have} + +Open the Rwanda workshop data, Fig. 5.2a. This is from 4 stations and +has already been defined as climatic data as described in Chapter 4. + +Use the first menu item in the \textbf{\emph{Climatic \textgreater{} +Check Data}} menu, Fig. 5.1a to choose an \textbf{\emph{Inventory}} +plot, Fig. 5.2b. + +In Fig. 5.2b the Data and the Station receivers are completed +automatically. This is because the data frame was defined as Climatic +with these components. If not, then usually: + +\begin{enumerate} +\def\labelenumi{\alph{enumi}.} +\item + The data frame was not yet defined as climatic. +\item + You are in the wrong data frame -- change it in the data selector in + the dialogue in Fig. 5.2b. +\end{enumerate} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.2a Rwanda workshop data}} + +\textbf{\emph{File \textgreater{} Open from Library \textgreater{} +Instat \textgreater{} Climatic \textgreater{} Rwanda \textgreater{} +Rwanda Workshop Data.RDS}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.2b Inventory Dialogue}} + +\textbf{\emph{Climatic \textgreater{} Check Data \textgreater{} +Inventory}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.01611in,height=3.06767in]{media/image1139. png} +& +\includegraphics[width=2.97338in,height=2.57557in]{media/image1150. png} \\ +\end{longtable} + +In Fig. 5.2b, add the 3 data columns for TMAX, TMIN and PRECIP and press +Ok. The resulting inventory is in Fig. 5.2c. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.2c Default inventory plot}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.2d Facet by element}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.90928in,height=2.83047in]{media/image1144.png} +& +\includegraphics[width=3.02691in,height=2.83944in]{media/image1110.png} \\ +\end{longtable} + +Experiment with the display. For example, in Fig. 5.2d the +\textbf{\emph{Facet By}}, in Fig. 5.2b has been set to be the +\textbf{\emph{Element}}, rather than the \textbf{\emph{Station}}. + +One oddity in the data in Fig. 5.2c and 5.2d was the gap in the rainfall +records in the 1980s at 2 of the stations. It is quite common to have +rainfall records in the database without the corresponding temperature +records, but the reverse is odd. The data were exported from the +Clinsoft database and it was not clear why these data were absent. That +is the idea of being able to produce an inventory. + +The value of the inventory presentation is that the information on many +stations and elements can be shown together. However, the graphs show +just when data was present or absent. They do not show the actual +values. + +They can be supplemented by simple time series plots\footnote{They use + \textbf{\emph{Describe \textgreater{} Specific \textgreater{} Line + Plot}} dialogue, with the \textbf{\emph{Date}} column as the + x-variable.}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.2e Rwanda temperature data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.06614in,height=3.02501in]{media/image1128.png} \\ +\end{longtable} + +These plots give a useful indication of the data for analysis. One +period in Kamembe Airport is marked in Fig. 5.2e as a cause for concern. +In Fig. 5.2f the interactive plotting, using \textbf{\emph{Describe +\textgreater{} View Graph}} is used to examine this part of the graph in +more detail. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5957}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3830}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.2f Examine the temperature data in more detail}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.97502in,height=3.30958in]{media/image1138.png} +& \\ +\end{longtable} + +Fig 5.2g shows the same time series graph for the rainfall data at each +site. There is a dry period in the year and hence the different years +are clearly visible in these graphs. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.2g Rainfall data at the four stations}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.05294in,height=2.93191in]{media/image1126.png} \\ +\end{longtable} + +The next dialogue is \textbf{\emph{Climatic \textgreater{} Check Data +\textgreater{} Display Daily}}, Fig. 5.2h. This produces a lot of +output, so we first choose the filter the data to just the first +station, Gisenyi\footnote{To filter, one way is to return to the data, + and right-click to set up the filter. Alternatively press the Data + Options button in any dialogue, here Fig. 5.2h. Then filter to select + just the first station.}. + +When using this dialogue the items on the right (from Station down to +Year) are completed automatically. If not, then you are probably in the +wrong data frame + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4444}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5417}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.2h Examining daily values}} + +\textbf{\emph{Climatic \textgreater{} Check Data \textgreater{} Display +Daily}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.2i One year of the data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image1105.png} \{width=``2.6560739282589676in'' +height=``3.423170384951881in''\} & +\includegraphics[width=3.33715in,height=3.40075in]{media/image1 100.png} \\ +\end{longtable} + +. Complete the dialogue in Fig. 5.2h as shown. We have chosen to recode +zero rainfalls to ``---''. This is an option so the rainy days are +displayed more clearly in Fig. 5.2i. It indicates the dry period in the +year is usually June and July. The dry period was a feature of Fig. +5.2g. + +We have now almost come ``full circle''. In Fig. 4.4i the rainfall data +from Garoua, Cameroon, were supplied for analysis arranged in a similar +way to the data now shown in Fig. 5.2i. This is a very clear and +sensible layout for the data, but to examine, not to analyse. + +The second tab in the same \textbf{\emph{Climatic \textgreater{} Check +Data \textgreater{} Display Daily}} dialogue gives a simple graphical +display of the data ``by year''. An example of the resulting display is +in Fig. 5.2j. The results show both the missing periods as well as the +dry parts of the year. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.2j. Daily rainfall for one station}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.10592in,height=2.96705in]{media/image698.png} \\ +\end{longtable} + +\section{Using boxplots to check and present +data}\label{using-boxplots-to-check-and-present-data} + +Open the Dodoma data, using the RDS file from the Climatic +\textgreater{} Tanzania directory. This is already set as a climatic +data frame as described in Chapter 4. It shows data from a single site, +with multiple elements. + +Most of the examples in this Section use the special +\textbf{\emph{Climatic \textgreater{} Check Data \textgreater{} +Boxplot}} dialogue. Boxplots are also available through the main +Describe menu (Describe \textgreater{} Specific \textgreater{} Boxplot). +The results are the same, but the Climatic Boxplot dialogue is usually +simpler to complete. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.3a Climatic boxplot dialogue}} + +\textbf{\emph{Climatic \textgreater{} Check Data \textgreater{} +Boxplot}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.3b Seasonal pattern of sunshine hours}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.14631in,height=3.02028in]{media/image700 .png} +& +\includegraphics[width=2.98839in,height=3.01606in]{media/image695.p ng} \\ +\end{longtable} + +The results, in Fig. 5.3b Show only one value, in September, is odd in +being longer than the day length. Most days in the year have many +sunshine hours, and the median is more than 10 hrs in the data for 6 +months, from June to November. + +Finding just a single obvious oddity in Fig. 5.3b out of the 20,450 +observations is a measure of the high quality of these data. We look in +more detail at how to check for outliers in Sections 5.4 and 5.5. As a +practical measure, setting the value to missing, would hardly affect the +results and may be sensible if the non-computerised records are not +easily available. + +As well as being a very useful exploratory method, boxplots are also +often used in the methods section of reports and papers, to present the +data being analysed. Thus they can be presentation as well as +exploratory graphs. + +Fig. 5.2b shows the seasonal pattern for the sunshine data. Two simple +changes to the dialogue in Fig. 5.3c show the time series, and hence a +possible trend, is shown in Fig. 5.3d. The second change in Fig. 5.3c is +to use the \textbf{\emph{Variable Width}} option, to see which years +have many missing values. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.3c Change to show the time series}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.3d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.05689in,height=3.07681in]{media/image707.png} & +\includegraphics[width=2.9791in,height=3.0135in]{media/image697.png} \\ +\end{longtable} + +It is possible to show both the seasonality and the time-series +together, as shown in Fig. 5.3e. The resulting figure is a bit crowded +if months are used, so the graph is displayed for each of 4 +quarters\footnote{The Climatic \textgreater{} dates \textgreater{} Use + Date dialogue is used to generate the quarters.}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.3e}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.05625in,height=2.93285in]{media/image694.png} \\ +\end{longtable} + +An example in Chapter 2, Section 2.4, compared the Dodoma station data +on sunshine hours with the estimated values from the satellite data. It +is important to check the quality of the data, whatever the source. +Hence Fig. 5.3f shows the seasonal pattern of the satellite estimates of +sunshine hours. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.3f Satellite estimates of sunshine at Dodoma}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.3g Suspect values mainly in early years}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.95526in,height=2.91532in]{media/image693.png} & +\includegraphics[width=2.95443in,height=2.9476in]{media/image692.png} \\ +\end{longtable} + +Comparing Fig. 5.3f with Fig. 5.3b (the station data) shows +encouragingly that the distributions seem very similar. However, there +are also a number of values that are clearly longer than the day length +at Dodoma. From discussion with the providers of the data (EUMETSAT) we +learned that the early years may have radiation values (and hence +sunshine hours) that are less reliable. This is confirmed through the +time series plot for the satellite data, in Fig. 5.3g. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.3hBoxplots for the rainfall}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.3i Rainfall on rain days}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.02121in,height=3.05622in]{media/image696.png} & +\includegraphics[width=2.97219in,height=2.99269in]{media/image691.png} \\ +\end{longtable} + +Boxplots can be used for the rainfall data, as shown in Fig. 5.3i. The +data plotted are just for rain days, with the variable width of each box +indicating the number of rain days. The plot shows the unimodal pattern +of the rainfall from November to April\footnote{In Section 3.3 we show + how a skew boxplot may be constructed as a preferred graph for + rainfall data.}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.3j Adding a second layer to the plot}} + +Plot Options \textgreater{} Layers \textgreater{} Add +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.3k Tmax and Tmin plotted together}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.99244in,height=2.74434in]{media/image894. png} +& +\includegraphics[width=2.97089in,height=3.03358in]{media/image891 .png} \\ +\end{longtable} + +The Dodoma data includes Tmax and Tmin and these can, if required, be +shown together on the same graph. An example is in Fig. 5.3k and one of +the sub-dialogues to facilitate this graph is shown in Fig. +5.3j\footnote{From the main \textbf{\emph{Climatic \textgreater{} Check + Data \textgreater{} Boxplot}} dialogue, with \textbf{\emph{Tmin}} as + the variable, use \textbf{\emph{Plot Options \textgreater{} Layer + \textgreater{} Add}} to give Fig. 5.3j. Include \textbf{\emph{Tmax}} + as the y, Fig. 5.3j, then use the \textbf{\emph{Layer Parameters}} + tab, Fig. 5.3j, and set the \textbf{\emph{Outlier colour}} to + \textbf{\emph{red}}. Then \textbf{\emph{Return}} to the main dialogue + and \textbf{\emph{Ok}}.} One feature in Fig. 5.3k is the larger +variability of the Tmax data in the rainy season, i.e.~from November to +April. + +Graphs, once saved, can be also combined, using Describe \textgreater{} +Combine Graphs, as shown in Fig. 5.3l, with all 4 elements shown in Fig. +5.3m + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.3l Combining graphs}} + +\textbf{\emph{Describe \textgreater{} Combine Graphs \textgreater{} +Options}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.3m The 4 elements in Dodoma}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.7585in,height=2.70783in]{media/image918.pn g} & +\includegraphics[width=3.16667in,height=3.16667in]{media/image129 0.png} \\ +\end{longtable} + +Other displays of these data are also possible. In Fig. 5.3k we observed +the larger variation of the Tmax data in the rainy months (compared to +both Tmin, and to Tmax in the dry months). This feature is shown more +clearly through density plots as seen in Fig. 5.3p. This uses a dialogue +from the ordinary Describe menu. The results in Fig. 5.3p indicate a +roughly normal-type shape for the data, though with a slightly longer +tail for Tmax in the rainy season\footnote{This feature is common and is + largely due to the possibility of lower values of Tmax on some rainy + days. One way to check this feature is the filter the data and just + consider the Tmax data on dry days.}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4444}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5417}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.3o Producing density plots}} + +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} +Histogram}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.3p Density plots for Tmax and Tmin by month}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image880.p ng}\{width=``2.7408552055993in'' h +eight=``2.7116983814523183in''\} & +\includegraphics[width=3.34305in,height=3.80189in]{media/image8 96.png} \\ +\end{longtable} + +Often the data frame will include data from more than one station. This +is illustrated briefly with the Rwanda data, from the library, that is +from 4 stations. An example is shown in Fig. 5.3q. It shows relatively +little seasonality, because Rwanda is close to the equator. One feature +of the data is the higher variability and lower temperatures at the +4\textsuperscript{th} stations, which is at a higher altitude compared +to the other 3. For this presentation, in the \textbf{\emph{Climatic +\textgreater{} Check Data \textgreater{} Boxplot}} dialogue, the option +is then used to facet by the Station. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.3q Example for multiple stations, Tmin for 4 +stations in Rwanda}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.16671in,height=3.0205in]{media/image887.png} \\ +\end{longtable} + +\section{Quality control of temperature (and other) +data}\label{quality-control-of-temperature-and-other-data} + +The graphical displays in the previous 2 sections have indicated +observations that need checking. The dialogue Climatic \textgreater{} +Check Data \textgreater{} Temperatures, Fig. 5.4a, is designed to +facilitate this checking. It has been designed specifically for +temperature records, but with a flexibility to permit it to be used also +for other elements. + +Fig. 5.4 has been completed for the Dodoma data. Initially with a single +element (Tmax). + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.4a}} + +\textbf{\emph{Climatic \textgreater{} Check Data \textgreater{} QC +Temperatures}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.4b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\begin{minipage}[t]{\linewidth}\raggedright +\begin{figure}[H] + +{\centering \includegraphics[width=3.12316in,height=3.50468in]{media/image88 4.png} + +} + +\caption{C:\textbackslash Users\textbackslash{} +ROGERS\textasciitilde1\textbackslash AppData\textbackslash Local\textbackslash Temp\textbackslash S +NAGHTML13ef1d27.PNG} + +\end{figure}% +\end{minipage} & +\includegraphics[width=2.86714in,height=2.72126in]{media/image881.pn g} \\ +\end{longtable} + +From the previous Section, Fig. 5.3k, Tmax at Dodoma is rarely less than +20°C, and could usefully be checked each time. So, the first +illustration of the dialogue uses the limits 20 and 40 for Tmax. + +The results are in Fig. 5.4b. R-Instat has filtered the Dodoma data and +copied the ``problem'' rows into a new data frame. It shows there were +just 13 occasions with Tmax \textless=20 in the record. As shown in Fig. +5.4b, they include 9\textsuperscript{th} October 1989, when Tmax was +equal to Tmin at 15.6°C. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.4c The available checks}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.4d Checking for consecutive values}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.74962in,height=1.68545in]{media/image893.png} & +\includegraphics[width=3.31667in,height=2.67081in]{media/image834.png} \\ +\end{longtable} + +More checks on the data are available, as shown in Fig. 5.4c. They are +considered in turn: + +\begin{itemize} +\item + \textbf{\emph{Acceptable range}} for each element, as shown in Fig. + 5.4a and b. This is very simplistic, because it does not allow for + seasonality in the data. +\item + \textbf{\emph{Same}} examines consecutive days and, with the default + setting, indicates whenever 4 days or more have the same value. The + idea is that when many consecutive values are identical, it is + possible they were simply copied in, and not measured on each day. An + example of the results is in Fig. 5.4e. +\item + \textbf{\emph{Jump}} notes whenever 2 consecutive days are different + by more that the threshold amount. The default is that any difference + (jump) of more than 10°C deserves further examination. +\item + \textbf{\emph{Difference}} is only available when 2 elements have been + included, usually Tmax and Tmin. The default is to note whenever Tmax + \textless= Tmin, but the difference could be altered. +\item + \textbf{\emph{Outlier}} is the most complex and relates the value to + the boxplot outliers. A boxplot is conceptually fitted for each month + at each station and the outliers are then noted. The traditional limit + for boxplots has a coefficient of 1.5\footnote{An outlier is when a + point is further from the respective quartile than 1.5 times the + interquartile range.}, as used in all the figures in Section 5.3. We + find, with the large samples in climatic data, this gives too many + outliers, many of which are not particularly surprising. We therefore + usually use 2.5 or 3 (instead of 1.5) as the multiplying value. +\end{itemize} + +You may choose to do multiple checks at the same time. We consider them +in turn. Each time the dialogue is used, it produces a new data frame. + +In Fig. 5.4d we specify the \textbf{\emph{Same}} check, for both Tmax +and Tmin together. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.4e Results from the Same check}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.4f Jump of more than 10°C}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.97921in,height=2.80925in]{media/image846.png} & +\includegraphics[width=3.02875in,height=2.79923in]{media/image860.png} \\ +\end{longtable} + +The results are in Fig. 5.4e. The first occurrence was in July 1965 when +Tmax was 26.0°C on 4 consecutive days, while in October 1969 Tmin was +consecutively 17.4°C. The results, in Fig. 5.4e also include further +columns to note how many consecutive days and whether they were for Tmax +or Tmin. In this case there were only 7 occurrences of the event, giving +28 rows in total, so these extra columns are not so important. + +Fig. 5.4f shows the results from the test for jumps of more than 10°C. +Here the logical column was always TRUE for Tmax, i.e.~this event did +not occur for Tmin. Sometimes Tmax drops because of rainfall, and this +column is automatically included in the filtered data. The results in +Fig. 5.4f include the size of the jump. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.4g Tmax within 1°C of Tmin}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.4h Outiers from corresponding boxplots}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.68755in,height=1.13204in]{media/image845.png} & +\includegraphics[width=3.33483in,height=2.49906in]{media/image832.png} \\ +\end{longtable} + +In the next check, the limit is set to 1°C. There are then, Fig. 5.4g, +just 4 days when Tmax is within 1 degree of Tmin. + +The final check is equivalent to the boxplot outliers. The threshold in +producing Fig. 5.4h was set to 2.5 and there were still 150 outliers to +investigate. There are effectively 4 tests here, i.e.~whether either +Tmax or Tmin are too low, or too high. These correspond to the settings +of the logical columns in Fig. 5.4h. Thus the first 3 rows all indicate +a low value of Tmax, while the 4\textsuperscript{th} row is a low value +for Tmin. + +Readers may be concerned in having to check 150 values. Our view is that +these data are of high quality. This is 150 values out of more than +40,000 (i.e.~over 20,000 days for each of Tmin and Tmax), so less than +0.5\% of the values to be checked! Not bad. + +\section{Quality control for rainfall +records}\label{quality-control-for-rainfall-records} + +The system for checking rainfall data is similar to that for the +temperatures, described in Section 5.4. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.5a}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.5b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.05307in,height=2.96922in]{media/image833.png} & +\includegraphics[width=2.84693in,height=3.6388in]{media/image836.png} \\ +\end{longtable} + +We continue with the Dodoma data. Two checks are undertaken in the +dialogue in Fig. 5.5a. First is to note all values more than 100mm and +second is to note when any 2 consecutive non-zero values are the same. + +Some of the results (after reordering columns for clarity) are in Fig. +5.5b. There are 83 rows of data, from 6 occasions with more than 100mm +(all look plausible) and 38 occasions when 2 consecutive days had the +same rainfall. Looking at the results in Fig. 5.5b, perhaps the low +values e.g.~0.3mm on 2 consecutive days is not so surprising, but 19.2mm +on both the 5\textsuperscript{th} and 6\textsuperscript{th} January 1967 +deserves further investigation. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.5c Same values after a filter}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.5d Checking for dry months}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.93097in,height=3.47978in]{media/image831.png} & +\includegraphics[width=3.04351in,height=3.07325in]{media/image842.png} \\ +\end{longtable} + +The data in Fig. 5.5b are just in an ordinary data frame, so we check +more closely by filtering out the values of 1mm or less. The results are +in Fig. 5.5c. There are just 16 occasions, most of which are shown in +Fig. 5.5b with exactly the same amount on 2 days. One way this arises is +when the data are computerised initially on the wrong day. They are then +transferred to the previous day, but the original is not deleted. A +check with the paper records is all that is needed. + +The next option in Fig. 5.5a is called ``Consecutive''. This checks on +the number of consecutive rain days. In some places a large number is +rare. But sometimes temperature columns may be entered mistakenly. This +then appears as many consecutive ``rain'' days, with relatively similar +amounts on the successive days. + +The next option is called Dry Month and is shown in Fig. 5.5d. The +explanation is given for Dodoma, where the rainy season is from November +to April. The other months may be totally dry. If January (in the middle +of the rainy season) is totally dry, then probably it was missing and +recorded mistakenly as zero each day. What is more complicated is +November (the usual start of the season) and April (the usual end). If +November is totally dry, then it could be true and a late start to the +season. Or the data are missing. The same goes for April. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4818}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.5e}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fgi. 5.5f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.11878in,height=3.30328in]{media/image835.png} & +\includegraphics[width=2.75836in,height=3.01454in]{media/image874.png} \\ +\end{longtable} + +The results are in Fig. 5.5e. Right-click on the month column and use +the Levels/Labels dialogue, Fig. 5.5f to give the results in Fig. 5.5g. +This shows the zeros are primarily in November, but December is zero in +2 years. There are no zero months in January to April. + +One way to find which years to investigate, is the make the year column +in Fig. 5.5e into a Factor and then use the same Levels/Labels dialogue. +The results are in Fig. 5.5h, showing the first years are 1935. 1936, +1943, while the frequency of 31 in 1952 idicates that was one of the +years when December was zero. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.5g It is a November/December problem}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.5hThese are the years}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.52206in,height=3.51626in]{media/image865.png} & +\includegraphics[width=2.72931in,height=3.52101in]{media/image869.png} \\ +\end{longtable} + +The final option is the outliers, using the limits from the skew +boxplot. In Fig. 5.5i we omit the zero values and set the skewness +weight to 3. This has identified just 3 possible outliers, and each is +only just above the corresponding limit, see Fig 5.5j. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.5i Settings for the rainfall outliers}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 5.5j Possible outliers from skew boxplot}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.97863in,height=1.49742in]{media/image859.png} & +\includegraphics[width=3.27232in,height=0.99566in]{media/image890.png} \\ +\end{longtable} + +\bookmarksetup{startatroot} + +\chapter{Preparing summaries}\label{preparing-summaries} + +\section{Introduction}\label{introduction-4} + +In this chapter and the next, we use the \textbf{\emph{Climatic +\textgreater{} Prepare}} menu to summarise data into a form ready for +analysis and then present the results as graphs and tables. Here we +consider monthly and annual summaries of rainfall, temperature and other +elements. The next chapter uses similar ideas for more specialised +summaries of the rainfall data, such as the start and length of the +season. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.1aThe main climatic summary menu}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.1b Presenting the summary}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.983in,height=2.51056in]{media/image868.png} & +\includegraphics[width=3.09296in,height=2.54131in]{media/image850.png} \\ +\end{longtable} + +In Section 6.2 data from Ghana are used to illustrate the summary of +rainfall data. + +\hl{To be continued} + +\section{Preparing the data}\label{preparing-the-data} + +In the second tutorial (reference/link) we showed how to plot annual +temperature data, after starting from the daily records. That was +without making use of the special climatic menu. These ideas are +repeated here and extended for rainfall. The climatic menu is used, and +the example is with data from 2 stations. The first step is to prepare +the data. + +Use \textbf{\emph{File \textgreater{} Open from Library \textgreater{} +Instat \textgreater{} Browse \textgreater{} Climatic \textgreater{} +Ghana}} and open the file called +\textbf{\emph{ghana\_two\_stations.rds}}, Fig. 6.2a. The data are from +Saltpond, which is on the coast, with a bimodal pattern of rainfall, and +Tamale, which is further North, and with unimodal rainfall. The rainfall +starts in 1944 for each station. Other elements, Fig. 6.2a, start later. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.2a Data from 2 stations}} + +\textbf{\emph{File\textgreater Open from Library\\ +\textgreater Instat\textgreater Browse\textgreater Climatic\textgreater Ghana}}\strut +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.2b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.29027in,height=3.28453in]{media/image8 63.png} +& +\includegraphics[width=2.96822in,height=1.31673in]{media/image864.pn g} \\ +\end{longtable} + +The data is in the right shape and already has a date column. + +First use \textbf{\emph{Climatic \textgreater{} Dates \textgreater{} +Infill}}, Fig. 6.2b, to check there are no missing dates. Some files +simply omit the days when all data are missing. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.2c Infill missing dates}} + +\textbf{\emph{Climatic \textgreater{} Date \textgreater{} Infill}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.2d Results from infilling}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.01192in,height=2.63331in]{media/image852 .png} +& +\includegraphics[width=3.04408in,height=0.74666in]{media/image800. png} \\ +\end{longtable} + +Complete the dialogue as shown in Fig. 6.2c and press Ok. The number of +rows in the data increases slightly to 53297 and the output window +states that just under 300 rows have been added. + +Use \textbf{\emph{Climatic \textgreater{} Tidy and Examine +\textgreater{} One Variable Summarise}} and complete the dialogue as +shown in Fig. 6.2e. The results are in Fig. 6.2f. They show no missing +values for the date column (which is good and a relief), and very few +missing rainfall days. Most of those were infilled. The other variables +have reasonable values. Hence we proceed. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4306}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5556}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.2e Checking the data}} + +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +One Variable Summarise}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.2f Results}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image803.png}\{ width=``2.6116010498687663in'' h +eight=``2.139025590551181in''\} & +\includegraphics[width=3.41444in,height=1.93744in]{media/image 812.png} \\ +\end{longtable} + +Use \textbf{\emph{Climatic \textgreater{} Date \textgreater{} Use +Date}}, Fig. 6.2g. Then it is convenient to reorder the columns to put +the date variables before the climatic data, Fig. 6.2h. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4306}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5556}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.2g Generate further date variables}} + +\textbf{\emph{Climatic \textgreater{} Date \textgreater{} Use Date}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.2h Data}} + +\textbf{\emph{After Right-click \textgreater{} Reorder columns}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image796.png} \{width=``2.626457786526684in'' he +ight=``4.1896883202099735in''\} & +\includegraphics[width=3.36829in,height=2.54636in]{media/image 806.png} \\ +\end{longtable} + +Finally, in this preparation, use \textbf{\emph{Climatic \textgreater{} +Define Climatic Data}}. The dialogue should fill automatically as shown +in Fig. 6.2i. Check that the data are unique and press Ok. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.2}} + +\textbf{\emph{Climatic \textgreater{} Define Climatic Datai}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.2j A count column}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Transform}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.09696in,height=3.63753in]{media/image802. png} +& +\includegraphics[width=2.97829in,height=4.01954in]{media/image810.p ng} \\ +\end{longtable} + +Finally, a new step, because we would like to analyse the number of rain +days as well as the rainfall totals. A new column, giving whether a day +was rainy-or-not, is generated. We show two ways this new column can be +generated. + +The first way is simple, but it generates a complicated R command, +because it is a special case of a more general function. Use +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} +Transform}}, and complete the dialogue as shown in Fig. 6.2j. This +produces a new column, which takes the value 1 for each rain day, and 0 +otherwise. We have explained in Chapter 2 why we use the seemingly odd +value of 0.85mm as a threshold for rain\footnote{This threshold is like + the value of 1mm sometimes suggested by WMO. The smallest value + usually recorded is 0.1mm, but we find that stations are not equally + conscientious in recording very small amounts. So, if 0.1mm is used, + then it is harder to compare the pattern of rainfall at different + stations. Records also differ in their attitudes on rounding. So some + records have far fewer values of 0.9 or 1.1mm than others. There is + also an old issue that some stations used to measure in inches and the + smallest value was then 0.01 inches. This translates to 0.3mm and + higher values are 0.5, 0.8 and 1mm. So, 0.9mm is not possible in data + that used to be in inches. Hence the threshold of 0.85mm is a + practical way of implementing ``1mm and above''.}. + +Now try the second method, which generates a very simple R command. It +uses R-Instat's powerful calculator, from \textbf{\emph{Prepare +\textgreater{} Column: Calculate \textgreater{} Calculations}}, Fig. +6.2k + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.2k Using the calculator}} + +\textbf{\emph{Prepare \textgreater{} Column: Calculate \textgreater{} +Calculations}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.2l Using the additional logical keyboard}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.07775in,height=2.54694in]{media/image807. png} +& +\includegraphics[width=2.96863in,height=1.87995in]{media/image798. png} \\ +\end{longtable} + +The resulting data are shown in Fig. 6.2m. The calculator has produced a +logical column, while the transformation using Prepare \textgreater{} +Transform has a column of 0 for dry and 1 for rain. There are the same +in R as it interprets TRUE as a 1 and False as a zero. + +They are now not both needed, so delete one of them. We have kept the +logical column. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{1.0000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.2m Data}} + +\textbf{\emph{After Right-click \textgreater{} Reorder columns}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.80012in,height=2.89117in]{media/image817.png} \\ +\end{longtable} + +\section{Annual summaries}\label{annual-summaries} + +The data are now ready to produce annual (or other) summaries. So, use +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries}}. It should initially be as shown in Fig. 6.3a. (If not, then +you might be in a different data frame, or you may not have followed the +steps in the section above.) + +We are going to produce the annual totals. Fig. 6.3a also indicates it +is equally easy to produce the totals for any subset of the year. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3a The climatic summary dialogue}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3b The summaries sub-dialogue}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.10171in,height=3.65872in]{media/image821 .png} +& +\includegraphics[width=2.96984in,height=3.1662in]{media/image826.p ng} \\ +\end{longtable} + +In Fig. 6.3a add the rainfall column and then press the Summaries +button. In the sub-dialogue \textbf{\emph{untick the N Total}}, and keep +the \textbf{\emph{N Non Missing}} and the \textbf{\emph{Sum}} as shown +in Fig. 6.3b. Then press \textbf{\emph{Return}} and \textbf{\emph{Ok}}. + +Now return to the dialogue and use the Rainday column instead of +rainfall. + +Also Press on the Summaries button again and untick the N Non Missing +checkbox from Fig. 6.3b. Press Return and Ok again. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.63899in,height=2.93844in]{media/image814.png} & +\includegraphics[width=3.25415in,height=3.78318in]{media/image815.png} \\ +\end{longtable} + +The results are in Fig. 6.3d. These data are now at the ``year'' levels +and there are 146 rows, i.e.~years, from the 2 sites together. We see +that at Saltpond in 1944 the total rainfall was 724mm from 69 rain days. +So, the mean rain per rain day is over 10mm and sometimes considerably +so. For example, again from Fig. 6.3d in 1951 there was a total of +1428mm from 85 rain days. + +There were some missing values in the data, but we defer a discussion of +this topic to the next section. Here we have been conservative in that +the annual totals have been set to missing if there were any days +missing in that year. + +Graphs of the data can now be produced. The PICSA project includes +discussing time-series graphs with farmers. They must be simple to +produce, but also very clear. The special dialogue for this is +\textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} Rainfall +Graph}}, Fig. 6.3e. + +In Fig. 6.3e, check you are using the correct (yearly) data frame and +complete it as shown. In the sub-dialogue, opt to add the mean line, but +(at this stage) without a label. + +In the sub-dialogue, click also on the Y-axis tab and set the lower +limit to 0 (zero). + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3e PICSA-style rainfall graphs}} + +\textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} Rainfall +Graph}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3f Sub-dialogue to add lines}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.31225in,height=3.08749in]{media/image81 9.png} +& +\includegraphics[width=2.75709in,height=2.63208in]{media/image813.png} \\ +\end{longtable} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3g PICSA-style graph for 2 stations}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.06534in,height=2.95472in]{media/image816.png} \\ +\end{longtable} + +It can be very useful for researchers and also intermediaries, to see +results from multiple stations. This is easy with R-Instat, where they +can be in the same data frame. Fig. 6.3h therefore shows another +example, with a facetted graph for 12 stations from xxx. + +\begin{longtable}[]{@{}l@{}} +\toprule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\textbf{\emph{Fig. 6.3hPICSA-style rainfall graph for 12 stations from +xxx}} \\ +\end{longtable} + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\hl{Graph to add} + +However, most farmers are particularly interested in the results from a +single station that is as close as possible to their location. Hence +once you have the appropriate graph for multiple stations, you can then +filter the data to look at each station in turn. Filtering is either +done from the right-click menu or from within each dialogue. + +Return to the \textbf{\emph{previous PICSA dialogue}} and choose +\textbf{\emph{Data Options}} to give the sub-dialogue shown in Fig. 6.3i + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3472}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6389}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3i Define a filter}} + +\textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} Rainfall +Graph \textgreater{} Data Options}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3j Choose a single station}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{medi a/image818.png}\{width= ``2.0657567804024497in'' +height='' 2.5604385389326336in''\} & +\includegraphics[width=3.91022in,height=2.58761in]{media /image808.png} \\ +\end{longtable} + +Choose to define a new Filter and complete the resulting sub-dialogue as +shown in Fig. 6.3j. As shown in Fig. 6.3j, give the filter the same name +as the station. That will make it easy later. + +Now return to the PICSA dialogue. Choose the +\textbf{\emph{sub-dialogue}} and change the lines to give +\textbf{\emph{terciles with labels.}} The resulting graph for just +Saltpond is in Fig. 6.3k. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3k Single station with terciles}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3l Graph for the second station}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.96125in,height=2.92087in]{media/image809.png} & +\includegraphics[width=2.89738in,height=2.89738in]{media/image788.png} \\ +\end{longtable} + +Repeat the filtering exercise above to \textbf{\emph{set a filter for +Tamale}}. The resulting graph with the line for the mean is in Fig. +6.3l. + +Similar graphs for the number of rain days is also sometimes needed for +PICSA. They are now very easy to produce. + +Return to the Climatic \textgreater{} PICSA \textgreater{} Rainfall +Graph dialogue, and simply change the Y-variable, + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3m}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3n}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.77738in,height=2.78274in]{media/image783.png} & +\includegraphics[width=3.28962in,height=3.28215in]{media/image779.png} \\ +\end{longtable} + +\textbf{\emph{Return to the dialogue}} again, press \textbf{\emph{Data +Option}} and choose the filter you called \textbf{\emph{Saltpond}}, Fig. +6.3o. You don't need to define the filter as that was done earlier. You +can just keep using it. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3o}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3p}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.4541in,height=2.73683in]{media/image770.png} & +\includegraphics[width=3.48981in,height=3.48981in]{media/image789.png} \\ +\end{longtable} + +Finally, in this section, we stress that the idea of the climatic menu +is simply to make it even easier to do common climatic analyses. By +``even easier'' we mean easier than using the main dialogues in +R-instat. If what you would like to do is not (yet) possible with the +climatic menu it may still be possible with the ordinary use of +R-Instat\footnote{And, of course, if it is not possible with the + ordinary R-Instat menus it may still be possible using R directly.}. +It is important that you remain in charge and are not limited by the +particular dialogues. As an example, suppose you would like to fit a +trend line to the rainfall data. The PICSA graphs permit horizontal +lines, but not trend lines. Perhaps the last graph, Fig. 6.3p has a +downward slope? + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3q Graph with ``ordinary'' dialogue}} + +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} Line +Plot}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3r Saltpond annual rainfall with trend line}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.98037in,height=2.74463in]{media/image768.p ng} +& +\includegraphics[width=3.05394in,height=3.17823in]{media/image775 .png} \\ +\end{longtable} + +One way to check this possibility is through the ``ordinary'' graphics +dialogues in R-Instat. So, use \textbf{\emph{Describe \textgreater{} +Specific \textgreater{} Line Plot}} and complete the dialogue as shown +in Fig. 6.3q. The results are in Fig. 6.3t. They perhaps hint at a +possible trend\footnote{To find the equation and level of significance + of this result you could then use the \textbf{\emph{Model + \textgreater{} Two Variable}} dialogue}. If there is a trend + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3s Analysis for rainfall totals}} + +\textbf{\emph{(Change Variable to sum\_rainfall in Fig. 6.3q)}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3t Cumulative or Exceedance Graph}} + +\textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} +Cumulative/Exceedance Graph}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.89721in,height=3.03582in]{media/image767.pn g} +& +\includegraphics[width=3.16711in,height=3.57535in]{media/image764 .png} \\ +\end{longtable} + +If there is a trend at Saltpond, perhaps it should also be evident in an +analysis of the annual totals. Fig. 6.3s shows this is not the case. + +Our aim in the above discussion is primarily to discuss the value of the +``ordinary'' R-Instat dialogues, so users do not restrict all their +analysis to the climatic menu. We return to trend analysis in Section +6.6, when we process the temperature data. + +Time series are not the only way to display the annual summaries. Use +\textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} +Cumulative/Exceedance Graph}}, and complete the dialogue as shown in +Fig. 6.3t. If the filter is still operating, then remove it by including +\textbf{\emph{Data Options}} and choosing \textbf{\emph{no\_filter}} in +the resulting subdialogue, Fig. 6.3u. The resulting graph is in Fig. +6.3v. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3u Removing a filter}} + +\textbf{\emph{(Data Options from dialogue)}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3v Cumulative distributions}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.95154in,height=3.90298in]{media/image769.p ng} +& +\includegraphics[width=3.04261in,height=3.20707in]{media/image797. png} \\ +\end{longtable} + +Statisticians like cumulative distributions, but many users prefer +exceedance graphs. If that is your wish, then return to the dialogue in +Fig. 6.3t and tick the box for an \textbf{\emph{Exceedance Graph}}. The +result is in Fig. 6.3w. + +These are just the inverse of each other. Starting with an amount -- on +the x-axis, you can read the probability of the total rainfall being +less than this amount (cumulative graph) or greater than this amount +(exceedance graph). So, if you need 800mm for a particular crop, then +the exceedance graph informs you there is about a 75\% chance of getting +this amount, or more, at Saltpond and about a 90\% chance at Tamale. The +cumulate graph would show a 25\% or 10\% chance of failure, i.e.~of +getting less than this amount. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3w Exceedance graph}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.3x Exceedance graph for rain days}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.83659in,height=2.97992in]{media/image824.png} & +\includegraphics[width=2.86216in,height=3.04293in]{media/image799.png} \\ +\end{longtable} + +Finally change the variable in the dialogue in Fig. 6.3t to the number +of rain days, to give the graph in Fig. 6.3x. The shapes are the same. +The steeper the graphs the smaller the variability and Fig. 6.3v, w and +x all show the totals are slightly more variable at Saltpond, compared +to Tamale. This can be confirmed numerically using Describe +\textgreater{} Specific \textgreater{} Summary Tables. Results are in +Fig. 6.3y. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +Fig. 6.3y Numerical results +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.02099in,height=3.32656in]{media/image804.png} \\ +\end{longtable} + +The standard deviation of the annual totals is 273mm at Saltpond +compared to 193mm at Tamale, while the means are relatively close. +Similarly the standard deviation for the number of rain days is 13 days +at Saltpond compared to 9 days at Tamale. + +This points to looking at the data in more detail. Hence monthly +summaries are examined in the next section. + +\section{More detailed summaries - +rainfall}\label{more-detailed-summaries---rainfall} + +For many applications it is important to know about the seasonality of +the data. In this section we therefore consider monthly (rather than +annual) totals. + +In Fig. 6.2g \hl{(link)} we used the Climatic \textgreater{} Dates +\textgreater{} Use Date dialogue to add the months to the daily data and +these are used in this section. Other possibilities with this dialogue +are to produce quarters, dekads (10-day periods), pentades or weeks. Any +of these periods can be used instead. + +Use \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} +Climatic Summaries}}. It was used initially in Fig. 6.3a to produce the +annual summaries. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig.6.4a}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.4b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.60435in,height=4.09049in]{media/image801.png} & +\includegraphics[width=2.37512in,height=3.68769in]{media/image780.png} \\ +\end{longtable} + +In Fig. 6.4a change the tab at the top to Annual + Within and complete +as shown. Click on Summaries and choose just the 2 statistics shown in +Fig. 6.4b. Then press Return and Ok. + +Now change from rainfall to Rainday in Fig. 6.4a and use the Summaries +to just get the Sum, i.e.~untick the N Non Missing. + +The resulting data frame is shown in Fig. 6.4c. There are 1751 rows of +data, i.e.~the 141 years for the 2 stations, times 12, because the data +are now monthly. For example, at Saltpond, January 1944 had a total of +41mm from 2 rain days, whie June of the same year had 22 rain days and a +total of 256mm. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.4c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.4d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.07108in,height=3.24673in]{media/image793.png} & +\includegraphics[width=2.8241in,height=3.23767in]{media/image792.png} \\ +\end{longtable} + +One way to show the seasonal pattern is through boxplots. Use +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} Boxplot}} +and complete the dialogue as shown in Fig. 6.4d. Use the +\textbf{\emph{Plot Options}}, Fig. 6.4e, to include the stations as +facets and give the results as in Fig 6.4f\footnote{To add the colour, + we also used the \textbf{\emph{Boxplot Options}} in Fig. 6.4d and + specified the \textbf{\emph{Fill Colour}} as green.}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.4e}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.4f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.65815in,height=2.73552in]{media/image781.png} & +\includegraphics[width=3.32867in,height=3.28715in]{media/image774.png} \\ +\end{longtable} + +In Fig. 6.4d, change the variable to \textbf{\emph{sum\_Rainday}} to +also give the graph in Fig.6.4g. + +Both graphs show the different seasonal pattern at the 2 sites. June is +the peak month of the rainy season at Saltpond and there is one year +where the monthly total exceeded 800mm. In June, Fig. 6.4g also shows on +average about half the days are rainy at Saltpond and that is similar to +the number of rain days in Tamale in September. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.4g}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.4h}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.14358in,height=3.09357in]{media/image776.png} & +\includegraphics[width=2.91635in,height=2.79556in]{media/image751.png} \\ +\end{longtable} + +Line plots can show the seasonal and time-series nature of the data +together. As an example, use \textbf{\emph{Describe \textgreater{} +Specific \textgreater{} Line}} and complete as shown in Fig. 6.4h. In +the Plot Options, use the Month as the factor for the facets, to give +the graph as shown in Fig. 6.4i\footnote{We also used the Data Options + and filtered on the Months to use just March to October.} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.4i}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.05397in,height=2.92973in]{media/image759.png} \\ +\end{longtable} + +The results in Fig. 6.4i show the interesting nature of the June +rainfall totals at Saltpond and that the extreme monthly total was in +1962. It also shows the way Tamale consistently has more rainfall than +Saltpond in July to September. + +The same type of graph can also be produced for the number of raindays, +see Fig. 6.4j for a different layout\footnote{It uses the 2 factors + month and station for the facets.}. It also shows that the initial +analysis of rainfall trends using the annual rainfall totals may have +been over-simplistic. If trends do exist, then the next step could be to +examine whether they are consistent, or not, during the year, i.e. for +the different months. Thus, if rainfall seems to be decreasing, then is +that in all months/seasons, or just in a part of the year. This issue is +examined further in Section 6.6 when analysing the temperature records. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.4j Time series graphs for the 2 stations by month}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.06782in,height=2.90349in]{media/image757.png} \\ +\end{longtable} + +In reports it can be useful to include the daily data for a sample of +the years. Fig. 6.2k shows the daily data for Saltpond in +1962\footnote{\textbf{\emph{Filter to 1962 at Saltpond}} and use + \textbf{\emph{Climatic \textgreater{} Check Data \textgreater{} + Display Daily}}.}, when June had exceptionally high rainfall. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.2k Daily data for Saltpond for 1962}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.94077in,height=4.57665in]{media/image790.png} \\ +\end{longtable} + +There is nothing obviously wrong with the June data, but they look +sufficiently curious, that a check back to the paper records and perhaps +with nearby stations would seem sensible. + +\section{Options for Missing values}\label{options-for-missing-values} + +Analyses need to be able to take account of missing values in the data. +Statistical packages are usually ``sensible'' in their handling of +missing values and R is no exception. However, defining how they are to +be handled in each circumstance is the responsibility of the user and we +consider here the options in R and R-Instat. + +To illustrate the problem Fig. 6.5a gives an inventory plot for the +Ghana data. It shows there is hardly a problem for the rainfall data. +The measurement of the other elements started later and there is a +slightly greater proportion of missing values. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.5a}} + +\textbf{\emph{Climatic \textgreater{} Check Data Inventory}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.5b Default annual summaries of rainfall}} + +\textbf{\emph{From \textgreater{} Climatic \textgreater{} Prepare +\textgreater{} Climatic Summaries}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.02824in,height=3.14148in]{media/image744.p ng} +& +\includegraphics[width=3.09181in,height=3.15433in]{media/image708. png} \\ +\end{longtable} + +Fig. 6.5b shows some of the annual totals that were used for analysis in +Section 6.3. A column in Fig. 6.3b shows also the number of missing +values each year. It shows there were missing values in the last 2 years +and the annual summary has therefore been set to missing. This is +``safe'' but it may be disappointing as the last 2 years totals have +therefore been set to missing, and have therefore been excluded from the +analysis. + +Repeating this point, the default in R, and hence in R-Instat, is that +when there are any missing values (even just one day in the year) then +the summary is set to missing. + +The opposite approach is also simple to undertake. This is where all the +missing days are omitted, and the summary is then calculated using the +remaining data. This uses the same \textbf{\emph{Climatic \textgreater{} +Prepare \textgreater{} Climatic Summaries}} dialogue, but check the box +labelled \textbf{\emph{Omit Missing Values}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.5c Data with both summaries}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.5d Years with missing values}} + +\textbf{\emph{Use Right-click \textgreater{} Filter with (Total == NA)}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.97396in,height=3.0356in]{media/image748. png} & +\includegraphics[width=3.13029in,height=1.95156in]{media/image746 .png} \\ +\end{longtable} + +The results are in the last 2 columns of Fig. 6.5c. They show the total +rainfall to be 665mm in Tamale in 2015 from 53 rain days -- quite low +compared with other years. In 2016 the values are 998mm with 67 rain +days. + +R-Instat has added intermediate options described below. Before that, we +consider what more can be done with just these 2 extremes. + +Fig. 6.5d shows the annual data for those years where there are missing +values. There are just 9 years overall, 5 at Saltpond and 4 at Tamale. +Hence, with data from 1944 to 2016, this leaves over 60 years of data at +each site. Hence, one option is to accept the omission of those years +and proceed, which is what was done in Section 6.3. + +A second possibility results from the observation, Fig. 6.5d, that in 3 +of the 9 years there was just a single day missing in the year. Perhaps +it is reasonable to accept the totals in those years and then just have +6 missing years overall. + +To go further we now look in more detail at the daily data. One +coincidence is that both sites have missing data in 1949 and an +examination is that this is for the same 3 months, i.e.~from October to +December. We don't like coincidences and wonder why. + +More generally, the other years have just one or two months missing. If +that were between November and February -- when there is usually little +rain, then perhaps the total could be accepted. In this case that is not +the case. For example August 2015 is missing in Tamale, and this perhaps +explains why the total and number of rain days was low in that year. +Omitting it, as we did, in Section 6.3, was sensible. + +A more major possibility is that Saltpond collects data every 3 hours +and Tamale collects hourly data. So perhaps the Met service has more +detailed records that could help to infill the missing daily values. + +To see further options for missing values, return to the +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries}} dialogue. Choose the \textbf{\emph{Summaries}} button and +the \textbf{\emph{Missing Options}} tab, Fig. 6.5e. The setting we chose +of 27 means that any year with a month or more missing, gives a missing +summary. In this case, as shown in Fig. 6.5f, it has just given the +annual totals for the 3 years with just a single missing day. + +In some examples the third option in Fig. 6.5e becomes important. +Sometimes the data, as supplied, starts, or ends during a year. In this +instance the first and/or the last year may be incomplete. For example +the Tamale data in 1944 start in February, rather than January. This was +not an issue, because January is relatively dry, but had they started in +July 1944 that would have been different and should have been allowed +for. + +In Fig. 6.5e this corresponds to setting the Option Not Missing to about +340 (days) rather than the Missing Days to 27. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.5e}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.5f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.65784in,height=2.08662in]{media/image773.png} & +\includegraphics[width=3.43017in,height=2.02797in]{media/image772.png} \\ +\end{longtable} + +A different, and more major, operation is to try to ``infill'' or +complete the data, where there are missing values. There is a wide +variety of methods, ranging from input of the mean value from that day +of the year to using estimates from a neighbouring station, or from +satellite observations. They are considered in \hl{Chapter xxx}. + +\section{Processing temperature data}\label{processing-temperature-data} + +The \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} +Climatic Summaries}} dialogue applies to any element. With the Ghana +data the annual temperature summaries can therefore be added to those of +the rainfall calculated in Section 6.3. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.6a}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.6bInclude temperature extremes}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.01254in,height=3.21036in]{media/image778. png} +& +\includegraphics[width=2.93647in,height=2.63648in]{media/image782. png} \\ +\end{longtable} + +Complete the dialogue as shown in Fig. 6.6a and then the Summaries +sub-dialogue as shown in Fig. 6.6b. This produces the annual mean and +the annual extremes of the daily minimum temperatures. + +Then use the Missing Options tab, shown in Fig. 6.6b and complete it as +shown earlier in Fig. 6.5e. This will give the annual summaries if there +are a few missing days, but not if a month or more is missing. + +Once you have these summaries, return to the dialogue in Fig. 6.6a and +replace the minimum by the maximum temperatures. + +The measurement of temperatures started in 1960, hence the summary data +are now filtered, prior to producing graphs. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.6c Annual temperature data}} + +\textbf{\emph{Following Right-click \textgreater{} Filter \textgreater{} +(Year \textgreater{} 1959)}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.6d}} + +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} Line +Plot}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.14016in,height=2.15774in]{media/image752 .png} +& +\includegraphics[width=2.84289in,height=2.38531in]{media/image760.pn g} \\ +\end{longtable} + +Use the \textbf{\emph{Describe \textgreater{} Specific \textgreater{} +Line Plot}} dialogue, and complete as shown in Fig. 6.6d. In the plot +options, choose to \textbf{\emph{Facet by the station}}\footnote{In the + current version of R-Instat the Plot Options are disabled for multiple + variables. Hence set the facets before setting the variables to + Multiple. Set them back to Single Variable if you wish to edit the + Plot Options. This limitation will be removed in a future version.}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.6e}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=5.98585in,height=3.0798in]{media/image765.png} \\ +\end{longtable} + +In Fig. 6.6e the data on the extremes must be treated with caution, +because they are the values on a single day each year. There does appear +to be a trend in the mean for Tmax, particularly at Tamale. This can be +confirmed using the \textbf{\emph{Model \textgreater{} Three Variables +\textgreater{} Fit Model}} dialogue, which is described in more detail +in Chapter xxx. The results show an estimated increase of 2.3°C for +Tamale. The estimated increase for Saltpond was just 0.4°C and that was +not statistically significant. + +The graph can be repeated for the minimum temperatures (not shown). +Instead, Fig. 6.6 shows Tmax and Tmin together. The estimated trend in +Tmin is an increase of 2.0°C per 100 years and is almost the same at the +two sites. Fig. 6.6f also shows clearly the much greater diurnal range +at Tamale, compared to Saltpond. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.6f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.06458in,height=3.00273in]{media/image753.png} \\ +\end{longtable} + +In Fig. 6.6f (and earlier in Fig. 6.6e) the mean line for Saltpond looks +odd. In this Chapter the quality control steps, discussed in Chapter 5, +have been omitted and, as usual, that was not a good idea! Fortunately, +the daily data are available, so we return to these and do a simple time +series plot of the daily records, Fig. 6.6g. This indicates an oddity in +the data in about 1974. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.6g Tmax for Saltpond daily data by Date}} + +\textbf{\emph{From Describe \textgreater{} Specific \textgreater{} Line +Plot}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.6h Monthly means for Tmax}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.32047in,height=2.68146in]{media/image7 50.png} +& \includegraphics[width=2.72012in,height=1.5in]{media/image777.png} \\ +\end{longtable} + +This is confirmed in Fig. 6.6h, where the monthly means for Tmax at +Saltpond are displayed for the 1970s\footnote{Monthly means are + calculated using \textbf{\emph{Climatic \textgreater{} Prepare + \textgreater{} Climatic Summaries}} as shown in Fig. 6.6k. The data + are then filtered to just 1971 to 1980 for Saltpond. Then the results + could be shown in the output window, but we chose to unstack the data, + by Month to give the display shown in Fig. 6.6h.}. They show a drop of +about 2 degrees from May 1974. + +The next step in this small investigation is to display the daily +records, as shown in Fig. 6.6i. Looking at the daily data it became +clear they were originally recorded in degrees Fahrenheit and (at least +usually) just to the nearest degree. Hence, for clarity, the Tmax data +were transformed back into Fahrenheit\footnote{Use \textbf{\emph{Prepare + \textgreater{} Column: Calculate \textgreater{} Calculation}} with the + formula \textbf{\emph{round(max\_temperature*9/5+32)}}.} and then +displayed, as shown in Fig. 6.6i. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.6i}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.6j}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.69896in,height=4.11481in]{media/image771.png} & +\includegraphics[width=3.29566in,height=3.85672in]{media/image749.png} \\ +\end{longtable} + +Fig. 6.6i confirms the change was in May 1974, or possibly 30 April. In +most years temperatures in May are about 0.5°C lower than April, or +about 1°F. In the 1974 record it is 4 or 5 degrees Fahrenheit lower. + +Fig. 6.6j therefore repeats the analysis, shown earlier in Fig. 6.6e, +but just from 1975. The results are now consistent with the data from +Tmin at Saltpond and with the Tamale data. The trend for the mean is +slightly higher at 3.2°C per 100 years. + +Analyses of the temperature records, like the above, are common. There +is an immediate follow-up question that is often omitted, namely is the +trend in the temperatures consistent through the year, or is it perhaps +different in the rainy and dry seasons? + +As in Section 6.4 for the rainfall, we therefore extend the analysis and +examine the monthly data. + +\section{More detailed summaries - +temperatures}\label{more-detailed-summaries---temperatures} + +We examine the possible trends in Tmin and Tmax, at the two stations, +monthly. A specific question is whether there is evidence for a +different trend in some months, compared to others. + +For simplicity, given the inhomogeneity of Tmax at Saltpond, the daily +data are first filtered so only the data from 1975 are analysed, Fig. +6.7a. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.7a Filter the data (optional)}} + +\textbf{\emph{Right-click \textgreater{} Filter \textgreater{} Define +new}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.7bMonthly summaries}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries}} + +\textbf{\emph{Only summary is the mean}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.74164in,height=2.04112in]{media/image701.png} & +\includegraphics[width=3.17611in,height=3.44477in]{media/image70 6.png} \\ +\end{longtable} + +Then use \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} +Climatic Summaries}}, Fig. 9.7b. In Fig. 9.7b click on +\textbf{\emph{Summaries}} and just choose the \textbf{\emph{mean}}. + +Then repeat for Tmax, to give the data as in Fig. 6.7c. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.7c Monthly means for Tmin and Tmax}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.7d}} + +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} Line +Plot}} + +\textbf{\emph{(Also use Plot Options with Month a Facet)}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.04795in,height=3.2116in]{media/image747. png} & +\includegraphics[width=2.97447in,height=2.61065in]{media/image704. png} \\ +\end{longtable} + +Then \textbf{\emph{Describe \textgreater{} Specific \textgreater{} Line +Plot}}, as shown in Fig. 6.7d indicates a reasonably consistent slope at +both sites, for each of the months, Fig. 6.7e. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.7e Trends by month for the two stations}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.11982in,height=2.97923in]{media/image705.png} \\ +\end{longtable} + +However, this does not quite answer the question posed, namely that the +trend is independent of the month, i.e.~it is the same in each month. + +The modelling dialogues are needed to address this hypothesis. The menu +is shown in Fig. 6.7f. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3611}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6250}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.7f The Model menu}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.7g Filter by Station}} + +\textbf{\emph{Right-click \textgreater{} Filter \textgreater{} Define +New}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{m edia/image745.png}\{widt h=``2.062606080489939in'' +height= ``2.4237357830271216in''\} & +\includegraphics[width=3.8127in,height=2.28484in]{media/ image703.png} \\ +\end{longtable} + +In the modelling menu, Fig. 6.7f, the \textbf{\emph{One Variable}} +sub-menu permits a wide variety of distributions to be fitted to a +single variable, i.e.~a single column of data. + +Moving down in Fig. 6.7f the Two Variables sub-menu is designed to model +a single y (dependent) variable against one x (independent) variable. An +example would be Tmax against the year. That would be ok if we had +annual data, as in Section 6.6, but we have the monthly data. + +In our case we need at least three variables. The dependent is initially +Tmax and this is modelled as a function of both the year and month, i.e. +we have a total of 3 variables. + +Once you use the modelling dialogues as a routine, then the General +dialogues are usually used, or (below the line in Fig. 6.7f) the even +more general Model dialogue, where you just give an R command. + +To simplify the modelling, first filter for a single station, Fig. 6.7g. +Call the filter \textbf{\emph{Saltpond}} (rather than Filter1). + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.7h Make a new data frame}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.7i}} + +\textbf{\emph{Model \textgreater{} Three Variables \textgreater{} Fit +Model}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.98193in,height=2.99659in]{media/image702.p ng} +& +\includegraphics[width=3.08916in,height=2.72983in]{media/image699 .png} \\ +\end{longtable} + +Return. to the main dialogue and opt to \textbf{\emph{Apply as Subset}}, +Fig. 6.7h. + +Now, for the first model. Use \textbf{\emph{Model \textgreater{} Three +Variables \textgreater{} Fit Model}} with the new Saltpond data frame +and complete it as shown in Fig. 6.7i. Initially you have a `*' between +the year and month variables. This fits a different slope for each +month, as shown earlier, for Saltpond, in Fig. 6.7e. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.7j}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.7k}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.30832in,height=1.28529in]{media/image564.png} & +\includegraphics[width=2.70761in,height=1.63468in]{media/image572.png} \\ +\end{longtable} + +A lot of results are produced. Key information is the ANOVA table shown +in Fig. 6.7j. This shows that there is a clear \textbf{\emph{trend +(year}}) and \textbf{\emph{seasonality (month\_abbr)}}. It also shows +that there is no evidence of the interaction, i.e.~the +\textbf{\emph{year:month\_abbr}} explains very little variation in the +data, and what it explains is not statistically significant. + +Hence, the separate slopes each month are not needed. A parallel line +model is adequate. + +So, return to the dialogue in Fig. 6.7i and change the `*' into a `+'. +At the same time, click on the Display Options and choose to Save the +Fitted Values, Fig. 6.7k. + +Before examining the results there is one small (optional) change that +sometimes simplifies the interpretation. With the year as given, i.e. +starting in 1975, the origin is almost 2000 years ago. Instead you could +make 1975 as the origin, using \textbf{\emph{Prepare \textgreater{} +Column: Calculations \textgreater{} Calculate}} and making a new column, +say \textbf{\emph{yr \textless- year -1975}}. Then use +\textbf{\emph{yr}} instead of year in the model. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.7l}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.7m}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.47772in,height=2.53505in]{media/image563.png} & +\includegraphics[width=3.55308in,height=2.50862in]{media/image570.png} \\ +\end{longtable} + +Interpreting the model in Fig. 6.7l the trend (yr coefficient) is a +possibly disturbing 3.4 degrees per 100 years. For the seasonality, the +mean temperature in January 1975 was estimated as 29.9°C. February and +March were each estimated to be an average of 0.6°C higher, i.e.~about +30.5 degrees, while August had the lowest average temperatures. + +In some stations there is ``local warming'' where the station +surroundings are more built up. Hence this should be checked, before +assuming the large trend per year is a feature of global warming. + +A similar analysis for Tmin, again shows no evidence that a different +trend is needed each month. Saving those fitted values also, as shown in +Fig. 6.7m permits the parallel lines to be plotted, using +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} Line +Plot}}, as shown in Fig. 6.7n + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 6.7n Observed and fitted temperatures at Saltpond}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.0614in,height=2.97294in]{media/image565.png} \\ +\end{longtable} + +\bookmarksetup{startatroot} + +\chapter{Tailored Products}\label{tailored-products} + +\section{Introduction}\label{introduction-5} + +Products by NMSs include regular reports, such as climate normal and +10-day bulletins through the rainy season. It is useful if they also +produce ``tailored products'' that correspond to the specific demands of +users. + +In many countries, one such product is the ``start of the rains''. This +is usually not a single fixed definition but may depend on factors such +as the crop being planted and the type of soil. The results in this +chapter are mainly based on an analysis of the daily rainfall data. + +In early years on this type of work, e.g.~(Stern, Dennett, \& Dale, +1982) some researchers questioned the need for the daily (rainfall) +data. This was often because sufficient results could be obtained +through an analysis of monthly totals supplemented, when needed, with +10-day (dekads) or weekly totals. + +This was partly due to a mis-understanding that the analysis would use +the daily values directly. Instead, the daily values are simply used in +an initial step to calculate appropriate summaries and these are on a +yearly basis. The results are then presented in the same ways as the +rainfall totals and total number of rain days in Chapter 6. + +\section{Getting ready}\label{getting-ready} + +One of the examples used in this Chapter is from Moorings in Southern +Zambia. This has rainfall data from early 1922. Use \textbf{\emph{Open +From Library \textgreater{} Instat \textgreater{} Browse \textgreater{} +Climatic \textgreater{} Zambia}} and open the file called +\textbf{\emph{Moorings.rds}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4167}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5694}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.2a}} + +\textbf{\emph{Climatic \textgreater{} Dates \textgreater{} Use Date}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.2b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image562.png}\{w idth=``2.5082042869641294in'' he +ight=``3.754517716535433in''\} & +\includegraphics[width=3.49513in,height=3.68764in]{media/imag e561.png} \\ +\end{longtable} + +A feature of Moorings, like many stations in Southern Africa, is that +the rainy season is from November to April. (This is roughly the mirror +image of the Sahel, where the rains are from May to October.) Hence the +year is ``shifted'' and we choose to start from August, Fig. 7.2a. + +Use the \textbf{\emph{Climatic \textgreater{} Dates \textgreater{} Use +Date}} dialogue, Fig. 7.2a, and complete as shown in Fig. 7.2b. Set the +starting month to August. + +The resulting data, after reordering the columns, is shown in Fig. 7.2b. + +In Fig. 7.2b 1\textsuperscript{st} March 1922 is given as the season +starting in 1921. The year variable has also been given as a factor, to +emphasise it is the 1921-1922 season. The variable s\_doy (shifted day +of year) is 214 on 1\textsuperscript{st} March. It is the day number in +the season starting from 1\textsuperscript{st} August as day 1. + +Finally, in Fig. 7.2b, there seems nothing different about the +\textbf{\emph{month}} variable. But \textbf{\emph{right-click}} on the +column and choose \textbf{\emph{Levels/Labels}}, Fig. 7.2c. This shows, +Fig. 7.2d, that the months are now labelled from August, so all tables +and graphs will now appear from August to July, rather than from January +to December. \textbf{\emph{Close}} the \textbf{\emph{Levels/Labels}} +dialogue. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.2c Choose Levels/Labels}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.2d Factor levels start from August}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.12964in,height=2.97015in]{media/image556.png} & +\includegraphics[width=3.15733in,height=2.95211in]{media/image560.png} \\ +\end{longtable} + +Now use the \textbf{\emph{Climatic \textgreater{} Define Climatic Data}} +dialogue. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.2e Define Moorings as climatic}} + +\textbf{\emph{Climatic \textgreater{} Define Climatic Data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.2f The Climatic \textgreater{} Prepare menu}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.62074in,height=3.44835in]{media/image557.p ng} +& +\includegraphics[width=3.16862in,height=2.98188in]{media/image54 5.png} \\ +\end{longtable} + +This dialogue should fill automatically, as shown in Fig. 7.2e. Check +that the dates define \textbf{\emph{unique rows,}} Fig. 7.2e, and press +\textbf{\emph{Ok}}. + +We now assume use of the \textbf{\emph{Climatic \textgreater{} Check +Data}} dialogues, described in Chapter 5, and go straight to the +\textbf{\emph{Climatic \textgreater{} Prepare}} menu, Fig. +7.2f\textbf{\emph{.}} Start with the \textbf{\emph{Climatic +\textgreater{} Prepare \textgreater{} Transform}} dialogue, Fig. 7.2g. +Complete it as shown to produce a new variable, called rainday, see Fig. +7.2h, that facilitates the analysis of the number of rain days. A rain +day is defined as one with more than 0.85mm. You can choose a different +threshold if you wish. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.2g}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.2h}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.41476in,height=3.25756in]{media/image539.png} & +\includegraphics[width=3.54285in,height=3.20519in]{media/image531.png} \\ +\end{longtable} + +Now use the \textbf{\emph{Climatic \textgreater{} Prepare +\textgreater{}}} \textbf{\emph{Climatic Summaries}} dialogue, Fig. 7.i + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.2i Getting annual summaries}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries}} + +\textbf{\emph{Summaries: N not missing and sum}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.2j Annual level data frame}} + +\textbf{\emph{(Then also just sum for variable raindays)}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.99177in,height=3.53007in]{media/image523. png} +& +\includegraphics[width=2.51092in,height=3.57793in]{media/image553. png} \\ +\end{longtable} + +Most of the dialogue, in Fig. 7.2i, should have completed automatically. +If not, then either the data frame was not defined as climatic, or you +are on the wrong data frame. + +In Fig. 7.2i, include the \textbf{\emph{rain}} variable. Press the +\textbf{\emph{Summaries}} button and choose just the +\textbf{\emph{Number not Missing}} and the \textbf{\emph{Sum}}. The +result should be a new annual data frame with 3 columns. + +In Fig. 7.2i, change the variable to \textbf{\emph{rainday}} and this +time, just get the \textbf{\emph{sum}} as the only summary. + +The resulting annual data frame is shown in Fig. 7.2j. The results show, +for example, that the 1922/23 season had a total of 853mm from 75 rain +days. Further columns will now be added, that give the start of the +rains each year, etc. + +\section{\texorpdfstring{\textbf{Start of the +rains}}{Start of the rains}}\label{start-of-the-rains} + +Return to the daily data and use \textbf{\emph{Climatic \textgreater{} +Prepare \textgreater{} Start of the Rains}}, see Fig. 7.2f. + +The dialogue is shown in Fig. 7.3a. If it is not automatically completed +as in Fig. 7.2i, then either you did not define the data as climatic +(Fig. 7.2e), or you are on the wrong data frame. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{1.0000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.3a Start of the rains dialogue}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Start of +the Rains}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=5.06578in,height=4.63058in]{media/image537.png} \\ +\end{longtable} + +This is the first ``tailored'' product, i.e.~there is no fixed +definition. What is needed is a definition that corresponds as closely +as possible to something used by farmers -- perhaps for a specified +crop. + +The first decision is the earliest possible planting date. If there were +rain in Moorings on 1\textsuperscript{st} October it would almost +certainly be ignored, because it would probably be followed by a long +dry spell. + +As an example, we suggest 15\textsuperscript{th} November as the +earliest date. Then also 15\textsuperscript{th} January as the latest +date, i.e.~after then it would not be worth planting. + +In Fig. 7.3a, press the Day Range button and complete the sub-dialogue +as shown in Fig. 7.3b. + +After returning to Fig. 7.3a change the \textbf{\emph{2 days to 3 days}} +and choose to also \textbf{\emph{save the Date}} column. Then press +\textbf{\emph{Ok}}. The full definition is then: + +\textbf{\emph{Event 1:}} ``The first occasion from +15\textsuperscript{th} November with more than 20mm within a 3-day +period.'' + +The resulting data are in Fig. 7.3c. The Start of the rains dialogue has +added 2 more columns to the yearly data frame, one giving the day number +(from 1 August) and the other giving the date. In the 1922/23 season the +day was 119 or 27 November, while it was also in late November for the +following two seasons. + +The start\_doy column is used in the further analysis. The start\_date +column is just to assist interpretation. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.3b}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.3c}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.08141in,height=2.82925in]{media/image526.png} & +\includegraphics[width=3.01452in,height=3.4613in]{media/image521.png} \\ +\end{longtable} + +With the start date, or even with the totals from Section 7.2, you could +proceed straight to a PICSA-type graph. + +Use \textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} Rainfall +Graph}}. Include the \textbf{\emph{start\_doy}} variable, and then the +\textbf{\emph{PICSA options}} Fig. 7.3d. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.3d}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.3e Sub-dialogue}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.00236in,height=2.99703in]{media/image541.png} & +\includegraphics[width=3.01854in,height=2.26012in]{media/image522.png} \\ +\end{longtable} + +The sub-dialogue in Fig. 7.3e is used to display the +\textbf{\emph{Y-axis}} as dates, rather than day numbers. Use also the +\textbf{\emph{Lines}} tab to add a line for the mean, and possibly also +the \textbf{\emph{X-Axis}} to untick the angle for the labels. The +resulting graph is in Fig. 7.3f. + +The graph shows the mean starting day was 28\textsuperscript{th} +November. There was just one year with a starting date in January. There +were also 10 years where the starting date was on the lower limit of +15\textsuperscript{th} November. Perhaps the earliest date should have +been even earlier? + +As a small investigation, change the names of the two columns +(\textbf{\emph{right-click, Rename}}). Then use the +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Start of +the Rains}} dialogue again, changing the earliest start date to +1\textsuperscript{st} November\footnote{An alternative to renaming the + variables is to change the names of the new variables in the + \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Start of + the Rains}} dialogue, Fig. 7.3a.}. The definition is now: + +\textbf{\emph{Event 2:}} ``The first occasion from 1\textsuperscript{st} +November with more than 20mm within a 3-day period.'' + +Then the PICSA rainfall graph is run again (unaltered) giving the graph +in Fig. 7.3g. The mean is now 9 days earlier. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.3f Start of the rains from 15 November}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.3g Start from 1\textsuperscript{st} November}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.98512in,height=2.32565in]{media/image546.png} & +\includegraphics[width=3.05344in,height=2.33017in]{media/image547.png} \\ +\end{longtable} + +There are other components of the Start of the Rains dialogue that can +optionally be used. For example, in India a definition (for the Summer +monsoon) is of the form: + +\textbf{\emph{Event 3:}} First occasion from 1 June with more than 25mm +in 5 days, or which at least 3 days are rainy. + +This uses the Number of Rainy Days checkbox in Fig. 7.3a. + +The third checkbox in Fig. 7.3a is called Dry Spell. Events 1 and 2 can +be considered as defining planting opportunities, while if a dry spell +condition is added, this might define a successful planting. + +\textbf{\emph{Rename}} the last columns that were produced -- so they +are not overwritten. + +Then return to the \textbf{\emph{Climatic \textgreater{} Prepare +\textgreater{} Start of the Rains}} dialogue and check the +\textbf{\emph{Dry Spells}} checkbox, Fig. 7.3h. The definition is now: + +\textbf{\emph{Event 4:}} First occasion from 1\textsuperscript{st} +November with more than 20mm in 3 days, and no dry spell of more than +9-days in the next 3 weeks (21 days). + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.3h}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.3i}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.92363in,height=1.28105in]{media/image600.png} & +\includegraphics[width=3.1585in,height=3.12056in]{media/image548.png} \\ +\end{longtable} + +The data resulting from Events 1, 2 and 4 are shown in Fig. 7.3i. They +show that in 1965, with Event 2, there was a planting opportunity on 13 +November, but that was not successful. The date of the successful +planting was 20\textsuperscript{th} December. + +There was just one year, namely 1972, where there was no successful +planting by the imposed limit of 15 January. + +Event 2 and Event 4 can be compared. Use \textbf{\emph{Prepare +\textgreater{} Column: Calculate \textgreater{} Calculations}} and +subtract the date of Event 2 from Event 4, Fig. 7.3j. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.3j Difference from including a dry spell}} + +\textbf{\emph{Prepare \textgreater{} Column: Calculate \textgreater{} +Calculation}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.3k Exceedance graph for 3 definitions}} + +\textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} +Cumulative/Exceedance graph}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.80739in,height=3.2033in]{media/image542.p ng} & +\includegraphics[width=3.14745in,height=3.20676in]{media/image536 .png} \\ +\end{longtable} + +The results are also shown in the last column in Fig. 7.3i. Where the +value in this last column is zero the first planting was successful. +Otherwise the value shows the delay, before the date of the successful +start. Looking down this column, or \textbf{\emph{filtering}}, or using +\textbf{\emph{Prepare \textgreater{} Column: Reshape \textgreater{} +Column Summaries}} shows there were 22 non-zero values, a risk of 1 year +in 4. + +If this risk is too high, then one way to reduce it, might be to omit +the early planting dates and start later. Changing Event4 to start on +15\textsuperscript{th} November, and comparing those results with Event +1, changes the risk to 12 years or about 14\%. + +Conservation farming is encouraged in Southern Zambia and one component +is water conservation, using planting in small hollows. The promoters +estimate this gives an extra 3 days, that seedlings could withstand +drought. So, keeping to 1 November in Event 4, and changing the 9 days +to 12 days could also be considered. This halves the risk, as there are +then just 10 years when replanting was needed. + +The data may also be plotted as exceedance graphs, as is shown in Fig. +7.3k for the Events 1, 2 and 4. + +\section{The end and length}\label{the-end-and-length} + +A common definition for the end of the rainy season is based on a simple +water balance model. This has been adequate in the unimodal stations in +West Africa, but has problems with stations, like Moorings in the +Southern hemisphere. + +Hence, we first look quickly at a site in Northern Nigeria, before +returning to discuss the end and length of the season at Moorings. + +Use \textbf{\emph{File \textgreater{} Open from Library \textgreater{} +Instat \textgreater{} Browse \textgreater{} Climatic \textgreater{} +Nigeria}} and open the file called \textbf{\emph{Samaru.rds}}. The data +frame called Samaru56t has 56 years of daily data from 1928, Fig. 7.4a. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.4a Samaru daily data}} + +\textbf{\emph{File \textgreater{} Open from Library \textgreater{} +Instat \textgreater{} Browse \textgreater{} Climatic \textgreater{} +Nigeria \textgreater{} Samaru.rds}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.4b Start of rains for Samaru}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Start of +the Rains}} + +\textbf{\emph{(Day range from 1 April to 30 June)}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.96934in,height=3.03661in]{media/image554.p ng} +& +\includegraphics[width=2.98372in,height=2.0036in]{media/image54 3.png} \\ +\end{longtable} + +This data frame is already defined as climatic, so proceed directly to +the \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Start +of the Rains}} dialogue. + +These data are from January. In this dialogue, set the earliest date as +\textbf{\emph{1st April}} and the latest as \textbf{\emph{30 June}}. Use +\textbf{\emph{Event 5}} as shown in Fig. 7.4b: + +\textbf{\emph{Event 5}}: First occasion from \textbf{\emph{1st April}} +with more than \textbf{\emph{20mm in 3 days}} and no dry spell longer +than \textbf{\emph{9 days}} in the next \textbf{\emph{21 days}}. + +As in the previous section, get the starting day of year and the +corresponding date. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.4c End of rains/Season dialogue}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} End of the +Rains}} + +\textbf{\emph{(Day Range from 15 August to 15 December)}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.4d The season length}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Length}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.75298in,height=3.69728in]{media/image549.p ng} +& +\includegraphics[width=3.01in,height=2.40907in]{media/image540 .png} \\ +\end{longtable} + +Now use \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} End +of the Rains}} and complete the dialogue as shown in Fig. 7.4c + +The water balance ``model'' is like a simple ``bucket''. It is empty in +the dry season. It is then filled by the rainfall and loses a constant +amount of 5mm per day, due to evaporation. The capacity of the bucket, +in Fig. 7.4c, is 100mm. Any excess, when the bucket is full, is assumed +lost to runoff. + +In the middle of the season (August), the bucket is usually quite full. +The end of the season is defined, in Fig. 7.4c, as the first time, after +15\textsuperscript{th} August, that the bucket is effectively empty. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.4e Samaru summary data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.4f Time-series graphs}} + +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} Line}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.87533in,height=2.70212in]{media/image544.p ng} +& +\includegraphics[width=3.27461in,height=2.76851in]{media/image5 03.png} \\ +\end{longtable} + +The length of the season is then, from \textbf{\emph{Climatic +\textgreater{} Prepare \textgreater{} Length,}} simply the difference +between the end and the start dates, Fig. 7.4d. + +The resulting annual data are shown in Fig. 7.4e. Various graphs are +possible. The time series graph in Fig. 7.4f indicates clearly the +smaller inter-annual variability of the end of the season, compared to +the start. This graph was produced using \textbf{\emph{Describe +\textgreater{} Specific \textgreater{} Line Plot}}. An alternative would +have been the \textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} +Rainfall Graph}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4444}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5417}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.4g Exceedance plots}} + +\textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} +Cumulative/Exceedance}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.4h Length of the season at Samaru}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image505.png} \{width=``2.5142836832895887in'' +height=``3.160087489063867in''\} & +\includegraphics[width=3.25415in,height=3.21362in]{media/image5 08.png} \\ +\end{longtable} + +An alternative display is with exceedance graphs, Fig. 7.4g. Here the +greater steepness of the line for the end of the season, corresponds to +the lower variability. The \textbf{\emph{Prepare \textgreater{} Column: +Calculate \textgreater{} Calculations}} can be used to show the standard +deviation of the start is about 17 days (over 2 weeks), while it is +about 9 days (just over 1 week) for the end of the season. + +Fig. 7.4h shows the length of the season, using the +\textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} Rainfall +Graphs}} dialogue. Terciles have been added to show that about 1/3 of +the years had a season length of less than 152 days, i.e.~5 months, and +1/3 had more than 172 days -- almost 6 months. + +Now return to the Moorings data in the Southern hemisphere\footnote{The + file called Moorings 7.4.rds from \textbf{\emph{File \textgreater{} + Open from Library,}} contains the data including the variables from + Section 7.3.}. The start was considered in Section 7.3 and we choose +the definition 4, i.e. from 1 November, but with no dry spell of more +than 12 days. In principle it simply remains to get the end of the +season, and then the length, as above. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4028}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5833}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.4i End of the season dialogue}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} End of the +Rains}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.4j}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image509.png}\{wi dth=``2.5004582239720037in'' +heig ht=``2.9221620734908136in''\} & +\includegraphics[width=3.62759in,height=2.61828in]{media/ima ge501.png} \\ +\end{longtable} + +To illustrate the problem first try the same analysis as for Samaru, +Fig. 7.4i. Make the day range 15\textsuperscript{th} February to +15\textsuperscript{th} June, as the equivalent of 15\textsuperscript{th} +August to 15\textsuperscript{th} December for Samaru. The results are in +Fig. 7.4j and a few of the problems are highlighted. + +In some years the season appears to end in February, and sometimes on +the precise day (15\textsuperscript{th} February) that is the lower +limit. This never happened at Samaru as the water balance was always +full (or close to full) throughout August. So, August, in the Sahel, has +reliable rain. This isn't the case at Moorings, where there can be a +long dry spell at any time in the season. + +We would still prefer to consider issues in February as a problem during +the season -- which is covered in Section 7.6, - rather than necessarily +a very early end of the season. + +In an analysis of 5 stations in Zimbabwe, (Mupamgwa, Walker, \& Twomlow, +2011) proposed a different type of definition for the end of the season. +This was the \textbf{\emph{last day with more than 10mm}} between 1 +January and 30 June. This type of definition has been added to the +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} End of the +Rains}} dialogue, Fig. 7.4k. + +For Moorings we have used the last day with more than 10mm up to the end +of April, Fig. 4.7k. + +In using this definition some meteorology staff complained that this was +clearly the end of the rains and they would prefer the end of the +season. + +What is therefore also available in R-Instat is to use the above +definition for the end of the rains and then to start the water-balance +definition from that date -- which is a different date each year. Return +to \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} End of +Rains}}, select the \textbf{\emph{End of Season}} and then the +\textbf{\emph{Day Range}} again, Fig. 7.4l. + +In Fig. 7.4l choose \textbf{\emph{Variable Day}} and select the +\textbf{\emph{end\_rains}} variable from the summary data. Keep the end +date as \textbf{\emph{Fixed Day}}, and choose 30 June. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.4k}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} End of +Rains}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.4l Day Range on End of Rains}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.83286in,height=3.82203in]{media/image484.pn g} +& +\includegraphics[width=3.16008in,height=2.92637in]{media/image50 2.png} \\ +\end{longtable} + +Return to the main dialogue, Fig. 7.4m and set as shown. The results are +shown in Fig. 7.4n and are more reasonable. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.4m}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.4n}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.60377in,height=2.94993in]{media/image512.png} & +\includegraphics[width=3.49007in,height=2.43485in]{media/image511.png} \\ +\end{longtable} + +Now use \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} +Length of Season}}, as shown for Samaru in Fig. 7.4d, to give the +length. + +The start and end of the season are plotted in Fig. 7.4o. Unlike Samaru, +they are approximately equally variable, and each has a standard +deviation of just over 2 weeks. The cumulative frequency graph +illustrates the same point, with each of the start, end\_rains and +end\_season having roughly equal slopes and with each having a range of +about 2 months (i.e.~roughly 4 times the standard deviation). + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.4o}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.4p}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.18058in,height=3.05307in]{media/image515.png} & +\includegraphics[width=2.94033in,height=3.04233in]{media/image516.png} \\ +\end{longtable} + +Fig. 7.4q plots the season lengths. Here about 1/3 have a length less +than 4 months, while the longest third has a duration of five months or +more. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.4q}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=5.7214in,height=4.00612in]{media/image442.png} \\ +\end{longtable} + +\section{Coping with censored and missing +data}\label{coping-with-censored-and-missing-data} + +Censoring occurs in many areas of application of statistics. The topic +is particularly important in the analysis of medical data. There the +survival times of patients may be recorded for a study up to 3 years. +Those who survive longer are the censored observations. We know the +survival is more than 3 years, but don't know exactly how long. + +In hydrology the height of a river may be measured. At times of flooding +the height may be more than the measuring instrument, but the exact +value isn't known. + +In climatology a heavy wind may destroy the measuring equipment. In that +case the exact censoring point is unknown, but we do know that a large +value occurred. + +There is also possible censoring with the start and end of the season in +Sections 7.3 and 7.4. + +To illustrate, use the \textbf{\emph{Climatic \textgreater{} Prepare +\textgreater{} Start of the Rains}} dialogue again, Fig. 7.5a. This time +we deliberately choose a small planting window, Fig. 7.5b. The latest +planting date is designed to be the date beyond which a farmer would not +think it would be sensible to plant for that season. That is not likely +to be 30 November, but we choose that early date to illustrate the issue +of censoring. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.5a}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.5b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.60635in,height=3.5928in]{media/image510.png} & +\includegraphics[width=2.41252in,height=1.95945in]{media/image513.png} \\ +\end{longtable} + +In Fig. 7.5a the variable names for the results are also changed, to +avoid overwriting the previous variables. The results are in Fig. 7.5c, +together with the previous ones. In the 1925/26 season the earliest +planting opportunity was 3\textsuperscript{rd} January. This is now too +late and hence is now given as a missing value. The same is done in the +following season when the earliest date was 8\textsuperscript{th} +December. + +In the subsequent analysis we should examine the number of occasions +that planting was not possible. One way is to use the +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +One Variable Summarise}} dialogue, Fig. 7.5d. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.5c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.5d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.20001in,height=3.4126in]{media/image518.png} & +\includegraphics[width=2.78995in,height=2.50823in]{media/image519.png} \\ +\end{longtable} + +The results, in Fig. 7.5e, indicates there were 17 seasons in which the +new starting date was censored. However, the problem is that there was +already one season for which the original definition was missing. That +was not due to censoring, but because there were also missing values in +the first season. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6023}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3750}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.5e}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.5f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.32002in,height=1.41801in]{media/image517.png} +& \\ +\end{longtable} + +So, there were, 16 years when no planting was possible in November. That +is interesting information itself. But the main problem is that the +summaries are missing for 2 different reasons, namely either because +there were days with missing data, or because planting was not possible, +i.e.~there was censoring. + +To proceed we fist explain how R-Instat handles missing values, i.e. +days when the rainfall was not recorded. There are various options when +producing (say) monthly summaries that were discussed earlier. But what +happens with the start and end of the rains. + +For the start of the rains the summary is set to missing if any day is +missing in the period calculated. For example in Fig. 7.5c the start in +1922/23 was on 27\textsuperscript{th} November. + +\begin{itemize} +\item + Had any value been missing between 1\textsuperscript{st} and + 27\textsuperscript{th} November 1922, then the result would have been + set to missing. +\item + If there were a missing day on 1\textsuperscript{st} December 1922 the + result would be given, i.e.~it would not be set to missing, because + the rains had already started. +\item + One detail is that the result would also be set to missing if either + 30\textsuperscript{th} or 31\textsuperscript{st} October 1922 were + missing, because then the 3-day total on 1\textsuperscript{st} + November cannot be calculated. +\end{itemize} + +The same idea is true for the end of the rains, i.e.~if a missing value +is encountered in the period when it calculates the end of the rains, +then the result is set to missing. Otherwise it is given. + +For the Moorings data there is only one missing day in the record, once +it has started in early 1922. This was on 10\textsuperscript{th} March +2004. The end of the rains was defined to be last occasion with more +than 10mm between 1 January and 30 June. This missing value is within +the period, but the calculation has ``worked backwards'' and found the +last day on 23\textsuperscript{rd} March 2004. The missing value did not +affect this calculation and hence the value is given. + +The calculation is more complicated for the water balance definition. If +there are missing water-balance values in the period of calculation, +then the summary is set to missing. If the rainfall is ever missing, +then the water balance is set to missing. Once the rainfall is no longer +missing the water balance may still be missing, because it does not know +what the state was, just after the rainfall data resumed. Hence, the +analysis is doubled, starting with both a full and an empty balance +(i.e.~the two extremes). While these are different, the water balance is +still set to missing. Once they are the same, the water balance +calculation resumes. + +These decisions on missing values are strict and some users may feel +that a single missing day should not set the summary for that year, or +season, to be missing. In that case consider infilling the data, +discussed in chapter \hl{xxx}. + +We now return to the censoring problem. Return to the +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Start of +the Rains}} dialogue in Fig. 7.5a and tick the third option for saving +columns, called \textbf{\emph{Occurrence}}. This adds a logical column +to the summaries that can be used to distinguish between missing and +censored seasons. + +\begin{longtable}[]{@{}l@{}} +\toprule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\textbf{\emph{Fig.7.5g}} \textbf{\emph{Fig. 7.5h}} \\ +\end{longtable} + +\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center} + +\hl{To be continued once status variable sorted.} + +\section{During the season}\label{during-the-season} + +This section considers examples of risks during the rainy season. + +Chapter 6 examined rainfall totals and rain days throughout the year. +Now they are examined for the season. + +The simplest is to consider fixed periods. At Moorings the rainy season +is from November to April. Use \textbf{\emph{Climatic \textgreater{} +Prepare \textgreater{} Climatic Summaries}}, as shown in Fig. 7.6a. + +In Fig. 7.6a press \textbf{\emph{Summaries}} and choose just the +\textbf{\emph{N non-missing}} and the \textbf{\emph{Sum}}. Click on +\textbf{\emph{Day Range}} and choose \textbf{\emph{1 November to 30 +April}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6a Summaries for Moorings}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6b Rename the resulting columns}} + +\textbf{\emph{Right-click \textgreater{} Rename Column}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.83063in,height=3.03142in]{media/image514.p ng} +& \begin{minipage}[t]{\linewidth}\raggedright +\begin{figure}[H] + +{\centering \includegraphics[width=3.15657in,height=2.16951in]{media/image520 .png} + +} + +\caption{C:\textbackslash Users\textbackslash{} +ROGERS\textasciitilde1\textbackslash AppData\textbackslash Local\textbackslash Temp\textbackslash S +NAGHTML59463e8.PNG} + +\end{figure}% +\end{minipage} \\ +\end{longtable} + +Once run, change the \textbf{\emph{rain}} variable in Fig. 7.6a, to +\textbf{\emph{raindays,}} and this time just get the +\textbf{\emph{Sum}}. You may have found that the variables overwrote the +ones produced earlier for the full year. To ensure this does not happen +in the future, rename the 3 columns, Fig. 7.6b. It is also useful to add +an explanatory label as shown in Fig. 7.6b. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6c Day Range sub-dialogue}} + +\textbf{\emph{From Climatic \textgreater{} Prepare \textgreater{} +Climatic Summaries}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6d Main climatic summaries dialogue}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.88212in,height=2.30841in]{media/image476.p ng} +& +\includegraphics[width=2.9965in,height=2.28385in]{media/image474. png} \\ +\end{longtable} + +The totals can also be calculated for the rainy season each year. Return +to the \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} +Climatic Summaries}} dialogue. Use the \textbf{\emph{rain}} variable and +then press \textbf{\emph{Day Range}}. Complete as shown in Fig. 7.6c, +where the total is now from the \textbf{\emph{start doy}} to the +\textbf{\emph{end-season}}. This is confirmed on the +\textbf{\emph{return}} to the main dialogue, Fig. 7.6d. + +In Fig. 7.6d click on Summaries and choose the Count Non Missing and the +Sum. Once produced, \textbf{\emph{right-click}} and +\textbf{\emph{rename}} the Sum variable as \textbf{\emph{rainSeason}}. +The \textbf{\emph{Count Non Missing}} column is now the season length. +This is another way to get the length! + +A third possibility is to produce the total (or the number of rain days) +for a fixed period following the start. Return once more to the +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries}} and change the \textbf{\emph{Day Range}} as indicated in +Fig. 7.6e, i.e.~for \textbf{\emph{120 days from the start}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6e}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.06766in,height=2.31779in]{media/image472.png} & +\includegraphics[width=2.92924in,height=2.88679in]{media/image469.png} \\ +\end{longtable} + +This would be for a 120-day crop. The approximate water requirement of +many crops is known, so the results are the first step in calculating +the risks of not having enough water for a specified (20 day) crop in +the period following planting. + +The summary columns produced are shown in Fig. 7.6f. + +The results are presented as exceedance probabilities in Fig. 7.6g and +as time series in Fig. 7.6h. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6g Exceedance graphs of rainfall totals}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6hTime-series graphs}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.96572in,height=2.8693in]{media/image468.png} & +\includegraphics[width=2.9133in,height=2.893in]{media/image470.png} \\ +\end{longtable} + +The three totals are sufficiently similar that plotting the 3 lines on a +single time-series graph in Fig. 7.6h would be confusing, so they are +plotted as facets\footnote{To plot as shown in Fig. 7.6h, use + \textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} + Stack}} with the 3 totals, carrying the \textbf{\emph{s\_year}} + variable. Then, on the \textbf{\emph{Climatic \textgreater{} PICSA + \textgreater{} Rainfall Graph}}, choose Plot Options and Facets and + make the layout vertical.}\ldots. + +The same ideas are now considered for spell lengths. In the tropics, +drought is a problem and hence we consider the occurrence of long dry +spells. The same dialogue could equally be used for hot, or cold, spells +in temperature data, etc. + +The simplest is to find the longest spell length within the main months +of the rainy season. Continuing with the Moorings data, use +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Spells}}, +Fig. 7.6i. + +Use the Day Range sub-dialogue to specify \textbf{\emph{January 1 to +March 31}} as the range of days. The results, shown in Fig. 7.6j give +the longest dry-spell length within this 3-month period. It shows the +longest number of consecutive days with rain less than 0.85mm on any +day. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6i Spells dialogue}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Spells}} + +\textbf{\emph{(Day range from January 1 to March 31)}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6j Spell lengths Jan-Mar \& Apr}} + +\begin{itemize} +\tightlist +\item +\end{itemize} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\begin{minipage}[t]{\linewidth}\raggedright +\begin{figure}[H] + +{\centering \includegraphics[width=3.3136in,height=3.70842in]{media/image46 4.png} + +} + +\caption{C:\textbackslash User +s\textbackslash ROGERS\textasciitilde1\textbackslash AppData\textbackslash Local\textbackslash Temp\\ +\SNAGHTMLac9f3a1.PNG} + +\end{figure}%\strut +\end{minipage} & +\includegraphics[width=2.80591in,height=3.26927in]{media/image460.png} \\ +\end{longtable} + +To clarify the results, use \textbf{\emph{Climatic \textgreater{} Check +Data \textgreater{} Display Daily}}\footnote{Include the checkbox to + display the zero values as ``---''.}. Data for 4 early years are in +Fig. 7.6k to be compared with the results in Fig. 7.6j. + +In Fig. 7.6j the longest spell in 1924 is 19 days. Fig. 7.6k shows that +this is a spell from 13\textsuperscript{th} February to +2\textsuperscript{nd} March. In 1925 the longest spell was just 6 days +and was at the end of March. This included days with small rainfalls, +but each was lower than the 0.85mm threshold. + +The 7-day spell in 1926 was also at the end of March. In 1927 there was +also a long dry spell (14 days) at the end of March, and this also shows +that just the longest spell is given. That year also had 13 consecutive +dry days in January. If more detail is needed, then the three months +could be considered individually. + +It sometimes causes confusion that the longest spell in a month can be +longer than the month itself. We illustrate by calculating the longest +spell length in April. The results are also given in the last column in +Fig. 7.6j. They show that the longest dry spell in April 2024 was 43 +days. This is confirmed from Fig. 7.6k, because 1\textsuperscript{st} +April 2024 ``inherited'' a dry spell from March, of 13 days, i.e.~from +19\textsuperscript{th} March. So, 1\textsuperscript{st} April was +already the 14\textsuperscript{th} consecutive dry day and this had +become 43 days by the ned of April. There is an option in the dialogue +if you only wish to consider April itself. This option is used in +Section 7.7. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2477}} + >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2477}} + >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2477}} + >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2477}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6k Data for January to April for 4 years}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=1.41809in,height=3.5316in]{media/image467.png} & +\includegraphics[width=1.46057in,height=3.55557in]{media/image462.png} & +\includegraphics[width=1.56068in,height=3.60442in]{media/image504.png} & +\includegraphics[width=1.34859in,height=3.43078in]{media/image482.png} \\ +\end{longtable} + +As with the rainfall totals, it is sometimes useful to find the longest +dry spell in the rainy season, (i.e.~between the day of the start and +the end) or in part of the season. As with the rainfall totals this uses +the start and end dates each year. In the \textbf{\emph{Climatic +\textgreater{} Prepare \textgreater{} Spells}} dialogue, change the day +range as was shown for the rainfall totals in Fig. 7.6c and Fig. 7.6e. + +Fig. 7.6l shows the results for the season, i.e.~between the date of the +start of the rains and the end of the season. The median value for the +longest spell length is 14 days (2 weeks). The terciles are also given, +showing that one year in 3 has a longest spell length of 12 days or +less. But also a third of the years has a spell length of 18 days or +more. + +Fig. 7.6m shows the longest spell lengths for the 120 days following +planting. The results are similar, but without the longest spells shown +in Fig. 7.6l. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4862}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4954}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6l Longest dry-spell in the season}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6m Longest spell in the first 120 days}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.01745in,height=3.05955in]{media/image480.png} & +\includegraphics[width=3.04182in,height=3.04182in]{media/image478.png} \\ +\end{longtable} + +Many crops are particularly sensitive to dry spells during the flowering +period. This is typically about 20 days (3 weeks). Suppose a crop that +reaches the start of flowering 50 days after planting. Calculating the +risk is currently a 2-stage process in R-Instat. First produce the new +column, for the start of flowering, Fig. 7.6n. This is an instance where +you can also transform the start\_date as is shown in Fig. 7.6o. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6n Calculate the start of flowering}} + +\textbf{\emph{Prepare \textgreater{} Column: Calculate \textgreater{} +Calculation}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6o}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.9459in,height=3.30876in]{media/image477. png} & +\includegraphics[width=2.89862in,height=3.2564in]{media/image475 .png} \\ +\end{longtable} + +The resulting data are in Fig. 7.6p. The \textbf{\emph{flower\_date}} +variable shows that the flowering period often starts late in December +or in early January, but it is occasionally also in February. + +The \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} +Spells}} dialogue is now used from the \textbf{\emph{start\_flower}} day +for \textbf{\emph{20 days}}. The resulting variable is also shown in +Fig. 7.6p and is seen often to be quite short. For example, the longest +spell from early 2024 for the next few years is usually just 2 or 3 +consecutive dry days. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6p}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6q}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.97498in,height=2.52035in]{media/image481.png} & +\includegraphics[width=2.92717in,height=2.89352in]{media/image483.png} \\ +\end{longtable} + +The results are plotted in Fig. 7.6q using \textbf{\emph{Climatic +\textgreater{} PICSA \textgreater{} Rainfall Graph}} again. Only in 1/3 +of the years is there a dry spell of one week or more. However, in 13 of +the 77 years, i.e.~one year in six, there was a dry spell of 10 days or +more. + +The graph in Fig. 7.6q is from a variable date. In a particular year, +once you know the planting date, or also from crops that are photoperiod +sensitive, the dates are fixed. Once calculated, if the risk is high, +then perhaps remedial action can be taken, such as planning for some +irrigated water to be available for this period. + +A third aspect that can cause a problem during the season is a climatic +extreme. This may be drought, as considered in the dry spells above. It +could also be an extreme wind, or excessive rainfall causing flooding. +Extremes are considered in detail in Chapter 11, hence only a single +example is given here. + +A question posed in relation to rainfall in Niger, was the risk of more +than 100m rain within a 3-day period. The argument was that while a +single day with more than 100mm would be a problem, so would, say 40mm, +on each of 3 days. + +Three day running totals were already used ``behind the scenes'' in +calculating the start of the rains. Now these totals are needed +explicitly. Use \textbf{\emph{Climatic \textgreater{} Prepare +\textgreater{} Transform}}, as shown in Fig. 7.6r. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6r Transform dialogue}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Transform}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6s Resulting data totalled over 3 days}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.76554in,height=3.63142in]{media/image479.pn g} +& +\includegraphics[width=3.2882in,height=3.08744in]{media/image4 71.png} \\ +\end{longtable} + +The resulting daily data, in Fig. 7.6s, show an instance in February +1923 where the total is more than 100mm. + +Now the \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} +Climatic Summaries}} dialogue may be used again, as shown in Fig. 7.6t. +The summaries are from \textbf{\emph{January to March}} and the only +summary is the \textbf{\emph{Maximum}}, Fig. 7.6u. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4818}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6t}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6u Just get the maximum}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.9062in,height=3.15847in]{media/image473.png} & +\includegraphics[width=2.5901in,height=2.91316in]{media/image439.png} \\ +\end{longtable} + +The resulting summary data can now be plotted as shown in Fig. 7.6v and +Fig. 7.6w. From Fig. 7.6w there is 100mm or more in about 4 years in 10. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6v Time series of 3-day extremes}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.6w Cumulative distribution}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.25255in,height=3.24878in]{media/image441.png} & +\includegraphics[width=2.59782in,height=3.46376in]{media/image459.png} \\ +\end{longtable} + +\section{It rained yesterday. Should I +plant?}\label{it-rained-yesterday.-should-i-plant} + +For Moorings, in Zambia, the definition for the start of the rains was +the first occasion from 1 November with more than 20mm in 3 days. + +For successful planting the condition was added that there should not be +a dry spell of more than 9 (consecutive) dry days in the next 21 days. +In Section 7.3 the two columns (with and without the dry-spell +condition) were compared, showing that replanting would be needed in 1 +year in 4. + +That is an overall risk, because sometimes a planting opportunity was +early and in other years there was no opportunity until December. If the +data are examined more closely, they show that planting was possible by +6\textsuperscript{th} November in 14 of the years. However, replanting +was needed (i.e. the dry spell condition wasn't satisfied) in 7 of these +years. That is a risk of 1 year in 2 when very early planting was +possible. Perhaps 1\textsuperscript{st} November is too early to +consider planting, unless you are willing to entertain the high risk. + +This question can be turned around. Suppose, in a particular year, there +is a potential planting date on 7\textsuperscript{th} November. What is +the risk from planting then? + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.7aDry spell risk after planting}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.7b Result from 8 Nov and 8 Dec}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.88158in,height=3.39374in]{media/image454.png} & +\includegraphics[width=2.83089in,height=3.41229in]{media/image434.png} \\ +\end{longtable} + +In Fig. 7.7a the \textbf{\emph{Day Range}} is from 8 November for 21 +days. Another change is that 7\textsuperscript{th} November is assumed +to be rainy, i.e.~not in a dry spell. So, the \textbf{\emph{checkbox +``Assume condition not satisfied at the start''}} is ticked. + +The results, in Fig. 7.7b indicate that planting early is quite risky. +Four years have a dry spell of 10 days or more, even in the few years +shown in Fig. 7.7b. If you change the dates in Fig. 7.7a by a month, +then the same analysis shows just a single year now gives a problem. +Interestingly that year was not a problem with the early planting. + +Summarising the two columns\footnote{Plotting exceedance graphs is one + way to examine these data. Our use} shows 32 years, about 1 year in 3, +had a dry spell of more than 9 days with the early planting, compared +with just 11 years, or 1 year in 8, from the later planting date + +What we lose on risk from early planting, we potentially gain by having +a longer season length. In Section 7.4 the season length was + +\textbf{\emph{Length = end\_season -- start\_doy.}} + +The results were shown in Fig. 7.4q and showed that about 1/3 of the +years had a season length of less than 4 months, etc. This figure is +repeated as Fig. 7.7c + +Now that we know the start is on day 100 (8\textsuperscript{th} +November) and hence the length is, instead, found from: + +\textbf{\emph{Length =}} \textbf{\emph{end\_season -- 100}} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.7c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.7d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.14457in,height=2.20183in]{media/image442.png} & +\includegraphics[width=2.86213in,height=2.23999in]{media/image455.png} \\ +\end{longtable} + +Comparing the information in Fig. 7.7c and 7.7d shows that with early +planting, on day 100, there are virtually no years with a season length +of less than 4 months. This is compared to 1/3 of the years overall +(Fig. 7.7c). The variability is also considerably reduced, because the +start is now fixed. The variability is now only because of the +uncertainty of the end. + +With this early planting we could therefore perhaps plan for 120-day +crop. That would have almost no risk in terms of season length. If the +proposed crop needs (say) 600mm of water, we could now find the +proportion of years with at least that total. That uses the +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries}} dialogue, as shown in Fig. 7.7e. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.7e}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.25091in,height=2.70109in]{media/image437.png} & +\includegraphics[width=3.58516in,height=2.72005in]{media/image435.png} \\ +\end{longtable} + +The resulting totals can then be examined in various ways. The +time-series graph, Fig. 7.7f, is one option. This indicates quite a high +risk of less than 600mm. A crop needing only 500mm would have a much +lower risk. There are only a few years with much less than 500mm. + +An alternative, with this early planting, could be to aim for a +short-duration cereal crop, e.g.~90 days and then to try for a +short-season legume, that might be planted as the cereal is close to +maturity. Fig. 7.7d indicates that this would often have had enough time +for fodder, and occasionally would have long enough to mature. + +\section{Reduce risks}\label{reduce-risks} + +In the previous section risks were calculated relative to a proposed +planting date. In this section we examine the seasonal pattern of the +risks. This enables a study of the following types of problem. + +\begin{itemize} +\item + For Moorings the risk of replanting was about one year in three if + planting on 8\textsuperscript{th} November. (Assuming replanting is + needed if there is a dry spell of 10 days or longer in the following + 21 days.) How does this risk depend on the date of planting? Does the + risk ever approach zero? +\item + For the option of a 120-day crop that needs (say) at least 600mm of + water, when would be the best days to plant? +\end{itemize} + +The method is similar for these two -- and for other similar problems. +For simplicity the 120-day total is considered first. There is no +special dialogue, so the analysis proceeds step-by-step. + +First use the \textbf{\emph{Climatic \textgreater{} Prepare +\textgreater{} Transform}} dialogue as shown in Fig. 7.8a. This +transforms the rainfall data into 120-day moving totals. The resulting +data are shown in Fig. 7.8b after reordering the columns. They show that +in the 1922/23 season there was more than 600mm if planting was before +11\textsuperscript{th} January. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8a}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.88645in,height=3.5359in]{media/image461.png} & +\includegraphics[width=2.63197in,height=3.3305in]{media/image463.png} \\ +\end{longtable} + +These data re now summarised over the years, this time to get a value +for each day of the year. This uses the \textbf{\emph{Climatic +\textgreater{} Prepare \textgreater{} Climatic Summaries}} dialogue, +Fig. 7.8c. Use the \textbf{\emph{Within Year}} option in Fig. 7.8c and +complete the dialogue as shown. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.07124in,height=3.28872in]{media/image456.png} & +\includegraphics[width=2.85434in,height=2.92521in]{media/image453.png} \\ +\end{longtable} + +In the Climatic Summaries sub-dialogue use the \textbf{\emph{More}} tab +as shown in Fig. 7.8d. + +This produces a new data frame shown in Fig. 7.8e. + +Repeat the dialogue in Fig. 7.8c, changing the 600mm to 450mm + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8e}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.39581in,height=3.30979in]{media/image457.png} & +\includegraphics[width=3.14726in,height=3.32863in]{media/image466.png} \\ +\end{longtable} + +It now just remains to graph the results. This uses the +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} Line +Plot}} dialogue, Fig. 7.8f. The results are in Fig. 7.8g\footnote{The + default gives the x-axis as numeric. The presentation shown, as dates + within the year, will soon be easy, but currently it needs a little + coding as described in Chapter 8.}. + +In Fig 7.8g the higher (red) line is for 600mm. It shows the minimum +risk corresponds to a planting on about 15\textsuperscript{th} November +and is then about 0.3 (30\%). The lower line, for 450mm, is below 1 year +in 10, for plantings from 1 November to about 10 December. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig.7.8g}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8h}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.54759in,height=3.20014in]{media/image500.png} & +\includegraphics[width=2.57286in,height=3.19533in]{media/image440.png} \\ +\end{longtable} + +One improvement in the presentation would be to smooth the lines given +in Fig. 7.8g. They are quite smooth already, as there were 88 years of +data. With shorter records the need for smoothing becomes greater. + +Moving averages are the simplest way of smoothing. Use +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Transform}} +as shown in Fig. 7.8h. This adds the 2 smoothed columns to the data +frame. + +Note also that the risks are (of course) very high from March onwards. +Hence filter the data on the day of year. The 1\textsuperscript{st} +March is s\_doy = 214. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8i}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8j}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.93154in,height=2.97971in]{media/image465.png} & +\includegraphics[width=2.99269in,height=3.02322in]{media/image452.png} \\ +\end{longtable} + +Fig. 7.8i shows plots of the data together with the smoothed lines. R +and hence R-Instat has many other methods of smoothing data. One +alternative method is shown below in Fig. 7.8q. + +The same ideas can be used to examine the risks of a long dry spell at +different points in the season. We first consider the risk of a dry +spell after a planting occasion, i.e.~after a rain day. This uses the +special \textbf{\emph{Multiple Spells}} tab in the +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Transform}} +dialogue. In Fig. 7.8j the maximum spell length is taken over 21 days, +and that can, of course, be changed as required. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8k}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8l}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.01867in,height=2.38822in]{media/image438.png} & +\includegraphics[width=2.96908in,height=1.91405in]{media/image430.png} \\ +\end{longtable} + +The next step, as before, uses the \textbf{\emph{Climatic \textgreater{} +Prepare \textgreater{} Climatic Summaries}} dialogue, Fig.7.8k to +calculate the proportion of years with a dry-spell \textbf{\emph{longer +than 9 days}} in the 21 days, following planting, i.e.~to correspond to +the default values in the \textbf{\emph{Start of the Rains}} dialogue. + +Once calculated, repeat the operation with 7 days (for a more sensitive +crop) and 12 days, perhaps to correspond to the extra days following a +conservation farming strategy. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8m}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8n}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.58431in,height=3.32186in]{media/image432.png} & +\includegraphics[width=3.18362in,height=3.68719in]{media/image431.png} \\ +\end{longtable} + +The data are shown in Fig. 7.8m where, for variety, we have used +percentages rather than proportions. + +The dry-spell risks are shown in Fig. 7.8n. They show that, in early +November, it is quite advantageous, in terms of risk, to have the +12-days, rather than the 9 days assurance for the dry spells. By early +December all 3 curves have ``flattened out'', hence there is no point in +delaying planting -- the risks are not getting lower. + +The messages would be clearer if the data in Fig. 7.8n are smoothed. +This can be done in the same way as for the rainfall totals, shown +earlier in Fig. 7.8h. + +Many crops are sensitive to a long dry spell round flowering. The +calculation is slightly different to the one above, which assumed rain +for planting on day zero. This time we need the unconditional risks, +i.e.~a dry spell might have started before the flowering period and have +continued. + +Use the \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} +Transform}} dialogue again, with the \textbf{\emph{Spell}} tab, as shown +in Fig. 7.8o. Then, with the same dialogue, use the +\textbf{\emph{Moving}} tab, Fig. 7.8p, to get the maximum over 20 days. +This assumes that the flowering period is of 20 day's duration. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8o Ordinary spell lengths}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Transform}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8pMaximum over 20 days}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Transform +(again!)}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.02575in,height=2.94052in]{media/image428. png} +& +\includegraphics[width=2.63061in,height=2.99829in]{media/image433. png} \\ +\end{longtable} + +The next steps are just as before, i.e.~in Fig. 7.8k to Fig. 7.8n. They +use the \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} +Climatic Summaries}} dialogue to get the percentage of years each day, +with a longer dry spell than 7 or 9 days. The resulting percentages are +then plotted, as before, using the \textbf{\emph{Describe \textgreater{} +Specific \textgreater{} Line Plot}} dialogue. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8q Adding a loess smoother}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8r}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.81607in,height=3.24676in]{media/image427.png} & +\includegraphics[width=2.97378in,height=3.62442in]{media/image429.png} \\ +\end{longtable} + +This time, for illustration, the smoothing has been done ``on the fly'', +as additional layers in the plot. Local smoothing has been used with +loess, as explained in more detail in Chapter 8. + +The percentages are (as would be expected\footnote{They are higher + because they include years where a dry spell may have started before + the given dates and continued into the flowering period. The earlier + calculation (following planting) assumed the previous day had rain -- + as it was a potential planting date.)}) slightly higher in Fig. 7.8r, +compared with Fig. 7.8n. They show a minimum risk if the start of the +flowering period is towards the end of January. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4028}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5833}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8s}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8t Plot the cumulative data}} + +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} Line +Plot}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image424.png}\{w idth=``2.312619203849519in'' +heig ht=``3.1737740594925636in''\} & +\includegraphics[width=3.28926in,height=2.83853in]{media/ima ge436.png} \\ +\end{longtable} + +The final example examines the cumulative rainfall distribution each +year, or season. This starts, again, with the \textbf{\emph{Climatic +\textgreater{} Prepare \textgreater{} Transform}} dialogue, this time +using the \textbf{\emph{Cumulative}} button, Fig. 7.8s. + +This adds a column, called cumsum, Fig. 7.8s, giving the accumulated +rainfall each year. + +Now use the \textbf{\emph{Describe \textgreater{} Specific +\textgreater{} Line Plot}} dialogue to graph the cumulative data against +the day of the year, Fig. 7.8t. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8u Facet sub-dialogue -- by year}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8v Filter to choose the first 20 complete years}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.5613in,height=2.62596in]{media/image261.png} & +\includegraphics[width=3.48061in,height=2.59522in]{media/image278.png} \\ +\end{longtable} + +In Fig 7.8t, use \textbf{\emph{Plot Options}} to put the different years +each in their own graph (facet), Fig. 7.8u. Then use the +\textbf{\emph{Data Options}} button, which is on each dialogue, and is +another way to get to the filtering system. Choose the first 20 years of +data, Fig. 7.8u as 89 years are too many graphs to show together. + +The resulting graph is in Fig. 7.8w. Each graph starts at zero and rises +to the annual (seasonal) total. So, for example 1938-39 was a year with +over 1000mm, while 1933-34 had only about half that total. + +Vertical lines, in Fig. 7.8w, correspond to high rainfall and horizontal +lines to dry spells. The 1932-33 season looked like a ``bumpy year''. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8w Cumulative rainfall for 20 years at Moorings}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.00661in,height=2.94408in]{media/image258.png} \\ +\end{longtable} + +If you remove the facets from the graphs specified in Fig. 7.8t and +instead put the year factor in the main dialogue in \textbf{\emph{Factor +(Optional)}}, then the resulting graph is in Fig. 7.8x. This type of +display can be useful for monitoring, as you can super-impose the +current year. An example is shown below. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8x Single graph of cumulative rainfall (mm).}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8y}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=1.863in,height=2.06736in]{media/image259.png} & +\includegraphics[width=4.23175in,height=2.08071in]{media/image270.png} \\ +\end{longtable} + +These graphs can be taken further. As an example, in Fig. 7.8y the green +lines indicate the start of the rains each year, while the red lines +show the date of the end of the season. The early and late starts, and +ends, are therefore indicated. A long season is one where the lines are +far apart, and so on. We explain, in Chapter 8, how these features can +be added. + +Boxplots can alternatively be used to display the cumulative data. A +challenge is to plot them at the end of each 10-day period. This is the +first example of the use of the \textbf{\emph{dekads}} in this guide, so +return to the \textbf{\emph{Climatic \textgreater{} Dates \textgreater{} +Use Date}} dialogue and complete it as shown in Fig. 7.8z. The year is +shifted, so the dekads start in August. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8z}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8aa}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.38318in,height=2.13536in]{media/image255.png} & +\includegraphics[width=3.59068in,height=2.35815in]{media/image256.png} \\ +\end{longtable} + +First get a logical column, which is TRUE on the last day of each dekad, +and FALSE otherwise\footnote{If we move the dekad column ``down one + row'', , that's the \textbf{\emph{lead}} function (lag is the + opposite) then these are the rows when the two columns are different, + (i.e.~!=). So, with the \textbf{\emph{dekad\_abbr}} variable the + function: \textbf{\emph{dekad\_abbr != lead(dekad\_abbr)}} is used. We + need to specify the R package for the \textbf{\emph{lead}} function, + so give the command as \textbf{\emph{dekad\_abbr != + dplyr::lead(dekad\_abbr)}}}. This uses the calculator, +\textbf{\emph{Prepare \textgreater{} Column: Calculate \textgreater{} +Calculations.}} Complete it as shown in Fig. 7.8aa. + +Now \textbf{\emph{filter}} so just the rows when the +\textbf{\emph{dek\_diff}} variable is TRUE are used. The data are shown +in Fig. 7.8 ab. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8ab Filtered for the last day of each dekad}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8ac}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.21329in,height=2.69555in]{media/image292.png} & +\includegraphics[width=2.82365in,height=2.6776in]{media/image257.png} \\ +\end{longtable} + +Now use \textbf{\emph{Describe \textgreater{} Specific \textgreater{} +Boxplot}}, Fig. 7.8ac. The results are in Fig. 7.8ad\footnote{In Fig. + 7.8ad we have also filtered to omit the very dry months of the year.}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8ad Boxplots showing the cumulative rainfall at +Moorings}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8ae A new year}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=4.33254in,height=2.37555in]{media/image265.png} & +\includegraphics[width=1.69586in,height=2.44548in]{media/image245.png} \\ +\end{longtable} + +Fig. 7.8ad shows the progression of the cumulative rainfall for the +season towards the final totals. These had a median of 800mm, with a +minimum less than 500mm and a maximum of well over 1000mm. + +One use of this type of plot is to monitor a new year. As an example, +Fig. 7.8ae provides data, where the total has now risen to 340mm by the +end of February. This information can now be super-imposed on the +boxplots, as shown in Fig. 7.8ae with the blue points\footnote{This adds + two \textbf{\emph{layers}} to the boxplot with the data from the + current year. One layer is for the line and the other for the points. + This is explained n=in more detail in Chapter 8.}. This example shows +a great cause for concern. The totals are very low, compared to the +earlier 88 years of data. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 7.8ae Adding the current year to the boxplots}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=4.86214in,height=2.72681in]{media/image250.png} \\ +\end{longtable} + +\bookmarksetup{startatroot} + +\chapter{Efficient use of R-Instat and +R}\label{efficient-use-of-r-instat-and-r} + +\section{Introduction}\label{introduction-6} + +In this guide Chapters 2 and 3 largely made use of the general +facilities in R-Instat, shown in Fig. 8.1a. They were dialogues from the +File, Prepare and Describe menus. Chapters 4 to 7 used the climatic menu +shown in Fig. 8.1b + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 8.1a The R-Instat menus}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 8.1b The Climatic menu}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.07009in,height=1.69384in]{media/image237.png} & +\includegraphics[width=2.94928in,height=3.43809in]{media/image230.png} \\ +\end{longtable} + +The Climatic menu, Fig. 8.1b, mirrors the general menus, Fig. 8.1a in +that parts of this menu correspond to the facilities in the File, +Prepare, Describe and Model menus. Thus you start by getting the File +with the data. Then there is usually a Prepare stage, where the data are +organised and checked, ready for analysis. This stage often includes a +``reshaping'' of the data, where daily records are summarised to a +monthly or yearly basis. + +Then the initial analyses are usually descriptive, so use the Describe +section of the Climatic menu or the Describe menu itself. The materials +in Chapters 4 to 7 were all devoted to descriptive analyses. + +When descriptive methods are not enough there is the Model menu to fit +and examine statistical models. + +For users who are starting their climatic analyses with R-Instat we +distinguish between four or five ``levels''. These different ``levels'' +are discussed in this chapter. + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + If your analyses are ``standard'', then you may find all you need is + in the climatic menu. That is the idea of the special menu. +\item + If you need more, then the general R-Instat menus may be used. The + Prepare menu is sometimes needed for more of the initial data + manipulation than is in the climatic menu. The powerful ggplot2 + graphics system is also available through the Describe menu. +\item + R-Instat includes some ``halfway'' dialogues, that we discuss in + Section 8.3. These are dialogues where you have essentially to write a + single R command. That's quite easy and can be a stepping-stone to + using R directly. +\item + Sometimes a dialogue does not do quite what is needed for an analysis. + The \textbf{\emph{To Script}} button, is on each dialogue and copies + the relevant R command to a special script window. You can then + ``tweak'' the resulting command(s) to produce the appropriate + analysis. This is described in Section 8.4. +\item + Finally, you may be ready to use R ``properly''! This is either + because the analysis you need is not available in R-Instat, or because + the click and point method is becoming tedious and you would like to + work more efficiently. One option is then still to start in R-Instat. + Then produce the log file, which has a record of all the commands you + have used. This may be transferred and should run just the same in + RStudio. Then you can continue the analyses using R directly. This + process is described in Section 8.5. +\end{enumerate} + +Most of the ideas in this chapter and also discussed in more detail in +the R-Instat guide called ``Reading, Tweaking and Using R Commands''. + +\hl{Solving problems rather than learning to use R-Instat.} + +Possibly discuss loops for successive analysis of data for multiple +stations + +\section{Using the ``ordinary'' +R-Instat}\label{using-the-ordinary-r-instat} + +\hl{Could show smoothing with loess and splines}, though a bit of that +in Chapter 7. Could refer back + +\hl{Mention export of graphs for an editor: "I\textquotesingle d suggest +exporting the figure from R as a vector graphic file (.svg) then adding +your labels in a vector graphic software. I use \textbf{Inkscape} +\href{https://inkscape.org/about/}{\ul{software}} because it can be +downloaded for free and its fairly intuitive to learn."} + +\hl{Also discuss data sheet and data book -- though also in Chapter 3.} + +\hl{And the metadata windows, including changing names and also altering +precision.} + +\hl{Could perhaps be a good place to discuss the Tools \textgreater{} +Options dialogue -- though maybe that deserves its own section?} + +On tasks in this section include summary of hourly to daily data +probably with the example from the openair package? + +\section{The halfway dialogues}\label{the-halfway-dialogues} + +\hl{Mention the risks that using these commands brings. Can make +mistakes. Good to make some mistakes intentionally so that you are ready +for them.} + +\hl{Use an example of infilling data and the calculate dialogue - +transform. Could use infilling of temperatures to work towards a +complete record.Could install chillR partly because they have an +interesting data set where they have introduced missing values. Also +because their ideas on infilling will be generally useful for R-Instat +in the future.} + +\hl{Then also the model and use model menu. This could include modelling +extremes.} + +\section{The script window}\label{the-script-window} + +\hl{Add an R package:} + +\hl{install.packages(`packagename')} + +\hl{Tried Install.packages(``finalfit'') -- which gives an error? Wrong +quotes! Use +Install.packages(}\textbf{\emph{"}}\hl{finalfit}\textbf{\emph{"}}\hl{)} + +\hl{To use data without needing to give the full name include +attach(``dataframename'')} + +library() lists all available packages + +library(dplyr) makes the package available, so can give the commands +without dplyr:: at the start. + +Move the example here from Chapter 3 of adding a skew boxplot. + +\section{The log window and R}\label{the-log-window-and-r} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{1.0000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Code to add date to an x-variable}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\# Code generated by the dialog, Line Plot + +Moorings\_by\_s\_doy \textless- +data\_book\$get\_data\_frame(data\_name="Moorings\_by\_s\_doy", +stack\_data=TRUE, id.vars="s\_doy", +measure.vars=c("prop120.lt.600","prop120.lt.450")) + +\hl{Moorings\_by\_s\_doy \textless- Moorings\_by\_s\_doy +\%\textgreater\% mutate(s\_doy=as.Date(s\_doy, origin = "2015-07-31"))} + +last\_graph \textless- ggplot2::ggplot(data=Moorings\_by\_s\_doy, +mapping=ggplot2::aes(x=s\_doy, y=value, colour=variable)) + +ggplot2::geom\_line() + theme\_grey() + +ggplot2::theme(axis.text.x=ggplot2::element\_text()) + +ggplot2::scale\_y\_continuous(limits=c(0, +1))\hl{+scale\_x\_date(date\_labels = "\%d \%b", date\_breaks="1 +month")} + +data\_book\$add\_graph(graph\_name="last\_graph", graph=last\_graph, +data\_name="Moorings\_by\_s\_doy") + +data\_book\$get\_graphs(data\_name="Moorings\_by\_s\_doy", +graph\_name="last\_graph") + +rm(list=c("last\_graph", "Moorings\_by\_s\_doy")) \\ +\end{longtable} + +\bookmarksetup{startatroot} + +\chapter{Gridded Data}\label{gridded-data} + +\section{Introduction}\label{introduction-7} + +There are various sources of gridded data for climatic elements. Those +considered here are from the European Organisation for the Exploitation +of Meteorological Satellites, Satellite Application Facility on Climate +Monitoring (EUMETSAT CM SAF), the Copernicus Climate Change Service +(C3S) Climate Data Store and the International Research Institute for +Climate and Society (IRI) Data Store. + +All data are freely available. You need to register to access data from +CM SAF, and also for the C3S Climate Data Store. The IRI Data Store does +not require registration. The CM SAF data considered here are from +stationary satellites and are available for all of Europe and Africa and +possibly more, e.g.~Middle East and Caribbean. Sunshine and radiation +data are illustrated here. They are available daily (some hourly) on a +grid of about 4km and are from 1983. Other elements, e.g.~ground +temperature are available hourly, from the early 1990s. They will later +become available from the 1980s. + +We consider the ERA5 reanalysis data from the C3S Climate Data Store. +ERA5 is global, from 1979 (soon to be 1950) with a large number of +elements available hourly on a grid of 0.25 by 0.25 degrees (about +30km). It is illustrated with precipitation (hourly) and with 2m +temperature (used to derive daily Tmax and Tmin). + +The IRI Data Store is a repository of climate data from a wide variety +of sources. We illustrate the IRI Data Store by accessing daily +precipitation estimates from CHIRPS and ENSO and sea-surface +temperatures, that are commonly used for seasonal forecasting. + +There are many possible uses and applications of these data. \hl{To be +continued -- with examples of what can be done and is being done.} + +\section{Importing NetCDF files}\label{importing-netcdf-files} + +Show how to use the dialog first without changing options but still look +at details to check what is being imported. + +Then show the options for sub-areas, an individual station, or for +multiple stations. Can use Rwanda station locations and CHIRPS data from +IRI section. + +\section{EUMETSAT CM SAF}\label{eumetsat-cm-saf} + +The CM SAF website is shown in Fig. 9.2a. You are invited to sign-in or +register, though you are welcome to explore what is available without +this. You need to register to download any data. You are then able to +use these data freely. EUMETSAT would very much welcome any feedback on +how the data have been used, particularly if, for example, you have +compared your station data with their data. They may sometimes be +prepared to assist you with using the data. You can contact EUMETSAT +through their User Help Desk +\href{https://www.cmsaf.eu/EN/Service/UHD/UHD_node.html}{\ul{https://www.cmsaf.eu/EN/Service/UHD/UHD\_node.html}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.2a}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.26806in,height=2.93819in]{media/image234.png} \\ +\end{longtable} + +Choose Surface Radiation products from the Climate Data Records menu in +Fig. 9.2a. Choose daily sunshine duration, SDU, Fig. 9.2b. + +From Fig. 9.2c we see the data are available from 1 January 1983 to the +end of December 2017 (when this guide was written). There are other +products from EUMETSAT CM SAF if more recent data are required, but they +have not been through the homogenisation and quality control checks. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig 9.2b}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.2c}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.13347in,height=2.43495in]{media/image235.png} & +\includegraphics[width=2.91179in,height=2.72179in]{media/image220.png} \\ +\end{longtable} + +Also indicated in Fig. 9.2c is that there is documentation on each +product. Consider downloading these guides if you decide to use the data +as they are very detailed and informative. + +On the same screen as Fig. 9.2c you see an \textbf{\emph{Add to Order +Cart}} invitation. Ignore this for now, unless you want a huge file, +with data from about half the globe. + +Instead, scroll further down and click on the button that says +\textbf{\emph{Change Projection / spatial resolution / domain}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.2d}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.2e}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.19384in,height=2.02141in]{media/image242.png} & +\includegraphics[width=3.94052in,height=1.55028in]{media/image227.png} \\ +\end{longtable} + +If you are following this as an exercise, then change the coordinates in +Fig. 9.2e. + +Click, in Fig. 9.2e to proceed to the time range selection. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.2f}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.2g}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.12627in,height=2.61119in]{media/image244.png} & +\includegraphics[width=2.99713in,height=1.37602in]{media/image247.png} \\ +\end{longtable} + +In the following screen, scroll down to confirm that the sub-domain, +part of Rwanda, has been included, Fig. 9.2f. Then press Add to Order +Cart, Fig. 9.2g. + +You return to the screen in Fig. 9.2h. It is disconcerting that in Fig. +9.2h it appears you are about to order a file of over 200 gigabytes, but +it is the size ignoring the sub-domain\footnote{This might have been + corrected by the time you read this section.}. Keep your nerve and +place the order, Fig. 9.2h. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig.9.2h}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.15232in,height=2.70945in]{media/image253.png} \\ +\end{longtable} + +You receive a confirmatory e-mail that the order has been placed on the +EUMETSAT server. Shortly afterwards there is confirmation that the data +have been extracted and are waiting to be downloaded, Fig. 9.2i + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.2i}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.10193in,height=2.96714in]{media/image249.png} \\ +\end{longtable} + +Follow the instructions in your equivalent of the message in Fig. 9.2i +to download the file. It is now, for the first time that you are made +aware of the file size, 341 Mbytes for this example. + +This downloads a single tar file, containing 12 thousand individual +NetCDF files, with one file for each day. + +This is continued, in Section 9.5, through the CM SAF toolbox and in +Section \hl{xxx} using R-Instat. + +\section{C3S Climate Data Store}\label{c3s-climate-data-store} + +If you are not online, then the first part of this section is again for +reading only. + +The website is \url{https://cds.climate.copernicus.eu/}. This takes you +to the screen partly shown in Fig. 9.3a. You are invited to login or +register your account. So, do this. + +Once logged in you return to the screen in Fig. 9.3a. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3a}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.12478in,height=2.76178in]{media/image254.png} \\ +\end{longtable} + +Then click on Datasets in Fig. 9.3a to give the screen starting in Fig. +9.3b. There are many different datasets available. In the search bar +type ``ERA5 hourly'' and from the results select, ``ERA5 hourly data on +single levels''. + +Click on this dataset to get further information, see Fig. 9.3c. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3b}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3c}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.02657in,height=1.58102in]{media/image252.png} & +\includegraphics[width=3.04488in,height=2.00404in]{media/image251.png} \\ +\end{longtable} + +The data are currently from 1979 (soon to be from 1950). They are +available for many elements including precipitation, temperature, +evaporation, radiation and wind speed and direction. + +They are hourly data and at a 0.25 by 0.25-degree (about 25km) +resolution. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3d}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3e}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.12868in,height=2.06121in]{media/image248.png} & +\includegraphics[width=2.86626in,height=2.20566in]{media/image243.png} \\ +\end{longtable} + +On your first visit to the site, continue, and click on +\textbf{\emph{Download data}} in Fig. 9.3c. You then choose one or more +elements, Fig. 9.3d and decide on the years, months, days and hours to +include. Finally, select the sub-region to extract in the Geographical +area section, Fig. 9.3f. Once the items in Fig. 9.3d, Fig. 9.3e and Fig. +9.3f are complete you can click \textbf{\emph{Submit Form}} to start the +request. + +The running may take minutes (sometimes many) to complete. It also +sometimes fails. You can view the current status of your requests by +clicking \textbf{\emph{Your requests}} from the menu bar shown in Fig. +9.3a. Occasionally there is a single error 500, in which case just run +again. The other common error is that you have asked for too much data. +If you are requesting a complete time series i.e.~for all hours, days, +and months, then the current limit appears to be approximately 5 years. +This limit seems to be the same, irrespective of the area. Hence, for 30 +years, make 6 separate requests, changing the years for each run. You do +not need to wait for a request to complete before starting another one. +Go to \textbf{\emph{Your requests}} to see the status of each and +download the data once complete. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3g Generate a toolbox request}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3h Names for each element}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.01201in,height=2.82714in]{media/image246.png} & +\includegraphics[width=3.09386in,height=1.70554in]{media/image241.png} \\ +\end{longtable} + +An alternative way to request data is through the Toolbox, shown in the +menu bar of the homepage in Fig. 9.3a. Previously, it was not possible +to select a sub-region through the interface described above, hence it +was necessary to construct a Python script to run the Toolbox in order +to do this. However, now that sub-region extraction is possible in the +interface, we suggest it is sufficient to use the interface if your main +interest is to download data for use in another software e.g.~R or +R-Instat. + +An example Toolbox script to download hourly 2-metre temperature data +for sub-region covering in Rwanda for 5 years in shown Fig. 9.3i. The +Toolbox also includes functionality for processing, analysing and +displaying data, however this is not covered here as we will demonstrate +importing ERA5 data into R-Instat. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{1.0000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3i Sample toolbox code}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\textbf{import cdstoolbox as ct} + +\textbf{@ct.application(title=\textquotesingle Retrieve +Data\textquotesingle)} + +\textbf{@ct.output.dataarray()} + +\textbf{def retrieve\_sample\_data():} + +\textbf{"""} + +\textbf{Application main steps:} + +\textbf{- retrieve 2m temperature of ERA5 from CDS Catalogue} + +\textbf{- specify the grid - year(s) - month(s) - day(s) - hour(s)} + +\textbf{- area is optional give N/W/S/E corners} + +\textbf{- recommended for local analysis} + +\textbf{- ask for netcdf format} + +\textbf{"""} + +\textbf{data = ct.catalogue.retrieve(} + +\textbf{\textquotesingle reanalysis-era5-single-levels\textquotesingle,} + +\textbf{\{} + +\textbf{\textquotesingle variable\textquotesingle: +\textquotesingle2m\_temperature\textquotesingle,} + +\textbf{\textquotesingle grid\textquotesingle: +{[}\textquotesingle0.25\textquotesingle, +\textquotesingle0.25\textquotesingle{]},} + +\textbf{\textquotesingle product\_type\textquotesingle: +\textquotesingle reanalysis\textquotesingle,} + +\textbf{\textquotesingle year\textquotesingle: {[}} + +\textbf{\textquotesingle1981\textquotesingle,`1982',`1983',`1984',`1985'} + +\textbf{{]},} + +\textbf{\textquotesingle month\textquotesingle: {[}} + +\textbf{\textquotesingle01\textquotesingle, +\textquotesingle02\textquotesingle, \textquotesingle03\textquotesingle, +\textquotesingle04\textquotesingle, \textquotesingle05\textquotesingle, +\textquotesingle06\textquotesingle,\textquotesingle07\textquotesingle, +\textquotesingle08\textquotesingle, \textquotesingle09\textquotesingle, +\textquotesingle10\textquotesingle, \textquotesingle11\textquotesingle, +\textquotesingle12\textquotesingle,} + +\textbf{{]},} + +\textbf{\textquotesingle day\textquotesingle: {[}} + +\textbf{\textquotesingle01\textquotesingle, +\textquotesingle02\textquotesingle, \textquotesingle03\textquotesingle, +\textquotesingle04\textquotesingle, \textquotesingle05\textquotesingle, +\textquotesingle06\textquotesingle,\textquotesingle07\textquotesingle, +\textquotesingle08\textquotesingle, \textquotesingle09\textquotesingle, +\textquotesingle10\textquotesingle, \textquotesingle11\textquotesingle, +\textquotesingle12\textquotesingle,} + +\textbf{\textquotesingle13\textquotesingle, +\textquotesingle14\textquotesingle, \textquotesingle15\textquotesingle, +\textquotesingle16\textquotesingle, \textquotesingle17\textquotesingle, +\textquotesingle18\textquotesingle,\textquotesingle19\textquotesingle, +\textquotesingle20\textquotesingle, \textquotesingle21\textquotesingle, +\textquotesingle22\textquotesingle, \textquotesingle23\textquotesingle, +\textquotesingle24\textquotesingle,} + +\textbf{\textquotesingle25\textquotesingle, +\textquotesingle26\textquotesingle, \textquotesingle27\textquotesingle, +\textquotesingle28\textquotesingle, \textquotesingle29\textquotesingle, +\textquotesingle30\textquotesingle,\textquotesingle31\textquotesingle{}} + +\textbf{{]},} + +\textbf{\textquotesingle time\textquotesingle: {[}} + +\textbf{\textquotesingle00:00\textquotesingle,\textquotesingle01:00\textquotesingle,\textquotesingle02:00\textquotesingle,\textquotesingle03:00\textquotesingle,\textquotesingle04:00\textquotesingle,\textquotesingle05:00\textquotesingle,} + +\textbf{\textquotesingle06:00\textquotesingle,\textquotesingle07:00\textquotesingle,\textquotesingle08:00\textquotesingle,\textquotesingle09:00\textquotesingle,\textquotesingle10:00\textquotesingle,\textquotesingle11:00\textquotesingle,} + +\textbf{\textquotesingle12:00\textquotesingle,\textquotesingle13:00\textquotesingle,\textquotesingle14:00\textquotesingle,\textquotesingle15:00\textquotesingle,\textquotesingle16:00\textquotesingle,\textquotesingle17:00\textquotesingle,} + +\textbf{\textquotesingle18:00\textquotesingle,\textquotesingle19:00\textquotesingle,\textquotesingle20:00\textquotesingle,\textquotesingle21:00\textquotesingle,\textquotesingle22:00\textquotesingle,\textquotesingle23:00\textquotesingle{}} + +\textbf{{]},} + +\textbf{\textquotesingle area\textquotesingle: +{[}\textquotesingle-1.5/30/-2.0/30.54\textquotesingle{]},} + +\textbf{\textquotesingle format\textquotesingle{} : +{[}\textquotesingle netcdf\textquotesingle{]}} + +\textbf{\})} + +\textbf{return data} \\ +\end{longtable} + +The second stage is to read the resulting data into R-Instat. For those +who were not online, the six files have also been renamed and copied +into the R-Instat library. + +\textbf{\emph{Go into R-Instat}} and use \textbf{\emph{File +\textgreater{} Open and Tidy NetCDF File}} Fig. 9.3j. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6800}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3086}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3j Loading the data for 1981-5}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3k Six files in R-Instat}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.20024in,height=1.90783in]{media/image191.png} & +\includegraphics[width=2.92048in,height=2.9872in]{media/image197.png} \\ +\end{longtable} + +In Fig. 9.3j, if you downloaded your own data, then choose +\textbf{\emph{Browse}}, otherwise choose \textbf{\emph{From Library}} +and \textbf{\emph{use the file called cds.Rwanda\_1981\_5.nc}}. + +Then recall the last dialogue and include the other five files, up to +cds.Rwanda\_2005\_10. The resulting data are shown in Fig. 9.3k. There +are about 394,416 rows of data in each file (i.e.~roughly 9 * 24 * 365 * +5) + +The next step is to append the files to give the 30-year record. Use +\textbf{\emph{Climatic \textgreater Tidy and Examine \textgreater{} +Append}}, Fig. 9.3l. In Fig. 9.3l, include all 6 data frame, then the ID +column isn't needed and the resulting data frame is named better than +Append1. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6743}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3143}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3l Appending the 6 data frames}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3m Temperatures into centigrade}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.08486in,height=2.35882in]{media/image203.png} & +\includegraphics[width=2.72111in,height=3.4375in]{media/image196.png} \\ +\end{longtable} + +The data column in Fig. 9.3k, called tas, is in degrees Kelvin. Use +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Transform}} +to change them into centigrade for comparison with the station data, +Fig. 9.3m. + +ECMWF provides the time variable always in GMT (Greenwich Mean Time). +Rwanda is 2 hours ahead, so either, or both, the time variables in Fig. +9.3k need to be moved forward by 2 hours. To make this change the data +should first be in ``station'' order. Hence first +\textbf{\emph{Right-Click}} and choose \textbf{\emph{Sort}} (or use +Prepare \textgreater{} Data Frame \textgreater{} Sort) to produce the +dialogue in Fig. 9.3n. + +Now use \textbf{\emph{Prepare \textgreater{} Column: Calculate +\textgreater{} Calculations}} as shown in Fig. 9.3o. In the calculator +the \textbf{\emph{Transform}} keyboard includes the \textbf{\emph{lead}} +function. The function, from the dplyr package is: + +\textbf{\emph{dplyr::lead(time\_full,2)}}, to move to Rwanda time. +Pressing the \textbf{\emph{Try}} button in Fig. 9.3o shows the first +value is now 2am GMT\footnote{The resulting column is slightly + incorrect, because of the multiple stations. The last 2 rows (hours) + at each station should be missing, but they continue with the values + from the next station. This will have a negligible effect on + subsequent calculations. If you wish to be strictly correct, then + filter for these last 2 days and set the values as missing.}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6800}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3086}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3n}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3o}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.11332in,height=3.02666in]{media/image199.png} & +\includegraphics[width=2.91462in,height=3.13438in]{media/image198.png} \\ +\end{longtable} + +Now use \textbf{\emph{Climatic \textgreater{} Dates \textgreater{} Make +Date}} to make a new Date column from the Rwanda hourly column, Fig. +9.3p. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3p}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3q}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.93324in,height=2.8244in]{media/image200.png} & +\includegraphics[width=3.16845in,height=2.59489in]{media/image195.png} \\ +\end{longtable} + +Finally generate Tmax and Tmin, on a daily basis, from the hourly +values, ready to use, or to compare with station data. First +\textbf{\emph{right-click}} and make the \textbf{\emph{lon and lat +columns into factors}}. The hourly data are now roughly as in Fig. 9.3q + +Complete the \textbf{\emph{Prepare \textgreater{} Column: Reshape +\textgreater{} Column Summaries}} dialogue as shown in Fig. 9.3r. As +these are temperatures the daily maximum and minimum are calculated. The +resulting worksheet, Fig. 9.3s, has a more reasonable 100,000 rows of +data at the 9 gridpoints. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3r}} + +\textbf{\emph{Prepare \textgreater{} Column: Reshape \textgreater{} +Column Summaries}} + +\textbf{\emph{(Make max and min the summaries)}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.3s Resulting daily data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.14829in,height=3.01165in]{media/image184 .png} +& +\includegraphics[width=2.91954in,height=2.77761in]{media/image186.pn g} \\ +\end{longtable} + +\section{The IRI Data Store}\label{the-iri-data-store} + +A third source of gridded data considered here is the IRI Data Library. +IRI is the International Research Institute for Climate and Society +based in Colombia University, USA. The website for their data library is +\href{http://iridl.ldeo.columbia.edu/}{\ul{http://iridl.ldeo.columbia.edu/}} +, Fig. 9.4a. The IRI Data Store is a large repository of climate data +from a wide variety of sources. In many cases, the IRI Data Store is not +the only, or primary, source of the data, however the IRI Data Store +provides a simple consistent way of freely downloading from a large set +of sources, and crucially allows for selecting sub-regions. + +As well as downloading from the website, R-Instat includes a dialog to +directly download and import some of the common data from the IRI Data +Store. We demonstrate both methods here, using the R-Instat dialog to +download CHIRPS daily rainfall estimates and the IRI Data Store website +to download information on ENSO and sea surface temperatures. + +\subsection{Downloading directly from +R-Instat}\label{downloading-directly-from-r-instat} + +Climate Hazards Group InfraRed Precipitation with Station data (CHIRPS), +produced by Climate Hazards Center UC Santa Barbara, USA, is a +near-global gridded rainfall data set, available from 1981 to +near-present with a spatial resolution of 0.05°. It is constructed by +combining satellite imagery and in-situ station data, and is available +on a daily, dekad and monthly basis. It's website is here +\href{https://www.chc.ucsb.edu/data/chirps}{\ul{https://www.chc.ucsb.edu/data/chirps}} +but the data is more easily available to download and subset from the +IRI Data Store. It is an example of one of the datasets available to +download directly from R-Instat. + +In R-Instat go to \textbf{\emph{Climatic \textgreater{} File +\textgreater{} Import from IRI Data Library}}, fig xxx. First select +``UCSB CHIRPS'' as the \textbf{\emph{Source}}. We will download the +daily data with the highest resolution available, hence choose ``Daily +Precipitation 0.05 degree'' as the \textbf{\emph{Data}}, fig xxx. Source +shows a limited set of data sources available in the IRI Data Store +which we think will be most commonly used by R-Instat users. If there is +a dataset from the IRI Data Store that you commonly use and think we +should add, please let us know and we can consider adding it to the +dialog. + +The next two sections of the dialog allow for choosing a subset of time +or location. By default, ``Entire Range'' is selected for the data +range. For CHIRPS, this means 1981 to near-present. We will use this +option, but if you want a shorter time period choose ``Custom Range'' +and select the ``From'' and ``To'' dates. The Location Range allows you +to choose an area defined by longitude and latitude limits, or a single +point, which will extract the nearest grid point to the location you +provide. Let's first choose a single point for Kigali, Rwanda at +longitude 30.1 and latitude -1.95, fig xxx. + +The dialog will connect to the IRI Data Library and download the +requested data to your machine as a NetCDF file (.nc), a common format +for gridded data (CM SAF and C3S Climate Data Store data are also +provided in this format). Click \textbf{\emph{Browse}} to choose where +the download data will be saved to or accept the default of your +Documents folder. Choose an appropriate name for the new data frame. +Now, click \textbf{\emph{Ok}} to download and import the data into +R-Instat. It may take some time for the request to be processed (up to +30 minutes), particularly for requests that are for a long time period +since data are usually stored in separate files for each time point. +However, this does not mean the download will be a large file and the +time can vary depending on how busy the IRI Data Library servers are. +While waiting, you will see the R-Instat waiting dialog and the download +progress bar. Do not worry if the progress bar does not move forward, +this just means the request is still being processed. Once the request +has been processed, the download will usually be small and take very +little time. For example, this request should result in a download file +of size \textasciitilde0.1MB. + +After finishing you will see the data imported into R-Instat, fig xxx. +The NetCDF file has been downloaded to the location chosen on the dialog +(Documents by default) and the file has been imported into a data frame +in R-Instat. The data frame has five columns. X and Y are the location +and this should be constant since we requested a single point. Notice +that the value in Y is not exactly what we request. It is -1.97 and we +request -1.95. This is because the closed grid point in the CHIRPS data +grid to the provided location is selected. .T is time as a number and +T\_date is a more useful column that is created by R-Instat when +importing as a Date column. prcp is precipitation. We can confirm this +by looking at the column metadata: \textbf{\emph{View \textgreater{} +Column Metadata}}. Scroll to the end to see the ``standard\_name'' and +``units'' columns which confirm what each column represents and its +units, fig xxx. Click \textbf{\emph{View \textgreater{} Column +Metadata}} again to close the metadata. We can see that each row in the +data represents a single day, starting on 1981-01-01. Use +\textbf{\emph{Describe \textgreater{} One Variable \textgreater{} +Summaries}}, and select all columns to see a summary of the data. The +output is shown in fig xxx. We see that X and Y are constant, as +expected. .T is numeric and not that useful, but T\_date show the data +ranges from 1981-01-01 to 2020-08-31 (as of October 2020, usually 1 or 2 +months behind the current date). prcp shows a sensible set of summaries +for daily rainfall values. This is useful to do to confirm that the +request is as you expected. For example, if X and Y are not constant but +you wanted just a single point, then you may not have done the request +correctly. + +Notice that the data file is also stored on your machine in the folder +you chose. For example, in Documents my file is called +ucsb\_chirps7f14482329.nc. If you need to import this data again, you +can now use the file directly, without requesting it again from the IRI +Data Store. See section xxx on how to import NetCDF files. + +This data is useful for comparison with a single station in Kigali. We +often have data from multiple stations and would wish to extract gridded +data at each of the station locations. One way to do this would be to +make separate requests for each station location using the Import from +IRI Data Library multiple times. However, this becomes time consuming +for many stations, particularly if the processing time is slow. Another +option is to do a single request and download data for an area that +covers all the station locations and then afterwards extract the data +for the required locations. + +So let's to this by download the same data for an area that covers +Rwanda instead of a single point. This will be a larger download file +\textasciitilde280MB but should not take much longer to process. If you +have an internet connection able to download \textasciitilde300MB of +data then try the next steps below. If not, then this is just for +reading. + +Go back to the \textbf{\emph{Import from IRI Data Library}} dialog. The +\textbf{\emph{Source}}, \textbf{\emph{Data}} and \textbf{\emph{Date +Range}} options remain the same. Change the \textbf{\emph{Location +Range}} option from ``Point'' to ``Area'' and enter the values: +longitude: min 28.5, max 30.5, latitude: min -2.5, max -1.4. This area +covers the four stations in Rwanda found in the R-Instat Library. Choose +the location to save the download or use the same location. Now, the +data request is for approximately a 2 degrees by 1 degree area, which +will give approximately (2 / 0.05) x (1 / 0.05) = 40 x 20 = 800 grid +points, since the resolution is 0.05 degrees. We do not want to directly +import all 800 grid points into R-Instat as this would be equivalent to +800 station records for 40 years. Instead, we want to download the data +and then extract only a few grid points of interest afterwards. So we +will check the option for ``Don't import data after downloading''. This +removes the new data frame name as it will not import into R-Instat but +will just download to your machine. Now click \textbf{\emph{Ok}} and it +may take a similar amount of time to complete. + +After finishing you will not see any change in R-Instat but the file +will be downloaded to the chosen folder. We can now use the dialog at +\textbf{\emph{Climatic \textgreater{} File \textgreater{} Import \& Tidy +NetCDF}} to import a subset of the grid points based on station +locations. This is shown in section xxx. + +\subsection{Download from the IRI Data +Store}\label{download-from-the-iri-data-store} + +As examples, information on ENSO and sea surface temperatures are +accessed. The maproom also contains instructional information, so typing +ENSO into the search, Fig. 9.4a, provides useful information, including +the areas of the Pacific ocean associated with the NINO situations, Fig. +9.4b. Fig. 9.4b is accessed directly from +\href{https://iridl.ldeo.columbia.edu/maproom/ENSO/Diagnostics.html}{\ul{https://iridl.ldeo.columbia.edu/maproom/ENSO/Diagnostics.html}} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig.9.4a IRI Data Library}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.4b NINO3.4}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.86687in,height=2.70544in]{media/image211.png} & +\includegraphics[width=2.13099in,height=2.70683in]{media/image221.png} \\ +\end{longtable} + +In Fig. 9.4a click on Data by Category, then on Climate Indices, Fig. +9.4c and choose Indices nino EXTENDED, Fig. 9.4d. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.4c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.69988in,height=2.47055in]{media/image229.png} & +\includegraphics[width=3.42604in,height=2.22844in]{media/image228.png} \\ +\end{longtable} + +Choose \textbf{\emph{nino34}}, in Fig. 9.4e and then go straight to +\textbf{\emph{data files}}. The next screen shows a variety of output +formats, including NetCDF, which you choose. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.4e}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.4f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.07506in,height=3.07958in]{media/image223.png} & +\includegraphics[width=2.8994in,height=3.59878in]{media/image201.png} \\ +\end{longtable} + +Now, in R-Instat, use File \textgreater{} Open and Tidy NetCDF File. If +you followed the screens above, then browse for the file that was +downloaded. Otherwise there is a copy in the R-Instat library to March +2019, Fig. 9.4g. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6821}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3064}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.4g}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.4h}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.17826in,height=1.89473in]{media/image216.png} & +\includegraphics[width=2.99168in,height=2.0226in]{media/image222.png} \\ +\end{longtable} + +The data are now imported into R-Instat, Fig. 9.4h. The time variable +has not been recognised as a date. You may wish to click on the I (for +information -- the metadata) and this will confirm that the column, +called T, is months since January 1960. If the fact that some values +appear the same in this column, then change the number of significant +figures in that column, from 3 to 5. + +The first value of T, in Fig. 9.4h is -1248. Dividing by 12 gives 104 +years, so the data start in January 1856! + +Use Climatic \textgreater{} Dates \textgreater{} Generate Dates, Fig. +9.4i. In Fig. 9.4i, change the starting date to January 1856, the end +date to March 2019 (if using the library dataset), and the step to 1 +Month. The resulting date column is shown in Fig. 9.4j. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.4i}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.4j}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.84199in,height=2.86736in]{media/image217.png} & +\includegraphics[width=2.64771in,height=3.06124in]{media/image210.png} \\ +\end{longtable} + +Countries have their own definition of when the NINO3.4 implies a year, +or season is El Niño, or La Niña, see +\href{https://en.wikipedia.org/wiki/El_Ni\%C3\%B1o}{\ul{https://en.wikipedia.org/wiki/El\_Ni\%C3\%B1o}}, +some use the NINO3.4 value and others use NINo3, or even NINO1 and 2. +The site +\href{http://www.bom.gov.au/climate/enso/enlist/index.shtml}{\ul{http://www.bom.gov.au/climate/enso/enlist/index.shtml}} +gives a detailed description of El Niño events since 1900, Fig. 9.4k, +with a companion page for La Niña. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.4k}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.4l}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.47098in,height=2.18081in]{media/image127.png} & +\includegraphics[width=2.5918in,height=1.72133in]{media/image128.png} \\ +\end{longtable} + +The SSTs themselves are often used for seasonal forecasting. This is +illustrated with the SSTs for the Nino3.4 region. + +\textbf{\emph{Return to the main page}}, Fig. 9.4a, then choose +\textbf{\emph{Data by Category}} again, but this time, in Fig. 9.4c, +choose \textbf{\emph{Air-Sea Interface}}. In the resulting screen, +choose the \textbf{\emph{NOAA NCDC ERSST version5}}, Fig. 9.4l. + +In the resulting screen, Fig. 9.4m, choose \textbf{\emph{anomalies}} and +then \textbf{\emph{Data Selection}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.4m}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.4n}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.99111in,height=2.3437in]{media/image156.png} & +\includegraphics[width=3.06222in,height=2.59055in]{media/image130.png} \\ +\end{longtable} + +Set the \textbf{\emph{time, attitude and longitude}} as shown in Fig. +9.4n and then \textbf{\emph{Restrict Ranges}}. The part at the top of +Fig. 9.4n should change accordingly and you now press \textbf{\emph{Stop +Selecting}}. + +Fig. 9.4m now has the three ranges added, in blue, Fig. 9.4o. Click on +Data Files to give the same as Fig. 9.4f, earlier. Choose the NetCDF +option again to download the file. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.4o}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.4p}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.78099in,height=1.84508in]{media/image141.png} & +\includegraphics[width=3.29054in,height=2.7998in]{media/image183.png} \\ +\end{longtable} + +Use the File \textgreater{} Input and Tidy NetCDF File as in Fig. 9.4g. +Then use the Climatic \textgreater{} Dates \textgreater{} Generate Dates +dialogue as shown in Fig. 9.4p. In Fig. 9.4p, remember to change to the +new data frame. Then set the starting date to January 1921 and there are +now 130 values (26 E-W, by 5 N-S) at each time point. + +In Fig. 9.4p, if all is correct, the generated sequence should match the +length of the data frame. Once accepted, the resulting data frame is +shown in Fig. 9.4q. Here each pixel is a 2 degree square, so the first +row is the temperature anomaly round 120°W and 4°S for January 1921. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.4q}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.99399in,height=3.17561in]{media/image102.png} \\ +\end{longtable} + +\section{Using the CM SAF toolbox for NetCDF +files}\label{using-the-cm-saf-toolbox-for-netcdf-files} + +The CM SAF toolbox is an R software package designed to process the +NetCDF files downloaded from EUMETSAT, Section 9.3. It is used on the +downloaded files from EUMETSAT (or from other organisations who have +NetCDF files). This may be all you need, if your interest is in some +products from the EUMETSAT data. Or it may be before using R-Instat if +your interest is in comparing station and satellite data. + +\section{Defining ENSO}\label{defining-enso} + +See +\href{https://www.ncdc.noaa.gov/teleconnections/enso/indicators/sst/}{\ul{https://www.ncdc.noaa.gov/teleconnections/enso/indicators/sst/}} + +\hl{Warm and cold phases are defined as a minimum of five consecutive +3-month running mean of SST anomalies +(\href{http://origin.cpc.ncep.noaa.gov/products/analysis_monitoring/ensostuff/ONI_v5.php}{\ul{ERSST.v5}}) +in the Niño 3.4 region surpassing a threshold of +/- 0.5°C} + +\bookmarksetup{startatroot} + +\chapter{Comparing Data from Different +Sources}\label{comparing-data-from-different-sources} + +\section{Introduction}\label{introduction-8} + +The satellite and reanalysis data, discussed in Chapter 9, provides a +wonderful resource that can supplement the historical station data that +is described in this guide. The satellite data is usually from the early +1980s, while some of the reanalysis data is from 1950. Table 10.1 +summarises some sources of rainfall data: + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +Table 10.1 +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.26806in,height=1.96944in]{media/image115.png} \\ +\end{longtable} + +Some of these products also include other elements, including +temperatures and ERA5 is for many elements. + +These data are already used extensively. However, often users access +only one type, i.e.~either station or satellite/reanalysis. This is +often either because that is what the researcher is comfortable with, or +only one type is easily available. We consider here how station and +satellite data can be compared and then perhaps used together. There are +a range of possible objectives from these comparisons including the +following: + +\begin{enumerate} +\def\labelenumi{\alph{enumi})} +\item + The satellite/reanalysis data, from the same location as a ground + station, can perhaps be considered as an additional station. As such, + perhaps the data can be used to complete, or infill missing values in + the station data. +\item + Similarly, perhaps this new (satellite) station could be used to + support the quality-control of the station data. +\end{enumerate} + +These objectives may be more interesting for countries where there is a +relatively sparse station network. Where the network is dense, +neighbouring ground stations may be used for these objectives. + +\begin{enumerate} +\def\labelenumi{\alph{enumi})} +\setcounter{enumi}{2} +\tightlist +\item + The bonus is that the satellite data does provide a dense network. For + example, for CHIRPS the estimated daily rainfall data is on roughly a + 5km square, so the equivalent of about 400 (pseudo) stations per + square degree. Hence it provides estimated daily rainfall data for the + whole of Africa, and beyond with a pseudo station that is always close + to any given location. +\end{enumerate} + +Comparisons between station and gridded data must recognise that they +have not measured the same thing. Station data are measured at a point, +while gridded data represent an area. The size of the area depends on +the method with an example shown in Fig. 10.1a. + +In Barbados, Fig. 10.1a the point shown is a station called Husbands, +the site of a regional climate centre. CIMH. The largest pixel is for +the ERA5 reanalysis data and the smallest is for CHIRPS. This figure +also shows that the pixel in coastal sites can sometimes be largely over +the ocean and hence a neighbouring pixel may be more relevant. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.1a Pixel size for 3 methods in Barbados}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.1b Difference between gridded and point data for +rainfall}} + +(Figure with permission from H. Greatrex) +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\begin{minipage}[t]{\linewidth}\raggedright +\begin{figure}[H] + +{\centering \includegraphics[width=3.09467in,height=2.18883in]{media/image11 2.png} + +} + +\caption{Chart Description automatically generated} + +\end{figure}% +\end{minipage} & +\includegraphics[width=2.77122in,height=2.50679in]{media/image104.pn g} \\ +\end{longtable} + +Fig 10.1b illustrates a reason for possible differences between area and +point data for rainfall. The sketch shows a cloud, and hence possibly +rain in part of the pixel, but not at the station in the top left. Hence +the station may be zero, while the gridded data notes some rain. Thus, +unless the satellite data are adjusted, we would expect more rain days +(and potentially less extreme values) than at a point. This feature is +particularly for rainfall, but may also be shown for other elements, +such as sunshine hours, where there may be zeros in the data. + +The problem that is addressed in this chapter is essentially just the +comparison of two variables, i.e.~2 columns of data, where the first is +the station and the second is the satellite, or reanalysis data. This is +essentially the same problem as in forecasting, where the forecast is +compared with the actual data. Many of the methods are from software +that was originally constructed for the forecasting problem. + +From a statistical point of view this problem is just the same as +comparing + +\bookmarksetup{startatroot} + +\chapter{Drawing Maps}\label{drawing-maps} + +\section{Introduction}\label{introduction-9} + +Climatic data is often presented in map form. Common examples include +details of the stations in each country, plus further information about +each station. + +Preparing a map is usually a 2-stage process. The first stage, described +in Section 10.2, uses a shape file to provide an outline of the country, +and other general details. Then climatic details are added, as is +described in Section 10.3. + +\section{Using a shape file}\label{using-a-shape-file} + +R-Instat does not currently have any shape files in the library, so they +have to be downloaded. There are various sites that offer shape files +and GADM (GADM, 2019) is comprehensive, Fig. 10.2a. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.2a The GADM data page}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.11749in,height=3.30545in]{media/image190.png} \\ +\end{longtable} + +C licking on country in Fig. 10.1a allows the input of a country name, +as shown in Fig. 10.2b. For Kenya, as for most other formats, there are +different ways to download the data. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4306}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5556}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.2b}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.2c}} + +\textbf{\emph{Climatic \textgreater{} File \textgreater{} Open and Tidy +Shapefile}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image185.png}\{ width=``2.7050929571303586in'' h +eight=``2.183115704286964in''\} & +\includegraphics[width=3.38928in,height=1.76785in]{media/image 187.png} \\ +\end{longtable} + +Data at level 0 is simply the country boundary, while level 1 gives the +outline for each of Kenya's 47 counties. Levels 2 and 3 provide even +more detail. + +In Fig. 10.2b the R(sf) option provides a file, with an +\textbf{\emph{rds}} extension, that can be opened into R-Instat through +the \textbf{\emph{File \textgreater{} Open}} dialogue. However, we +suggest clicking on Shapefile in Fig. 10.2. This downloads a zip file +that is about 20 Mbytes for Kenya and which contains data at all 4 +levels, 0, 1, 2, 3. + +Unzip this file. In R-Instat use \textbf{\emph{Climatic \textgreater{} +File \textgreater{} Open and Tidy Shapefile}}, Fig. 10.2c. Go to the +unzipped files and open the Level 1 shapefile. There are 47 rows of +data, shown in Fig. 10.2d, (after reordering the variables for clarity.) + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.2d}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.2e}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.50709in,height=3.41927in]{media/image188.png} & +\includegraphics[width=2.38073in,height=2.94431in]{media/image163.png} \\ +\end{longtable} + +Go to \textbf{\emph{Climatic \textgreater{} Mapping}}. Part of this +dialogue is shown in Fig. 10.2e. Choose the data frame with the shape +file if it isn't chosen automatically. Then just press Ok for the map +shown in Fig. 10.2f. + +What could be easier? + +Return to the \textbf{\emph{Climatic \textgreater{} Mapping}} dialogue +and add the \textbf{\emph{NAME\_1}} variable from Fig. 10.2d into the +\textbf{\emph{Fill field}} of Fig. 10.2e. The result is in Fig. 10.2g. +The map is now nicely colourful. If there were, say, 10 regions, this +would be fine, but with 47 counties the legend is taking too much space +and can't easily be associated with each county. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4862}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4954}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.2fKenya county map}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.2g}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.97536in,height=3.43785in]{media/image172.png} & +\includegraphics[width=3.0214in,height=2.57589in]{media/image189.png} \\ +\end{longtable} + +So, return to the \textbf{\emph{Climatic \textgreater{} Mapping}} +dialogue. Press \textbf{\emph{Plot Options,}} then use the +\textbf{\emph{Theme}} tab and set the \textbf{\emph{Legend to None}}, +Fig. 10.2h. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.2h}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.2i}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.9793in,height=2.98538in]{media/image139.png} & +\includegraphics[width=3.00558in,height=3.58809in]{media/image166.png} \\ +\end{longtable} + +The resulting map is shown in Fig. 10.2i. + +Sometimes it is useful for an initial map to include the names of the +districts as labels. + +Return to the \textbf{\emph{Climatic \textgreater{} Mapping}} dialogue +and include the same data frame also on the right-hand side of the +dialogue, Fig 10.2j. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.2j}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=5.43952in,height=2.98794in]{media/image182.png} \\ +\end{longtable} + +The initial results are in Fig. 10.2k. It shows that, with 47 labels we +have given the software a considerable challenge to make all the labels +visible. The geom is called geom\_label\_repel and has done its best, +but perhaps it needs some help. Two possibilities are to make the labels +smaller, Fig. 10.2l, or to omit the box round each label. This then uses +geom\_text\_repel instead, Fig. 10.2m. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.2k}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.2l}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.02823in,height=3.60801in]{media/image103.png} & +\includegraphics[width=2.97918in,height=3.60418in]{media/image74.png} \\ +\end{longtable} + +Finally, in this section, we go ``down a level''. This uses the level 2 +data, which has 310 rows. Then we filter to give just one district, +choosing Kisumu. (A few neighbouring districts could be chosen.) The +resulting map is shown in Fig. 10.2n. + +The GADM site is limited to administrative data only. There are other +sites, such as +\href{http://www.diva-gis.org/}{\ul{http://www.diva-gis.org/}} with +additional information, such as roads and elevation. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4907}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4907}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.2m Text, rather than label}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.2n}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.86528in,height=3.39383in]{media/image78.png} & +\includegraphics[width=3.1924in,height=1.23171in]{media/image85.png} \\ +\end{longtable} + +\section{Adding station data}\label{adding-station-data} + +Adding station data to a map is just as easy as adding the county +information in Section 10.2. If your data are in CLIMSOFT, and you have +the necessary permissions, then transferring the data may be done with +the \textbf{\emph{Climatic \textgreater{} File \textgreater{} Import +from Climsoft}} dialogue. Here we illustrate with the Kenya data from +the Instat library. + +Use \textbf{\emph{File \textgreater{} Open from Library \textgreater{} +Instat \textgreater{} Browse \textgreater{} Climatic \textgreater{} +Kenya}} and open the file called western\_kenya.rds. This has 3 data +frames, including one called wkenya\_stationinfo, Fig. 10.3a. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4862}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4954}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.3a}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.3b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=4.21904in,height=3.15575in]{media/image60.png} & +\includegraphics[width=1.6362in,height=2.94297in]{media/image63.png} \\ +\end{longtable} + +There are 52 stations, Fig. 10.3a, and the information includes the +County as well as the latitude and longitude. An initial step is to +examine how many counties have data. This uses the +\textbf{\emph{Right-Click}} from the top of the County column, and the +\textbf{\emph{Levels/Labels}} option, also shown in Fig. 10.3a. + +The Levels/Labels dialogue shows there are data from 12 counties. The +spelling is consistent with the County=level file, used in Section 10.2 +except for Homabay, which we change, in this dialogue, to Homa Bay. + +This initial check is important, as any spelling mistakes in the county +name, when entering the data, will invent a new county! + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4444}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5417}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.3d Filter the map file}} + +\textbf{\emph{Right Click \textgreater{} Filter \textgreater{} Define +New Filter}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.3e Map file for Western Kenya}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.79165in,height=2.56192in]{media/image61.png} & +\includegraphics[width=3.34615in,height=2.41431in]{media/imag e62.png} \\ +\end{longtable} + +Return to the level 1 map file, Right-Click and Filter to choose the +same 12 counties, Fig. 10.3d. The data file should now have just 12 +rows, to match the number of counties that will be mapped. + +Return to the Climatic \textgreater{} Mapping dialogue. The map +information is on the left-hand side of the dialogue and the new station +information is now on the right, Fig. 10.3f. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.3f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=5.37815in,height=3.07816in]{media/image58.png} \\ +\end{longtable} + +The result is shown in Fig. 10.3g with labels, and with the county given +as a legend. Fig. 10.3h uses text and omits the legend. This is quite a +challenging map, because so may stations are close together. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4818}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.3g}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 10.3h}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.24492in,height=2.78295in]{media/image59.png} & +\includegraphics[width=2.72977in,height=2.78905in]{media/image101.png} \\ +\end{longtable} + +The results show there are at least 2 obvious errors in the data. The +most obvious is Chemilil, which should be in Kisumu county, but is shown +in the middle of Kajaido. And Akira, that should be in Kajaido is shown +slightly outside any of the counties. It is tempting to correct these +obvious errors. However, better is the message that there may be other +errors and a strategy for checking the geographical information would be +useful. + +We wonder whether google maps could be used for checking? This aspect +has become important, partly because of the potential of combining +station and satellite information. However, the combining is only +sensible if the locations of the station data are correct. + +\section{Information about the +stations}\label{information-about-the-stations} + +\hl{To be added.} + +\section{Further types of mapping}\label{further-types-of-mapping} + +\hl{Contours, gridded data} + +\bookmarksetup{startatroot} + +\chapter{Extremes}\label{extremes} + +\section{Introduction}\label{introduction-10} + +Starting with daily, or sub-daily data the analysis proceeds in two +stages. The first is to get the extremes and the second is to analyse +them. The data from two stations in Ghana are used for illustration. Use +\textbf{\emph{File \textgreater{} Open from Library \textgreater{} +Instat \textgreater{} Browse \textgreater{} Climatic \textgreater{} +Ghana}} and open the RDS file called \textbf{\emph{Ghana two stations}}. +From Fig 11.1a we see the data start in 1944, though the elements, other +than rainfall start later. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4862}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4954}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.1a Two stations from Ghana}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.1b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.03243in,height=2.83534in]{media/image98.png} & +\includegraphics[width=2.95096in,height=2.53564in]{media/image113.png} \\ +\end{longtable} + +In the Climatic menu the data are already in the right ``shape'' and +there is a date column, see Fig. 11.1a. So start by checking whether +there are any missing dates to infill, Fig. 11.1b. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6705}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3179}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.1c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.1d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.62024in,height=1.99238in]{media/image97.png} & +\includegraphics[width=3.32767in,height=1.5196in]{media/image100.png} \\ +\end{longtable} + +In \textbf{\emph{Climatic \textgreater{} Dates Infill Missing Dates}}, +include the \textbf{\emph{Station}}, Fig. 11.1c. The results, in Fig. +11.1d, indicate that there were 5 missing months in the record at +Saltpond and four at Tamale. There are now 53297 rows of data. + +Now use \textbf{\emph{Climatic \textgreater{} Dates \textgreater{} Use +Date}}, Fig. 11.1e, and complete as shown. + +Then use Climatic \textgreater{} Define Climatic data. It should +complete automatically. Check for uniqueness and then press OK. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4815}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.1e}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.1f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.28208in,height=3.2166in]{media/image90.png} & +\includegraphics[width=3.49147in,height=4.14862in]{media/image88.png} \\ +\end{longtable} + +Now use \textbf{\emph{Climatic \textgreater{} Check Data \textgreater{} +Inventory}}, Fig. 11.1g. Include the elements down to wind speed. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4862}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4954}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.1g}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.1h}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.7294in,height=3.16914in]{media/image99.png} & +\includegraphics[width=3.32049in,height=3.20243in]{media/image89.png} \\ +\end{longtable} + +The results show the other elements started roughly in 1960. There are +relatively few missing values in the rainfall, and the other elements +are also reasonably complete. + +The same Climatic \textgreater{} Check Data menu has options for quality +control checks. These are assumed, as we proceed to examine the +extremes. + +\section{Getting the extremes}\label{getting-the-extremes} + +In the \textbf{\emph{Climatic \textgreater{} Prepare}} menu there are +four dialogues that get extremes. They are considered briefly and then +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Extremes}} +is examined in detail. + +The \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} +Climatic Summaries}}, Fig. 11.2b has already been used extensively in +this guide. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{The ClimzaFig. 11.2a}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.2b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.99269in,height=3.23755in]{media/image91.png} & +\includegraphics[width=2.91342in,height=3.13521in]{media/image56.png} \\ +\end{longtable} + +In Fig. 11.2c we can choose the extremes, i.e.~the minimum and/or +maximum. These can be annual, as shown in Fig. 11.2b, or for a part of +the year, or perhaps monthly. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.2c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.2d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.86209in,height=3.15145in]{media/image55.png} & +\includegraphics[width=2.80257in,height=3.28784in]{media/image52.png} \\ +\end{longtable} + +Fig. 11.2d shows the \textbf{\emph{Climatic \textgreater{} Prepare +\textgreater{} Spells}} dialogue. This automatically gives the extreme, +i.e.~longest spell each year. This may be the longest dry spell for +rainfall, or the longest hot (or cold) spell for temperatures, etc. + +The Climdex system is covered in Sections 11.3 and 11.4. Hence now +consider \textbf{\emph{the Climatic \textgreater{} Prepare +\textgreater{} Extremes}} dialogue, Fig. 11.2e. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5778}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.2e}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.2f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.98703in,height=4.10977in]{media/image51.png} +& \\ +\end{longtable} + +\hl{To be continued} + +\section{Climdex Indices - +precipitation}\label{climdex-indices---precipitation} + +A set of 27 climate change indices have resulted from WMO meetings and +reports. They are described in +\href{http://etccdi.pacificclimate.org/list_27_indices.shtml}{\ul{http://etccdi.pacificclimate.org/list\_27\_indices.shtml}} +and implemented through an R package called climdex.pcic. The pcic +stands for Pacific Islands Impacts Consortium, but the indices are +general. + +Each index can produce an annual summary, and some offer the option of +monthly summaries. The are a single dialogue in R-Instat. Sixteen of the +indices are temperature-based. The other 11 are rainfall indices. + +The Dodoma data from Tanzania are used for illustration. Use +\textbf{\emph{File \textgreater{} Open from Library \textgreater{} +Instat \textgreater{} Browse \textgreater{} Climatic \textgreater{} +Tanzania}} and open the file called Dodoma.rds. It is already defined as +a climatic dataset. Hence the climatic dialogues can be used +immediately. + +The annual summaries from climdex are compared with those used in +Chapters 6 and 7. Hence start with the \textbf{\emph{Climatic +\textgreater{} Prepare \textgreater{} Climatic Summaries}}, Fig. 11.3b. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4862}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4954}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3a}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.15337in,height=3.60962in]{media/image54.png} & +\includegraphics[width=2.8408in,height=3.59358in]{media/image53.png} \\ +\end{longtable} + +Press \textbf{\emph{Summaries}} on the main dialogue and choose the +summaries indicated in Fig. 11.3c. Then choose the \textbf{\emph{Missing +Options}} tab to give Fig. 11.3d. The default in climdex is to set the +summary to missing if more than 15 days in the year are missing, so the +same is done here. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4907}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4907}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.00805in,height=2.94734in]{media/image49.png} & +\includegraphics[width=2.98272in,height=2.19917in]{media/image50.png} \\ +\end{longtable} + +The result is two annual summaries, Fig. 11.3e, that are like two of the +climdex indices. They are ready to draw graphs, fir trend lines and so +on. The data frame, in Fig. 11.3e, has 79 rows, because there are 79 +years of data + +Use \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} +Climdex}}, Fig. 11.3f. The dialogue should fill automatically. If not, +then check you are using the correct data frame. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4862}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4954}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3e}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.27533in,height=3.59173in]{media/image57.png} & +\includegraphics[width=3.6113in,height=3.6113in]{media/image48.png} \\ +\end{longtable} + +In Fig. 11.3f click on \textbf{\emph{Indices}}. Complete the settings as +shown in Fig. 11.3g and then choose the \textbf{\emph{precipitation +tab}}. The numbers for each index match those given in +\href{http://etccdi.pacificclimate.org/list_27_indices.shtml}{\ul{http://etccdi.pacificclimate.org/list\_27\_indices.shtml}} +. For illustration\textbf{\emph{, tick everything}} there and press +\textbf{\emph{Return}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3g}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3h}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.09732in,height=2.62261in]{media/image982.png} & +\includegraphics[width=2.88531in,height=2.86252in]{media/image984.png} \\ +\end{longtable} + +This results in 11 further columns, for each of the precipitation +indices. They are added to the yearly data frame and shown in Fig. +11.3i. Each is described briefly, before continuing with the analysis. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3i}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.15578in,height=2.99946in]{media/image980.png} \\ +\end{longtable} + +The indices are defined as shown in table 11.3a. In Fig. 11.3i the +variable max\_rain, from the Climatic \textgreater{} Prepare +\textgreater{} Climatic Summaries is seen to be the same as Rx1day. We +consider briefly how to get each of these indices using the other +R-Instat dialogues. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1905}} + >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1548}} + >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.6310}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Table 11.3a Precipitation indices from climdex}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\textbf{\emph{Number}} & \textbf{\emph{Name}} & +\textbf{\emph{Description}} \\ +17 & Rx1day & Annual maximum \\ +18 & Rx5day & Maximum from 5-day running totals \\ +19 & SRII & Simple intensity index, i.e.~Annual total/Number of rain +days \\ +20 & R10mm & Annual number of rain-days with 10mm or more \\ +21 & R20mm & Annual number of rain-days with 20mm or more \\ +22 & Rnnmm & Annual number of days with ≥ nn(mms). User chooses value of +nn \\ +23 & CDD & Longest dry spell in the year (dry is \textless1mm) \\ +24 & CWD & Longest spell of successive rain days (rain is +\textgreater=1mm) \\ +25 & R95p & Annual total greater than 95\textsuperscript{th} percentile +in base period \\ +26 & R99p & Ditto for 99\textsuperscript{th} percentile \\ +27 & PRCPTOT & Total annual rainfall (from days with ≥ 1mm) \\ +\end{longtable} + +This comparison is partly to help users understand exactly what each +index is measuring. In addition the regular dialogues provide additional +flexibility, if needed to examine the indices in more detail. + +The second summary, produced earlier is the total annual rainfall, +called sum\_rain in Fig. 11.3i. This is almost the same as the climdex +index 27, PRCPTOT. For example sum\_rain = 523mm in 1935, compared to +514mm for PRCPTOT. + +The small difference is because the sum\_rain has totalled all the rain +days, while PRCPTOT only considers those with at least 1mm. + +Check this with \textbf{\emph{Prepare \textgreater{} Column: Calculate +\textgreater{} Calculation}}. With the \textbf{\emph{Logical keyboard}} +make a new column, called rain1, Fig. 11.3j, with: + +rain1 \textless- \textbf{\emph{ifelse(rain\textless1, 0, rain)}}, or +equivalently rain1 \textless- \textbf{\emph{(rain\textgreater=1) * +rain}}. + +Then use \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} +Climatic Summaries}} with the new \textbf{\emph{rain1}} variable to +check the annual totals now agree with those from climdex. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3j}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3k}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.23706in,height=2.38342in]{media/image983.png} & +\includegraphics[width=2.73123in,height=3.50223in]{media/image976.png} \\ +\end{longtable} + +From the rain5 variable, the \textbf{\emph{Climatic \textgreater{} +Prepare \textgreater{} Extremes}} is an alternative dialogue to give the +annual maxima, Fig. 11.3l. This gives the same results as the climdex +Rx5day variable. It also gives a further the day in the year of the +maximum. This could be used in a study to investigate whether there is +any evidence for a trend in \textbf{\emph{when the maximum occurs}} as +well as its value. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3l}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3m}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries\\ +with sub-dialogue}}\strut +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.19083in,height=4.30955in]{media/image98 6.png} +& +\includegraphics[width=2.83805in,height=2.9135in]{media/image977.pn g} \\ +\end{longtable} + +The ``Simple intensity index'', SRII is essentially the mean rain per +rain day, (just using the values of days with more than 1mm). In Fig. +11.3i it is just PRCPTOT/Rnnmm, because we chose 1mm as the threshold. +For example, in 1935 there were 36 rain days with a total of 514mm. +Hence + +SRII\textsubscript{1935} = 514/36 = 14.26mm + +The next 2 indices, R10mm and R20mm are just the number days each year +with 10mm, and 20mm or more, each year. They can also be given using the +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries}} dialogue. + +The indices CDD and CWD give the maximum dry-spell length and rain-spell +lengths, where rain = 1mm. They are special cases of the +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Spells}} +dialogue, Fig. 11.3n. The data in Fig. 11.3i show that the CDD index for +the whole calendar year is probably of little interest, for this site, +because the months of May to October are usually dry. Hence the longest +dry-spell of 197 days, in 1935, is not a surprise. However, assessing +evidence for trends in the longest dry-spell during the season, perhaps +from 1 January to 31 March, may be useful. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4862}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4954}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3n Spells dialogue to give CWD index}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3o Filter sub-dialogue for rain days in baseline +years}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.80286in,height=3.43011in]{media/image978.png} & +\includegraphics[width=3.18575in,height=3.27396in]{media/image985.png} \\ +\end{longtable} + +The final 2 precipitation indices are R95p and R99p. They are the total +rainfall each year from heavy rain days. The definition of ``heavy'' is +relative to the baseline years. The first step is therefore to find the +thresholds. The process is as follows: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + \textbf{\emph{Filter}} the Dodoma data to the baseline years and just + the rain days, Fig. 11.3. +\item + Use the \textbf{\emph{Prepare \textgreater{} Column: Calculate + \textgreater{} Column Summaries}}, Fig. 11.3p, with the + \textbf{\emph{percentile summary}}, Fig. 11.3q, to give the 95\% and + 99\% points of the rain variable. The 95\% point, Fig. 11.3q, = + 45.57mm and the 99\% point = 67.3mm +\end{enumerate} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3p}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3q}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.96in,height=3.47896in]{media/image981. png} & +\includegraphics[width=3.05709in,height=1.34768in]{media/image1391. png} + +\textbf{\emph{Result in the output window}} + +\includegraphics[width=3.0555in,height=1.06052in]{media/image1388 .png} \\ +\end{longtable} + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\setcounter{enumi}{2} +\item + Now \textbf{\emph{filter}} to use just the days for the whole record + where (rain \textgreater{} 45.57), Fig. 11.3r. . +\item + \textbf{\emph{Use Climatic \textgreater{} Prepare \textgreater{} + Climatic Summaries}} to give the sum and number of observations, Fig. + 11.3s +\end{enumerate} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4867}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4956}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3r}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3s}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.99691in,height=3.28174in]{media/image1390.png} +& +\includegraphics[width=2.67101in,height=3.55655in]{media/image1380.png} \\ +\end{longtable} + +The resulting data are in Fig. 11.3t. The new sum\_rain variable gives +the same values as the R95p. In the first year, the total was 210.3mm +from 3 rain days. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.3t}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.06752in,height=3.32573in]{media/image1384.png} \\ +\end{longtable} + +\section{Climdex -- Temperatures}\label{climdex-temperatures} + +The 16 temperature indices are shown in Table 11.4a. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1807}} + >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1566}} + >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.6386}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Table 11.4a Temperature indices from climdex}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\textbf{\emph{Number}} & \textbf{\emph{Name}} & +\textbf{\emph{Description}} \\ +1 & FD & Number of frost days, when daily minimum temperature, Tn +\textless0. \\ +2 & SU & Number of ``Summer'' days, when daily maximum temperature, Tx +\textgreater{} 25 \\ +3 & ID & Number of icing days, when Tx \textless{} 0 \\ +4 & TR & Number of tropical nights, when Tn \textgreater{} 20 \\ +5 & GSL & Growing season length. Number of days between first span of 6 +consecutive days with daily Tmean \textgreater{} 5°C and first span of 6 +days (after July 1\textsuperscript{st}) with Tmean \textless{} 5°C. +(July to June in Southern hemisphere.) \\ +6 & TXx & Annual or monthly maximum of Tx \\ +7 & TNx & Annual or monthly maximum of Tn \\ +8 & TXn & Annual or monthly minimum of Tx \\ +9 & TNn & Annual or monthly minimum of Tn \\ +10 & TN10p & Percentage of days when Tn \textless{} +10\textsuperscript{th} percentile from the baseline \\ +11 & TX10p & Ditto for Tx \textless{} 10\textsuperscript{th} +percentile \\ +12 & TN90p & Ditto for Tn \textgreater{} 90\textsuperscript{th} +percentile \\ +13 & TX90p & Ditto for Tx \textgreater{} 90\textsuperscript{th} +percentile \\ +14 & WSDI & Warm spell duration index, the annual number of day where at +least 6 consecutive days are warmer than the 90\textsuperscript{th} +percentile \\ +15 & CSDI & Cold spell duration index, the annual number of days when at +least 6 consecutive days are colder than the 10\textsuperscript{th} +percentile \\ +16 & DTR & Mean temperature range, i.e.~mean difference between Tx and +Tn \\ +\end{longtable} + +They are again illustrated with the Dodoma data. Use Climatic +\textgreater{} Prepare \textgreater{} Climdex, Fig. 11.4a and complete +the Temperature sub-dialogue as shown in Fig. 11.4b. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3889}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5972}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.4a The Climdex dialogue}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climdex}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.4b Climdex temperature sub-dialogue}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +!{[}{]} (media/image1381.png)\{wid th=``2.3313899825021873in'' heig +ht=``2.152358923884514in''\} & +\includegraphics[width=3.75901in,height=2.7698in]{media/ima ge1378.png} \\ +\end{longtable} + +The results are in Fig. 11.4c. Some results are obvious; in particular +in the later years, shown in Fig. 11.4c, there are about 30\% of days +per year in TN90p, i.e.~with Tn higher than the 90\% point from the +1961-90 baseline. And TN10p has very low values. The change in Tn is +clearer than that of the maximum temperatures, Tx. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.4c}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.06997in,height=3.98859in]{media/image1383.png} \\ +\end{longtable} + +As in Section 11.3, some of the temperature indices can be calculated +through the \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} +Climatic Summaries}} dialogue. For example completing Fig. 11.4d and +Fig. 11.4e as shown produces the indices TNn and TNx. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.4d}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 11.4e Choosing the max and min}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.0453in,height=3.37138in]{media/image1386. png} +& +\includegraphics[width=2.89033in,height=2.77757in]{media/image1382.p ng} \\ +\end{longtable} + +The calculations for 6 of the indices is more complex. They are numbered +10 to 15 in Table 11.4a and depend on the temperatures in the baseline +period, usually 1961 to 1990. In this case the 10\% and 90\% points are +found, in turn, for each day of the year\footnote{The calculation of the + baseline values is more complex in two ways. First is that each day + uses the data from the 5 surrounding days, e.g.~for + 10\textsuperscript{th} January, the data are used from + 8\textsuperscript{th} to 12\textsuperscript{th} January. There are + therefore 150 values for each day, from which to calculate the 10\% + and 90\% points. Second is that a bootstrapping methods is used, + following (Zhang, Hegerl, Zwiers, \& Kenyon, 2005) where each year in + turn is omitted and replaced by one of the other 29 years.} and these +values are then compared with the temperature on that day for the +record. + +\section{Using the climdex indices}\label{using-the-climdex-indices} + +\hl{To be completed} + +\section{Extreme value analysis}\label{extreme-value-analysis} + +\hl{Using the extRemes package} + +\bookmarksetup{startatroot} + +\chapter{PICSA -- Long Before the +season}\label{picsa-long-before-the-season} + +\section{Introduction}\label{introduction-11} + +PICSA (Participatory Integrated Climate Services for Agriculture) is an +initiative to share climate information with small-scale farmers. It was +described briefly in Chapter 1 and Fig. 12.1a is a repeat of Fig. 1.6a +to show the different stages of the PICSA activity. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.1a Stages of the PICSA project}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=4.88043in,height=3.58922in]{media/image1407.png} \\ +\end{longtable} + +PICSA has been used in many countries in Africa and beyond, including +Tanzania, Malawi, Lesotho, Ghana, Guyana, Rwanda, Haiti and Bangladesh. +At first glance it may seem like many other initiatives to share climate +information with farmers. It has some distinguishing features, that +explain its inclusion in this guide. + +The first distinguishing feature is the large set of activities that are +undertaken prior to the availability of the seasonal forecast. They +build on the information from the historical climatic data. There is a +detailed instruction guide, with 12 sections. The first 7 are shown in +Fig. 12.1b and take place in the ``Long-before-the- season'', step shown +in Fig. 12.1a. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.1b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=5.55194in,height=3.38739in]{media/image1415.png} \\ +\end{longtable} + +The second distinguishing feature is that PICSA supports farmer's +activities in relation to crops, livestock or other livelihood +activities. It identifies options and is not directed towards any +particular crop or activity. This is indicated in Step d) of Fig. 12.1b. + +Third is the emphasis on ``options by context'' that places the farmer +(and not the ``expert'') at the centre. Thus, PICSA does not make +recommendations for the farmers. Instead it offers options, with the +idea, shown in steps d and e, in Fig. 12.1b, that the farmers, or +households, may wish to select those that particularly fit their +circumstances. Fig. 12.1c shows an example of options related to +livelihood activities. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6133}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3733}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.1c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.1d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.09147in,height=1.98688in]{media/image1418.jpg} +& +\includegraphics[width=3.13928in,height=2.01135in]{media/image1392.png} \\ +\end{longtable} + +These options are not pre-selected but are constructed through dialogues +between the farmers and extension workers. Farmers evaluate options via +a set of participatory exercises. One is a resource allocation map +(RAM), step a) in Fig. 12.1b, an example of which is in Fig. 12.1d. + +Further information on PICSA is available via the website +\href{https://research.reading.ac.uk/picsa/}{\ul{https://research.reading.ac.uk/picsa/}}, +Fig. 12.1e. Information includes the field manual, from which Fig. 12.1b +shows the first 7 sections. This is currently available in 4 languages, +namely English, Bengali, French and Spanish. + +The idea, in PICSA, is that by step g, in Fig. 12.1b, the farmer has +provisional plans for the season. These could apply to any season. These +plans may then be modified by the extra information for this season, +from the seasonal forecast, discussed in Chapter 13. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.1e The PICSA webpage}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.07852in,height=2.47895in]{media/image1428.png} \\ +\end{longtable} + +In this chapter we mainly consider Steps b and c from Fig. 12.1b. This +is a discussion of the historical temperature and rainfall data, both in +relation to climate change (Step b) and then to consider the risks from +different options (Step c). + +\section{Climate change and +variability}\label{climate-change-and-variability} + +In PICSA it has been useful for farmers to examine and use the +historical graphs themselves, e.g.~Fig. 12.2a. Some have had little or +no formal education, but almost all have been able to follow and +interpret the ideas of these time series graphs. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.2a}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=5.95727in,height=3.62281in]{media/image1422.png} \\ +\end{longtable} + +Step b, in Fig. 12.1b is one of comparing farmers (and extension +workers) perceptions of climate change with the evidence from the +historical climatic records. + +Many farmers, NGO and extension staff already have strong views on +climate change. However, most have never seen any of the time series +graphs of the type shown in Fig. 12.2b and Fig. 12.2c. + +Temperatures usually show a clear trend, illustrated by Tmin in Fig. +12.2b. For rainfall the message is usually one of variability, Fig. +12.2c, rather than trend, being the main concern. This is a surprise for +some, who interprete climate change as implying a change in the pattern +of rainfall. This is partly because rainfall is by far the most +important climatic element for tropical agriculture. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.2b Tmax and Tmin, Dodoma}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.2c Total annual rainfall, Dodoma}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.10878in,height=1.21937in]{media/image1406. png} + +\includegraphics[width=3.06821in,height=1.29793in]{media/image1389 .png} +& +\includegraphics[width=3.0079in,height=3.0044in]{media/image1402.p ng} \\ +\end{longtable} + +Of course, if there is a trend in temperatures, then this +\textbf{\emph{is}} climate change. The climatic elements are +interlinked, hence there must be a corresponding change in the other +elements, including rainfall. However, rainfall is so variable from year +to year, that any change is often not detectable. In addition, unlike +temperatures, that are rising, the changes in the patterns of rainfall +will not be so simple -some places will become wetter and others dryer. + +Hence, in most sites where PICSA has been used, many of the activities, +i.e.~the options for farming households, are designed to manage the +rainfall risks, (i.e.~variability), rather than change. + +There is an important corollary to this idea. It is easy to blame +climate change ``on the West'' and hence assume it is a problem for +others to solve. But rainfall variability, as shown in Fig. 12.2c, is a +problem faced locally by successive generations. Hence discussing +options to manage the risks is sensible for individual farmers to +consider. + +This type of discussion, within PICSA, is constructive for both the +intermediaries (NGO and extension staff) and farmers in encouraging an +openness to consider changes in their activities, i.e.~to consider what +options might be useful to manage the (rainfall) risks. This idea is +well phrased in the ICRISAT study, (Cooper, et al., 2008). They claim +that managing the current climate risks has a double benefit. It is +useful itself, as well as preparing farmers for future climate change. + +An initial one-week workshop is often used to introduce PICSA in a new +country, or in a new district, within a country. The graphs, such as +Fig. 12.2b and Fig. 12.2cc are usually part of the materials from the +first day. + +\section{Producing the initial graphs - no data +issues}\label{producing-the-initial-graphs---no-data-issues} + +Currently a key input in PICSA is a series of time-series graphs on +aspects of the rainfall that are of direct interest, and support farmers +in their choice of options. They don't just look at the graphs, but also +use them, as shown in Fig 12.2a, to calculate risks for themselves. + +For many farmers, also for intermediaries, this is the first time they +have seen this type of time-series graph. Hence, as mentioned above, it +usually serves two purposes. The first is as a practical demonstration, +that (for the rainfall) the main issue is one of variability, rather +than change. Hence ``the ball is in their court'' to manage their +climatic risks, rather than being part of the general topic of climate +change. The second is as a tool to calculate the risks for alternative +options. + +These graphs are usually prepared by staff from the corresponding NMS. +Currently the work is often by NMS headquarters staff, but perhaps LMS +staff based locally may be able to do some of this work in the future. +The production is simple when there are no ``data issues'' and is +described in this section. + +A checklist may useful, and an initial version is in Table 12.3a. Start +with this list, and then edit to produce your own. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1786}} + >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.4286}} + >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.3690}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Table 12.3a Initial checklist}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\textbf{\emph{Step}} & \textbf{\emph{Action}} & \textbf{\emph{R-Instat +Dialogue}} \\ +1 & Read the data into R-Instat & File \textgreater{} Open from File \\ +2 & Check the data as input & +\begin{minipage}[t]{\linewidth}\raggedright +Climatic \textgreater{} Tidy and Examine \textgreater{}\\ +One Variable Summarise\strut +\end{minipage} \\ +3 & Make a date variable & Climatic \textgreater{} Dates \textgreater{} +Make Date \\ +4 & Infill if dates are absent & Climatic \textgreater{} Dates +\textgreater{} Infill \\ +5 & Make further date variables (possibly shifted) & Climatic +\textgreater{} Dates \textgreater{} Use Date \\ +6 & Probably delete the initial year, month, day variables, plus further +``housekeeping'' & Right-click, then Delete and Reorder variables \\ +7 & Define the data as climatic & Climatic \textgreater{} Define +Climatic Data \\ +8 & Omitting Check Data, because data are ok! & +\begin{minipage}[t]{\linewidth}\raggedright +Could add:\\ +Climatic \textgreater{} Check Data \textgreater{} Inventory,\\ +Climatic \textgreater{} Check Data \textgreater{} Display Daily,\\ +Climatic \textgreater{} Check Data \textgreater{} Boxplot, etc.\strut +\end{minipage} \\ +9 & Add rain-day variable & Climatic \textgreater{} Prepare +\textgreater{} Transform \\ +10 & Save data as a R-file & File \textgreater{} Save As \\ +11 & Get annual/seasonal rainfall and rain day totals & Climatic +\textgreater{} Prepare \textgreater{} Climatic Summaries \\ +12 & Get annual/seasonal mean temperatures & Climatic \textgreater{} +Prepare \textgreater{} Climatic Summaries \\ +13 & Graph the max and min temperature & Describe \textgreater{} +Specific \textgreater{} Line Plot \\ +14 & Graph the rainfall and rain day totals & Climatic \textgreater{} +PICSA \textgreater{} Rainfall graphs \\ +\end{longtable} + +This checklist involves largely going systematically down R-Instat's +climatic menu, shown in Fig. 12.3a, from \textbf{\emph{Tidy and +Examine}}, to the \textbf{\emph{PICSA menu}} for the graphs of the +annual summaries. + +The data used for illustration are from a single station, Dodoma, in +Tanzania, but the checklist works equally well with data from multiple +stations. If the data file only has rainfall, then omit steps 12 and 13. + +The data from Tanzania were supplied as an Excel file as shown in Fig. +12.3b. This was exported from Clidata (Tolatz, 2019) and is in the +``right shape'' for R-Instat, i.e.~each row of data is for one day and +the four elements are in successive columns. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3a}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.19456in,height=2.2015in]{media/image1414.png} & +\includegraphics[width=3.81497in,height=2.83534in]{media/image1359.png} \\ +\end{longtable} + +Use \textbf{\emph{File \textgreater{} Open from File}} to input your +data. + +To practice with these data, use \textbf{\emph{Open from Library +\textgreater{} Instat \textgreater{} Browse \textgreater{} Climatic +\textgreater Tanzania}} and open the \textbf{\emph{Dodoma18.xlsx}} file, +Fig. 12.3c. + +We first make a deliberate mistake. If you are following the exercise, +then we strongly recommend that you make this mistake also. It is very +common! + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5556}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4306}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3c Importing from Excel}} + +\textbf{\emph{File \textgreater{} Open from File or Open from Library}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3d Data imported incorrectly}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.36393in,height=2.81471in]{media/image 1358.png} +& \includegraphics{media/image1364.png}\{ width=``2.6359897200349955in'' +h eight=``2.800184820647419in''\} \\ +\end{longtable} + +In Fig. 12.3c the data frame preview indicates something is wrong, +because there are m values present. This is not always so obvious, +because only 10 lines are shown, which may not include missing values. + +Press \textbf{\emph{Ok}} to import that data. The problem is now shown, +in R-Instat, by the (c) after SUNHRS(c) and TMPMIN(c) and TMPMAX(c). +These variables are numeric but have been imported as character (text) +variables, because there are some non-numeric characters in these +columns. + +You can correct this problem in R-Instat, but it is simpler to correct +when you import the data, or in Excel. Here it is easy to correct when +the data are imported. + +So, use \textbf{\emph{File \textgreater{} Close Data File}}\footnote{If + you have multiple data frames open, and you just want to close this + one, then use \textbf{\emph{Right-Click}} on the data frame tab (at + the bottom of the data) and choose \textbf{\emph{Delete}}.}. Then +recall the last dialogue to give Fig. 12.3c again and insert +\textbf{\emph{m}} as the \textbf{\emph{Missing Value String}}, Fig. +12.3c. The preview changes to show NA instead of m. Press +\textbf{\emph{Ok}} and the variables are imported correctly. + +Use the climatic menu, Fig. 12.3e and item 2 in the checklist, see Table +12.3a. Start with the \textbf{\emph{Tidy and Examine}} menu, Fig. 12.3e. +The data here are already tidy, hence move straight to the +\textbf{\emph{One Variable Summarise Dialogue}}. If your data are in a +``different shape'' some of the other dialogues in this menu may be +needed. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3e The Tidy and Examine menu}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3f One Variable Summarise}} + +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +Summarise}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.9703in,height=2.42695in]{media/image1355.p ng} +& +\includegraphics[width=2.71051in,height=2.80483in]{media/image1356. png} \\ +\end{longtable} + +The results are in Fig. 12.3g. They are promising, because of the +following: + +\begin{enumerate} +\def\labelenumi{\alph{enumi})} +\item + There are no missing values in the Year, Month, Day variables. It + would be a problem if there were. +\item + Amazingly the rainfall variable is also complete. This is great, but + rare. There are missing values in the other elements, partly because + they started later than the rainfall. +\item + However, the Station name was imported as a character, and not a + factor variable. +\end{enumerate} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4867}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4956}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3g Results from Summary -- Step 2 in checklist}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3h Name as Factor}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=4.38314in,height=2.08182in]{media/image1387.png} +& +\includegraphics[width=1.69775in,height=2.7145in]{media/image1353.png} \\ +\end{longtable} + +The Station name is not a problem here, because there is only one +station. However, it is still made into a Factor variable for +completeness, Fig. 12.3h. This is important when there are multiple +stations in the same file. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3i}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3j}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.73242in,height=1.65301in]{media/image1354.png} +& +\includegraphics[width=3.14155in,height=3.01915in]{media/image1361.png} \\ +\end{longtable} + +The \textbf{\emph{Climatic \textgreater{} Date}} menu, Fig. 12.3i is +used for Steps 3 to 5 in the checklist, Table 12.3a. First calculate a +single Date variable, i.e. a Variable of Type (D). Here it is calculated +from the 3 variables, giving the YEAR, MONTH and DAY as shown in Fig. +12.3j. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3k Infilling where dates are omitted}} + +\textbf{\emph{Climatic \textgreater{} Dates \textgreater{} Infill +Missing Dates}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13 Adding variables from the date}} + +\textbf{\emph{Climatic \textgreater{} Dates \textgreater{} Use Date}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.10247in,height=2.98338in]{media/image136 0.png} +& +\includegraphics[width=2.85996in,height=4.37336in]{media/image1376.p ng} \\ +\end{longtable} + +Next -- Step 4 - is to check for any gaps in the data, using +\textbf{\emph{Climatic \textgreater{} Dates \textgreater{} Infill +Missing Dates}}, Fig. 12.3k. They are absent dates in the file, for +example a year being absent. This is separate from the dates being +complete, but with missing values in the data. + +In this case the result was that there was nothing to infill. Proceed to +Step 5 with \textbf{\emph{Climatic \textgreater{} Dates \textgreater{} +Use Date}}, Fig. 12.3l. Dodoma is in the southern hemisphere, with a +single rainy season from November to April. Hence, in Fig. 12.3l, the +year is shifted to start in July. Five variables are generated, as shown +in Fig. 12.3l. + +Now a little ``housekeeping'', Step 6 in the checklist. +\textbf{\emph{Right-click}} and \textbf{\emph{delete}} the 3 original +YEAR, MONTH DAY variables and re-order the remaining variables, Fig. +12.3m, so the measurements are last. This is a convenient, and not an +essential step. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4867}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4956}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3m}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3n}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.45925in,height=1.94968in]{media/image1363.png} +& +\includegraphics[width=3.51321in,height=2.35447in]{media/image1367.png} \\ +\end{longtable} + +The data are shown in Fig. 12.3n. They are now ready for Step 7, which +is to define the data as climatic, as shown in Fig. 12.3o. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3o Defining a data frame as climatic}} + +\textbf{\emph{Climatic \textgreater{} Define Climatic Data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3p The Check Data menu}} + +\textbf{\emph{Climatic \textgreater{} Check Data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.0738in,height=3.73997in]{media/image138 5.png} +& +\includegraphics[width=2.90932in,height=1.78502in]{media/image1365.p ng} \\ +\end{longtable} + +The \textbf{\emph{Climatic \textgreater{}}} \textbf{\emph{Define +Climatic Data}} dialogue should largely be filled automatically. Check +carefully this it has the variables you will be using in the future +analyses. Check, especially, the variable for the Station names and +those for the dates. Then \textbf{\emph{press the Check Unique button}}. + +In this check, green is a good colour as is shown in Fig. 12.3o. This +check verifies that the combination of Station name and Date can become +key fields in this data frame. If not, then it is likely that you have +some duplicates in the data. Duplicates are days (rows) in the file +where a date has been given twice. Then you need to return to the +\textbf{\emph{Climatic \textgreater{} Tidy and Explore}} menu as we +discuss in Section 12.6. + +In the checklist, Table 12.3a you now usually move to the +\textbf{\emph{Climatic \textgreater{} Check Data}} menu, Fig 12.3p. This +is described in detail in Chapter 5, and we return to this menu in +Section 12.6. It is omitted here to proceed quickly to the production of +the variables and graphs needed for PICSA. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3q}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3r}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.19666in,height=2.97857in]{media/image1369.png} +& +\includegraphics[width=2.34839in,height=3.04324in]{media/image1379.png} \\ +\end{longtable} + +Hence, move to Step 9 in the checklist, i.e.~the \textbf{\emph{Climatic +\textgreater{} Prepare}} menu, Fig. 12.3q. The \textbf{\emph{Climatic +\textgreater{} Prepare \textgreater{} Transform}} dialogue, Fig. 12.3r +is used first as explained below. + +Complete Fig. 12.3r as shown and press \textbf{\emph{Ok}}. This produces +a new variable, called \textbf{\emph{rainday}}, that takes the value 1 +when it is rainy -- defined here as a day with more than 0.85mm. It is +zero otherwise, as shown in Fig. 12.3s. This is used for graphs of the +number of rain days. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3s Saving the data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3t Save the RDS file}} + +\textbf{\emph{File \textgreater{} Save As \textgreater Save Data As}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.8975in,height=1.80404in]{media/image1417.pn g} +& +\includegraphics[width=3.15395in,height=0.94913in]{media/image137 2.png} \\ +\end{longtable} + +These data are now saved as an R file, i.e.~with an RDS extension. Use +\textbf{\emph{File \textgreater{} Save As \textgreater{} Save Data As}}, +Fig. 12.3s to give the dialogue shown in Fig. 12.3t. +\textbf{\emph{Browse}} to where you want to save the data. Once you +click \textbf{\emph{Save}} on that dialogue, you return automatically to +Fig. 12.3t and \textbf{\emph{click Ok}} to make the Save. + +Once the data are saved, then re-open these saved data, to continue the +work on a future occasion. The first 10 steps do not have to be repeated + +These steps, so far, have been described in detail. In practice, once +they become routine, they typically take 5 minutes or less. If problems +are found during the process, then we strongly recommend you consider +making corrections in the database, or (less comfortably) in an Excel +file, and then start the checklist again. + +If you are following these steps with the Dodoma data, then it is time +to substitute a further data set. The data used, so far, was of very +good quality, but there were still some issues, that we discuss in +Section 12.6. Hence use \textbf{\emph{File \textgreater{} Open From +Library \textgreater{} Instat \textgreater{} Browse \textgreater{} +Climatic \textgreater{} Tanzania}} again and choose the file called +\textbf{\emph{Dodoma18c}}. The data are the same, except 2 more +variables are added, with the corrected temperature data. These new +variables are called Tmax and Tmin. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3u Rainfall and temperature summaries}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3v Day range sub-dialogue}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.01735in,height=3.71971in]{media/image1377. png} +& +\includegraphics[width=2.9682in,height=2.79677in]{media/image1351.p ng} \\ +\end{longtable} + +The next steps, 11 and 12 in the checklist, both use the +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries}} dialogue, Fig. 12.3u + +Two important decisions are i) whether the summaries are to be for the +whole (shifted) year, or perhaps just for the rainy season? Then ii) how +you will handle missing values in the data. + +In Fig. 12.3u we choose to get all summaries for the \textbf{\emph{rain +variable}} for the 6 months of the rainy season, from November to April. +Hence click on the \textbf{\emph{Day Range}} button in Fig. 12.3u. + +In the sub-dialogue in Fig. 12.3v, choose the range to be +\textbf{\emph{November 1st to April 30th}}. After pressing +\textbf{\emph{Return}} you see that the day range is now 6 months, from +the shifted day number 124 to day 305, i.e. about 182 days. + +Now, in Fig. 12.3u, check the \textbf{\emph{Omit Missing Values +checkbox}}. Then click on the \textbf{\emph{Summaries button}}, and then +on the \textbf{\emph{Missing Tab}}, Fig. 12.3w. Set it, as shown in Fig. +12.3w, to about 160 days. This permits a few missing values, but not a +complete month missing. + +Then, in the same sub-dialogue, click on the \textbf{\emph{Summaries +tab}} and just have the \textbf{\emph{N-Non Missing}} and the +\textbf{\emph{Sum}} checked, as shown in Fig. 12.3x. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4867}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4956}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3w Missing values tab}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3x Summaries calculated}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.94948in,height=1.95758in]{media/image1339.png} +& +\includegraphics[width=3.11883in,height=2.71695in]{media/image1334.png} \\ +\end{longtable} + +Pressing Ok in the dialogue in Fig. 12.3u results in a new data frame +with 4 variables and 85 rows, Fig. 12.3y, because there are 85 years +(seasons) of data. The summary for the first year (1934/35 season) is +missing. This may come as a slight surprise, because there are no +missing values in the rainfall data. However, the record starts on 1 +January 1935, which therefore does not have November or December of the +1934/35 season. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4867}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4956}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3y}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3z}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=1.98446in,height=3.094in]{media/image1342.png} & +\includegraphics[width=3.93056in,height=3.12658in]{media/image1335.png} \\ +\end{longtable} + +Return to the same dialogue (\textbf{\emph{Climatic \textgreater{} +Prepare \textgreater{} Climatic Summaries}}) to add 3 more summaries. + +\begin{enumerate} +\def\labelenumi{\alph{enumi})} +\item + Change the \textbf{\emph{rain}} to the \textbf{\emph{rainday}} + variable in the main dialogue, Fig. 12.3u. Press Ok. +\item + Change the element to \textbf{\emph{Tmin}} and change the + \textbf{\emph{Summary}} to the \textbf{\emph{Mean}}, (rather than the + Sum). Press \textbf{\emph{Ok}}. +\item + Change the element to \textbf{\emph{Tmax}}. Press Ok. +\end{enumerate} + +The results are in Fig. 12.3z. They show, for example, that in the +1962-63 season (November to April) there was a total of 422mm rain from +41 rain days, hence an average of just over 10mm per rain day. The value +of Tmin could not be given, because there were only 147 non-missing days +in that season. The mean for Tmax was 29.4˚C. + +Finally, in this initial checklist, give the corresponding graphs. For +the temperature data there is not yet a special climatic dialogue, so +use \textbf{\emph{Describe \textgreater{} Specific \textgreater{} Line +Plot}}, as shown in Fig. 12.3aa. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3aa}} + +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} Line +Plot}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3ab}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.91657in,height=3.03679in]{media/image1327.pn g} +& +\includegraphics[width=3.21181in,height=3.03567in]{media/image133 7.png} \\ +\end{longtable} + +In Fig. 12.3aa the \textbf{\emph{Multiple Variables}} option is used to +facilitate plotting Tmax and Tmin together. \textbf{\emph{Points are +added}}, as is a \textbf{\emph{line of best fit}}. The +\textbf{\emph{Data Options}} button is also used to +\textbf{\emph{filter}} the data to just \textbf{\emph{s\_year +\textgreater{} 1957}}. + +The resulting graph is shown in Fig. 12.3ab. It indicates an increase of +temperatures, with Tmin having a higher slope than Tmax. The analysis of +the temperature data and the presentation of the corresponding PICSA +graphs is considered further in Section 12.5. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3ac Remove filter}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3ad The Climatic \textgreater{} PICSA dialogues}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.43495in,height=2.98293in]{media/image1333.png} +& +\includegraphics[width=3.48315in,height=2.31285in]{media/image1348.png} \\ +\end{longtable} + +Before doing a rainfall graph use \textbf{\emph{Right-click}} and the +last option is to \textbf{\emph{Remove Current Filter}}, Fig. 12.3ac. + +Then use \textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} +Rainfall Graph}}, Fig 12.3ad. Graph the variable called sum\_rain, Fig. +12.3ae. Then use the \textbf{\emph{PICSA Options}} button to add a +horizontal line for the mean, Fig. 12.3af. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3ae}} + +\textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} Rainfall +Graph}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3af}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.84565in,height=2.78955in]{media/image1325.pn g} +& +\includegraphics[width=3.09351in,height=2.10585in]{media/image135 2.png} \\ +\end{longtable} + +The resulting graph is shown in Fig. 12.3ag. Return to the +\textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} Rainfall +Graph}} dialogue and substitute the \textbf{\emph{sum\_rainday}} +variable to give a similar graph of the seasonal number of rain-days. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.3ag PICSA graphs of the seasonal totals and number +of rain days}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=4.82544in,height=2.43036in]{media/image1350.png} \\ +\includegraphics[width=4.84979in,height=2.4711in]{media/image1347.png} \\ +\end{longtable} + +The results are in Fig. 12.3ag. They show that the mean rainfall total +was about 560mm from an average of just over 40 rain days. This is an +average of about 7 rain days per month, roughly one day in 4. This is +sufficiently low that it is likely that there are often long dry spells +during the season. + +We have produced our first ``PICSA-style'' graphs. Further graphs are +produced in the next Section, together with ways of making the graphs +appropriate for the extension staff and for farmers. + +\section{The rainy season}\label{the-rainy-season} + +In this section we consider the production of further rainfall summaries +with the \textbf{\emph{Climatic \textgreater{} Prepare}} menu and the +corresponding graphs from the \textbf{\emph{Climatic \textgreater{} +PICSA}} menu. + +Usually between 6 and 8 graphs are prepared and discussed on the first +day of the main PICSA workshop. They all have the same format as shown +in Fig. 12.3ag and are designed to look consistent. The x-axis is the +years (or seasons) and the y-axis is for something of interest. They +usually include a rainfall total, Fig. 12.3ag together with the start, +end and length of the rainy season. There are then one or two graphs of +events within the season, for example the length of the longest dry +spell or the most extreme daily rainfall. + +Definitions can be changed easily. PICSA encourages ``options by +context'' and this can apply to households and or crops having different +definitions for the start of the rains, and for any other +characteristic. + +The graphs are also used on the ``practice with farmers day'', during +the workshop, usually day 4. Following the workshop, the agreed graphs +are then used by the extension staff or farmer's representatives to +share with individuals or groups of farmers. + +We continue with the data from Dodoma, used in Section 12.3. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5694}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4167}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4a Start of the rains}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Start of +the Rains}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4b Adding a dry-spell condition}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.41212in,height=3.15482in]{media/image 1344.png} +& \includegraphics{media/image1362.png}\{ width=``2.573474409448819in'' +hei ght=``2.9682469378827645in''\} \\ +\end{longtable} + +Use \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Start +of the Rains}}, Fig. 12.4a. A range of definitions of the Start of the +rains is discussed in Section 7.3. In 2019, in Malawi and Tanzania the +definitions used were: + +\begin{itemize} +\item + Malawi: First occasion from 1 October with 25mm or more in 3 days. +\item + Tanzania: First occasion from 15 November with 20mm in 4 days, of + which 2 days were rainy. +\end{itemize} + +We here use the same as Tanzania. Hence click on the \textbf{\emph{Day +Range}} in Fig. 12.4a and set the earliest date to \textbf{\emph{15 +November}}. Make the latest date \textbf{\emph{29 February}}. Then +\textbf{\emph{complete the dialogue}} as shown in Fig. 12.4a and press +\textbf{\emph{Ok}}. + +This generates 2 new variables, the first with the day number in the +(shifted) year and the second giving the corresponding date. + +Return to the \textbf{\emph{Climatic \textgreater{} Prepare +\textgreater{} Start of the Rains}} dialogue and add the dry-spells +condition, Fig. 12.4b. Change the default of 9 days to 10 days as the +maximum allowable spell\footnote{With the default of more than 9 days, + there is no planting date in 2 of the years. This is possible, and the + issue us discussed in Section 7.4. Here we avoid the discussion!}. +Also change the names of the resulting variables, or the events produced +before will be overwritten. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4c End of the rains}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} End of the +Rains}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.00062in,height=3.02584in]{media/image1343. png} +& +\includegraphics[width=2.92404in,height=2.47884in]{media/image1341.p ng} \\ +\end{longtable} + +In Chapter 7 we discuss the use of these alternative definitions of the +start. Here we simply choose one of them -- for the next PICSA graph. We +quickly also get data on the end and length of the season. + +In many countries we use a simple water-balance definition of the end of +the rains/season. This does not work well in Southern Africa, as +explained in Section 7.4. Hence here we use the method proposed by +(Mupamgwa, Walker, \& Twomlow, 2011). + +So, complete the \textbf{\emph{Climatic \textgreater{} Prepare +\textgreater{} End of the Rains}} dialogue as shown in Fig. 12.4c. In +the \textbf{\emph{Day Range}} use \textbf{\emph{15 February to 30 +June}}. + +Then use \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} +Length of the Season}}, Fig. 12.4d and complete as shown. + +The results have added variables to the annual data frame, Fig. 12.4e. +The year indicated shows that in the 1937/38 season there was a planting +opportunity on day 174, (i.e.~21 December). But, if the dry-spell +definition is included then the start was on 23rd January. The last +heavy rainfall was on 31\textsuperscript{st} March, which was defined as +the end of the rains/season, giving a season length of 101 days. + +Graphs can be produced assuming the user accepts the definitions. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4e The annual data frame}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4f A graph of the Start}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.2342in,height=2.94229in]{media/image1346.png} & +\includegraphics[width=2.79327in,height=2.88154in]{media/image1349.png} \\ +\end{longtable} + +Use \textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} Rainfall +Graph}} for the variable \textbf{\emph{start\_rain}} and complete as +shown in Fig. 12.4f. Then complete the \textbf{\emph{PICSA options}} for +the \textbf{\emph{Y-axis}} and the \textbf{\emph{Lines}}, as shown in +Fig. 12.4g and 12.4h. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4867}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4956}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4g}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4h}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.81196in,height=2.28858in]{media/image1357.png} +& +\includegraphics[width=2.93531in,height=2.23212in]{media/image1294.png} \\ +\end{longtable} + +The resulting graph is in Fig. 12.4i. There can be similar graphs for +the end of the rains and the length of the season. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4867}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4956}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4i PICSA graph for the start}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4j The start with the dry-spell condition}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.96358in,height=2.67662in]{media/image1292.png} +& +\includegraphics[width=3.17344in,height=2.69809in]{media/image1291.png} \\ +\end{longtable} + +Then it is time to reflect in three different ways: + +\begin{enumerate} +\def\labelenumi{\alph{enumi})} +\item + Is this the \textbf{\emph{right definition to use for the start}}? For + example, should the 15 Nov be the earliest possible starting date, + given that quite a lot of seasons had a starting opportunity very + close to this earliest date. Or should the dry spell have been + included.\\ + It is easy to try the graph with the dry spell included. Just return + to the \textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} + Rainfall Graph}} dialogue, substitute the start\_dry variable and + press Ok to give the graph in Fig. 12.4j. The mean starting date is + now about a week later and there are considerably more years that do + not have a successful start until January. Which graph more closely + reflects the farmer's situation? +\item + Does the graph indicate there may be \textbf{\emph{problems with the + data}}? Often the first results indicate possible data issues. In this + case there is nothing that stands out, but to show what might be done, + we examine the extreme value in Fig. 12.4i. This was a start only on + 6\textsuperscript{th} February in the 1960/61 season. +\end{enumerate} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1806}} + >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.2083}} + >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.5833}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4k The start in the extreme year}} + +\begin{itemize} +\tightlist +\item + \textbf{Climatic \textgreater{} Check Data \textgreater{} Display + Daily}* +\end{itemize} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4l PICSA graph with options}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +!{[}{]} (media/ima ge1284.png )\{width=``0 .981046587 9265092in'' +height=``4 .193491907 261592in''\} & +\includegraphics{m edia/image12 85.png}\{widt h=``1.1892607 +174103238in'' heigh t=``4.1505664 91688539in''\} & +\includegraphics[width=3.49031in,height=3.29597in]{media/ima ge1297.png} \\ +\end{longtable} + +Use the \textbf{\emph{Climatic \textgreater{} Check Data \textgreater{} +Display Daily}} dialogue to give the results in Fig. 12.4k. This shows +that November and December did have very poor rains in that season. With +the definition of the start used in Malawi (25mm in 3 days) the start +would have been on 23\textsuperscript{rd} January, but the insistence, +in the Tanzania definition, of at least 2 rain days ruled this out. +Hence the start was indeed on 6\textsuperscript{th} February. + +\begin{enumerate} +\def\labelenumi{\alph{enumi})} +\setcounter{enumi}{2} +\tightlist +\item + Is the graph as clear as possible for the intended PICSA audience? + This is what we address here. +\end{enumerate} + +An example of a graph with additional options is in Fig. 12.4l. The +elements changed, compared to the default, are shown in Fig. 12.4m. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4m Setting PICSA graph options}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=5.99749in,height=2.54791in]{media/image1307.png} \\ +\includegraphics[width=6.01271in,height=1.61433in]{media/image1282.png} \\ +\includegraphics[width=2.43394in,height=1.88575in]{media/image1286.png} \\ +\end{longtable} + +\begin{enumerate} +\def\labelenumi{\arabic{enumi})} +\item + From the titles tab in Fig. 12.4m, a sub-title shows what has been + plotted. The caption gives credit to TMA for supplying the data. The + units are now specified on the y-axis. +\item + On the x-axis the labels are given every 10 years. +\item + On the y-axis the data start at zero. I like that! +\end{enumerate} + +In Fig. 12.4n the x-axis labels have been changed to every 4 years. The +minor-grid lines are now omitted (using the Panel tab in the +sub-dialogue). The sub-title has also been moved to become part of the +caption\footnote{A caption can be split over multiple lines if + \textbackslash n is used as a line feed.}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4n}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4o}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.99579in,height=2.75572in]{media/image1298.png} +& +\includegraphics[width=3.00324in,height=2.79129in]{media/image1328.png} \\ +\end{longtable} + +Further ``within the season'' graphs can be given as needed. The season +length was calculated earlier, Fig. 12.4e and is plotted in Fig. 12.4o. +The median length at Dodoma was about 4 months and varies between 2 and +6 months. + +The total rainfall within the season is sometimes requested. This is the +rainfall between the start dates and the end dates. This again uses the +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries}}, as shown in Fig. 12.4p. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4028}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5833}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4p}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Summaries}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4r Day Range from start to end}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +! \href{media/image1329.png}{}\{wi dth=``2.4361231408573927in'' heig +ht=``3.1956178915135607in''\} & +\includegraphics[width=3.6065in,height=2.36469in]{media/imag e1331.png} \\ +\end{longtable} + +The difference here, from the summaries given earlier, is the choice of +the dates, from the \textbf{\emph{Day Range}} button in Fig. 12.4q. In +Fig. 12.4r they are specified as \textbf{\emph{Variable Day}} and use +the summary data for the start and end of the rains, that was found +earlier. In the dialogue, in Fig. 12.4q the missing values checkbox is +now unticked to dis-allow any years when there are missing values for +the rainfall during the season. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4867}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4956}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4s}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4t}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.74134in,height=2.89889in]{media/image1332.png} +& +\includegraphics[width=3.20657in,height=2.91507in]{media/image1308.png} \\ +\end{longtable} + +The results are in the last 2 variables of the summary data, shown in +Fig. 12.4s. In this summary, the variable called +\textbf{\emph{count\_rain}} is the number of days used for the sum and +is almost the same as the length -- which is also given in Fig. 12.4s. +It should be the same, because it is simply counting the number of days +used for that calculation, i.e. between the start and end dates. It is +thus effectively another way of finding the length\footnote{You may + wonder why they are not always the same. They are within a day of each + other and we consider that is ``good enough'' for the uses of the + results. They sometimes differ by a day for one (or both) of 2 + reasons. First the length =End -- Start. So, if the Start was 14 Nov, + and the End was 16\textsuperscript{th}, then Length = 2 days. But 3 + days are used in the calculation of the sum, from the start day to the + end day. Second -- and the other way -- is that February 29 is an + extra day in non-leap years for calculating the length, but not for + the number of days in calculating the sum. So, in Fig. 12.4s the + results are the same in non-leap years, and different, by one day, in + leap years.}. + +The resulting graph is shown in Fig. 12.4t. + +An attractive way these results can be used is shown in Fig. 12.4u. The +data, from Fig. 12.4s, can be transferred to an interactive app which +(unlike R-Instat) is available for a smart-phone. In Fig. 12.4u the user +can move the slider, shown at 600mm to find the risks for any given +seasonal rainfall required. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4u}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.1482in,height=2.95626in]{media/image1311.png} \\ +\end{longtable} + +It is an obvious graph and is often proposed for PICSA. However, it is +complicated, as it is composed of three elements, namely the start, the +end, and then the totals within this period, that varies from season to +season. We often find it is not very different to the graph with fixed +end points, such as Fig. 12.3ag that gave the totals from November to +April. + +These graphs, from the start to the end may be more relevant for sites +where there is a bimodal pattern of rainfall. Even then that would be +``in competition'' with simpler graphs giving the totals for fixed +periods, say from October to December and then for March to May. + +We return to the possible use of the facility for variable dates in the +Section 12.5. + +This same facility for flexible choice of the starting and ending dates +is available in other dialogues and the longest dry-spell length during +the season is an obvious graph. + +The \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} +Spells}} dialogue is shown in Fig. 12.4v. The \textbf{\emph{Day Range}} +is completed as shown earlier in Fig. 12.4r. The graph of the spell +lengths, using Climatic \textgreater{} PICSA \textgreater{} Rainfall +Graphs is then shown in Fig. 12.4 w. The median for the longest spell +length in the season is 2.5 weeks and about 1 year in 7 has a dry spell +of 25 days or more. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4306}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5556}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4v Dry spells during the season}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Spells}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4w Graph of maximum spell lengths}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image1320.png}\{ width=``2.5910148731408573in'' +he ight=``3.0473589238845142in''\} & +\includegraphics[width=3.41198in,height=3.08866in]{media/image1 317.png} \\ +\end{longtable} + +The Climatic \textgreater{} Prepare \textgreater{} Extremes dialogue +facilitates a study of extreme events. It is used in Fig. 12.4x to find +the maximum single day rainfall each year, together with when the +maximum occurred. + +The graph, in Fig. 12.4y shows the median is 66mm on a day and just a +few years have a day with more than 100mm. The colours in Fig. 12.4y +indicate which month the maximum value occurred, and indicate that it +can be in any of the months of the rainy season\footnote{From the dates, + use \textbf{\emph{Prepare \textgreater{} Column: Calculate + \textgreater Calculation}} to find the month of the maximum. + \textbf{\emph{Label}} the month and \textbf{\emph{reorder}}, so + December is first. Then, in the \textbf{\emph{Climatic \textgreater{} + PICSA \textgreater{} Rainfall Graph}}, use \textbf{\emph{Plot + Options}} and edit the points layer to include the month in the graph.}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4028}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5833}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4x}} + +\textbf{\emph{Climaitc \textgreater{} prepare \textgreater{} Extremes}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.4y}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image1319.png}\{w idth=``2.415457130358705in'' +hei ght=``3.559381014873141in''\} & +\includegraphics[width=3.59625in,height=3.23209in]{media/imag e1310.png} \\ +\end{longtable} + +\section{More with the rainfall and temperature +data?}\label{more-with-the-rainfall-and-temperature-data} + +With rainfall propose more detailed analyses and other types of +presentation. + +Vertical lines instead of joined lines\footnote{Changed geom\_line, to + geom\_col, colour to black, and size=0.8 to width=0.05 in PICSA line + chart.}? + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.26806in,height=2.82569in]{media/image1261.png} \\ +\end{longtable} + +\hl{Also do risks for temperatures, where no special facilities exist. +First frost and last frost in Leshoto as examples. Also in more detail +in Chapter 8.} + +\hl{Also ask about Bangladesh where the risks may be of too much rain, +rather than too little?} + +\section{Coping with data issues}\label{coping-with-data-issues} + +\section{Combining risks for different +crops}\label{combining-risks-for-different-crops} + +Table 12.7a is taken from the PICSA Field Guide, (Dorward, Clarkson, \& +Stern, 2016) and shows the sort of results we are aiming for. The first +step is for the Ministry of Agriculture or elsewhere to provide the +information in the first 4 columns of Table 12.7a. This specifies +various crops (options for PICSA farmers) together their length and +water requirement. For example, the local variety of maize is a 120-day +crop and needs 480mm water. Alternatively, a possible variety of sorghum +is 110 days and needs 300mm. + +The calculations in this section provide the risks from specified dates +of planting. In the last column of Table 12.7a the chance of success +from a late planting is just one year in 5 for the local maize, compared +to 3 years in 5 for the sorghum. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.1236}} + >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.1573}} + >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.1461}} + >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.1236}} + >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.1348}} + >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.1461}} + >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.1461}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{Table 12.7a Example crop table} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\textbf{Crop} & \textbf{Variety} & \textbf{Days to maturity} & +\textbf{Crop water need (mm)} & \textbf{Chance of success if season +starts:} & & \\ +& & & & \textbf{on x (Early)} & \textbf{on x (Middle)} & \textbf{on x +(Late)} \\ +Maize & Local & 120 & 480 & 5/10 & 4/10 & 2/10 \\ +Maize & Pioneer xxx & 100 & 350 & 7/10 & 5/10 & 4/10 \\ +Sorghum & Seed Co xxx & 110 & 300 & 8/10 & 7/10 & 6/10 \\ +\end{longtable} + +Overall, for a chosen planting date, there are 3 separate risks, as +follows: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + Planting may not be possible by that date, i.e.~the season starts + later. +\item + There may not be time to grow the crop, i.e.~the season ends too early +\item + There may be insufficient water in the time needed for the crop. +\end{enumerate} + +The crop will only be successful if none of these three risks occurs. We +call this the ``Overall risk''. + +A second possibility is the calculation of the risk of success if there +is a planting opportunity on day x. In that case, just risks 2 and 3 +apply. This is the ``Conditional risk''. + +The example used is for Dodoma in Tanzania. Use \textbf{\emph{File +\textgreater{} Open from Library \textgreater{} Instat \textgreater{} +Browse \textgreater{} Tanzania \textgreater{} Dodoma}}. + +Use \textbf{\emph{Climatic \textgreater{} Check Data \textgreater{} +Boxplot}} as shown in Fig. 12.7a to show the seasonal pattern of +rainfall. The results are in Fig. 12.7b. There July and August are +omitted because there was no rain over the lower threshold of 0.85mm. +The rainy season is seen to be from November to April. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4912}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7a}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.97699in,height=3.1413in]{media/image1258.png} & +\includegraphics[width=3.06958in,height=2.99362in]{media/image1250.png} \\ +\end{longtable} + +As a second preliminary, Fig. 12.7c uses \textbf{\emph{Climatic +\textgreater{} Prepare \textgreater{} Climatic Summaries}} to show the +seasonal totals. The summary data are in Fig. 12.7d. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5556}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4306}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7c}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries}} + +\textbf{\emph{Summaries sub-dialogue for total and missing values}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7d Summary Data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.02782in,height=3.53336in]{media/image1 255.png} +& \includegraphics{media/image1257.png} \{width=``2.008472222222222in'' +he ight=``3.5148261154855645in''\} \\ +\end{longtable} + +The \textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} Rainfall +Graph}}, Fig. 12.5e is then used to show the resulting data. This is in +Fig. 12.7f, and shows the seasonal mean is just over 550mm. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3750}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6111}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7e}} + +\textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} Rainfall +Graph}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{m edia/image1242.png}\{widt h=``2.2830610236220474in'' +height =``2.6302777777777777in''\} & +\includegraphics[width=3.83075in,height=2.82404in]{media/i mage1253.png} \\ +\end{longtable} + +The start and end of the rains are two of the building blocks for the +crops dialogue. Hence these are now found. They will usually already be +available from earlier calculations, see Section 12.3, but are also +shown here for completeness of this section. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7g}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Start of +the Rains}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7h}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} End of the +Rains}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.33995in,height=3.19843in]{media/image125 1.png} +& +\includegraphics[width=2.84554in,height=3.18441in]{media/image1256.png} \\ +\end{longtable} + +The resulting data frame is shown in Fig. 12.7i and the start and end of +the rains are shown graphically in Fig. 12.7j. + +With these preparatory steps the scene is now set for the crops +dialogue. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7i}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7j}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.95183in,height=3.08248in]{media/image1252.png} +& +\includegraphics[width=2.94268in,height=3.08856in]{media/image639.png} \\ +\end{longtable} + +Use \textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} Crops}}. +For clarity the dialogue is shown twice. In Fig. 12.7k the top controls +are completed with the data frame for the daily data, i.e.~dodoma. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7k Crops with daily data}} + +Climatic \textgreater{} PICSA \textgreater{} Crops +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7l Crops with start and end data}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.02909in,height=2.60493in]{media/image637. png} +& +\includegraphics[width=2.96668in,height=2.6095in]{media/image640.p ng} \\ +\end{longtable} + +Then, as shown in Fig. 12.7l, the dates for the start and end of the +rains are from the summary data, i.e.~using the dodoma\_by\_s\_year data +frame. The details of the crop are then also specified. + +For this first illustration a crop planted on day 185 (1 January) that +needs 300mm water and has a growing season length of 90 days is used. + +The results are in the output window and also in two new data frames, +shown in Fig. 12.7m and Fig 12.7n. The overall summary is in Fig. 12.7m +and shows that this combination has a chance of success of 0.412, about +4 years in 10. + +The detailed results are in Fig. 12.7n. In the 1935/36 season there was +a planting opportunity on day 177, i.e.~before our day 185 requirement. +The rainfall in the 90 days from day 185 was 357mm, which is sufficient +and the end date of day 296 was also more than 90 days from the starting +date. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4028}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5833}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7m}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fug 12.7n}} + +\hl{Redo when no zero in first year} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image654.png}\{wi dth=``2.4111964129483816in'' he +ight=``2.10790135608049in''\} & +\includegraphics[width=3.56517in,height=3.13522in]{media/im age644.png} \\ +\end{longtable} + +Hence all 3 conditions were TRUE and hence the final column, called +\textbf{\emph{overall\_cond}} is also TRUE. This final variable is TRUE +in xxx of the 77 years that did not have missing data, giving the +overall result of 0.412. \hl{Change when corrected.} + +The 1947/48 season was one where the rainfall in the 90 days was just +244mm and hence was insufficient. In 1949/50 the season was not long +enough and in 1950/51 there was no starting opportunity by January +1\textsuperscript{st}. These years all contributed to the 6 years in 10 +when the crop would have had problems. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7o}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7p}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.97665in,height=2.22394in]{media/image638.png} & +\includegraphics[width=2.93566in,height=3.06409in]{media/image641.png} \\ +\end{longtable} + +Return to the \textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} +Crops}} dialogue and specify planting dates from 1\textsuperscript{st} +December to mid-January as shown in Fig. 12.7o. There is also a range of +crop water requirements, from 250 to 400mm) and crop durations from 75 +to 120 days. At other sites crops with a greater water requirement and +with longer season lengths could also be considered. For Dodoma, the +initial graphs in Fig. 12.7b, 12.7f and 12.7j suggest the range of +values given in Fig. 12.7o. + +The results, in the output window, are shown in Fig. 12.7p. They can be +interpreted here, but for presentation they are copied into Excel or to +Calc (in Open Office). Copied from Fig. 12.7p they can be pasted into +Excel, using the Import wizard. The results are shown in Fig. 12.7r + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7r}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7s}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.0118in,height=1.49984in]{media/image627.png} & +\includegraphics[width=3.00837in,height=1.74082in]{media/image626.png} \\ +\end{longtable} + +In Excel it is convenient to express the risks as fractions over 10 +years as is shown in Fig. 12.7s. The results are in Fig. 12.7t. From +Fig. 12.7t we see that a 75 day crop that needed 250mm and planted in +1\textsuperscript{st} December would be OK in 6 years out of 10. Later +planting would slightly increase the chance of success. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7t}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7u Find the planting probabilities}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.07458in,height=2.14494in]{media/image645.png} & +\includegraphics[width=2.8573in,height=1.89192in]{media/image610.png} \\ +\end{longtable} + +A 90-day crop with this same modest water requirement would have a +greater chance of success, if planted in December, but not if planting +were delayed till January. + +It would be useful to include the chance of being able to plant by the +dates given in Fig. 12.7t. A possible exercise in a training workshop is +to consider how many different ways this can be found in +R-Instat\footnote{You could simply count the number of years in Fig. + 12.4i when planting is on or before each day number. Or count from a + graphical display, such as Fig. 12.4j. This is simpler from a + cumulative display of the starting dates, using the + \textbf{\emph{Climatic \textgreater{} PICSA \textgreater{} + Cumulative/Exceedance Graph}}. Numerically you could give a logical + expression using the calculator, \textbf{\emph{Prepare \textgreater{} + Column: Calculate \textgreater{} Calculation}}, or using the + proportion summary in \textbf{\emph{Prepare \textgreater{} Column + Calculate \textgreater{} Column Summaries}}.}. We choose a bizarre, +but simple way using the \textbf{\emph{Climatic \textgreater{} PICSA +\textgreater{} Crops}} dialogue as shown in Fig. 12.7u. Complete the +dialogue as shown in Fig. 12.7u. This is just for the first day of the +crop, when we assume it needs no water. So the only risk is from the +planting day. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7v}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 12.7w}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.13081in,height=1.27005in]{media/image608.png} & +\includegraphics[width=2.89795in,height=2.14282in]{media/image622.png} \\ +\end{longtable} + +The results are in Fig. 12.7v. They show, for example that there is a +planting opportunity by 1 Jan in 9 years out of 10. This information is +now added to the table of crop risks, Fig. 12.7w. The interpretation is +that in 4 years in 10 there was a planting opportunity by +1\textsuperscript{st} December. In a year when planting was possible on +1\textsuperscript{st} December the proportion of successes for a 75-day +crop needing 250mm water was 6 out of 10. + +\bookmarksetup{startatroot} + +\chapter{The Seasonal forecast}\label{the-seasonal-forecast} + +\section{Introduction}\label{introduction-12} + +Many countries produce a seasonal forecast. (Hansen, Mason, Sun, \& +Tall, 2011) provides a review for Sub-Saharan Africa. The forecast, for +a given season, often results from a Regional Climate Outlook Forum +(RCOF), updated and down-scaled by the National Meteorological Service +(NMS). In some countries the forecast is a mixture of results from the +global climate models (GCMs) and statistical methods relating historical +climatic data to sea-surface temperatures. Fig. 13.1a and Fig. 13.1b +give examples of the forecast from Ghana and the Caribbean. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig 13.1a Ghana rainfall forecast, April - June 2015}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.1b Caribbean rainfall forecast April -- June +2015}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.99164in,height=3.06824in]{media/image606.gif} & +\includegraphics[width=3.00854in,height=2.74794in]{media/image623.png} \\ +\end{longtable} + +When statistical methods are used, the Climate Predictability Tool (CPT) +software is usually used to produce the forecast. CPT uses multiple +regression with usually the rainfall as the y (dependent or predictand) +variables and SSTs as the x's (independent, or predictor) variables. +There are usually many x (SST) variables and hence CPT offers the option +of doing a principal component analysis first. + +When there are also many y (rainfall) variables, a canonical correlation +analysis may precede the multiple regression analysis. + +R-Instat can export data for CPT. Hence one use of R-Instat is to +prepare the y-variables (rainfall or temperature) for analysis with CPT. +Traditionally these are 3-month rainfall totals, but any other summary +is possible, for example 3-month total rain days, or the date of the +start of the rains. The requirement is that there is one summary per +year (per station) and the \textbf{\emph{Climatic \textgreater{} +Prepare}} menu provides many options. This is considered in Section +13.2. + +The rainfall (or temperature data) are often station values, but they +may also originate from other sources, e.g.~reanalysis, or satellite or +merged data. These are sometimes provided ready for CPT. Sometimes +R-Instat could examine these data also and then prepare a subset for +CPT. This option is considered in Section 13.3 + +\section{The Y variables - Examining the rainfall +data}\label{the-y-variables---examining-the-rainfall-data} + +One use we propose for R-Instat is to examine the rainfall data, before +it is analysed with CPT. The first example is data from Ghana, already +prepared for CPT. The data are in the R-Instat library, hence use +\textbf{\emph{File \textgreater{} Open from Library \textgreater{} +Instat \textgreater{} Browse \textgreater{} Climatic \textgreater{} +Ghana}} and open the file called \textbf{\emph{rr-amj-1981-2014.txt}}. +The data are shown in Fig. 13.2a. + +The first 2 lines are the locations (Lat and Long) of each station. Then +there are the rainfall data, the 3-month totals from April to June, for +the 34 years from 1981 to 2014. They are from the 22 synoptic stations +in Ghana. + +We also need the locations of the station, but in a separate data frame. +Return to the last dialogue and read the data again. This time read just +the first 2 rows, Fig. 13.2b and give the file a new name. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.2a}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.2b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.99806in,height=2.76823in]{media/image615.png} & +\includegraphics[width=3.02243in,height=3.2849in]{media/image607.png} \\ +\end{longtable} + +The station data are now still the ``wrong way round''. There is a +dialogue to transpose, but it is simpler to use \textbf{\emph{Prepare +\textgreater{} Column: Reshape \textgreater{} Stack}}, Fig. 13.2c, as +shown in Fig. 13.2d. + +In Fig. 13.2d put all the columns, except the first to be stacked and +put the STN column to be ``carried''. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.2c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.2d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.59348in,height=1.72939in]{media/image609.png} & +\includegraphics[width=2.47702in,height=2.10991in]{media/image602.png} \\ +\end{longtable} + +In the stacked data the column called STN now has the Lat and Long. Now, +Fig. 13.2e, use the \textbf{\emph{Prepare \textgreater{} Column: Reshape +\textgreater{} Unstack}}, as shown to produce the location data as shown +in Fig. 13.2f. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.2e}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.2f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.25053in,height=3.36062in]{media/image599.png} & +\includegraphics[width=2.77208in,height=3.35034in]{media/image642.png} \\ +\end{longtable} + +The rainfall data are first examined briefly (as usual) with +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +One Variable Summaries.}} Use all the columns. The results are shown in +Fig. 13.2g. There is a problem with the station WEN, where the minimum +is -999. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.2g}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.2h}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.11013in,height=2.21722in]{media/image624.png} & +\includegraphics[width=2.87085in,height=2.88154in]{media/image619.png} \\ +\end{longtable} + +This could have been changed to a missing value when the data were +imported. Now the change is made with the dialogue +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +Replace Values}}. Fig 13.2h. + +Now stack the rainfall data using \textbf{\emph{Climatic \textgreater{} +Tidy and Examine \textgreater{} Stack}}, as shown in Fig. 13.2i. + +Now use \textbf{\emph{Describe \textgreater{} Specific \textgreater{} +Line Plot}}, as shown in Fig. 13.2j. Include the \textbf{\emph{Station}} +as a \textbf{\emph{facet}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.2i}} + +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +Stack}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.2j}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.15839in,height=2.91378in]{media/image6 18.png} +& +\includegraphics[width=2.84737in,height=2.88209in]{media/image630.pn g} \\ +\end{longtable} + +The results are roughly as shown in Fig. 13.2k. (If you would like to +get the results exactly as Fig. 13.2k, then either follow the note +below\footnote{The order of the factor levels is changed to go from + South to North (i.e.~in latitude order). A Date column has been added + (with Climatic \textgreater{} Dates \textgreater{} Make Date, and just + use the Year column. Then the data frame is defined as climatic, as + described in Chapter 8.} or open the file that is better prepared -- +called ghana1981-2014.rds and use the Climatic \textgreater{} PICSA +\textgreater{} Rainfall Graph dialogue.) + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.2k}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.26806in,height=3.05764in]{media/image617.png} \\ +\end{longtable} + +The stations go from South to North in Fig. 13.2k. We see that the most +Southerly station, Axim, is different to the other stations. The +variability of the few stations in the North of Ghana is much less than +those in the South. This is going to make the forecasting task much +harder to expect much that is meaningful for the North. + +Next examine the correlations. They use the original data, but +unstacking the data with the Stations from South to North will put the +resulting columns in the same order. + +Hence (assuming you have the data in this order) use Climatic +\textgreater{} Tidy and Examine \textgreater{} Unstack, as shown in Fig. +13.2l + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.2l}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.2m}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.02457in,height=2.95753in]{media/image620.png} & +\includegraphics[width=2.8682in,height=3.06266in]{media/image625.png} \\ +\end{longtable} + +Next use \textbf{\emph{Climatic \textgreater{} Seasonal Forecast Support +\textgreater{} Correlations}}. Fig. 13.2m. The results provide further +``food-for-thought. The most Southerly station (bottom row in Fig 13.2m) +and the most Northerly (column to the right in Fig. 13.2m) each have +quite a lot of blue values, i.e.~negative correlations. There are just 5 +stations in the North of Ghana (latitudes between 9°N and 11°N and the +correlations there are low. If 2 stations have a low or zero +correlation, then logically they should have a separate seasonal +forecast. However, Fig. 13.1a shows the whole of the North has a single +forecast. + +With this information we would be inclined to + +\begin{enumerate} +\def\labelenumi{\alph{enumi})} +\item + Omit Axim as it seems so different +\item + Consider only using the stations from the South. +\item + Query including Akatsi, which is the furtherst to the Eaqst and has + very low correlation with the other stations +\item + Look for more rainfall stations from the North. +\end{enumerate} + +If, instread, all the stations are used in CPT, then the finalo stage is +a multiple regression on each y-variable separately, as a function of +the set of x-variables, and they are usually the principal components. +Then the interest would be more in the individual results at a station +level -- and these are given by CPT. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.2n}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=5.91378in,height=5.0391in]{media/image621.png} \\ +\end{longtable} + +Finally, in \textbf{\emph{Climatic \textgreater{} Seasonal Forecast +Support \textgreater{} Correlations}} (Fig. 13.2m) use just the 5 +columns from the North, (from Bole to Navrongo) and opt for a pairwise +plot. This shows the size of the correlations clearly and confirms that +the whole of the North should not have a single forecast. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.2o}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.11252in,height=3.49577in]{media/image614.png} \\ +\end{longtable} + +\section{Rainfall data with many +stations}\label{rainfall-data-with-many-stations} + +The second example is from Rwanda. The rainfall data are considered in +this section. The data file is again in a form that reads directly into +CPT. The file, in Excel, is shown in Fig. 13.3a. These data are again +3-month rainfall totals and are from March to May. They are for 37 +years, from 1981 to 2017. + +These are estimated rainfall from ENACTS. This is a merged product, +combining station data with estimated rainfall from satellite +observations (Siebert, et al., 2019). In Fig. 13.3a the first column +gives the latitude and row 5 gives the longitude of each grid point. So, +the estimated rainfall total at 1.05°S and 28.54°E in 1981 was 550mm. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.3a}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.3b}} + +\textbf{\emph{File \textgreater{} Open}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.00471in,height=2.94802in]{media/image952 .png} +& +\includegraphics[width=2.95945in,height=3.26665in]{media/image969.p ng} \\ +\end{longtable} + +In the data in Fig. 13.3a the rectangle of data for 1981 is followed by +an approximate repeat of lines 4 and 5, followed by the data for 1982. +And so on to 2017. + +If the data, from Excel are saved, then the default (by Excel) is to add +the \textbf{\emph{txt}} extension and this makes it easy to import into +R-Instat. + +In R-Instat use \textbf{\emph{File \textgreater{} Open}}, Fig. 13.3b. +Change the \textbf{\emph{Lines to Skip}} to 4, so the first line is the +longitudes. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.3c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.3d Setting the filter}} + +\textbf{\emph{(Omit level 1 and from 54 onwards)}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.93866in,height=3.87341in]{media/image951. png} +& +\includegraphics[width=2.97186in,height=2.96056in]{media/image940. png} \\ +\end{longtable} + +These data, in Fig. 13.3c, need tidying. The first step is to delete the +rows between each year. This uses a filter, so right click, choose +Filter and then define a new filter on the first column. Part of the +filter sub-dialogue is shown in Fig. 13.3d. + +When you return to the main dialogue, Fig. 13.3e choose to make the +filtered data a subset. If you feel bold, then give the new name the +same as the old one, so the original file is overwritten. + +There are now 1924 rows of data, i.e.~52 rows each year, for 37 years. + +Now a year variable is added as shown in Fig. 13.3f. Check, Fig. 13.3f, +that it will be the same length as the other columns of data. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4028}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5833}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.3e Making a subset}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.3f Adding a year variable}} + +\textbf{\emph{Prepare \textgreater{} Column: Generate \textgreater{} +Regular Sequence}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image942.png}\{wi dth=``2.4592377515310586in'' +hei ght=``2.761431539807524in''\} & +\includegraphics[width=3.5354in,height=2.95258in]{media/ima ge960.png} \\ +\end{longtable} + +Now all that remains is to stack the data, \textbf{\emph{Climatic +\textgreater{} Tidy and Examine \textgreater{} Stack}}, as shown in Fig. +13.3g. The re4sulting data are in Fig.13.3h. There are now 126984 rows +of data, i.e.~37 years from 52 * 66 = 3432 equally spaced locations. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.3g}} + +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +Stack}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.3h The Rwanda ENACTS data so far}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.94677in,height=2.53538in]{media/image943. png} +& +\includegraphics[width=2.96595in,height=3.39985in]{media/image941 .png} \\ +\end{longtable} + +We outline further ``housekeeping'' steps on these data to make it +simpler to examine and to export back to CPT when needed: + +\begin{enumerate} +\def\labelenumi{\alph{enumi})} +\item + Use \textbf{\emph{Prepare \textgreater{} Column: Text \textgreater{} + Transform \textgreater{} Substring}} on the variable + \textbf{\emph{Lat}} into \textbf{\emph{LatS}} from Start Value 2 to + End Value + + \begin{enumerate} + \def\labelenumii{\arabic{enumii}.} + \setcounter{enumii}{4} + \tightlist + \item + \end{enumerate} +\item + Recall the \textbf{\emph{last dialogue}} and put \textbf{\emph{Lon}} + into \textbf{\emph{LonE}} from 2 to 6. +\item + \textbf{\emph{Select}} both these columns, (LatS and LonE), then + \textbf{\emph{right-click}} and make them \textbf{\emph{Factors}}. +\item + Use \textbf{\emph{Prepare \textgreater{} Column: Factor: Factor + \textgreater{} Combine Factors}}. Choose \textbf{\emph{LatS and + LonE}}, make the separator an \textbf{\emph{underscore}} and make the + \textbf{\emph{New Column Name:}} \textbf{\emph{Location}}. +\item + Select LatS and LonE again. Right-click and \textbf{\emph{Convert to + Numeric}} columns. +\item + Use \textbf{\emph{Prepare \textgreater{} Column: Factor \textgreater{} + Recode Numeric}} and make a new column from \textbf{\emph{Lats}} into + \textbf{\emph{Lat6S}}, with 10 break points at about (1.03, 1.25, + 1.48, 1.7,1.93, 2.15, 2.38, 2.6, 2.83, 2.98). +\item + Recall the last dialogue and make LonE into Lon6E using (28.5, 28.74, + 28.97, 29.2, 29.42, 29.64, 29.87, 30.1, 30.32, 30.54, 30.77, 31). +\item + Right click to delete the 2 columns Lat, Lon. +\item + Reorder the columns possibly as shown in Fig. 13.3i +\end{enumerate} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.3i ENACTS data for Rwanda}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.3j The locations}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.45974in,height=2.74871in]{media/image953.png} & +\includegraphics[width=2.65551in,height=2.72261in]{media/image949.png} \\ +\end{longtable} + +A Station (i.e.~Location data frame is also needed for exporting back to +CPT. From here: + +\begin{enumerate} +\def\labelenumi{\alph{enumi})} +\item + \textbf{\emph{Right-click}} and choose \textbf{\emph{Filter}} on the + year column and put just the first year (1981) into a new data frame + called \textbf{\emph{Location}}. +\item + Delete the \textbf{\emph{year and rain}} variables from the Location + data frame. +\end{enumerate} + +The resulting data frame is in Fig. 13.3j. + +Now look at the at the data. Start with a given part of Rwanda. +Right-click and filter the data file to the \textbf{\emph{last set of +stations in Lat6S}} and \textbf{\emph{Lon6E}}, i.e.~the South-East +corner. This is a 30km square and there should be 880 rows of data, Fig. +13.3k. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.3k SE corner (24 locations)}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.3l}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.02645in,height=2.21052in]{media/image965.png} & +\includegraphics[width=2.89415in,height=2.95551in]{media/image964.png} \\ +\end{longtable} + +These data can now be graphed. The results from a \textbf{\emph{Describe +\textgreater{} Specific \textgreater{} Line Plot}} of +\textbf{\emph{rain}} against \textbf{\emph{year}} by +\textbf{\emph{location}} is in Fig. 13.3l. (A facetted graph by LonE and +LatS, after making them factors, is an alternative). + +Fig. 13.3l the coherence (high correlation) between the different +locations is clear. The last point (data from 2017) is a cause for +concern. This is also indicated for 4 of the locations in Fig. 13.3k. +This last year has less than half the rain of any of the other 36 years +at most locations. That can greatly affect a regression model. Perhaps +only fit using the data to 2016? + +Next, use \textbf{\emph{Climatic \textgreater{} Tidy and Examine +\textgreater{} Unstack}} for the \textbf{\emph{rain}}, by the +\textbf{\emph{location}} and \textbf{\emph{carry the year}}. This gives +the 24 stations in separate columns and \textbf{\emph{Climatic +\textgreater{} Seasonal Forecast Support \textgreater{} Correlations}}, +gives the results in Fig. 13.3m. They are all coloured dark red (compare +with Fig. 13.2n) as all correlations are more than 0.8. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.3m}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=5.90613in,height=5.16868in]{media/image961.png} \\ +\end{longtable} + +This can be repeated for further parts of Rwanda. We suggest that +exporting the data from individual ``blocks'' of 24 or usually 36 +stations for CPT, may enable separate local forecasts to be given? + +Change the filter to choose 12 blocks over the country, possibly Lat6S = +(1, 5, 9) and Lon6E = (1, 4, 7, 10). + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5972}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3889}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.3n Choosing 12 blocks as a filter}} + +\textbf{\emph{Right-Click \textgreater{} Filter \textgreater{} Define +New Filter}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.3oFacet with 2 variables}} + +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} Line Plot +Options \textgreater{} Facet}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.68059in,height=2.71639in]{media/im age963.png} +& ! \href{media/image979.png}{}\{wi dth=``2.402188320209974in'' heigh +t=``2.6810597112860894in''\} \\ +\end{longtable} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 13.3p}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.26806in,height=3.08056in]{media/image966.png} \\ +\end{longtable} + +The results in Fig. 13.3p show some part of the country, e.g.~North-West +-- (top-left) with very high correlations, but also relatively little +year-to-year variability to be explained, compared to other parts. (The +blue set of graphs in the middle of Fig. 13.3p should be examined in +more detail, as the large rainfall in about 1990 is just in a few +locations -- perhaps caused by data from a single station?). The low +rainfall totals in 2017, mentioned above, is apparent in some parts of +the country, but not all. + +Plots of further combinations could be useful. Then 2 alternative +strategies for CPT (in addition to the default of using the 3432 +stations individually) could be: + +\begin{enumerate} +\def\labelenumi{\alph{enumi})} +\item + Use data from single blocks of interest, i.e.~usually 36 locations + over a 30km by 30km grid, to examine the forecast for specific parts + of the country. +\item + Take the means (or medians) each year, for each of the blocks, so + reducing the number of locations to 96 and use these data instead of + the data individually for the 3432 locations. +\end{enumerate} + +\section{The X variables -- Sea Surface +Temperatures}\label{the-x-variables-sea-surface-temperatures} + +Ghana data first. + +Then Rwanda data! + +For Rwanda data use +\href{http://iridl.ldeo.columbia.edu/SOURCES/.IRI/.Analyses/.ICPAC/.Models/.GFDL/.GFDL-CM2p5-FLOR-A06/.MONTHLY/.sst/index.html}{\ul{http://iridl.ldeo.columbia.edu/SOURCES/.IRI/.Analyses/.ICPAC/.Models/.GFDL/.GFDL-CM2p5-FLOR-A06/.MONTHLY/.sst/index.html}} + +The data were downloaded from this +link~\href{http://iridl.ldeo.columbia.edu/SOURCES/.Models/.NMME/.GFDL-CM2p5-FLOR-A06/.MONTHLY/.sst/}{\ul{http://iridl.ldeo.columbia.edu/SOURCES/.Models/.NMME/.GFDL-CM2p5-FLOR-A06/.MONTHLY/.sst/}}~ +However you may decide to choose any other model of your choice.~~ + +Those Sea Surface Temperature (SST) are GCM outputs from different +source (GFDL, CFS2, NASA etc). Initialization is the process of locating +and using the defined values for variable data that is used by a model +or system. For our model we choose February as the month forecasts (MAM) +were initialized. + +\bookmarksetup{startatroot} + +\chapter{Fitting and using stochastic +models}\label{fitting-and-using-stochastic-models} + +\bookmarksetup{startatroot} + +\chapter{Within-day data}\label{within-day-data} + +\bookmarksetup{startatroot} + +\chapter{Circular data and wind +roses}\label{circular-data-and-wind-roses} + +\section{Introduction}\label{introduction-13} + +Fig. 16.1a shows data from the R openair package. These are hourly data +and the two columns called ws and wd are wind speed and direction. Fig. +16.1b shows a single wind rose and these are discussed in detail in +Section 16.4. The wind rose is a circular stacked histogram that shows +both wind speeds and wind directions on the same graph. They are a +popular form of display by National Met Services (NMSs) for these data. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.1a}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.1b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.62434in,height=2.68389in]{media/image876.png} & +\includegraphics[width=3.38802in,height=2.69815in]{media/image975.png} \\ +\end{longtable} + +\hl{For reference the command was as follows:} + +\hl{last\_graph \textless- clifro::windrose(speed=ws, direction=wd, +speed\_cuts=c(3,6,9,12,15,18), col\_pal="Dark2", ggtheme="linedraw") + +ggplot2::labs(title="", caption="", subtitle="")} + +Wind direction is an example of circular data and this type of data +needs some special treatment. Circular variables are common in climatic +data. The obvious example is wind direction, but there are many others: + +\begin{itemize} +\item + Time in hours at which rainfall starts. The circle is 24 hours. +\item + The hour of the minimum temperature each day. The circle is again 24 + hours. +\item + Day of the year when the season starts. The circle is 366 days. +\item + The month of maximum rainfall. The circle is 12 months. +\end{itemize} + +Special methods are needed to cope with circular data. Sometimes they +can be avoided, and we have done this often in this guide. For example, +the date of the start of the rains may be from November to January. If +the year is always defined from January, then these data mist be handled +as circular. But the complexity can be avoided by shifting the year to +start in August, as was shown in Chapter 7. + +Section 16.2 considers the general idea of circular data and Section +16.3 shows some simple graphs. Then we return to wind roses in Section +16.4. + +\section{Circular data}\label{circular-data} + +Wikipedia (Wikipedia contributors) shows a small example of 10, 20, 30 +degrees to illustrate circular data. The mean is obviously 20. Now +subtract 15 degrees, so the mean becomes 5. The data are now 355, 5, 15, +so the usual formula for the mean is (355 + 5 + 15)/3 = 125 -- obviously +wrong. With circular data, once we ``go over'' zero, the usual formulae +no longer apply. + +There are books on circular statistics, for example (Pewsey \& D., 2013) +and, of course, R packages. R-Instat mainly uses the +\textbf{\emph{circular}} package. (Agostinelli \& Lund, n.d.). + +An example from the circular package is called wind. This has 310 +observations on wind direction. The data in \textbf{\emph{File +\textgreater{} Open from Library \textgreater{} R package \textgreater{} +circular \textgreater{} wind}}, just has a single variable. The +description states it is five 15-minute observations per day, for 62 +days, from 3am to 4am. It is for a single site from 29 January to 31 +March 2001. + +Fig. 16.2a shows the data in R-Instat. The wind directions (column +wind\_dir) are in radians, i.e.~they are an angle between 0 and 2pi +(i.e. 2 * 3.14 = 6.28). + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4306}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5556}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2a Data from circular package}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2b Adding a date variable}} + +\textbf{\emph{Climatic \textgreater{} Dates \textgreater{} Generate +Dates}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image955.png}\{ width=``2.5966491688538933in'' h +eight=``3.298924978127734in''\} & +\includegraphics[width=3.48868in,height=3.35703in]{media/imag e954.png} \\ +\end{longtable} + +Directional data are often given in degrees. Hence also use +\textbf{\emph{Prepare \textgreater{} Column: Calculate \textgreater{} +Calculations}}, with the formula: + +wind\_dir *360/(2*pi) + +Data should be given with their ``structure''. The dialogue +\textbf{\emph{Climatic \textgreater{} Dates \textgreater{} Generate +Dates}}, Fig. 16.2b is used to add the date column, then +\textbf{\emph{Prepare \textgreater{} Column: Generate \textgreater{} +Regular Sequence}}, Fig. 16.2c, to add the time column. + +to give the directions in degrees. The results are all shown in Fig. +16.2a. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.59247in,height=2.27823in]{media/image900.png} & +\includegraphics[width=3.56423in,height=1.09762in]{media/image916.png} \\ +\end{longtable} + +Start, as usual with a check on the data. Use \textbf{\emph{Climatic +\textgreater{} Tidy and Examine \textgreater{} One Variable Summarise}} +to give the results in Fig. 16.2d. The summaries for the 2 wind +variables are of course for linear, rather than circular data. The +analysis can begin. One aspect that is simpler here is that there are no +missing values in these data. + +The structure of the data is ignored initially, to concentrate on the +new summary statistics for circular data. Graphs are discussed in +Section 16.3. A preview, in Fig. 16.2e indicates the data are reasonably +concentrated near zero. From the graph we expect a mean just above zero, +i.e.~perhaps North-North-East, (where East = pi/2 = 1.57 in radians) and +a standard deviation that indicates a good level of concentration of the +data. Thus, we don't expect the circular mean to be as large as 2.36 +radians, or 135 degrees, as shown in Fig. 16.2d + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4167}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5694}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2e A circular histogram of the wind data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2f The circular keyboard}} + +\textbf{\emph{Prepare \textgreater{} Column: Calculate \textgreater{} +Calculations}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image928.png}\{ width=``2.557014435695538in'' hei +ght=``2.6285608048993874in''\} & +\includegraphics[width=3.53404in,height=1.94911in]{media/imag e921.png} \\ +\end{longtable} + +Use \textbf{\emph{Prepare \textgreater{} Column: Calculate +\textgreater{} Calculations}} and open the \textbf{\emph{Circular}} +keyboard, Fig. 16.2f. The initial step is to define the two variables +wind\_dir and wind\_deg in Fig. 16.2a as circular. For wind\_dir, click +on the \textbf{\emph{circular button}} and add the variable, +\textbf{\emph{wind\_dir}}. Save the result back into the same variable, +Fig. 16.2g. + +Then press \textbf{\emph{Clear}}, and do the same for the wind\_deg +variable, Fig. 16.2h. In this case you need to replace the word +``radians'' by ``degrees''. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2g}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2h}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.52704in,height=2.54731in]{media/image902.png} & +\includegraphics[width=2.53673in,height=2.54967in]{media/image919.png} \\ +\end{longtable} + +It seems that nothing has happened. But now press the +\includegraphics[width=0.2736in,height=0.30579in]{media/image898.png}icon +on the toolbar, Fig. 16.2i to confirm that the two variables are now +defined as circular. Press +\includegraphics[width=0.26344in,height=0.23362in]{media/image950.png} +to close the metadata window. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2i}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=4.65066in,height=1.76483in]{media/image929.png} \\ +\end{longtable} + +Click \textbf{\emph{Clear}}, then the \textbf{\emph{mean button}} and +add the \textbf{\emph{wind\_dir}} column as shown in Fig. 16.2j. +Un-check Save so the result is in the Output window, Fig. 16.2k. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2j}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2k}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.17135in,height=3.01584in]{media/image899.png} & +\includegraphics[width=2.81028in,height=1.62732in]{media/image939.png} \\ +\end{longtable} + +The mean direction is 0.2922 radians (or 0.2922*360/(2*pi) = 16.7 +degrees.) + +In the command in Fig. 16.2j the package name is given first, i.e. + +circular::mean.circular(wind\_dir) + +Change the variable in Fig. 16.2j to \textbf{\emph{wind\_deg}} to give +the result directly as 16.7 degrees, Fig. 16.2l. + +This result for the circular mean of 17 degrees is consistent with the +graph, given in Fig. 16.2e. It is a long way from the result in Fig. +16.2d that has ignored the circular nature of the data (and is wrong!) + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4862}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4954}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2l}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2m}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.40545in,height=1.71083in]{media/image948.png} & +\includegraphics[width=3.68074in,height=2.16253in]{media/image930.png} \\ +\end{longtable} + +Now examine the spread of the data. In the dialogue, \textbf{\emph{Clear +the expression again}}, and find the \textbf{\emph{circular variance}} +of the \textbf{\emph{wind\_dir}} variable. The result is seen to be +0.3443 from pressing the \textbf{\emph{Try}} button. Pressing +\textbf{\emph{Ok}} puts this result into the output window. + +\textbf{\emph{Return to this dialogue}} and find the circular variance +of the same data in degrees. The result is identical, i.e.~0.3443, +despite the numbers being very different! Some explanation is needed, +because with ordinary (linear) data, that is not the case. + +Change the function to get the \textbf{\emph{standard deviation}}, +i.e.~the sd key on the circular keyboard, rather than var. The formula +is then + +circular::sd.circular(wind\_deg). + +This gives the circular standard deviation as 0.9187, and again this is +the same for the wind\_dir variable. + +However, in addition, the circular standard deviation is not the square +root of the circular variance. The var = 0.3443 and √0.3443 = 0.5868 +which is quite a long way from the result above. + +The results for the variability (spread) of circular data require +explanation, because they are so different to ``ordinary'' data. + +We need a formula. With angles (in degrees), x\textsubscript{1}, +x\textsubscript{2},\ldots{} x\textsubscript{n} define: + +R = √((Σcos(x\textsubscript{i}))\textsuperscript{2} ++(Σsin(x\textsubscript{i}))\textsuperscript{2}) + +R is called the resultant length, and r = R/n is called the mean +resultant length. It is the \textbf{\emph{rho key}} on the circular +keyboard, with + +circular::rho.circular(wind\_dir) or circular::rho.circular(wind\_deg) + +In each case it gives the value of r = 0.6557 for these data. + +The mean resultant length, r, is between 0 and 1 and values near to 1 +correspond to low variation. + +In the R circular package, and hence in R-Instat the var.circular = +(1-r) = 0.3443 as found above. So, the circular variance is between 0 +and 1 with 0 being no variation. + +Then, sd.circular = √(-2log(r), to be consistent with the definition +first given in (Mardia, 1972). + +Also available in R-Instat is the angular.variance = 2 * (1-r) = 2 * +var.circular. + +For these data, the angular.variance is the \textbf{\emph{ang.var}} key += 0.6886 + +And there is also the angular.deviation = √(angular variance) + +The angular.deviation is the ang.dev key = √0.6886 = 0.8298. + +To help with the interpretation, of these summaries, take a very simple +example with 5 observations. In degrees take 10, 15, 20, 25 30, Fig. +16.2n. Round the circle they are not very spread out. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2n}} + +\textbf{\emph{File \textgreater{} New Data Frame}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2o}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.09826in,height=2.77737in]{media/image93 8.png} +& +\includegraphics[width=2.75709in,height=2.75709in]{media/image937.pn g} \\ +\end{longtable} + +Use \textbf{\emph{Prepare \textgreater{} Column: Calculations +\textgreater{} Calculate}} and produce \textbf{\emph{data\_rad = +(data\_deg/360)*2*pi}}. + +In radians, these data are 0.175, 0.262, 0.349, 0.436, 0.524 as shown in +Fig. 16.2o. + +In \textbf{\emph{Prepare \textgreater{} Column: Calculations +\textgreater{} Calculate}} use the \textbf{\emph{degrees}} and +\textbf{\emph{radians}} buttons to define each of these variables as +circular. + +Then, with the \textbf{\emph{sd button}}, the sd.circular = 0.1235 for +each variable. + +The ordinary standard deviation for the data in radians is 0.138, i.e. +is close. So, for circular data, with small spread the circular standard +deviation can be interpreted roughly as the ordinary standard deviation, +i.e.~a typical distance from the circular mean (which is 0.349 radians), +of the data -- when measured in radians. + +Let's confirm this, with even smaller spread. Divide all the values (in +radians) by 2. The new circular standard deviation = 0.617, which is +half the previous value. Of course, the ordinary standard deviation also +halves, so the interpretation is ok. + +Now multiply the values by 10. In degrees, the values are now 100, 150, +200, 250, 300 so almost round the circle. This is therefore very large +spread for the circular data. In radians this becomes 1.75, 2.62, 3.49, +4.36, 5.24. The maximum is 360 degrees = 2π = 6.28 radians. + +For the data in radians, the ordinary standard deviation is 1.38 and the +circular standard deviation is the same. Hence, a very spread-out +circular dataset has a circular standard deviation of more than 1. +(Otieno Sango \& Anderson-Cook, 2003) + +The wind data, analysed in this section, had a circular standard +deviation of 0.92 (radians). So quite large as can be seen from the +graph in Fig. 16.2e. + +What of r and the circular variance = (1-r)? For the 5 values from 10, +to 30 degrees, the circular variance = 0.0076. For large spread, e.g. +the 5 values from 100 to 300 degrees the circular variance = 0.6123. So, +the circular variance can be interpreted directly, with close to 0 being +very concentrated data and close to 1 being very spread out -- round the +circle. The wind data had a spread -- as measured by the circular +variance of 0.3443, i.e.~about 1/3. + +Other summary statistics, including the median are also available, +through the circular package, and hence through R-Instat. These are the +median and the quantiles, including the quartiles, the ``maximum'' and +``minimum'' and the range. Most are intuitively obvious for data that +are ``concentrated'', i.e.~have small variability, but are more +difficult to consider where data can be anywhere round the circle. And +general definitions are needed. + +The median is defined by considering diameters that cut the circle in +two. Look for the diameter with end-points P and Q, so that half the +data points are in each semi-circle. Then the median is either P or Q +and choose P, so that the data are more concentrated round it, compared +to Q, + +For the wind data the median is 9.5 degrees, so a little lower than the +mean. + +Once the median exists, the other quantiles, including the maximum and +minimum, can go outwards from this point. The lower quartile is 355 +degrees and the upper quartile is 37 degrees. + +The range is defined as the extent of the circle, minus the biggest gap +of data. This is usually (but not necessarily) the maximum minus the +minimum! + +The von Mises distribution is roughly the equivalent to the normal +distribution for linear data, Fig. 16.2k. This has, similarly, 2 +parameters and is symmetrical about the circular mean. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2k Examples of von Mises distributions}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2l}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\hl{Prefer from R-Instat} + +\includegraphics[width=2.93974in,height=2.36025in]{media/image933. png} +& +\includegraphics[width=3.07069in,height=2.58985in]{media/image934 .png} \\ +\end{longtable} + +The shape is dictated by the к parameter. К = 0 corresponds to the +uniform distribution (round the circle) and large values of к correspond +to a concentrated distribution, i.e.~one with low variation. + +Estimating к is done by setting r = A\textsubscript{1}(к) = +I\textsubscript{1}(к)/I\textsubscript{0}(к) = 1 -- var.circular, where +I\textsubscript{1} and I\textsubscript{0} are modified Bessel functions. +In the R-Instat circular keyboard the function A1(к) is available, Fig. +16.2l. With a little trial and error we see that, for the wind data the +appropriate value of к = 0.734, i.e.~the shape is just above the blue +line in Fig. 16.2k. + +Compared to the circular histogram, Fig. 16.2e it is not clear that a +symmetrical distribution is appropriate. However, more important is that +the wind data have structure that the above analysis has ignored. In +particular, the data are 5 observations from each of 62 days. In any +analysis this sort of structure should not be ignored. + +Hence get the mean each day and then analyse the resulting daily data. +This is the circular mean, and uses the \textbf{\emph{Prepare +\textgreater{} Column: Reshape \textgreater{} Column Summaries}} as +shown in Fig. 16.2m and Fig. 16.2n. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2m}} + +\textbf{\emph{Prepare \textgreater{} Column: Reshape \textgreater{} +Column Summaries}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2n Circular sub-dialogue}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.99257in,height=3.29018in]{media/image932. png} +& +\includegraphics[width=2.95584in,height=2.0234in]{media/image926. png} \\ +& +\includegraphics[width=2.96826in,height=1.71319in]{media/image931.p ng} \\ +\end{longtable} + +These daily data have 62 records as shown in Fig. 16.2o. For example on +2\textsuperscript{nd} February the mean wind direction was 355 degrees +(or 6.19 radians). The 5 observations were all close in direction, with +the minimum being 345 degrees and the maximum 0.5 degrees. The +(circular) standard deviation was 0.1. The directions were much more +variable on the next day, ranging from 303 degrees (roughly from the +West) to 77 degrees (almost East) within the hour. The (circular) +standard deviation was just over 1. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2o}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2p}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.05467in,height=2.70007in]{media/image885.png} & +\includegraphics[width=2.93636in,height=2.37431in]{media/image879.png} \\ +\end{longtable} + +It is simply for illustration that the results, in Fig. 16.2o are given +in both degrees and radians. As discussed above, the standard deviation +is the same, whatever the units and the interpretation is similar to the +ordinary standard deviation for the data in radians. + +The resulting daily data can now be plotted and summarised. As an +example, a circular histogram is shown in Fig. 16.2p. + +These data are fine to illustrate the commands in the R circular package +but not for real applications because they are all from a single year +and the summaries, from January to March may also include some +seasonality. In the following sections, we therefore largely consider +data from multiple years. + +\section{Graphs for wind direction}\label{graphs-for-wind-direction} + +The example used is from \textbf{\emph{File \textgreater{} Open From +Library \textgreater{} Open from R \textgreater{} R package +\textgreater{} openair}} that was shown earlier in Fig. 16.1a and Fig +16.1b. Open the dataset called \textbf{\emph{mydata.}} It is hourly data +on pollution concentrations plus wind speed (ws) and wind direction +(wd). There are 65,533 records, shown again in Fig. 16.3a. The data are +from London for 7.5 years from January 1998 to June 2005. + +Section 16.4 examines wind roses, that examine wind speeds and wind +directions together. Here simpler plots are used to examine just the +circular element, i.e.~the wind directions in the variable called wd. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3a Wind and pollution data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3b Checking the wind data}} + +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +One Variable Frequencies}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.99517in,height=3.06313in]{media/image876. png} +& +\includegraphics[width=2.52704in,height=3.07229in]{media/image878.p ng} \\ +\end{longtable} + +First examine the wind direction data. One way uses the +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +One Variable Frequencies}} dialogue, Fig. 16.3b. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3c Different values in the wd variable}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3d Duplicating the wind variable}} + +\textbf{\emph{Right click (in wd variable) \textgreater{} Duplicate +Column}} + +\hl{Redo with new duplicate column dialogue} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.90208in,height=3.33472in]{media/image873. png} +& +\includegraphics[width=3.1402in,height=2.53509in]{media/image889 .png} \\ +\end{longtable} + +The results are in Fig. 16.3c. They confirm that the data are measured +to the nearest 10 degrees. There is one possible oddity, namely that +there are 37 different directions and not 36. There are 608 hours with +North, i.e.~0 degrees and 1377 values at 360 degrees. One obvious reason +for this feature is that there are calm days, i.e.~zero wind speed, and +hence no direction. This could reasonably be given the direction of +zero. Use of the right-click and Filter however shows this is not the +case. + +There are 4 alternative next steps to resolve this oddity in the data: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\item + Ignore it and see what happens +\item + Omit one category, i.e.~recode those observations as missing +\item + Recode the value 0 to be 360, or 360 to become 0, so the frequencies + are added +\item + Contact the supplier to resolve the oddity. +\end{enumerate} + +We tried option 4 first but had no response. The frequency at 360 +degrees seems reasonable, compared to the values at 350 and 10 degrees, +hence we adopt option 2, and set the zero-degree values to be missing. + +First use the \textbf{\emph{Right-click \textgreater{} Duplicate +Column}} dialogue, Fig. 16.3d to avoid overwriting the original data in +wd. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3750}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6111}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3e Replace 0 by missing}} + +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +Replace}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3f Results from summary of 4 variables}} + +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +One Variable Summarise}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +!{[}{]} (media/image872.png)\{wid th=``2.243173665791776in'' heigh +t=``2.243173665791776in''\} & +\includegraphics[width=3.82883in,height=1.86987in]{media/i mage871.png} \\ +\end{longtable} + +Now use \textbf{\emph{Climatic \textgreater{} Tidy and Examine +\textgreater{} Replace Values}}, Fig. 16.3e, to replace all instances of +0 by missing values. The result can be checked with the +\textbf{\emph{Climatic \textgreater{} Tidy and Examine \textgreater{} +One Variable Summarise}} dialogue, the results of which are in Fig. +16.3f. The new wd1 variable now has 608 missing values and ranges from +10 to 360 degrees. + +There isn't yet a special climatic graph for these data, so the general +graphics dialogues are used. Use \textbf{\emph{Describe \textgreater{} +Specific \textgreater{} Histogram}} with the variable wd1, Fig. 16.3g to +give the result in Fig. 16.3h. + +Before making this graph circular, note an oddity in the results in Fig. +16.3h. There are exactly 6 directions that stand out. This could either +be a real feature in the data, or an oddity caused by the grouping of +the data when the histogram is constructed. The default in the ggplot2 +system is 30 bins, and we just have 36 different values in the data. So +here the grouping for the histogram is probably to blame. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3g}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3h}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.88257in,height=3.01017in]{media/image877.png} & +\includegraphics[width=3.09602in,height=3.25797in]{media/image870.png} \\ +\end{longtable} + +So return to the dialogue and click on the Histogram Options button to +set the number of bins to 36, Fig. 16.3i. We make the histogram a little +more colourful at the same time. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4306}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5556}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3i Setting bins in the histogram}} + +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} +Histogram\\ +Then Histogram Options}}\strut +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3j Ordinary histogram}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image895.png}\{width=``2.63702646544182in'' h +eight=``3.539001531058618in''\} & +\includegraphics[width=3.39483in,height=3.53747in]{media/image 915.png} \\ +\end{longtable} + +This is now ready to produce a circular plot. Return to the dialogue, +use the Plot Options and the Y-axis tab, Fig. 16.3k. Set the axis limits +for the y-axis as shown in Fig. 16.3k. Also press on the +\textbf{\emph{Coordinates}} tab in Fig. 16.3k and specify +\textbf{\emph{polar}} coordinates. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3k}} + +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} +Histogram\\ +Then Plot Options \textgreater{} Y-Axis and Coordinates}}\strut +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3l Histogram as a circular plot}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.85611in,height=2.65873in]{media/image897.pn g} +& +\includegraphics[width=2.7277in,height=2.74353in]{media/image886 .png} \\ +\end{longtable} + +The ``trick'' of starting the Y-Axis with a negative value in Fig 16.3k, +gives the ``hole'' in the circular plot. + +There is therefore a series of steps to constructing a circular plot in +R-Instat. They could be avoided through using a special function, such +as \textbf{\emph{rose.diag}} in the circular package. One reason for +continuing with the ggplot graphs is the ease with which multiple plots +(facets) can be constructed. + +This is illustrated by examining whether there are obvious differences +in the pattern of the wind directions at different times of the day. + +Use \textbf{\emph{Prepare \textgreater{} Column: Calculate +\textgreater{} Calculations}}, with the \textbf{\emph{Dates}} keyboard, +Fig. 16.3m and the \textbf{\emph{hour}} key. + +Check the calculation by using the \textbf{\emph{Try button}}, Fig. +16.3m and save the result into a variable called \textbf{\emph{hour}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3m Making an hour variable}} + +\textbf{\emph{Prepare \textgreater{} Column: Calculate \textgreater{} +Calculations}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3n Making a 3-hour variable}} + +\textbf{\emph{Prepare \textgreater{} Column: Calculate \textgreater{} +Calculations}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.79402in,height=3.22341in]{media/image888.pn g} +& +\includegraphics[width=3.19143in,height=3.28906in]{media/image91 7.png} \\ +\end{longtable} + +The hour variable is from 0 (midnight) to 23 (11pm). This can be used to +give 24 plots, one for each hour. This is unnecessarily detailed, so +combine the hours into blocks of 3. There are many ways this can be done +in R-Instat. We choose the calculator again, with the DIV function, +which is given by \%/\% in R and is on the Logical keyboard, Fig. 16.3n. + +The formula: \textbf{\emph{threehour \textless- (hour \%/\% 3)}} gives +the values 0, 0, 0, 1, 1, 1,\ldots,8,8,8 so multiplying by 3 and adding +1 gives the middle hour of each 3-hour period as shown in Fig. 16.3n. + +\textbf{\emph{Right-click}} and make the resulting variable into a +\textbf{\emph{factor}}. Then return to the \textbf{\emph{histogram +dialogue, Plot Options}} and use this variable as a +\textbf{\emph{facet}}, Fig. 16.3o. Also change the \textbf{\emph{Y-axis +limits}} to \textbf{\emph{-600 to 600}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3611}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.6250}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3o}} + +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} +Histogram\\ +Plot Options \textgreater{} Facets and Y-axis}}\strut +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3p Circular histogram with facets}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{m edia/image901.png}\{widt h=``2.160592738407699in'' +height =``2.357010061242345in''\} & +\includegraphics[width=3.88977in,height=2.69512in]{media /image882.png} \\ +\end{longtable} + +The resulting graph is shown in Fig. 16.3p. There is no obviously +consistent pattern for different times of the day. + +The next step is to summarise the hourly data to a daily basis. To +enable this, use the \textbf{\emph{Climatic \textgreater{} Dates +\textgreater{} Make Date}} dialogue, Fig. 16.3q to make a Date column +from the date-time column. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3q}} + +\textbf{\emph{Climatic \textgreater{} Dates \textgreater{} Make Date}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3r Defining a variable as circular}} + +\textbf{\emph{Prepare \textgreater{} Column: Define \textgreater{} +Circular}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.92682in,height=3.57307in]{media/image883. png} +& \hl{The new dialogue when ready} \\ +\end{longtable} + +Now use the \textbf{\emph{Prepare \textgreater Column: Define +\textgreater{} Circular}} to set the \textbf{\emph{wd variable}} as +\textbf{\emph{circular, Fig 16.4r}}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.4s Calculating circular summaries}} + +\textbf{\emph{Prepare \textgreater{} Column: Reshape \textgreater{} +Summarise}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.4t}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.86119in,height=2.87671in]{media/image892.p ng} +& +\includegraphics[width=3.25254in,height=1.0542in]{media/image855 .png} \\ +& +\includegraphics[width=3.20904in,height=1.28062in]{media/image851 .png} \\ +& +\includegraphics[width=3.26469in,height=0.96434in]{media/image86 7.png} \\ +\end{longtable} + +Then use the \textbf{\emph{Prepare \textgreater{} Column: Reshape +\textgreater{} Column Summaries, Fig 16.4s}} to give the +\textbf{\emph{circular mean and standard deviation,}} Fig. 16.4t. One +complication is that there are missing values in these data. We choose, +in Fig. 16.4t, to allow up to 3 missing hours in the day. + +The resulting data frame has 2731 rows (days) of data, Fig. 16.4u. The +summary in Fig. 16.4uhas a few missing daily values, when less than 21 +hours are available. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5789}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3u}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3v}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.6617in,height=3.3775in]{media/image862.png} +& \\ +\end{longtable} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3871}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5914}}@{}} +\toprule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +& +\includegraphics[width=2.99242in,height=2.93222in]{media/image843.png} \\ +\end{longtable} + +The obvious extension of this plotting is to consider the seasonality, +e.g.~to produce the plot on a monthly basis. This is left largely as a +challenge\footnote{It isn't difficult. First use \textbf{\emph{Climatic + \textgreater{} Dates \textgreater{} Make Date}} for the daily data, + (possibly change the year and doy to be numeric) then, + \textbf{\emph{Use Date}} to get the monthly variable. Then repeat the + plot with the \textbf{\emph{month as a facet}}.}. This produces the +plot in Fig. 16.3u. This shows the predominant wind direction is +consistent in each month, but some have an indication of bimodality. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.3u}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.12077in,height=2.36937in]{media/image849.png} \\ +\end{longtable} + +\hl{Discuss further once it is easy to have percentages and proportions +in histograms.} + +\section{Wind roses}\label{wind-roses} + +In this section we consider graphs of the wind speed and the wind +direction together. This is simpler, because of the special wind-rose +dialogue using the R clifro package. \hl{(reference)}. + +The steps in the previous section are followed. First, produce a single +wind rose of the two columns, wind speed (ws) and direction (wd) +together using the hourly data. + +Use \textbf{\emph{Climatic \textgreater{} Describe \textgreater{} Wind +Speed/Direction \textgreater{} Wind Rose}}, Fig. 16.4a. Ignore the +Windrose Options to investigate the default results from the hourly +data. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4444}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5417}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.4a Default wind rose}} + +\textbf{\emph{Climatic \textgreater{} Describe \textgreater{} Wind +\textgreater{} Wind Rose}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.4b Default wind-rose}} + +\textbf{\emph{(5 wind speeds, colours: Blues, Theme: Minimal)}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image866.png} \{width=``2.7000404636920385in'' +height=``2.970044838145232in''\} & +\includegraphics[width=3.27953in,height=2.73027in]{media/image 853.png} \\ +\end{longtable} + +Many wind roses will be produced, so a useful step is to fix on a +suitable colour scheme and theme for the graphs. + +Return to the dialogue and choose \textbf{\emph{Windrose Options}}, Fig. +16.4c. This shows that 12 is the default number of directions for the +graph -- lucky for us as the wd1 variable has 36 distinct values. Change +the theme to Classical. Then choose the Colours tab and try +Red-Yellow-Blue. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.4c Windrose Options}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.4d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.30567in,height=2.82653in]{media/image839.png} & +\includegraphics[width=3.57657in,height=2.8057in]{media/image844.png} \\ +\end{longtable} + +The resulting wind rose is in Fig. 16.4e. Changing the theme to linedraw +(Fig. 16.4c) and the colours to Qualitative \textgreater{} Dark2 gives +Fig. 16.4f. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4862}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4954}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.4e}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.4f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.99291in,height=2.79423in]{media/image352.png} & +\includegraphics[width=2.94076in,height=2.78765in]{media/image348.png} \\ +\end{longtable} + +It is easy to add facets, and Fig. 16.4g shows the windspeeds and +directions at different times of the day. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{1.0000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.2g Time of day as facets}} + +\textbf{\emph{Climatic \textgreater{} Describe \textgreater{} Wind +Speed/Direction \textgreater{} Wind Rose - three-hour as facet and 4 +columns}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.12628in,height=2.97762in]{media/image340.png} \\ +\end{longtable} + +As in the previous section, the data are now summarised to a daily +basis. This uses \textbf{\emph{the Prepare \textgreater{} Column: +Reshape \textgreater{} Column Summaries}} dialogue. We add the daily +values of both the mean wind speed and the maximum speed in the 24 hours +to the daily data frame. + +The daily data are shown in Fig. 16.4h. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.4h}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.4i}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.34714in,height=3.20161in]{media/image337.png} & +\includegraphics[width=2.64976in,height=2.54322in]{media/image342.png} \\ +\end{longtable} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.4j}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.12463in,height=2.34915in]{media/image341.png} \\ +\end{longtable} + +\section{More displays for circular +data}\label{more-displays-for-circular-data} + +The wind roses, shown in Section 16.4 are essentially stacked histograms +round a circle. As such they remain largely a circular plot, showing the +wind direction and something of the wind speeds. If more detail is +needed on the wind speeds, then boxplots may be useful. If necessary, +they can also be displayed round a circle as is shown below. + +The daily data from the previous section are used again. The 12 +directions used in Section 16.4 seem appropriate, so these are +constructed. These are 30 degrees per category, and the only +complication is that the first category is conveniently 345 to 15 +degrees. This is therefore a 2-step process. The first step uses the +\textbf{\emph{Prepare \textgreater{} Factor \textgreater{} Recode +Numeric}} dialogue, Fig. 16.5a. The 14 break points are: + +-1, 15, 45,75, 105, 135, 165, 195, 225, 255, 285, 315, 345, 361 + +This gives a factor column with 13 levels (not 12!). The second step is +to use \textbf{\emph{Prepare \textgreater{} Column: Factor +\textgreater{} Recode Factor}} to combine the first and last levels. In +Fig. 16.5b make the new first label into (345, 15{]} and do the same to +the last level. Give the new column a sensible name, Fig. 16.5b. + +If you prefer, then relabel each level in Fig. 16.5b to indicate the +middle angle of that group, namely 0, 30, 60, 90,\ldots{} , 0. Or you +could use directions, i.e.~N, NNE, etc. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.5a}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.5b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.94119in,height=2.23234in]{media/image338.png} & +\includegraphics[width=2.91094in,height=2.2395in]{media/image353.png} \\ +\end{longtable} + +Check, using \textbf{\emph{Right-Click \textgreater{} Levels/Labels}} +that the new Direction variable has 12 levels. + +Use \textbf{\emph{Describe \textgreater{} Specific \textgreater{} +Boxplot}}, Fig. 16.5c, to get a boxplot of the wind speeds by these 12 +directions. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.5c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.5d Maximum daily wind speeds, by direction}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.53439in,height=2.97656in]{media/image339.png} & +\includegraphics[width=3.45173in,height=3.53701in]{media/image346.png} \\ +\end{longtable} + +In Fig. 16.5c make the boxplots of variable width, so the width of each +boxplot indicates the relative frequencies of each wind direction. One +small problem in Fig. 16.5d is that the missing values are included as a +13\textsuperscript{th} category. Use \textbf{\emph{Right-Click +\textgreater{} Filter}} (or \textbf{\emph{Data Options}} in the Boxplot +dialogue) to omit the missing values in the wind speed column and repeat +the boxplot. At the same time you may wish to use \textbf{\emph{Plot +Options \textgreater{} Coordinates}} to make this into a circular plot, +Fig. 16.5e. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.5e}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.5f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.94854in,height=2.95557in]{media/image315.png} & +\includegraphics[width=2.97646in,height=2.95877in]{media/image324.png} \\ +\end{longtable} + +There are alternative displays, from the Describe \textgreater{} +Specific \textgreater{} Boxplot dialogue. Fig. 16.5f shows a violin +plot(essentially a density plot instead of the boxplot\footnote{The + scale option was used to make the width proportional to the count of + observations at each direction.}. + +Fig. 16.5g, shows the boxplot without the red outliers of Fig. 16.5e, +while Fig. 16.5h adds the jittered points to the diagram. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.5g}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.5h}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.99266in,height=2.99984in]{media/image311.png} & +\includegraphics[width=2.97737in,height=2.98806in]{media/image302.png} \\ +\end{longtable} + +Usually it will be informative to have a set of graphs to investigate a +further factor at the same time. These are usually the seasonality, or +the station. Fig. 16.5i shows the data for the mean daily windspeed +(rather than the maximums, shown above) for each month. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.5i}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.15588in,height=2.93744in]{media/image333.png} \\ +\end{longtable} + +Fig. 16.5i shows the data as linear plots and Fig. 16.5j as circular +plots. We invite you to compare the two displays. The wind direction +data are circular, so perhaps Fig. 16.5j is the more natural display. +But, for some readers we suggest the comparisons between the months seem +easier to make from Fig. 16.5i. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 16.5j}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.13792in,height=2.27129in]{media/image313.png} \\ +\end{longtable} + +\bookmarksetup{startatroot} + +\chapter{Temperatures}\label{temperatures} + +\section{Examining trends}\label{examining-trends} + +\hl{Check on scale, daily, monthly, annual.} + +\hl{Consider adding broken stick -- segmented regression model. With +fixed or estimated break points. Package segmented may be used if +estimated. Probably not needed if a break-point and want to try a fixed +value.} + +See, for example +\href{https://stats.stackexchange.com/questions/382114/segmented-regression}{\ul{https://stats.stackexchange.com/questions/382114/segmented-regression}} + +\section{Comparing gridded and station +data}\label{comparing-gridded-and-station-data} + +\section{Degree days}\label{degree-days} + +\bookmarksetup{startatroot} + +\chapter{Drought Indices -- SPI}\label{drought-indices-spi} + +\section{Introduction}\label{introduction-14} + +The Standardised Precipitation Index (SPI) is acknowledged as an obvious +index to monitor drought, e.g.~(Keyantash \& (Eds), 2018). It is +described in the WMO guide (Svoboda, Hayes, \& Wood, 2012). + +There are various R packages to implement SPI and R-Instat includes the +command from the SPEI package (Beguería \& Vicente-Serrano, 2017). This +permits the calculation of the SPI index, as described by WMO and an +SPEI index that includes evapotranspiration, (Vicente-Serrano, Beguería, +\& López-Moreno, 2010). + +The SPI index is promoted as being superior to the Palmer Drought +Severity Index. This is based on an original index by (Palmer, 1965), +generalised by (Wells, Goddard, \& Hayes, 2004) and implemented in their +R package, called scPDSI (Zhong, Chen, Wang, \& Chengguang, 2018) to +produce both the self-calibrating and the conventional Palmer index. + +\section{Using the SPI index}\label{using-the-spi-index} + +For illustration use the Nigerian data from Samaru, \textbf{\emph{File +\textgreater{} Open from Library \textgreater{} Instat \textgreater{} +Browse \textgreater{} Climatic \textgreater{} Nigeria}}, Fig. 12.2a. The +data frame, called samaru56t, has already been defined as climatic and +has 56 years of daily rainfall data. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 18.2a}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 18.2b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.75497in,height=3.51687in]{media/image332.png} & +\includegraphics[width=3.19813in,height=3.5131in]{media/image312.png} \\ +\end{longtable} + +The SPI index is usually used on monthly data, though this is not +essential. Hence use \textbf{\emph{Climatic \textgreater{} Prepare +\textgreater{} Climatic Summaries}}, as shown in Fig. 18.2b. On the +\textbf{\emph{Summaries sub-dialogue}} choose the \textbf{\emph{Count +not missing}} and the \textbf{\emph{Sum}}. The monthly totals are shown +in Fig. 18.2a. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 18.2c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 18.2d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.61689in,height=3.79389in]{media/image319.png} & +\includegraphics[width=3.3524in,height=3.80093in]{media/image305.png} \\ +\end{longtable} + +Now use Climatic \textgreater{} Prepare \textgreater{} SPI, Fig. 18.2d. +Complete the dialogue as shown in Fig. 18.2d, giving the resulting +column the name spi1, because the index is for single months. + +Then return to the SPI dialogue. Change the time scale to 3 (months) and +the name of the resulting column to spi3. + +Repeat again, changing the time scale to 12, i.e.~to a full year and +change the name to spi12. + +The first years of the resulting data are shown in Fig. 18.2e. The +results are interpreted and the graphed. + +To help with the interpretation Fig. 18.2f shows boxplots of the monthly +data. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4722}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5139}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 18.2e spi1, spi3 and spi12}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 18.2f}} + +\textbf{\emph{Describe \textgreater{} Specific Boxplot: sum\_rain by +month}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.86491in,height=3.70342in]{media/image321.pn g} +& +\includegraphics[width=3.17556in,height=3.46899in]{media/image33 4.png} \\ +\end{longtable} + +First examine March 1928, that has an spi1 index of +2. This has +resulted from the rainfall total of 52.6mm. Fig. 18.2f shows that this +is very large for March -- it is the 2\textsuperscript{nd} highest from +the 56 years. Hence positive values of 2 (or more) indicate very rainy +compared to the norm. March 1929 had 12.7mm, and the spi1 index of 1.06 +indicates that even this value is quite large. Often the March total is +zero. + +August 1928 had a modestly negative value of spi1 = -0.456. This was +from the August total of 233mm, and the boxplot indicated that this is +slightly lower than average. In contrast, August 1929 had 356mm, which +is higher than the average, and corresponds to the spi1 index of +1. + +The spi3 index fist calculates the 3-month running sums. Hence it +indicates how they compare with what is expected. For example, from Fig. +18.2e, April to June 1928 is all each individually higher than expected. +Hence the April to June 1928 total is surprisingly high and has an spi3 +index of +1.83. + +The 12-month index gives information about the annual (running) totals. +To investigate these, use the Climatic \textgreater{} Prepare +\textgreater{} Climatic Summaries again. Change the top button in Fig. +18.2b to Annual to give a data frame with 56 values. Now use either +\textbf{\emph{Prepare \textgreater{} Column: Calculations \textgreater{} +Calculate}} or \textbf{\emph{Prepare Column: Calculate \textgreater{} +Column Summaries}} on the \textbf{\emph{sum\_rain}} variable to show the +annual mean is 1068mm and the standard deviation is 178.5mm. + +The total in 1928 was 1262mm. This is higher than the mean of 1068mm and +hence a positive spi12 value is expected for December 1928 in Fig. +18.2e. If we standardise the annual total, i.e.~evaluate: + +(1262 -- mean)/sd = (1262 -- 1068) /178.5 = +1.086, which is close to +the spi12value of 1.074. + +In 1929, the total was 1284mm and the standardised value was (1284 -- +1068)/178.5 = 1.21, again close to the spi12 index for December 1929 in +Fig. 18.2e, of 1.18. + +The calculations to produce the spi index is relatively complex. A +distribution is fitted to the data and then the equivalents from the +normal distribution are found. For the annual totals, the distribution +is already close to normal, as is shown by the density plot in Fig. +18.2g. Then the normal distribution is used, as in Fig. 18.2h, where the +value for 1928 is indicated. The results are then standardised, which +just changes the x-axis in Fig. 18.2h to go from roughly -2 to + 2. In +fig 18.2h -2 corresponds to a value of 1068 -- 2 * 178.5 = 711mm. A +value of 711mm has a probability of 1 year in 40 (probability of about +0.025) of occurring and represents a severe drought. (Most readers will +remember the value of ± 1.96, i.e.~about ± 2 that gives the 5\% points +from the standard normal distribution.) + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 18.2g Density graph of annual totals}} + +\textbf{\emph{Describe \textgreater{} Specific \textgreater{} Histogram +with density}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 18.2h Normal plot showing 1928 total}} + +\textbf{\emph{Model \textgreater{} Probability Distributions +\textgreater{} Show Model}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.97312in,height=3.22243in]{media/image323.p ng} +& +\includegraphics[width=3.07301in,height=3.25312in]{media/image335. png} \\ +\end{longtable} + +The indices from Fig. 18.2e can be plotted in a variety of ways. The +``standard'' time series graphs look cluttered, as they include the +seasonality within the graph. Fig. 18.2i presents graphs of spi1 and +spi12 separately for each of the months. It shows that spi1 is +meaningless in the dry months (November to February). Lines at 0 and -2 +have been added and show largely that any problem is towards the later +years. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 18.2i}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.11366in,height=3.0128in]{media/image331.png} \\ +\end{longtable} + +\section{The SPEI index}\label{the-spei-index} + +\hl{Need to add this section. It works ``trivially'' by giving a +water-ba;ance variable instead of the rainfall. So, it could be within +R-Instat that we just use the Climatic \textgreater{} Prepare +\textgreater{} Transform dialogue first, to get the water balance, and +then return to the SPI dialogue.} + +\section{Palmer Drought Severity +Index}\label{palmer-drought-severity-index} + +\hl{Check first whether we add it to the dialogue, add another dialogue, +or try to give it as a command.} + +\bookmarksetup{startatroot} + +\chapter{Climate Normals}\label{climate-normals} + +\section{Introduction}\label{introduction-15} + +The calculation of climate normals in this chapter is based largely on +(World Meteorological Organization (WMO), 2017). We also consider the +adaptation of the guidelines to the calculations of the normals in the +US, as described in (Arguez, et al., 2012). + +A climatological standard normal now refers to the most recent 30-year +period finishing in a zero, i.e.~currently 1981-2010, and soon to be +1991-2020. In addition, the 1961-1990 period is retained as a standard +reference period for assessing long-term climate change. + +A distinction is made in (World Meteorological Organization (WMO), +2017), between ``Principal Climatological Parameters'' and ``Secondary +Parameters''. There are 8 primary parameters including monthly total +rainfall (precipitation) and the total number of rain days, Table 19.1a. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.7568}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.2162}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Table 19.1a WMO Principal Climatological Parameters}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\textbf{Parameter} & \textbf{Units} \\ +Precipitation total & mm \\ +Precipitation days (Precip ≥ 1mm) & days \\ +Mean Tmax & °C \\ +Mean Tmin & °C \\ +Mean Tavg & °C \\ +Mean sea-level pressure & hPa \\ +Mean vapour pressure & hPa \\ +Total hours of sunshine & hours \\ +\end{longtable} + +The quintile boundaries for rainfall (mm) and the mean number of days +with more than 5, 10, 50, 100 and 150mm are secondary parameters. +Temperature thresholds and extremes are also included. + +These are intended as guidelines and are adapted by individual +countries. Examples from the US are shown in Table 19.1b. This table is +adapted from Table 5 in (Arguez, et al., 2012). The units have been +changed to millimetres for rainfall and °C for temperatures (US uses +inches and Fahrenheit.) + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 26\tabcolsep) * \real{0.1215}} + >{\raggedright\arraybackslash}p{(\columnwidth - 26\tabcolsep) * \real{0.0654}} + >{\raggedright\arraybackslash}p{(\columnwidth - 26\tabcolsep) * \real{0.0654}} + >{\raggedright\arraybackslash}p{(\columnwidth - 26\tabcolsep) * \real{0.0654}} + >{\raggedright\arraybackslash}p{(\columnwidth - 26\tabcolsep) * \real{0.0654}} + >{\raggedright\arraybackslash}p{(\columnwidth - 26\tabcolsep) * \real{0.0654}} + >{\raggedright\arraybackslash}p{(\columnwidth - 26\tabcolsep) * \real{0.0654}} + >{\raggedright\arraybackslash}p{(\columnwidth - 26\tabcolsep) * \real{0.0654}} + >{\raggedright\arraybackslash}p{(\columnwidth - 26\tabcolsep) * \real{0.0654}} + >{\raggedright\arraybackslash}p{(\columnwidth - 26\tabcolsep) * \real{0.0654}} + >{\raggedright\arraybackslash}p{(\columnwidth - 26\tabcolsep) * \real{0.0654}} + >{\raggedright\arraybackslash}p{(\columnwidth - 26\tabcolsep) * \real{0.0654}} + >{\raggedright\arraybackslash}p{(\columnwidth - 26\tabcolsep) * \real{0.0654}} + >{\raggedright\arraybackslash}p{(\columnwidth - 26\tabcolsep) * \real{0.0748}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +Table 19.1b Monthly and annual normals for a station in Chicago, from +(Arguez, et al., 2012) +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +Variable & J & F & M & A & M & J & J & A & S & O & N & D & Ann \\ +Tmax (°C) & -0.3 & 2.1 & 8.2 & 15.1 & 21.2 & 26.6 & 29.0 & 27.8 & 24.1 & +17.1 & 9.2 & 1.8 & 15.2 \\ +Tavg (°C) & -4.0 & -1.8 & 3.8 & 10.2 & 16.1 & 21.7 & 24.4 & 23.4 & 19.1 +& 12.3 & 5.3 & -1.7 & 10.8 \\ +Tmin (°C) & -7.7 & -5.7 & -0.6 & 5.4 & 10.9 & 16.7 & 19.7 & 19.0 & 14.2 +& 7.6 & 1.4 & -5.2 & 6.4 \\ +DTR (°C) & 7.4 & 7.8 & 8.8 & 9.7 & 10.3 & 9.9 & 9.3 & 8.8 & 9.9 & 9.5 & +7.8 & 7.0 & 8.8 \\ +Precip(mm) & 52 & 49 & 69 & 92 & 105 & 103 & 102 & 101 & 84 & 82 & 87 & +65 & 993 \\ +HDD & 692 & 564 & 451 & 249 & 104 & 17 & 1 & 2 & 43 & 194 & 391 & 620 & +3327 \\ +CDD & 0 & 0 & 1 & 7 & 34 & 117 & 188 & 160 & 66 & 9 & 0 & 0 & 581 \\ +Days Tmax \textgreater{} 32.2 & 0 & 0 & 0 & 0 & 0.6 & 3.1 & 6.3 & 3.8 & +1.2 & 0 & 0 & 0 & 15.1 \\ +Days with Tmin \textless{} 10 & 1.4 & 2.9 & 10.6 & 23.5 & 30.5 & 30 & 31 +& 31 & 30 & 28.1 & 13.1 & 2.9 & 235 \\ +Precip 25\% & 29 & 26 & 41 & 54 & 63 & 70 & 53 & 57 & 40 & 49 & 48 & 38 +& \\ +Precip 75\% & 75 & 66 & 90 & 119 & 141 & 124 & 115 & 143 & 117 & 93 & +133 & 80 & \\ +Precip \textgreater{} 0.2mm\footnote{This is Precip ≥ 0.01 inches as the + US uses inches rather than mm. (1 inch = 25.4mm).} & 10.7 & 8.8 & 11.2 +& 11.1 & 11.4 & 10.3 & 9.9 & 9 & 8.2 & 10.2 & 11.2 & 11.1 & 123.1 \\ +Precip \textgreater{} 25mm & 0.2 & 0.2 & 0.3 & 0.9 & 1 & 1.3 & 1 & 1.3 & +0.7 & 0.8 & 0.8 & 0.5 & 9 \\ +\end{longtable} + +One differences is for rainfall, where WMO suggests quintiles, +i.e.~20\%, to 80\%, while the US uses quartiles (25\% and 75\%). Heating +(HDD) and cooling degree days are also including. A heating degree day +is defined as a value of Tavg above 18°C (65 degrees Fahrenheit), while +CDDs are temperatures below that level. + +The WMO lower threshold for rainfall is proposed as ≥ 1mm. We have +largely used 0.85mm as a practical lower limit in this guide. We claim +this is consistent with the WMO value of ≥1mm. For practical purposes, +as data are recorded to 0.1mm the WMO value is effectively +\textgreater{} 0.95mm. For consistency between stations (which is +important for climate normals) the value of 0.85mm is about the same. +But it allows for differences in rounding at different stations. This +can occur in 2 ways. If data were originally in inches, then 0.01inch = +0.3mm. The value of 0.9mm is not possible, because 0.03inches = 0.8mm, +while 0.04inches = 1mm. + +In addition, some observers round data more than others. An observer who +rounds 0.9mm to 1mm would have that day counted as rain, while the more +precise observer, recording the same value as 0.9mm would have it +omitted as dry. + +For these reasons, we claim the proposed threshold value of 0.85mm is a +practical was of implementing the WMO ≥1mm threshold. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.1a Inventory for Dodoma}} + +\textbf{\emph{Climatic \textgreater{} Check Data \textgreater{} +Inventory}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.1b Subset with 30 years}} + +Right-click \textgreater{} Filter (to year from 1981 to 2010) +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.95767in,height=2.99414in]{media/image320. png} +& +\includegraphics[width=2.86941in,height=3.01892in]{media/image326. png} \\ +\end{longtable} + +In principle, producing normals is straightforward as is shown in +Section 19.2 with examples using rainfall data. Complications relate +largely to the presence of missing values in the reference period and +this is discussed in Section 19.3. + +The Dodoma data are used as an example. \textbf{\emph{File +\textgreater{} Open from Library \textgreater{} Instat \textgreater{} +Browse \textgreater{} Climatic \textgreater{} Tanzania \textgreater{} +Dodoma.rds}}. + +The data are already defined as climatic. An inventory is shown in Fig. +19.1a. IT shows there are virtually no missing values in the rainfall, +either in the 30 years from 1961 or in the most recent period, from 1981 +to2010. A subset of the data is produced as shown in Fig. 19.1b, and +rainfall normals from 1981-2010 are shown in Section 19.2. + +There are also relatively few missing values in the temperatures. They +are considered in Section 19.3, where we also explain the WMO +recommendations for coping with missing values. + +The sunshine records only started in 1973, and so could not be used for +1961-90 normals. And there are far too many missing values for them to +be used in 1981-2010, unless they can be merged with satellite data. +This is considered in Section 19.4. + +The examples here are for a single station. Usually they would be done +for a whole set of stations in a single file, and that is no more work. +The process, in R-Instat, currently involves three successive steps. +There seems to be no R-package for this task. We expect to construct one +for R and hence R-Instat, in the future. + +\section{Precipitation normals}\label{precipitation-normals} + +From Fig. 19.1b the Dodoma data are now from 1981 to 2010. We have +chosen to keep the year from January to December, though there could be +a case for July to June, as that would mean each ``year'' would be a +complete season. The rains in Dodoma are from November to April. In +(World Meteorological Organization (WMO), 2017), mention is made of +climate normals being for seasons rather than annual, but no details are +given, In Tanzania part of the country is unimodal and part is bimodal, +so comparisons of the normals between stations would be easier with a +consistent definition and January to December therefore seems justified. + +The first 2 normals in Table 19.1a are the precipitation totals and the +number of rain days. As preparation, calculate the rain days as shown in +Fig. 19.2a. In Fig. 19.2a the 0.85mm threshold has been used, which we +claimed above, is consistent with the WMO definition of rain ≥ 1mm. (Use +0.95mm is you don't agree!) + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2a Add a variable for raindays}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Transform}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.7959in,height=3.43268in]{media/image343.png} & +\includegraphics[width=3.22887in,height=3.40943in]{media/image32 2.png} \\ +\end{longtable} + +The resulting daily data are in Fig. 19.2b. The rainday variable can be +seen to be 1 on rain days, and 0 otherwise. + +Getting the monthly normals is a 2-step process and the annual normals +adds a 3rd step. + +The first step uses the \textbf{\emph{Climatic \textgreater{} Prepare +\textgreater{} Climatic Summaries}}, as shown in Fig. 19.2c, to give the +monthly rainfall totals for each year. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5000}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4861}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2c}} + +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.9982in,height=3.77487in]{media/image325. png} & +\includegraphics[width=2.87745in,height=2.99879in]{media/image298.p ng} \\ +\end{longtable} + +Complete the dialogue as shown in Fig. 19.2c and choose just the 3 +summaries from the sub-dialogue, as shown in Fig. 19.2d. This generates +a new data frame with 30 (years) by 12 (months), i.e.~360 rows of data. +It will be multiples of 360 rows if there is more than one station. + +Return to the dialogue, change the variable, in Fig. 19.2c, to +\textbf{\emph{raindays}} and omit the \textbf{\emph{Maximum}} and also +the \textbf{\emph{N Non Missing}} summary -- it isn't needed, because it +is just the same as for the rain column. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2e The resulting monthly data}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 9.2f}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.62242in,height=3.38293in]{media/image280.png} & +\includegraphics[width=3.3985in,height=3.33405in]{media/image294.png} \\ +\end{longtable} + +Check the resulting data frame, shown in Fig. 19.2e. For example, the +first row shows there was a total of 26.4mm from 5 rain days in +1981\footnote{Here the total rainfall is calculated from + \textbf{\emph{all}} the rain days -- i.e.~even those with less than + 0.85mm. This slightly higher than the totals ignoring those days + completely, i.e.~setting those values to zero. If you wish to set + those values to zero, then, with the daily data, generate a new + variable, say rain0 using \textbf{\emph{Prepare \textgreater{} Column: + Calculate \textgreater{} Calculation}} with the formula + \textbf{\emph{(rain\textgreater0.85) * rain}} or equivalently + \textbf{\emph{ifelse(rain\textgreater0.85, rain, 0)}}.}. The maximum +daily value was 14.4mm in January 1981. In Fig. 19.2e, check there are +no missing months. With the setting for missing values unchecked in Fig. +19.2c, a month will be set to missing if there is even a single missing +day in that month. We consider this issue at the start of Section 19.3. + +The (World Meteorological Organization (WMO), 2017) describes four +different parameters that can become monthly normals. From the daily +data it may be a mean, or a sum, or a count or an extreme. In Fig. 19.2e +there are 3 of these types. Thus, the rainfall totals are an example of +a sum, the number of rain days is a count, and the maximum rainfall is +an example of an extreme. Once temperature data are considered, there +will also be examples of means. + +The second step is to produce the climate normals from these monthly +data. This uses the ``ordinary'' summary dialogue in R-Instat, from +\textbf{\emph{Prepare \textgreater{} Column: Reshape \textgreater{} +Column Summaries}}, Fig 19.2f, rather than the special climatic summary. +This time the only summary needed is the mean, Fig. 19.2g. + +The results are a new data frame with just 12 rows, giving the monthly +climate normals, Fig. 19.2h. With multiple stations this would be a data +frame with 12 rows for each station. These can now be copied to a table +or presented graphically. With multiple stations this would be in a +facetted graph. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2g}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2h The climate normals}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.86638in,height=3.12462in]{media/image282.png} & +\includegraphics[width=2.80561in,height=3.19153in]{media/image306.png} \\ +\end{longtable} + +Fig. 19.2i gives a simple graph of the mean monthly totals with the data +from Fig. 19.2h as labels. Fig. 19.2j shows the rain days, where the +months have been changed into the more natural seasonal order. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2i}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2j}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.00801in,height=2.98747in]{media/image275.png} & +\includegraphics[width=3.01856in,height=2.99441in]{media/image281.png} \\ +\end{longtable} + +Secondary parameters for the rainfall, suggested by (World +Meteorological Organization (WMO), 2017) are the extremes, the quintile +boundaries and the number of rain days above defined thresholds. + +The quintile boundaries are the 0\%, 20\%, 40\%, 60\%, 80\%, 100\% +points, where the 0\% and 100\% are the monthly extremes. Countries are +unlikely to need them all and this is where the US has chosen quartiles, +i.e.~25\% and 75\% instead of quintiles. + +In R-Instat either can be found from adapting the second stage of the +calculations. If you would like the extremes and quartiles then use +Prepare \textgreater{} Column: Reshape \textgreater{} Column Summaries +again, Fig. 19.2f, but just for the sum\_rain variable. In the +summaries, Fig. 19.2g use the Minimum and Maximum for the extremes and +the Lower and Upper Quartiles if they are what you wish. + +If you prefer the quintiles (say 20\% and 80\% points), use the +\textbf{\emph{More}} tab, in Fig. 19.2g, to provide further summaries, +Fig. 19.2k, where the 0.2 gives the 20\% point. Currently only a single +value is allowed, so use the dialogue a second time to add the 80\% +point. + +Section 4.5 in (World Meteorological Organization (WMO), 2017) proposes +a definition for the quintile boundaries. R, and hence R-Instat, have 9 +alternative methods for the calculation of quantiles (including +therefore quintiles). The default in R is method 7 and this, +fortunately, coincides with the method proposed in (World Meteorological +Organization (WMO), 2017). + +Fig. 19.2l shows the normals for the mean, as in Fig. 19.2i, as a line +plot. It is together with the minimum, 20\%, 80\% and maximums for the +1981-2010 period. Note that the minimums and maximums are for the +monthly data, i.e.~the maximum of the monthly totals. For the rainfall +data it is also useful to have the daily maximums. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2k}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2l}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.35191in,height=2.54007in]{media/image279.png} & +\includegraphics[width=3.14897in,height=3.18948in]{media/image277.png} \\ +\end{longtable} + +It is important to be clear on the differences between the two maximums. +In January in Fig. 19.2m shows the largest monthly total was 331mm. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2m}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=5.71349in,height=3.02829in]{media/image260.png} \\ +\end{longtable} + +Also, in January, the maximum daily rainfall in the 30 years was 113mm. + +The quartile or quintile boundaries are calculated from the monthly +summaries, (i.e.~the second stage in the calculations). The mean number +of days above different thresholds needs the daily data. + +In \textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} +Transform}}, Fig. 19.2a change the threshold from 0.85mm to 5mm, 10mm, +etc and then summarise the resulting column(s) as described above. + +In practice, decide on the thresholds at the start, and then produce the +summaries together with the 1mm threshold. + +The resulting normals are in Fig. 19.2m for 5mm, 10mm and 25mm. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2n}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2o}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.98869in,height=2.75327in]{media/image314.png} & +\includegraphics[width=2.91184in,height=2.8491in]{media/image304.png} \\ +\end{longtable} + +Fig. 19.2n presents the normals of the number of rain days at +Dodoma\footnote{There were some simple steps to produce the graph in + Fig. 19.2n, from the data in Fig. 19.2m, as follows. First subtract + successive columns to give the number of days between 1mm and 5mm, + etc. Then use Climatic \textgreater{} Tidy and Examine \textgreater{} + Stack on these four variables, carrying the Month factor. Then produce + the stacked bar chart. It is good if the chart is in the ``right + order'', both for the bars and the legend, and this may involve the + Prepare \textgreater{} Column: Factor \textgreater{} Reorder Levels.}. +It shows that there was an average of 10 rain days in January. Of these, +just under half were between 1mm and 5mm and there were about 2 days per +month, on average, with more than 25mm. + +So far, we have considered monthly normals for the 1981-2010 rainfall +data. The third stage is to produce annual normals. The (World +Meteorological Organization (WMO), 2017) recommend producing them from +the monthly normals, i.e.~from the data in Fig. 19.2m, rather than from +the monthly data, e.g.~Fig 19.2e. If there are no missing values the +results are essentially the same. + +From the monthly normals in Fig. 19.2m use \textbf{\emph{Prepare +\textgreater{} Column: Reshape \textgreater{} Column Summaries}} again, +Fig. 19.2o, with the five variables \textbf{\emph{meanrain, rainday, +rainday5, rainday10}} and \textbf{\emph{rainday25}}. In Fig. 19.2o press +the \textbf{\emph{Summaries}} sub-dialogue and just get the +\textbf{\emph{Sum}}. Also, in Fig. 19.2o, the results could be stored in +another data frame if the calculations were for multiple stations. We +choose here to give the results in the \textbf{\emph{output window}} +instead, Fig. 19.2p. + +Now return to the dialogue in Fig. 19.2o. Use the variable +\textbf{\emph{maxrain}} instead and change the summary to just produce +the \textbf{\emph{maximum}}. + +The annual results, in Fig. 19.2p show the mean annual rainfall was +595mm from 43 rain days, of which, on average 7 days has 25mm or more. +So, the mean rain per rain day was on average 14mm and about one rain +day in six had 25mm or more. The largest ever daily rainfall was 113mm. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5417}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4444}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2p}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2q}} + +\textbf{\emph{Prepare \textgreater{} Column: Reshape \textgreater{} +Column Summaries (after making year a factor)}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.38801in,height=1.6163in]{media/image 297.png} & +\includegraphics[width=2.65829in,height=2.63924in]{media/image293.png} \\ +\end{longtable} + +The (World Meteorological Organization (WMO), 2017) recommendation of +calculating the annual normals from the monthly values does not work for +the quintiles. In the calculations above we have used the nice property +that ``the sum of the means is the same as the mean of the sums''. So, +in the figures above, totalling the monthly values in Fig. 19.2e to give +the 30 annual values and then taking the mean over the years, still +gives the value of 595mm that we found doing it ``the other way round''. + +One limitation with this recommendation is that it is not possible to +calculate the annual normal quintiles, i.e.~the variables minrain, 20\% +(q20) , q80 and maxrain, see Fig. 19.2m, from their monthly +counterparts. The same applies to the quartiles, see Table 19.1b above, +from (Arguez, et al., 2012) where the annual quartiles have been +omitted. + +These quintiles, including the annual extremes, are useful. As there are +no missing values in the data, they are calculated from the individual +monthly values, shown in Fig. 19.2e. + +With the monthly data frame, Fig. 19.2e, right-click in the year name +and make the year into a factor column. Then use \textbf{\emph{Prepare +\textgreater{} Column: Reshape \textgreater{} Column Summaries}} again +as shown in Fig. 19.2q, for the sumrain variable. + +In the summaries sub-dialogue just get the \textbf{\emph{Sum}}. The +resulting data frame is shown in Fig. 19.2r. + +Use the \textbf{\emph{Prepare \textgreater{} Column: Reshape +\textgreater{} Column Summaries}} in this new data frame. With the +\textbf{\emph{Summaries}} sub-dialogue give the \textbf{\emph{Mean, +Minimum,}} \textbf{\emph{Maximum}} and the \textbf{\emph{0.2 +percentile}} (on the More tab). Use the same dialogue again, and change +0.2 to 0.8 to give the 80\% point. + +The results are in Fig. 19.2s. The first value simply confirms that the +mean is the same, whichever way it is calculated. The lowest year had a +total of 330mm and the highest was 864mm. The 20\% point for the annual +rainfall total was 487mm and the 80\% point was 717mm. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3889}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5972}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2r}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.2s Annual results}} + +\textbf{\emph{From Prepare \textgreater{} Column: Reshape \textgreater{} +Column Summaries}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics{media/image307.png}\{wid th=``2.3395986439195102in'' +heig ht=``2.445317147856518in''\} & +\includegraphics[width=3.72906in,height=1.66129in]{media/im age303.png} \\ +\end{longtable} + +\section{Missing values}\label{missing-values} + +Make a copy of the rainfall column, to illustrate how to cope with +missing values. + +\textbf{\emph{Right-click}} in the \textbf{\emph{rain variable}}, Fig. +19.3a and choose \textbf{\emph{Duplicate Column}}. Call the resulting +variable \textbf{\emph{rainm}}, Fig. 19.3b. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.3a}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.3b}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.04597in,height=3.03483in]{media/image291.png} & +\includegraphics[width=2.8682in,height=2.8682in]{media/image296.png} \\ +\end{longtable} + +In the resulting column, double-click on 7\textsuperscript{th}, +8\textsuperscript{th} and 9\textsuperscript{th} January and make the +values into NA. Scroll down and make 1\textsuperscript{st} to +5\textsuperscript{th} February 1981 into NA. + +Then use Climatic \textgreater{} Prepare \textgreater{} Transform, Fig. +19.3c, to make a column called raindaym. The resulting data are shown in +Fig. 19.3d. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4909}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.3c}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.3d}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.96479in,height=4.01119in]{media/image310.png} & +\includegraphics[width=2.98045in,height=2.99647in]{media/image289.png} \\ +\end{longtable} + +The guidelines in (World Meteorological Organization (WMO), 2017) depend +on what type of parameter you are calculating, i.e.~sum, mean, count or +extreme. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.3e}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.3f}} + +\textbf{\emph{\hl{Redo when new option available}}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.73937in,height=3.50534in]{media/image593.pn g} +& +\includegraphics[width=3.22799in,height=2.81685in]{media/image58 2.png} \\ +\end{longtable} + +It is strict for a sum parameter, so here for the total monthly +rainfall. If there are \textbf{\emph{any}} missing values, it proposes +the monthly sum be set to missing. + +This is also one of the default settings in R, and hence in R-Instat. +So, repeat the \textbf{\emph{Climatic \textgreater{} Prepare +\textgreater{} Climatic Summaries}} dialogue, from Fig. 19.2b, also +shown in Fig. 19.3e, for the new \textbf{\emph{rainm}} variable. Just +get the \textbf{\emph{sum}}. + +The maximum daily rainfall is an extreme. When there are missing values +in the month, the extreme is found for those that remain present. So, +return to the \textbf{\emph{Prepare \textgreater{} Column: Reshape +\textgreater{} Column Summaries}} dialogue, tick the \textbf{\emph{Omit +Missing Values}} checkbox in the dialogue shown in Fig. 19.3e. Click the +\textbf{\emph{Summaries button}} and change the summary to give just the +\textbf{\emph{Maximum}}. + +When the parameter is a count, like the number of rain days, (or a +mean), there is an intermediate recommendation, shown in Fig. 19.3f. The +monthly summary is set to missing if there are 11 or more missing days +in the month, or if 5, or more, consecutive days are missing\footnote{Some + countries continue to use a tighter rule where 5 is the maximum number + of missing days permitted in a month, or 3 consecutive days.}. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.3g}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.3h}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.63872in,height=2.63325in]{media/image581.png} & +\includegraphics[width=3.35593in,height=2.69319in]{media/image577.png} \\ +\end{longtable} + +Return to the \textbf{\emph{Prepare \textgreater{} Column: Reshape +\textgreater{} Column Summaries}} dialogue, Fig. 19.3e, yet again and +use the \textbf{\emph{raindaym}} variable. Click on the Summaries and +choose \textbf{\emph{N Non Missing}} and \textbf{\emph{Sum}}. On the +main dialogue also tick the Add Date Column\footnote{If the checkbox is + not (yet) enabled, then press Ok for the existing summary. Use the + dialogue again, make date the element and choose Minimum. This has + given the column called min\_date in Fig. 19.3h.} checkbox. + +The results are shown in Fig. 19.3h. With the missing values, the first +2 months in 1981 are set to missing for the rainfall total and neither +month is missing for the maximum. For the number of rain days, the first +month is summarised, because just 3 days were missing. The second has +been set to NA, because 5 consecutive days were missing. + +With missing values (World Meteorological Organization (WMO), 2017) +propose one further adjustment for the count-type normals, that are here +represented by the number of rain days. The first row of data in Fig. +19.3h shows there were 4 rain days in the 28 non-missing days in January +1981. There are 31 days in January and hence the value is multiplied by +31/28, which gives an estimate of 4.4 rain days in the full month. + +To handle this adjustment, use \textbf{\emph{Climatic \textgreater{} +Date \textgreater{} Use Date}} as shown in Fig. 19.3i. Just choose the +check-box for \textbf{\emph{Days in Month}}. The resulting column is +also shown in Fig. 19.3h. Now use \textbf{\emph{Prepare \textgreater{} +Column: Calculate \textgreater{} Calculations}} and complete it as shown +in Fig. 19.3j. The resulting variable is also shown in Fig. 19.3h. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4583}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5278}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.3i Number of days in each month}} + +\textbf{\emph{Climatic \textgreater{} Date \textgreater{} Use Date}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.3j}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.79055in,height=2.93129in]{media/image580.pn g} +& +\includegraphics[width=3.18348in,height=2.97719in]{media/image57 8.png} \\ +\end{longtable} + +The second stage in the calculations is the summary of the normal for +each month, as shown in Section 19.2. The recommendation is that the +monthly normals should only be calculated where there are at least 80\%, +i.e.~24 of the 30 years that are not missing. In the example here, there +is missing in only a single year. Hence the second and third stages can +proceed as described in Section 19.2. + +This same rule of needing 80\% of the years also applies to the +calculations of the monthly quintiles. The annual quintiles, unlike the +other normal, can not be calculated from the monthly normal. Hence +annual quintiles should not be calculated if there are missing months in +the data. + +\section{Temperature normals}\label{temperature-normals} + +In (World Meteorological Organization (WMO), 2017) the monthly (and +annual) mean values of the (daily) Tmax, Tmin and Tmean are in the list +of Principal normals, \hyperref[bookmark=id.4anzqyu]{\ul{Table 19.1a}}, +while the monthly extremes and the count of the number of days that Tmax +exceeds 25˚C, 30˚C, 35˚C and 40˚C are listed as secondary. The only +equivalent threshold for Tmin is the count less than 0˚C, which is +rarely useful in Africa. In (Arguez, et al., 2012) the count less than +10˚C is used, see \hyperref[bookmark=id.2pta16n]{\ul{Table 19.1b}} and +that may be more relevant. + +There are missing values in the temperature record. The inventory in +Fig. 19.1a indicated that there are not many missing values, but a more +accurate check may be useful. One way again uses \textbf{\emph{Climatic +\textgreater{} Check Data \textgreater{} Inventory}}, as shown in Fig. +19.4a, but with a different layout of the data. The result is in Fig. +19.4b. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.3889}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5972}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.4a Detailed inventory}} + +\textbf{\emph{Climatic \textgreater{} Check Data \textgreater{} +Inventory}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.4b Results for Tmax and Tmin 1981-2010}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +! \href{media/image576.png}{}\{wi dth=``2.362328302712161in'' heig +ht=``2.666806649168854in''\} & +\includegraphics[width=3.62922in,height=3.40702in]{media/im age579.png} \\ +\end{longtable} + +This confirms that there are only a few missing values. A more precise +result would be through a table. This is not currently an automatic +option in R-Instat. However, it can easily be given as was shown in +Chapter 8, giving the results in Fig. 19.4c. They show the thin red +lines in Fig. 19.4b refer to isolated single missing days. There are +just 2 years with at least a missing month for Tmax and one year for +Tmin. The analysis can continue. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 0\tabcolsep) * \real{0.9730}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.4c Count of missing values in Tmax, Dodoma +1981-2010}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=6.26806in,height=4.25625in]{media/image569.png} \\ +\end{longtable} + +Tmin is used for illustration. The main dialogue is +\textbf{\emph{Climatic \textgreater{} Prepare \textgreater{} Climatic +Summaries}}, Fig. 19.4d. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.4d}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.4e}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.94936in,height=3.67289in]{media/image588.png} & +\includegraphics[width=2.99394in,height=3.0913in]{media/image596.png} \\ +\end{longtable} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.4f}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.4g}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.79883in,height=1.23229in]{media/image587.png} & +\includegraphics[width=3.3478in,height=2.8663in]{media/image613.png} \\ +\includegraphics[width=2.74314in,height=1.68997in]{media/image598.png} +& \\ +\end{longtable} + +The results are shown in Fig. 19.4g. For example, in July 1984 the +minimum of Tmin was 12.3˚C, the mean was 14.0˚C and the maximum was 15.8 +˚C. These were from 30 days, because one day was missing. 25 out of the +30 days were less than 15 ˚C. This count is adjusted as described in +Fig. 19.3i, i.e.~use Climatic \textgreater{} Dates \textgreater{} Use +Date to add a variable giving the number of days in each month and then +adjust the count of days less than 15 ˚C by: + +Countlt15/count\_non\_missing * days\_in month. + +This gives the last variable shown in Fig. 19.4g. + +The second stage is to average over the years. This uses +\textbf{\emph{Prepare \textgreater{} Column: Reshape \textgreater{} +Column Summaries}} as for the rainfall normals, Fig. 19.4h. + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4865}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4955}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.4h}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.4i}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=2.64831in,height=2.63875in]{media/image601.png} & +\includegraphics[width=3.44252in,height=2.52764in]{media/image594.png} \\ +\end{longtable} + +\begin{longtable}[]{@{} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}} + >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4911}}@{}} +\toprule\noalign{} +\begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.4j}} +\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright +\textbf{\emph{Fig. 19.4k}} +\end{minipage} \\ +\midrule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\includegraphics[width=3.28187in,height=3.19849in]{media/image586.png} & +\includegraphics[width=2.4934in,height=3.37342in]{media/image590.png} \\ +\end{longtable} + +\bookmarksetup{startatroot} + +\chapter{Various}\label{various} + +\section{Evapotranspiration}\label{evapotranspiration} + +\section{Filling and homogenising +data}\label{filling-and-homogenising-data} + +\section{Markov chains}\label{markov-chains} + +Will refer to (Stern, Dennett, \& Dale, The Analysis of Daily Rainfall +Measurements to Give Agronomically Useful Results 2 - A Modelling +Approach, 1982) + +\bookmarksetup{startatroot} + +\chapter{References}\label{references} + +Agostinelli, C., \& Lund, U. (n.d.). \emph{R package +\textquotesingle circular\textquotesingle: Circular Statistics}, 0.4-93. +Retrieved 2017, from https://r-forge.r-project.org/projects/circular/ + +Beguería, S., \& Vicente-Serrano, S. M. (2017). \emph{SPEI: Calculation +of the Standardised Precipitation-Evapotranspiration Index. R package +version 1.7.} Retrieved from https://CRAN.R-project.org/package=SPEI + +Cooper, P. M., Dimes, J., Rao, K. P., Shapiro, B., Shiferaw, B., \& +Swomlow, S. (2008). Coping better with current climatic variability in +the rain-fed farming systems of sub-Saharan Africa: An essential first +step in adapting to future climate change? \emph{Agriculture, Ecosystems +and Environment}, 24-35. + +GADM. (2019, 6 12). \emph{GADM}. Retrieved from +https://gadm.org/data.html + +Hansen, J. W., Mason, S. J., Sun, L., \& Tall, A. (2011). Review of +Seasonal Climate Forecasting. \emph{Experimental Agriculture}, 201-240. + +Keyantash, J., \& (Eds), N. C. (2018, August 7). \emph{The Climate Data +Guide: Standardized Precipitation Index (SPI)}. Retrieved June 10, 2019, +from NCAR/UCAR Climate Data Guide: +https://climatedataguide.ucar.edu/climate-data/standardized-precipitation-index-spi + +Mardia, K. V. (1972). \emph{Statistics of Directional Data.} London: +Academic Press. + +Mupamgwa, W., Walker, S., \& Twomlow, S. (2011). Start, end and dry +spells of the growing season in semi-arid southern Zimbabwe. +\emph{Journal of Arid Environments}, 1097-1104. + +Otieno Sango, B., \& Anderson-Cook, C. M. (2003). A More Efficient Way +Of Obtaining A Unique Median Estimate For Circular Data. \emph{Journal +of Modern Applied Statistical Methods}. + +Palmer, W. C. (1965). \emph{Meteorological Drought.} US Weather Bureau. + +Pewsey, A. N., \& D., R. G. (2013). \emph{Circular Statistics in R.} +Oxford: Oxford University Press. + +R Core Team. (2018). \emph{R: A language and environment for statistical +computing.} Retrieved from https://www.R-project.org/. + +Siebert, A., Dinku, T., Vuguziga, F., Twahirwa, A., Kagabo, D. M., +delCorral, J., \& Robertson, A. W. (2019). Evaluation of ENACTS‐Rwanda: +A new multi‐decade, high‐resolution rainfall and temperature data +set---Climatology. \emph{International Journal of Climatology}, +3104-3120. + +Stern, R. D., Dennett, M. D., \& Dale, I. C. (1982). The Analysis of +Daily Rainfall Measurements to Give Agronomically Useful Results 1 - +Direct Methods. \emph{Experimental Agriculture}, 223-236. + +Stern, R. D., Dennett, M. D., \& Dale, I. C. (1982). The Analysis of +Daily Rainfall Measurements to Give Agronomically Useful Results 2 - A +Modelling Approach. \emph{Experimental Agriculture}, 237-253. + +Stern, R. D., Rijks, D., Dale, I. C., \& Knock, J. (2006). \emph{Instat +Climatic Guide.} + +Svoboda, M., Hayes, M., \& Wood, D. A. (2012). \emph{Standardized +Precipitation Index User Guide.} Geneva: WMO. Retrieved from +http://library.wmo.int/pmb\_ged/wmo\_1090\_en.pdf + +Vicente-Serrano, S. M., Beguería, S., \& López-Moreno, J. I. (2010). A +Multiscalar Drought Index Sensitive to Global Warming: The Standardized +Precipitation Evapotranspiration Index. \emph{Journal of Climate}, +1696-1718. Retrieved from https://doi.org/10.1175/2009JCLI2909.1 + +Wells, N., Goddard, S., \& Hayes, M. J. (2004). . A Self-Calibrating +Palmer Drought Severity Index. \emph{Journal of Climate}, 2335-2351. + +Wikipedia contributors. (2019). \emph{R (programming language)}. +Retrieved from Wikipedia, The Free Encyclopedia: +https://en.wikipedia.org/w/index.php?title=R\_(programming\_language)\&oldid=887219468 + +Wikipedia contributors. (n.d.). \emph{Mean of circular quantities.} +Retrieved May 14 , 2019, from +https://en.wikipedia.org/w/index.php?title=Mean\_of\_circular\_quantities\&oldid=885307281 + +World Meteorological Organization (WMO). (2017). \emph{WMO guidelines on +the calculation of climate normals.} WMO. Retrieved from +https://library.wmo.int/doc\_num.php?explnum\_id=4166 + +World Meteorological Organization, (., Zwiers, F. W., \& Zhang, X. +(2009). \emph{Guidelines on Analysis of extremes in a changing climate +in support of informed decisions for adaptation.} WMO. Retrieved from +http://library.wmo.int/pmb\_ged/wmo-td\_1500\_en.pdf + +Zhang, X., Hegerl, G., Zwiers, F. W., \& Kenyon, J. (2005). Avoiding +Inhomogeneity in Percentile-Based Indices of Temperature Extremes. +\emph{Journal of Climate}, 1641-1651. + +Zhong, R., Chen, X., Wang, Z., \& Chengguang, L. (2018). scPDSI: +Calculation of the Conventional and Self-Calibrating Palmer Drought +Severity Index. Retrieved from https://CRAN.R-project.org/package=scPDSI + +\bookmarksetup{startatroot} + +\chapter{Index}\label{index} + +Zimbabwe, 123 + + + +\end{document} diff --git a/intro.qmd b/intro.qmd new file mode 100644 index 0000000..efcf172 --- /dev/null +++ b/intro.qmd @@ -0,0 +1,5 @@ +# Introduction + +This is a book created from markdown and executable code. + +See @knuth84 for additional discussion of literate programming. diff --git a/references.bib b/references.bib new file mode 100644 index 0000000..0220dbd --- /dev/null +++ b/references.bib @@ -0,0 +1,19 @@ +@article{knuth84, + author = {Knuth, Donald E.}, + title = {Literate Programming}, + year = {1984}, + issue_date = {May 1984}, + publisher = {Oxford University Press, Inc.}, + address = {USA}, + volume = {27}, + number = {2}, + issn = {0010-4620}, + url = {https://doi.org/10.1093/comjnl/27.2.97}, + doi = {10.1093/comjnl/27.2.97}, + journal = {Comput. J.}, + month = may, + pages = {97–111}, + numpages = {15} +} + + diff --git a/references.qmd b/references.qmd new file mode 100644 index 0000000..925f7c4 --- /dev/null +++ b/references.qmd @@ -0,0 +1,4 @@ +# References {.unnumbered} + +::: {#refs} +::: diff --git a/summary.qmd b/summary.qmd new file mode 100644 index 0000000..b450ab7 --- /dev/null +++ b/summary.qmd @@ -0,0 +1,3 @@ +# Summary + +In summary, this book has no content whatsoever.