<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://honghui-zhang.github.io//feed.xml" rel="self" type="application/atom+xml" /><link href="https://honghui-zhang.github.io//" rel="alternate" type="text/html" /><updated>2026-04-17T12:08:53+10:00</updated><id>https://honghui-zhang.github.io//feed.xml</id><title type="html">Honghui Zhang</title><subtitle>PHD candidate in CUHKSZ, Shenzhen, China</subtitle><author><name>Honghui Zhang</name><email>honghui.alice.zhang@gmail.com</email></author><entry><title type="html">WASP: An R package for complex system modelling and prediction</title><link href="https://honghui-zhang.github.io//posts/2023/06/blog-post-4/" rel="alternate" type="text/html" title="WASP: An R package for complex system modelling and prediction" /><published>2023-06-24T00:00:00+10:00</published><updated>2023-06-24T00:00:00+10:00</updated><id>https://honghui-zhang.github.io//posts/2023/06/blog-post-4</id><content type="html" xml:base="https://honghui-zhang.github.io//posts/2023/06/blog-post-4/"><![CDATA[<p>The wavelet-based variance transformation method is used for system
modelling and prediction. It refines predictor spectral representation
using Wavelet Theory, which leads to improved model specifications and
prediction accuracy. A supporting open-source software, Wavelet System
Prediction (WASP), can be found under page of
<a href="https://zejiang-unsw.github.io/software/">Software</a>.</p>

<ul>
  <li><a href="#required-packages" id="toc-required-packages">Required
packages</a></li>
  <li><a href="#dwt-modwt-and-at-basic-propertites" id="toc-dwt-modwt-and-at-basic-propertites">DWT, MODWT and AT basic
propertites</a>
    <ul>
      <li><a href="#summary-of-various-properties-for-the-three-dwt-methods" id="toc-summary-of-various-properties-for-the-three-dwt-methods">Summary
of various properties for the three DWT methods</a></li>
      <li><a href="#illustration-of-three-types-of-dwt-methods" id="toc-illustration-of-three-types-of-dwt-methods">Illustration of
three types of DWT methods</a>
        <ul>
          <li><a href="#daubechies-16-wavelet" id="toc-daubechies-16-wavelet">Daubechies 16 wavelet</a></li>
          <li><a href="#haar-wavelet-filter" id="toc-haar-wavelet-filter">Haar wavelet
filter</a></li>
        </ul>
      </li>
    </ul>
  </li>
  <li><a href="#optimal-variance-transformation" id="toc-optimal-variance-transformation">Optimal variance
transformation</a>
    <ul>
      <li><a href="#preditive-accuracy-rmse" id="toc-preditive-accuracy-rmse">Preditive accuracy (RMSE)</a></li>
      <li><a href="#transformed-predictor-variables" id="toc-transformed-predictor-variables">Transformed predictor
variables</a></li>
    </ul>
  </li>
  <li><a href="#stepwise-variance-transformation" id="toc-stepwise-variance-transformation">Stepwise variance
transformation</a></li>
</ul>

<h1 id="required-packages">Required packages</h1>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="n">require</span><span class="p">(</span><span class="n">SPEI</span><span class="p">))</span><span class="w"> </span><span class="n">devtools</span><span class="o">::</span><span class="n">install_github</span><span class="p">(</span><span class="s1">'sbegueria/SPEI@v1.7.1'</span><span class="p">)</span><span class="w"> </span><span class="c1"># use 1.7.1</span><span class="w">
</span><span class="c1">#&gt; Loading required package: SPEI</span><span class="w">
</span><span class="c1">#&gt; Loading required package: lmomco</span><span class="w">
</span><span class="c1">#&gt; Loading required package: parallel</span><span class="w">
</span><span class="c1">#&gt; Loading required package: ggplot2</span><span class="w">
</span><span class="c1">#&gt; # Package SPEI (1.7) loaded [try SPEINews()].</span><span class="w">

</span><span class="n">library</span><span class="p">(</span><span class="n">WASP</span><span class="p">)</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">synthesis</span><span class="p">)</span><span class="w">
</span><span class="c1">#&gt; </span><span class="w">
</span><span class="c1">#&gt; Attaching package: 'synthesis'</span><span class="w">
</span><span class="c1">#&gt; The following objects are masked from 'package:WASP':</span><span class="w">
</span><span class="c1">#&gt; </span><span class="w">
</span><span class="c1">#&gt;     data.gen.ar1, data.gen.ar4, data.gen.ar9, data.gen.HL,</span><span class="w">
</span><span class="c1">#&gt;     data.gen.Rossler, data.gen.SW, data.gen.tar1, data.gen.tar2</span><span class="w">

</span><span class="n">library</span><span class="p">(</span><span class="n">ggplot2</span><span class="p">)</span><span class="w">
</span><span class="n">require</span><span class="p">(</span><span class="n">SPEI</span><span class="p">)</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">FNN</span><span class="p">)</span><span class="w">
</span><span class="c1">#&gt; </span><span class="w">
</span><span class="c1">#&gt; Attaching package: 'FNN'</span><span class="w">
</span><span class="c1">#&gt; The following object is masked from 'package:WASP':</span><span class="w">
</span><span class="c1">#&gt; </span><span class="w">
</span><span class="c1">#&gt;     knn</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">waveslim</span><span class="p">)</span><span class="w">
</span><span class="c1">#&gt; </span><span class="w">
</span><span class="c1">#&gt; waveslim: Wavelet Method for 1/2/3D Signals (version = 1.8.4)</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">cowplot</span><span class="p">)</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">gridGraphics</span><span class="p">)</span><span class="w">
</span><span class="c1">#&gt; Loading required package: grid</span><span class="w">
</span></code></pre></div></div>

<h1 id="dwt-modwt-and-at-basic-propertites">DWT, MODWT and AT basic propertites</h1>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># data generation</span><span class="w">
</span><span class="n">x</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">arima.sim</span><span class="p">(</span><span class="nf">list</span><span class="p">(</span><span class="n">order</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="m">0</span><span class="p">,</span><span class="w"> </span><span class="m">0</span><span class="p">),</span><span class="w"> </span><span class="n">ar</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">0.6</span><span class="p">),</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">512</span><span class="p">)</span><span class="w">
</span><span class="c1"># x &lt;- as.numeric(scale(data.gen.Rossler(time = seq(0, 50, length.out = 512))$x, scale=F))</span><span class="w">

</span><span class="c1"># Daubechies wavelets</span><span class="w">
</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">wf</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"haar"</span><span class="p">,</span><span class="w"> </span><span class="s2">"d4"</span><span class="p">,</span><span class="w"> </span><span class="s2">"d8"</span><span class="p">,</span><span class="w"> </span><span class="s2">"d16"</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="n">print</span><span class="p">(</span><span class="n">paste0</span><span class="p">(</span><span class="s2">"Wavelet filter: "</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="p">))</span><span class="w">
  </span><span class="c1">#----------------------------------------------------------------------------</span><span class="w">
  </span><span class="c1"># wavelet family, extension mode and package</span><span class="w">
  </span><span class="c1"># wf &lt;- "haar" # wavelet family D8 or db4</span><span class="w">
  </span><span class="n">boundary</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="s2">"periodic"</span><span class="w">
  </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">wf</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="s2">"haar"</span><span class="p">)</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">as.integer</span><span class="p">(</span><span class="n">readr</span><span class="o">::</span><span class="n">parse_number</span><span class="p">(</span><span class="n">wf</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="m">2</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="m">1</span><span class="w">

  </span><span class="c1"># Maximum decomposition level J</span><span class="w">
  </span><span class="n">n</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">length</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="w">
  </span><span class="n">J</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">ceiling</span><span class="p">(</span><span class="nf">log</span><span class="p">(</span><span class="n">n</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="p">(</span><span class="m">2</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="m">1</span><span class="p">))</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nf">log</span><span class="p">(</span><span class="m">2</span><span class="p">))</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="c1"># (Kaiser, 1994)</span><span class="w">

  </span><span class="n">cov</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">rnorm</span><span class="p">(</span><span class="n">J</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="n">sd</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">2</span><span class="p">)</span><span class="w">
  </span><span class="n">Vr</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">as.numeric</span><span class="p">(</span><span class="n">cov</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">norm</span><span class="p">(</span><span class="n">cov</span><span class="p">,</span><span class="w"> </span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"2"</span><span class="p">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">sd</span><span class="p">(</span><span class="n">x</span><span class="p">))</span><span class="w">
  </span><span class="c1">#----------------------------------------------------------------------------</span><span class="w">
  </span><span class="c1"># DWT-MRA</span><span class="w">
  </span><span class="c1">#print("-----------DWT-MRA-----------")</span><span class="w">
  </span><span class="n">x.mra</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">waveslim</span><span class="o">::</span><span class="n">mra</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">wf</span><span class="p">,</span><span class="w"> </span><span class="n">J</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">J</span><span class="p">,</span><span class="w"> </span><span class="n">method</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"dwt"</span><span class="p">,</span><span class="w"> </span><span class="n">boundary</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">boundary</span><span class="p">)</span><span class="w">
  </span><span class="n">x.mra.m</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">matrix</span><span class="p">(</span><span class="n">unlist</span><span class="p">(</span><span class="n">x.mra</span><span class="p">),</span><span class="w"> </span><span class="n">ncol</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">J</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="m">1</span><span class="p">)</span><span class="w">

  </span><span class="n">x.n</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">scale</span><span class="p">(</span><span class="n">x.mra.m</span><span class="p">)</span><span class="w"> </span><span class="o">%*%</span><span class="w"> </span><span class="n">Vr</span><span class="w">
  </span><span class="n">var</span><span class="p">(</span><span class="n">x.n</span><span class="p">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">var</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="w">

  </span><span class="n">message</span><span class="p">(</span><span class="n">paste0</span><span class="p">(</span><span class="s2">"Additive decompostion: "</span><span class="p">,</span><span class="w"> </span><span class="n">isTRUE</span><span class="p">(</span><span class="n">all.equal</span><span class="p">(</span><span class="nf">as.numeric</span><span class="p">(</span><span class="n">x</span><span class="p">),</span><span class="w"> </span><span class="n">rowSums</span><span class="p">(</span><span class="n">x.mra.m</span><span class="p">)))))</span><span class="w">
  </span><span class="n">message</span><span class="p">(</span><span class="n">paste0</span><span class="p">(</span><span class="s2">"Variance decompostion: "</span><span class="p">,</span><span class="w"> </span><span class="n">isTRUE</span><span class="p">(</span><span class="n">all.equal</span><span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">x</span><span class="p">),</span><span class="w"> </span><span class="nf">sum</span><span class="p">(</span><span class="n">apply</span><span class="p">(</span><span class="n">x.mra.m</span><span class="p">,</span><span class="w"> </span><span class="m">2</span><span class="p">,</span><span class="w"> </span><span class="n">var</span><span class="p">))))))</span><span class="w">

  </span><span class="c1">#----------------------------------------------------------------------------</span><span class="w">
  </span><span class="c1"># MODWT</span><span class="w">
  </span><span class="c1">#print("-----------MODWT-----------")</span><span class="w">
  </span><span class="n">x.modwt</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">waveslim</span><span class="o">::</span><span class="n">modwt</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">wf</span><span class="p">,</span><span class="w"> </span><span class="n">n.levels</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">J</span><span class="p">,</span><span class="w"> </span><span class="n">boundary</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">boundary</span><span class="p">)</span><span class="w">
  </span><span class="n">x.modwt.m</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">matrix</span><span class="p">(</span><span class="n">unlist</span><span class="p">(</span><span class="n">x.modwt</span><span class="p">),</span><span class="w"> </span><span class="n">ncol</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">J</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="m">1</span><span class="p">)</span><span class="w">

  </span><span class="n">x.n</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">scale</span><span class="p">(</span><span class="n">x.modwt.m</span><span class="p">)</span><span class="w"> </span><span class="o">%*%</span><span class="w"> </span><span class="n">Vr</span><span class="w">
  </span><span class="n">var</span><span class="p">(</span><span class="n">x.n</span><span class="p">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">var</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="w">

  </span><span class="n">message</span><span class="p">(</span><span class="n">paste0</span><span class="p">(</span><span class="s2">"Additive decompostion: "</span><span class="p">,</span><span class="w"> </span><span class="n">isTRUE</span><span class="p">(</span><span class="n">all.equal</span><span class="p">(</span><span class="nf">as.numeric</span><span class="p">(</span><span class="n">x</span><span class="p">),</span><span class="w"> </span><span class="n">rowSums</span><span class="p">(</span><span class="n">x.modwt.m</span><span class="p">)))))</span><span class="w">
  </span><span class="n">message</span><span class="p">(</span><span class="n">paste0</span><span class="p">(</span><span class="s2">"Variance decompostion: "</span><span class="p">,</span><span class="w"> </span><span class="n">isTRUE</span><span class="p">(</span><span class="n">all.equal</span><span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">x</span><span class="p">),</span><span class="w"> </span><span class="nf">sum</span><span class="p">(</span><span class="n">apply</span><span class="p">(</span><span class="n">x.modwt.m</span><span class="p">,</span><span class="w"> </span><span class="m">2</span><span class="p">,</span><span class="w"> </span><span class="n">var</span><span class="p">))))))</span><span class="w">

  </span><span class="c1">#----------------------------------------------------------------------------</span><span class="w">
  </span><span class="c1"># a trous</span><span class="w">
  </span><span class="c1">#print("-----------AT-----------")</span><span class="w">
  </span><span class="n">x.at</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">at.wd</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">wf</span><span class="p">,</span><span class="w"> </span><span class="n">J</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">J</span><span class="p">,</span><span class="w"> </span><span class="n">boundary</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">boundary</span><span class="p">)</span><span class="w">
  </span><span class="n">x.at.m</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">matrix</span><span class="p">(</span><span class="n">unlist</span><span class="p">(</span><span class="n">x.at</span><span class="p">),</span><span class="w"> </span><span class="n">ncol</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">J</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="m">1</span><span class="p">)</span><span class="w">

  </span><span class="c1"># x.mra.modwt &lt;- waveslim::mra(x,wf=wf, J=J, method="modwt", boundary=boundary)</span><span class="w">
  </span><span class="c1"># x.mra.modwt &lt;- matrix(unlist(x.mra.modwt), ncol=J+1)</span><span class="w">
  </span><span class="c1">#</span><span class="w">
  </span><span class="c1"># print(sum(abs(x.at.m-x.mra.modwt)))</span><span class="w">

  </span><span class="n">message</span><span class="p">(</span><span class="n">paste0</span><span class="p">(</span><span class="s2">"Additive decompostion: "</span><span class="p">,</span><span class="w"> </span><span class="n">isTRUE</span><span class="p">(</span><span class="n">all.equal</span><span class="p">(</span><span class="nf">as.numeric</span><span class="p">(</span><span class="n">x</span><span class="p">),</span><span class="w"> </span><span class="n">rowSums</span><span class="p">(</span><span class="n">x.at.m</span><span class="p">)))))</span><span class="w">
  </span><span class="n">message</span><span class="p">(</span><span class="n">paste0</span><span class="p">(</span><span class="s2">"Variance decompostion: "</span><span class="p">,</span><span class="w"> </span><span class="n">isTRUE</span><span class="p">(</span><span class="n">all.equal</span><span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">x</span><span class="p">),</span><span class="w"> </span><span class="nf">sum</span><span class="p">(</span><span class="n">apply</span><span class="p">(</span><span class="n">x.at.m</span><span class="p">,</span><span class="w"> </span><span class="m">2</span><span class="p">,</span><span class="w"> </span><span class="n">var</span><span class="p">))))))</span><span class="w">

  </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">isTRUE</span><span class="p">(</span><span class="n">all.equal</span><span class="p">(</span><span class="n">x.at.m</span><span class="p">,</span><span class="w"> </span><span class="n">x.modwt.m</span><span class="p">)))</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">message</span><span class="p">(</span><span class="n">paste0</span><span class="p">(</span><span class="s2">"AT and MODWT is equivalent using the"</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="p">,</span><span class="w"> </span><span class="s2">"!"</span><span class="p">))</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="c1">#&gt; [1] "Wavelet filter: haar"</span><span class="w">
</span><span class="c1">#&gt; Additive decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; Variance decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; Additive decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; Variance decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; Additive decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; Variance decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; AT and MODWT is equivalent using thehaar!</span><span class="w">
</span><span class="c1">#&gt; [1] "Wavelet filter: d4"</span><span class="w">
</span><span class="c1">#&gt; Additive decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; Variance decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; Additive decompostion: FALSE</span><span class="w">
</span><span class="c1">#&gt; Variance decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; Additive decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; Variance decompostion: FALSE</span><span class="w">
</span><span class="c1">#&gt; [1] "Wavelet filter: d8"</span><span class="w">
</span><span class="c1">#&gt; Additive decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; Variance decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; Additive decompostion: FALSE</span><span class="w">
</span><span class="c1">#&gt; Variance decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; Additive decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; Variance decompostion: FALSE</span><span class="w">
</span><span class="c1">#&gt; [1] "Wavelet filter: d16"</span><span class="w">
</span><span class="c1">#&gt; Additive decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; Variance decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; Additive decompostion: FALSE</span><span class="w">
</span><span class="c1">#&gt; Variance decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; Additive decompostion: TRUE</span><span class="w">
</span><span class="c1">#&gt; Variance decompostion: FALSE</span><span class="w">
</span></code></pre></div></div>

<h2 id="summary-of-various-properties-for-the-three-dwt-methods">Summary of various properties for the three DWT methods</h2>

<table class="table" style="margin-left: auto; margin-right: auto;border-bottom: 0;">
<caption>
Summary of various properties for the three DWT methods
</caption>
<thead>
<tr>
<th style="text-align:left;">
Wavelet Method
</th>
<th style="text-align:left;">
Additive decomposition
</th>
<th style="text-align:left;">
Variance decomposition
</th>
<th style="text-align:left;">
No dependence on future data
</th>
<th style="text-align:left;">
Dyadic sample size
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;width: 6em; ">
DWT-MRA
</td>
<td style="text-align:left;width: 7em; ">
✓
</td>
<td style="text-align:left;width: 7em; ">
✓
</td>
<td style="text-align:left;width: 7em; ">
</td>
<td style="text-align:left;width: 7em; ">
✓
</td>
</tr>
<tr>
<td style="text-align:left;width: 6em; ">
MODWT
</td>
<td style="text-align:left;width: 7em; ">
</td>
<td style="text-align:left;width: 7em; ">
✓
</td>
<td style="text-align:left;width: 7em; ">
✓
</td>
<td style="text-align:left;width: 7em; ">
</td>
</tr>
<tr>
<td style="text-align:left;width: 6em; ">
AT
</td>
<td style="text-align:left;width: 7em; ">
✓
</td>
<td style="text-align:left;width: 7em; ">
</td>
<td style="text-align:left;width: 7em; ">
✓
</td>
<td style="text-align:left;width: 7em; ">
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td style="padding: 0; " colspan="100%">
<span style="font-style: italic;">Note: </span> <sup></sup> When Haar
wavelet filter is used, MODWT and AT are equivalent and both of them
preserves additive and variance decomposition.
</td>
</tr>
</tfoot>
</table>

<h2 id="illustration-of-three-types-of-dwt-methods">Illustration of three types of DWT methods</h2>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">p.list</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="kc">NULL</span><span class="w">
</span><span class="n">wf.opts</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"d16"</span><span class="p">,</span><span class="w"> </span><span class="s2">"haar"</span><span class="p">)</span><span class="w">
</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">k</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nf">seq_along</span><span class="p">(</span><span class="n">wf.opts</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="c1"># data generation</span><span class="w">
  </span><span class="n">x</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">arima.sim</span><span class="p">(</span><span class="nf">list</span><span class="p">(</span><span class="n">order</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="m">0</span><span class="p">,</span><span class="w"> </span><span class="m">0</span><span class="p">),</span><span class="w"> </span><span class="n">ar</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">0.6</span><span class="p">),</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">128</span><span class="p">)</span><span class="w">

  </span><span class="c1">#----------------------------------------------------------------------------</span><span class="w">
  </span><span class="c1"># wavelet family, extension mode and package</span><span class="w">
  </span><span class="n">wf</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">wf.opts</span><span class="p">[</span><span class="n">k</span><span class="p">]</span><span class="w"> </span><span class="c1"># wavelet family D8 or db4</span><span class="w">
  </span><span class="n">boundary</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="s2">"periodic"</span><span class="w">
  </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">wf</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="s2">"haar"</span><span class="p">)</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">as.integer</span><span class="p">(</span><span class="n">readr</span><span class="o">::</span><span class="n">parse_number</span><span class="p">(</span><span class="n">wf</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="m">2</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="m">1</span><span class="w">

  </span><span class="c1"># Maximum decomposition level J</span><span class="w">
  </span><span class="n">n</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">length</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="w">
  </span><span class="n">J</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">ceiling</span><span class="p">(</span><span class="nf">log</span><span class="p">(</span><span class="n">n</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="p">(</span><span class="m">2</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="m">1</span><span class="p">))</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nf">log</span><span class="p">(</span><span class="m">2</span><span class="p">))</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="c1"># (Kaiser, 1994)</span><span class="w">

  </span><span class="n">limits.x</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">0</span><span class="p">,</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w">
  </span><span class="n">limits.y</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">-3</span><span class="p">,</span><span class="w"> </span><span class="m">3</span><span class="p">)</span><span class="w">
  </span><span class="c1">#----------------------------------------------------------------------------</span><span class="w">
  </span><span class="c1"># DWT-MRA</span><span class="w">
  </span><span class="n">x.mra</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">waveslim</span><span class="o">::</span><span class="n">mra</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">wf</span><span class="p">,</span><span class="w"> </span><span class="n">J</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">J</span><span class="p">,</span><span class="w"> </span><span class="n">method</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"dwt"</span><span class="p">,</span><span class="w"> </span><span class="n">boundary</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">boundary</span><span class="p">)</span><span class="w">
  </span><span class="n">x.mra.m</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">matrix</span><span class="p">(</span><span class="n">unlist</span><span class="p">(</span><span class="n">x.mra</span><span class="p">),</span><span class="w"> </span><span class="n">ncol</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">J</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="m">1</span><span class="p">)</span><span class="w">

  </span><span class="n">p1</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">mra.plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">x.mra.m</span><span class="p">,</span><span class="w"> </span><span class="n">limits.x</span><span class="p">,</span><span class="w"> </span><span class="n">limits.y</span><span class="p">,</span><span class="w">
    </span><span class="n">ylab</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"X"</span><span class="p">,</span><span class="w"> </span><span class="n">col</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"red"</span><span class="p">,</span><span class="w"> </span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"details"</span><span class="p">,</span><span class="w">
    </span><span class="n">main</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">paste0</span><span class="p">(</span><span class="s2">"DWT-MRA"</span><span class="p">,</span><span class="w"> </span><span class="s2">"("</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="p">,</span><span class="w"> </span><span class="s2">")"</span><span class="p">),</span><span class="w"> </span><span class="n">ps</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">12</span><span class="w">
  </span><span class="p">)</span><span class="w">
  </span><span class="c1"># p1 &lt;- recordPlot()</span><span class="w">

  </span><span class="c1">#----------------------------------------------------------------------------</span><span class="w">
  </span><span class="c1"># MODWT</span><span class="w">
  </span><span class="n">x.modwt</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">waveslim</span><span class="o">::</span><span class="n">modwt</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">wf</span><span class="p">,</span><span class="w"> </span><span class="n">n.levels</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">J</span><span class="p">,</span><span class="w"> </span><span class="n">boundary</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">boundary</span><span class="p">)</span><span class="w">
  </span><span class="n">x.modwt.m</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">matrix</span><span class="p">(</span><span class="n">unlist</span><span class="p">(</span><span class="n">x.modwt</span><span class="p">),</span><span class="w"> </span><span class="n">ncol</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">J</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="m">1</span><span class="p">)</span><span class="w">

  </span><span class="n">p2</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">mra.plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">x.modwt.m</span><span class="p">,</span><span class="w"> </span><span class="n">limits.x</span><span class="p">,</span><span class="w"> </span><span class="n">limits.y</span><span class="p">,</span><span class="w">
    </span><span class="n">ylab</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"X"</span><span class="p">,</span><span class="w"> </span><span class="n">col</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"red"</span><span class="p">,</span><span class="w"> </span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"coefs"</span><span class="p">,</span><span class="w">
    </span><span class="n">main</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">paste0</span><span class="p">(</span><span class="s2">"MODWT"</span><span class="p">,</span><span class="w"> </span><span class="s2">"("</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="p">,</span><span class="w"> </span><span class="s2">")"</span><span class="p">),</span><span class="w"> </span><span class="n">ps</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">12</span><span class="w">
  </span><span class="p">)</span><span class="w">

  </span><span class="c1">#----------------------------------------------------------------------------</span><span class="w">
  </span><span class="c1"># a trous</span><span class="w">
  </span><span class="n">x.at</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">at.wd</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">wf</span><span class="p">,</span><span class="w"> </span><span class="n">J</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">J</span><span class="p">,</span><span class="w"> </span><span class="n">boundary</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">boundary</span><span class="p">)</span><span class="w">
  </span><span class="n">x.at.m</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">matrix</span><span class="p">(</span><span class="n">unlist</span><span class="p">(</span><span class="n">x.at</span><span class="p">),</span><span class="w"> </span><span class="n">ncol</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">J</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="m">1</span><span class="p">)</span><span class="w">

  </span><span class="n">p3</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">mra.plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">x.at.m</span><span class="p">,</span><span class="w"> </span><span class="n">limits.x</span><span class="p">,</span><span class="w"> </span><span class="n">limits.y</span><span class="p">,</span><span class="w">
    </span><span class="n">ylab</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"X"</span><span class="p">,</span><span class="w"> </span><span class="n">col</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"red"</span><span class="p">,</span><span class="w"> </span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"coefs"</span><span class="p">,</span><span class="w">
    </span><span class="n">main</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">paste0</span><span class="p">(</span><span class="s2">"AT"</span><span class="p">,</span><span class="w"> </span><span class="s2">"("</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="p">,</span><span class="w"> </span><span class="s2">")"</span><span class="p">),</span><span class="w"> </span><span class="n">ps</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">12</span><span class="w">
  </span><span class="p">)</span><span class="w">

  </span><span class="n">p.list</span><span class="p">[[</span><span class="n">k</span><span class="p">]]</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">list</span><span class="p">(</span><span class="n">p1</span><span class="p">,</span><span class="w"> </span><span class="n">p2</span><span class="p">,</span><span class="w"> </span><span class="n">p3</span><span class="p">)</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<h3 id="daubechies-16-wavelet">Daubechies 16 wavelet</h3>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#----------------------------------------------------------------------------</span><span class="w">
</span><span class="c1"># plot and save</span><span class="w">
</span><span class="n">cowplot</span><span class="o">::</span><span class="n">plot_grid</span><span class="p">(</span><span class="w">
  </span><span class="n">plotlist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">p.list</span><span class="p">[[</span><span class="m">1</span><span class="p">]],</span><span class="w"> </span><span class="n">ncol</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">3</span><span class="p">,</span><span class="w"> </span><span class="n">labels</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"(a)"</span><span class="p">,</span><span class="w"> </span><span class="s2">"(b)"</span><span class="p">,</span><span class="w"> </span><span class="s2">"(c)"</span><span class="p">),</span><span class="w">
  </span><span class="n">label_size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">12</span><span class="w">
</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<p><img src="_posts/2023-06-24-blog-post-4_files/figure-markdown_github/figa-1.png" alt="Illustration of three types of DWT methods" width="85%" /></p>
<p class="caption">
Illustration of three types of DWT methods
</p>

<h3 id="haar-wavelet-filter">Haar wavelet filter</h3>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#----------------------------------------------------------------------------</span><span class="w">
</span><span class="c1"># plot and save</span><span class="w">
</span><span class="n">cowplot</span><span class="o">::</span><span class="n">plot_grid</span><span class="p">(</span><span class="w">
  </span><span class="n">plotlist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">p.list</span><span class="p">[[</span><span class="m">2</span><span class="p">]],</span><span class="w"> </span><span class="n">ncol</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">3</span><span class="p">,</span><span class="w"> </span><span class="n">labels</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"(a)"</span><span class="p">,</span><span class="w"> </span><span class="s2">"(b)"</span><span class="p">,</span><span class="w"> </span><span class="s2">"(c)"</span><span class="p">),</span><span class="w">
  </span><span class="n">label_size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">12</span><span class="w">
</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<p><img src="_posts/2023-06-24-blog-post-4_files/figure-markdown_github/figb-1.png" alt="Illustration of three types of DWT methods" width="85%" /></p>
<p class="caption">
Illustration of three types of DWT methods
</p>

<h1 id="optimal-variance-transformation">Optimal variance transformation</h1>

<h2 id="preditive-accuracy-rmse">Preditive accuracy (RMSE)</h2>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="kc">FALSE</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="c1">### Synthetic example</span><span class="w">
  </span><span class="c1"># data generation</span><span class="w">
  </span><span class="n">set.seed</span><span class="p">(</span><span class="m">2020</span><span class="p">)</span><span class="w">
  </span><span class="n">sample</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="m">512</span><span class="w">
  </span><span class="c1"># frequency, sampled from a given range</span><span class="w">
  </span><span class="n">fd</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">3</span><span class="p">,</span><span class="w"> </span><span class="m">5</span><span class="p">,</span><span class="w"> </span><span class="m">10</span><span class="p">,</span><span class="w"> </span><span class="m">15</span><span class="p">,</span><span class="w"> </span><span class="m">25</span><span class="p">,</span><span class="w"> </span><span class="m">30</span><span class="p">,</span><span class="w"> </span><span class="m">55</span><span class="p">,</span><span class="w"> </span><span class="m">70</span><span class="p">,</span><span class="w"> </span><span class="m">95</span><span class="p">)</span><span class="w">
  </span><span class="c1"># data &lt;- WASP::data.gen.SW(nobs=sample,fp=25,fd=fd)</span><span class="w">
  </span><span class="n">data</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">WASP</span><span class="o">::</span><span class="n">data.gen.SW</span><span class="p">(</span><span class="n">nobs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sample</span><span class="p">,</span><span class="w"> </span><span class="n">fp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">15</span><span class="p">,</span><span class="w"> </span><span class="m">25</span><span class="p">,</span><span class="w"> </span><span class="m">30</span><span class="p">),</span><span class="w"> </span><span class="n">fd</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">fd</span><span class="p">)</span><span class="w">

  </span><span class="c1"># ts = data.gen.Rossler(time = seq(0, 50, length.out = sample))</span><span class="w">
  </span><span class="c1"># data &lt;- list(x=ts$z, dp=cbind(ts$x, ts$y))</span><span class="w">
</span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="c1">### Real-world example</span><span class="w">
  </span><span class="n">data</span><span class="p">(</span><span class="s2">"obs.mon"</span><span class="p">)</span><span class="w">
  </span><span class="n">data</span><span class="p">(</span><span class="s2">"rain.mon"</span><span class="p">)</span><span class="w">

  </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="kc">TRUE</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1"># SPI12 as response</span><span class="w">
    </span><span class="n">SPI.12</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">SPEI</span><span class="o">::</span><span class="n">spi</span><span class="p">(</span><span class="n">rain.mon</span><span class="p">[,</span><span class="w"> </span><span class="m">5</span><span class="p">],</span><span class="w"> </span><span class="n">scale</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">12</span><span class="p">)</span><span class="o">$</span><span class="n">fitted</span><span class="w">
    </span><span class="n">x</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">window</span><span class="p">(</span><span class="n">SPI.12</span><span class="p">,</span><span class="w"> </span><span class="n">start</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1950</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">),</span><span class="w"> </span><span class="n">end</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">2009</span><span class="p">,</span><span class="w"> </span><span class="m">12</span><span class="p">))</span><span class="w">
    </span><span class="n">dp</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">window</span><span class="p">(</span><span class="n">obs.mon</span><span class="p">,</span><span class="w"> </span><span class="n">start</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1950</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">),</span><span class="w"> </span><span class="n">end</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">2009</span><span class="p">,</span><span class="w"> </span><span class="m">12</span><span class="p">))</span><span class="w">
  </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1"># rainfall as response</span><span class="w">
    </span><span class="n">x</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">window</span><span class="p">(</span><span class="n">rain.mon</span><span class="p">[,</span><span class="w"> </span><span class="m">5</span><span class="p">],</span><span class="w"> </span><span class="n">start</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1950</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">),</span><span class="w"> </span><span class="n">end</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">2009</span><span class="p">,</span><span class="w"> </span><span class="m">12</span><span class="p">))</span><span class="w">
    </span><span class="n">dp</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">window</span><span class="p">(</span><span class="n">obs.mon</span><span class="p">,</span><span class="w"> </span><span class="n">start</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1950</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">),</span><span class="w"> </span><span class="n">end</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">2009</span><span class="p">,</span><span class="w"> </span><span class="m">12</span><span class="p">))</span><span class="w">
  </span><span class="p">}</span><span class="w">
  </span><span class="n">data</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">list</span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">dp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dp</span><span class="p">)</span><span class="w">
  </span><span class="n">sample</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">length</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="w">
</span><span class="p">}</span><span class="w">

</span><span class="c1"># plot.ts(cbind(data$x,data$dp))</span><span class="w">

</span><span class="n">tab.list</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">list</span><span class="p">()</span><span class="w">
</span><span class="n">mode.opts</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"MRA"</span><span class="p">,</span><span class="w"> </span><span class="s2">"MODWT"</span><span class="p">,</span><span class="w"> </span><span class="s2">"AT"</span><span class="p">)</span><span class="w">
</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">mode</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">mode.opts</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="n">print</span><span class="p">(</span><span class="n">mode</span><span class="p">)</span><span class="w">

  </span><span class="c1"># cov.opt &lt;- switch(2,"auto","pos","neg")</span><span class="w">
  </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">mode</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"MRA"</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">method</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">switch</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="s2">"dwt"</span><span class="p">,</span><span class="w"> </span><span class="s2">"modwt"</span><span class="p">)</span><span class="w">
  </span><span class="p">}</span><span class="w">

  </span><span class="c1"># wavelet family, extension mode and package</span><span class="w">
  </span><span class="c1"># wf &lt;- switch(mode, "MRA"="haar", "MODWT"="haar", "AT"="haar")</span><span class="w">
  </span><span class="n">wf</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="s2">"haar"</span><span class="w">
  </span><span class="n">pad</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="s2">"zero"</span><span class="w">
  </span><span class="n">boundary</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="s2">"periodic"</span><span class="w">
  </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">wf</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="s2">"haar"</span><span class="p">)</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">as.integer</span><span class="p">(</span><span class="n">readr</span><span class="o">::</span><span class="n">parse_number</span><span class="p">(</span><span class="n">wf</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="m">2</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="m">1</span><span class="w">

  </span><span class="c1"># Maximum decomposition level J</span><span class="w">
  </span><span class="n">n</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">sample</span><span class="w">
  </span><span class="n">J</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">ceiling</span><span class="p">(</span><span class="nf">log</span><span class="p">(</span><span class="n">n</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="p">(</span><span class="m">2</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="m">1</span><span class="p">))</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nf">log</span><span class="p">(</span><span class="m">2</span><span class="p">))</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="c1"># (Kaiser, 1994)</span><span class="w">

  </span><span class="n">tab</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="kc">NULL</span><span class="w">
  </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">cov.opt</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"auto"</span><span class="p">,</span><span class="w"> </span><span class="s2">"pos"</span><span class="p">,</span><span class="w"> </span><span class="s2">"neg"</span><span class="p">)[</span><span class="m">1</span><span class="p">])</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="c1"># variance transform - calibration</span><span class="w">
    </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">mode</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"MRA"</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="n">dwt</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">dwt.vt</span><span class="p">(</span><span class="n">data</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="p">,</span><span class="w"> </span><span class="n">J</span><span class="p">,</span><span class="w"> </span><span class="n">method</span><span class="p">,</span><span class="w"> </span><span class="n">pad</span><span class="p">,</span><span class="w"> </span><span class="n">boundary</span><span class="p">,</span><span class="w"> </span><span class="n">cov.opt</span><span class="p">)</span><span class="w">
    </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">mode</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"MODWT"</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="n">dwt</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">modwt.vt</span><span class="p">(</span><span class="n">data</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="p">,</span><span class="w"> </span><span class="n">J</span><span class="p">,</span><span class="w"> </span><span class="n">boundary</span><span class="p">,</span><span class="w"> </span><span class="n">cov.opt</span><span class="p">)</span><span class="w">
    </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="n">dwt</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">at.vt</span><span class="p">(</span><span class="n">data</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="p">,</span><span class="w"> </span><span class="n">J</span><span class="p">,</span><span class="w"> </span><span class="n">boundary</span><span class="p">,</span><span class="w"> </span><span class="n">cov.opt</span><span class="p">)</span><span class="w">
    </span><span class="p">}</span><span class="w">

    </span><span class="c1"># optimal prediction accuracy</span><span class="w">
    </span><span class="n">opti.rmse</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="kc">NULL</span><span class="w">
    </span><span class="n">dp.RMSE</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="kc">NULL</span><span class="w">
    </span><span class="n">dp.n.RMSE</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="kc">NULL</span><span class="w">
    </span><span class="n">S</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">dwt</span><span class="o">$</span><span class="n">S</span><span class="w">
    </span><span class="n">ndim</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">ncol</span><span class="p">(</span><span class="n">S</span><span class="p">)</span><span class="w">
    </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="m">1</span><span class="o">:</span><span class="n">ndim</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="n">x</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">dwt</span><span class="o">$</span><span class="n">x</span><span class="w">
      </span><span class="n">dp</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">dwt</span><span class="o">$</span><span class="n">dp</span><span class="p">[,</span><span class="w"> </span><span class="n">i</span><span class="p">]</span><span class="w">
      </span><span class="n">dp.n</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">dwt</span><span class="o">$</span><span class="n">dp.n</span><span class="p">[,</span><span class="w"> </span><span class="n">i</span><span class="p">]</span><span class="w">

      </span><span class="c1"># ts.plot(cbind(dp,dp.n), col=1:2)</span><span class="w">

      </span><span class="n">dp.RMSE</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="n">dp.RMSE</span><span class="p">,</span><span class="w"> </span><span class="nf">sqrt</span><span class="p">(</span><span class="n">mean</span><span class="p">(</span><span class="n">lm</span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o">~</span><span class="w"> </span><span class="n">dp</span><span class="p">)</span><span class="o">$</span><span class="n">residuals</span><span class="o">^</span><span class="m">2</span><span class="p">)))</span><span class="w">
      </span><span class="n">dp.n.RMSE</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="n">dp.n.RMSE</span><span class="p">,</span><span class="w"> </span><span class="nf">sqrt</span><span class="p">(</span><span class="n">mean</span><span class="p">(</span><span class="n">lm</span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o">~</span><span class="w"> </span><span class="n">dp.n</span><span class="p">)</span><span class="o">$</span><span class="n">residuals</span><span class="o">^</span><span class="m">2</span><span class="p">)))</span><span class="w">

      </span><span class="c1"># small difference due to the reconstruction</span><span class="w">
      </span><span class="n">opti.rmse</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="n">opti.rmse</span><span class="p">,</span><span class="w"> </span><span class="nf">sqrt</span><span class="p">((</span><span class="n">n</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="m">1</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">var</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="nf">sum</span><span class="p">(</span><span class="n">S</span><span class="p">[,</span><span class="w"> </span><span class="n">i</span><span class="p">]</span><span class="o">^</span><span class="m">2</span><span class="p">)</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">var</span><span class="p">(</span><span class="n">dp</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">var</span><span class="p">(</span><span class="n">dp.n</span><span class="p">))))</span><span class="w">
      </span><span class="c1"># opti.rmse &lt;- c(opti.rmse, sqrt((n-1)/n*(var(x)-sum(S[,i]^2))))</span><span class="w">
    </span><span class="p">}</span><span class="w">

    </span><span class="n">tab</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">rbind</span><span class="p">(</span><span class="n">tab</span><span class="p">,</span><span class="w"> </span><span class="n">data.frame</span><span class="p">(</span><span class="n">cov.opt</span><span class="p">,</span><span class="w"> </span><span class="n">var</span><span class="o">=</span><span class="m">1</span><span class="o">:</span><span class="n">ndim</span><span class="p">,</span><span class="w"> </span><span class="n">dp.RMSE</span><span class="p">,</span><span class="w"> </span><span class="n">dp.n.RMSE</span><span class="p">,</span><span class="w"> </span><span class="n">opti.rmse</span><span class="p">))</span><span class="w">
  </span><span class="p">}</span><span class="w">

  </span><span class="n">colnames</span><span class="p">(</span><span class="n">tab</span><span class="p">)</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"Sign of covariance"</span><span class="p">,</span><span class="w"> </span><span class="s2">"Variable"</span><span class="p">,</span><span class="w"> </span><span class="s2">"Std"</span><span class="p">,</span><span class="w"> </span><span class="s2">"VT"</span><span class="p">,</span><span class="w"> </span><span class="s2">"Optimal"</span><span class="p">)</span><span class="w">
  </span><span class="n">tab.list</span><span class="p">[[</span><span class="nf">length</span><span class="p">(</span><span class="n">tab.list</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="m">1</span><span class="p">]]</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">tab</span><span class="w">
</span><span class="p">}</span><span class="w">

</span><span class="c1"># print(tab.list)</span><span class="w">
</span></code></pre></div></div>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">kable</span><span class="p">(</span><span class="n">tab.list</span><span class="p">[[</span><span class="m">1</span><span class="p">]][,</span><span class="m">-1</span><span class="p">],</span><span class="w"> </span><span class="n">caption</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"Optimal RMSE using DWT-based VT"</span><span class="p">,</span><span class="w">
      </span><span class="n">booktabs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">T</span><span class="p">,</span><span class="w"> </span><span class="n">align</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"c"</span><span class="p">,</span><span class="w"> </span><span class="n">digits</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">3</span><span class="p">)</span><span class="w"> </span><span class="o">%&gt;%</span><span class="w">
</span><span class="n">kable_styling</span><span class="p">(</span><span class="s2">"striped"</span><span class="p">,</span><span class="w"> </span><span class="n">position</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"center"</span><span class="p">,</span><span class="w"> </span><span class="n">full_width</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">FALSE</span><span class="p">)</span><span class="w">  </span><span class="o">%&gt;%</span><span class="w">
</span><span class="n">collapse_rows</span><span class="p">(</span><span class="n">columns</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="n">valign</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"middle"</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<table class="table table-striped" style="width: auto !important; margin-left: auto; margin-right: auto;">
<caption>
Optimal RMSE using DWT-based VT
</caption>
<thead>
<tr>
<th style="text-align:center;">
Variable
</th>
<th style="text-align:center;">
Std
</th>
<th style="text-align:center;">
VT
</th>
<th style="text-align:center;">
Optimal
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center;">
1
</td>
<td style="text-align:center;">
0.976
</td>
<td style="text-align:center;">
0.899
</td>
<td style="text-align:center;">
0.899
</td>
</tr>
<tr>
<td style="text-align:center;">
2
</td>
<td style="text-align:center;">
0.937
</td>
<td style="text-align:center;">
0.819
</td>
<td style="text-align:center;">
0.819
</td>
</tr>
<tr>
<td style="text-align:center;">
3
</td>
<td style="text-align:center;">
0.957
</td>
<td style="text-align:center;">
0.901
</td>
<td style="text-align:center;">
0.901
</td>
</tr>
<tr>
<td style="text-align:center;">
4
</td>
<td style="text-align:center;">
0.988
</td>
<td style="text-align:center;">
0.933
</td>
<td style="text-align:center;">
0.933
</td>
</tr>
<tr>
<td style="text-align:center;">
5
</td>
<td style="text-align:center;">
0.984
</td>
<td style="text-align:center;">
0.902
</td>
<td style="text-align:center;">
0.902
</td>
</tr>
<tr>
<td style="text-align:center;">
6
</td>
<td style="text-align:center;">
0.983
</td>
<td style="text-align:center;">
0.892
</td>
<td style="text-align:center;">
0.892
</td>
</tr>
<tr>
<td style="text-align:center;">
7
</td>
<td style="text-align:center;">
0.987
</td>
<td style="text-align:center;">
0.917
</td>
<td style="text-align:center;">
0.917
</td>
</tr>
</tbody>
</table>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">kable</span><span class="p">(</span><span class="n">tab.list</span><span class="p">[[</span><span class="m">2</span><span class="p">]][,</span><span class="m">-1</span><span class="p">],</span><span class="w"> </span><span class="n">caption</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"Optimal RMSE using MODWT/AT-based VT"</span><span class="p">,</span><span class="w">
      </span><span class="n">booktabs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">T</span><span class="p">,</span><span class="w"> </span><span class="n">align</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"c"</span><span class="p">,</span><span class="w"> </span><span class="n">digits</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">3</span><span class="p">)</span><span class="w"> </span><span class="o">%&gt;%</span><span class="w">
</span><span class="n">kable_styling</span><span class="p">(</span><span class="s2">"striped"</span><span class="p">,</span><span class="w"> </span><span class="n">position</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"center"</span><span class="p">,</span><span class="w"> </span><span class="n">full_width</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">FALSE</span><span class="p">)</span><span class="w">  </span><span class="o">%&gt;%</span><span class="w">
</span><span class="n">collapse_rows</span><span class="p">(</span><span class="n">columns</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="n">valign</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"middle"</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<table class="table table-striped" style="width: auto !important; margin-left: auto; margin-right: auto;">
<caption>
Optimal RMSE using MODWT/AT-based VT
</caption>
<thead>
<tr>
<th style="text-align:center;">
Variable
</th>
<th style="text-align:center;">
Std
</th>
<th style="text-align:center;">
VT
</th>
<th style="text-align:center;">
Optimal
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center;">
1
</td>
<td style="text-align:center;">
0.976
</td>
<td style="text-align:center;">
0.909
</td>
<td style="text-align:center;">
0.909
</td>
</tr>
<tr>
<td style="text-align:center;">
2
</td>
<td style="text-align:center;">
0.937
</td>
<td style="text-align:center;">
0.785
</td>
<td style="text-align:center;">
0.785
</td>
</tr>
<tr>
<td style="text-align:center;">
3
</td>
<td style="text-align:center;">
0.957
</td>
<td style="text-align:center;">
0.893
</td>
<td style="text-align:center;">
0.893
</td>
</tr>
<tr>
<td style="text-align:center;">
4
</td>
<td style="text-align:center;">
0.988
</td>
<td style="text-align:center;">
0.954
</td>
<td style="text-align:center;">
0.954
</td>
</tr>
<tr>
<td style="text-align:center;">
5
</td>
<td style="text-align:center;">
0.984
</td>
<td style="text-align:center;">
0.941
</td>
<td style="text-align:center;">
0.941
</td>
</tr>
<tr>
<td style="text-align:center;">
6
</td>
<td style="text-align:center;">
0.983
</td>
<td style="text-align:center;">
0.824
</td>
<td style="text-align:center;">
0.824
</td>
</tr>
<tr>
<td style="text-align:center;">
7
</td>
<td style="text-align:center;">
0.987
</td>
<td style="text-align:center;">
0.957
</td>
<td style="text-align:center;">
0.957
</td>
</tr>
</tbody>
</table>

<h2 id="transformed-predictor-variables">Transformed predictor variables</h2>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#-------------------------------------------------------------------</span><span class="w">
</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="kc">FALSE</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="n">set.seed</span><span class="p">(</span><span class="m">2020</span><span class="p">)</span><span class="w">
  </span><span class="c1">### synthetic example - Rossler</span><span class="w">
  </span><span class="n">sample</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="m">10000</span><span class="w">
  </span><span class="n">s</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="m">0.1</span><span class="w">
  </span><span class="n">ts.list</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">list</span><span class="p">()</span><span class="w">
  </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nf">seq_along</span><span class="p">(</span><span class="n">s</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">ts.r</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">data.gen.Rossler</span><span class="p">(</span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">0.2</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">0.2</span><span class="p">,</span><span class="w"> </span><span class="n">w</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">5.7</span><span class="p">,</span><span class="w"> </span><span class="n">start</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">-2</span><span class="p">,</span><span class="w"> </span><span class="m">-10</span><span class="p">,</span><span class="w"> </span><span class="m">0.2</span><span class="p">),</span><span class="w"> </span><span class="n">time</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">seq</span><span class="p">(</span><span class="m">0</span><span class="p">,</span><span class="w"> </span><span class="m">50</span><span class="p">,</span><span class="w"> </span><span class="n">length.out</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sample</span><span class="p">))</span><span class="w">

    </span><span class="c1"># add noise</span><span class="w">
    </span><span class="n">ts.r</span><span class="o">$</span><span class="n">x</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">ts</span><span class="p">(</span><span class="n">ts.r</span><span class="o">$</span><span class="n">x</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">rnorm</span><span class="p">(</span><span class="n">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sample</span><span class="p">,</span><span class="w"> </span><span class="n">mean</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">0</span><span class="p">,</span><span class="w"> </span><span class="n">sd</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span><span class="w">
    </span><span class="n">ts.r</span><span class="o">$</span><span class="n">y</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">ts</span><span class="p">(</span><span class="n">ts.r</span><span class="o">$</span><span class="n">y</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">rnorm</span><span class="p">(</span><span class="n">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sample</span><span class="p">,</span><span class="w"> </span><span class="n">mean</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">0</span><span class="p">,</span><span class="w"> </span><span class="n">sd</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span><span class="w">
    </span><span class="n">ts.r</span><span class="o">$</span><span class="n">z</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">ts</span><span class="p">(</span><span class="n">ts.r</span><span class="o">$</span><span class="n">z</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">rnorm</span><span class="p">(</span><span class="n">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sample</span><span class="p">,</span><span class="w"> </span><span class="n">mean</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">0</span><span class="p">,</span><span class="w"> </span><span class="n">sd</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">s</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span><span class="w">

    </span><span class="n">ts.list</span><span class="p">[[</span><span class="n">i</span><span class="p">]]</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">ts.r</span><span class="w">
  </span><span class="p">}</span><span class="w">

  </span><span class="n">data.list</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">lapply</span><span class="p">(</span><span class="n">ts.list</span><span class="p">,</span><span class="w"> </span><span class="k">function</span><span class="p">(</span><span class="n">ts</span><span class="p">)</span><span class="w"> </span><span class="nf">list</span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ts</span><span class="o">$</span><span class="n">z</span><span class="p">,</span><span class="w"> </span><span class="n">dp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cbind</span><span class="p">(</span><span class="n">ts</span><span class="o">$</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">ts</span><span class="o">$</span><span class="n">y</span><span class="p">)))</span><span class="w">

  </span><span class="n">lab.names</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"x"</span><span class="p">,</span><span class="w"> </span><span class="s2">"y"</span><span class="p">)</span><span class="w">
  </span><span class="n">xlim</span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">0</span><span class="p">,</span><span class="n">n</span><span class="p">);</span><span class="w"> </span><span class="n">ylim</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">-55</span><span class="p">,</span><span class="w"> </span><span class="m">55</span><span class="p">)</span><span class="w">
</span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w">

  </span><span class="c1">### Real-world example</span><span class="w">
  </span><span class="n">data</span><span class="p">(</span><span class="s2">"obs.mon"</span><span class="p">)</span><span class="w">
  </span><span class="n">data</span><span class="p">(</span><span class="s2">"rain.mon"</span><span class="p">)</span><span class="w">

  </span><span class="n">SPI.12</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">SPEI</span><span class="o">::</span><span class="n">spi</span><span class="p">(</span><span class="n">rain.mon</span><span class="p">[,</span><span class="w"> </span><span class="m">5</span><span class="p">],</span><span class="w"> </span><span class="n">scale</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">12</span><span class="p">)</span><span class="o">$</span><span class="n">fitted</span><span class="w">
  </span><span class="n">x</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">window</span><span class="p">(</span><span class="n">SPI.12</span><span class="p">,</span><span class="w"> </span><span class="n">start</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1950</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">),</span><span class="w"> </span><span class="n">end</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">2009</span><span class="p">,</span><span class="w"> </span><span class="m">12</span><span class="p">))</span><span class="w">
  </span><span class="n">dp</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">window</span><span class="p">(</span><span class="n">obs.mon</span><span class="p">,</span><span class="w"> </span><span class="n">start</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1950</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">),</span><span class="w"> </span><span class="n">end</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">2009</span><span class="p">,</span><span class="w"> </span><span class="m">12</span><span class="p">))</span><span class="w">

  </span><span class="n">data.list</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">list</span><span class="p">(</span><span class="nf">list</span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">dp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dp</span><span class="p">))</span><span class="w">
  </span><span class="n">sample</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">length</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="w">

  </span><span class="n">lab.names</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">colnames</span><span class="p">(</span><span class="n">obs.mon</span><span class="p">)</span><span class="w">
  </span><span class="n">xlim</span><span class="o">&lt;-</span><span class="w"> </span><span class="kc">NULL</span><span class="p">;</span><span class="w"> </span><span class="n">ylim</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="kc">NULL</span><span class="w">
</span><span class="p">}</span><span class="w">

</span><span class="c1">#-------------------------------------------------------------------</span><span class="w">
</span><span class="n">p.list</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">list</span><span class="p">()</span><span class="w">
</span><span class="n">dp.list</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">list</span><span class="p">()</span><span class="w">
</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">wf</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="s2">"haar"</span><span class="p">)</span><span class="w"> </span><span class="n">mode.opts</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"MRA"</span><span class="p">,</span><span class="w"> </span><span class="s2">"MODWT"</span><span class="p">,</span><span class="w"> </span><span class="s2">"AT"</span><span class="p">)[</span><span class="m">1</span><span class="o">:</span><span class="m">3</span><span class="p">]</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">mode.opts</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"MRA"</span><span class="p">,</span><span class="w"> </span><span class="s2">"MODWT"</span><span class="p">,</span><span class="s2">"AT"</span><span class="p">)[</span><span class="m">1</span><span class="o">:</span><span class="m">2</span><span class="p">]</span><span class="w">

</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">mode</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">mode.opts</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="n">cov.opt</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">switch</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="s2">"auto"</span><span class="p">,</span><span class="s2">"pos"</span><span class="p">,</span><span class="s2">"neg"</span><span class="p">)</span><span class="w">
  </span><span class="n">flag</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">switch</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="s2">"biased"</span><span class="p">,</span><span class="w"> </span><span class="s2">"unbiased"</span><span class="p">)</span><span class="w">
  
  </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">mode</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"MRA"</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">method</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">switch</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="s2">"dwt"</span><span class="p">,</span><span class="s2">"modwt"</span><span class="p">)</span><span class="w">
  </span><span class="p">}</span><span class="w">

  </span><span class="c1"># wavelet family, extension mode and package</span><span class="w">
  </span><span class="c1"># wf &lt;- switch(mode, "MRA"="haar", "MODWT"="haar", "AT"="haar")</span><span class="w">
  </span><span class="n">wf</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="s2">"d16"</span><span class="w">
  </span><span class="n">pad</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="s2">"zero"</span><span class="w">
  </span><span class="n">boundary</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="s2">"periodic"</span><span class="w">
  </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">wf</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="s2">"haar"</span><span class="p">)</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">as.integer</span><span class="p">(</span><span class="n">readr</span><span class="o">::</span><span class="n">parse_number</span><span class="p">(</span><span class="n">wf</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="m">2</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="m">1</span><span class="w">

  </span><span class="c1"># Maximum decomposition level J</span><span class="w">
  </span><span class="n">n</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">sample</span><span class="w">
  </span><span class="n">J</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">ceiling</span><span class="p">(</span><span class="nf">log</span><span class="p">(</span><span class="n">n</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="p">(</span><span class="m">2</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="m">1</span><span class="p">))</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nf">log</span><span class="p">(</span><span class="m">2</span><span class="p">))</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="c1"># (Kaiser, 1994)</span><span class="w">
  </span><span class="c1"># J &lt;- floor(log(n/(2*v-1))/log(2))</span><span class="w">

  </span><span class="c1"># variance transform - calibration</span><span class="w">
  </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">mode</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"MRA"</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">dwt.list</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">lapply</span><span class="p">(</span><span class="n">data.list</span><span class="p">,</span><span class="w"> </span><span class="k">function</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="n">dwt.vt</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="p">,</span><span class="w"> </span><span class="n">J</span><span class="p">,</span><span class="w"> </span><span class="n">method</span><span class="p">,</span><span class="w"> </span><span class="n">pad</span><span class="p">,</span><span class="w"> </span><span class="n">boundary</span><span class="p">,</span><span class="w"> </span><span class="n">cov.opt</span><span class="p">,</span><span class="w"> </span><span class="n">flag</span><span class="p">))</span><span class="w">
  </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">mode</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"MODWT"</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">dwt.list</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">lapply</span><span class="p">(</span><span class="n">data.list</span><span class="p">,</span><span class="w"> </span><span class="k">function</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="n">modwt.vt</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="p">,</span><span class="w"> </span><span class="n">J</span><span class="p">,</span><span class="w"> </span><span class="n">boundary</span><span class="p">,</span><span class="w"> </span><span class="n">cov.opt</span><span class="p">,</span><span class="w"> </span><span class="n">flag</span><span class="p">))</span><span class="w">
  </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">dwt.list</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">lapply</span><span class="p">(</span><span class="n">data.list</span><span class="p">,</span><span class="w"> </span><span class="k">function</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="n">at.vt</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="p">,</span><span class="w"> </span><span class="n">J</span><span class="p">,</span><span class="w"> </span><span class="n">boundary</span><span class="p">,</span><span class="w"> </span><span class="n">cov.opt</span><span class="p">,</span><span class="w"> </span><span class="n">flag</span><span class="p">))</span><span class="w">
  </span><span class="p">}</span><span class="w">

  </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="m">1</span><span class="o">:</span><span class="nf">length</span><span class="p">(</span><span class="n">dwt.list</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">dwt</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">dwt.list</span><span class="p">[[</span><span class="n">j</span><span class="p">]]</span><span class="w">

    </span><span class="n">par</span><span class="p">(</span><span class="w">
      </span><span class="n">mfrow</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="n">ncol</span><span class="p">(</span><span class="n">dwt</span><span class="o">$</span><span class="n">dp</span><span class="p">),</span><span class="w"> </span><span class="m">1</span><span class="p">),</span><span class="w"> </span><span class="n">mar</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">0</span><span class="p">,</span><span class="w"> </span><span class="m">2.5</span><span class="p">,</span><span class="w"> </span><span class="m">2</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">),</span><span class="w">
      </span><span class="n">oma</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">2</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="m">0</span><span class="p">,</span><span class="w"> </span><span class="m">0</span><span class="p">),</span><span class="w"> </span><span class="c1"># move plot to the right and up</span><span class="w">
      </span><span class="n">mgp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1.5</span><span class="p">,</span><span class="w"> </span><span class="m">0.5</span><span class="p">,</span><span class="w"> </span><span class="m">0</span><span class="p">),</span><span class="w"> </span><span class="c1"># move axis labels closer to axis</span><span class="w">
      </span><span class="n">pty</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"m"</span><span class="p">,</span><span class="w"> </span><span class="n">bg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"transparent"</span><span class="p">,</span><span class="w">
      </span><span class="n">ps</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">12</span><span class="w">
    </span><span class="p">)</span><span class="w">

    </span><span class="c1"># plot(dwt$x, type="l", xlab=NA, ylab="SPI12", col="red")</span><span class="w">
    </span><span class="c1"># plot(dwt$x, type="l", xlab=NA, ylab="Rain", col="red")</span><span class="w">
    </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="m">1</span><span class="o">:</span><span class="n">ncol</span><span class="p">(</span><span class="n">dwt</span><span class="o">$</span><span class="n">dp</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="n">ts.plot</span><span class="p">(</span><span class="n">cbind</span><span class="p">(</span><span class="n">dwt</span><span class="o">$</span><span class="n">dp</span><span class="p">[,</span><span class="w"> </span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="n">dwt</span><span class="o">$</span><span class="n">dp.n</span><span class="p">[,</span><span class="w"> </span><span class="n">i</span><span class="p">]),</span><span class="w">
        </span><span class="n">xlab</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">NA</span><span class="p">,</span><span class="w"> </span><span class="n">ylab</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">paste0</span><span class="p">(</span><span class="n">lab.names</span><span class="p">[</span><span class="n">i</span><span class="p">]),</span><span class="w">
        </span><span class="n">xlim</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">xlim</span><span class="p">,</span><span class="w"> </span><span class="n">ylim</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ylim</span><span class="p">,</span><span class="w">
        </span><span class="n">col</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"black"</span><span class="p">,</span><span class="w"> </span><span class="s2">"blue"</span><span class="p">),</span><span class="w"> </span><span class="n">lwd</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="m">2</span><span class="p">)</span><span class="w">
      </span><span class="p">)</span><span class="w">
    </span><span class="p">}</span><span class="w">

    </span><span class="n">p.list</span><span class="p">[[</span><span class="nf">length</span><span class="p">(</span><span class="n">p.list</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="m">1</span><span class="p">]]</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">recordPlot</span><span class="p">()</span><span class="w">

    </span><span class="n">dp.list</span><span class="p">[[</span><span class="nf">length</span><span class="p">(</span><span class="n">dp.list</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="m">1</span><span class="p">]]</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">dwt</span><span class="o">$</span><span class="n">dp.n</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">

</span><span class="c1">#----------------------------------------------------------------------------</span><span class="w">
</span><span class="c1"># plot and save</span><span class="w">
</span><span class="n">fig</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">cowplot</span><span class="o">::</span><span class="n">plot_grid</span><span class="p">(</span><span class="n">plotlist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">p.list</span><span class="p">,</span><span class="w"> </span><span class="n">nrow</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="n">labels</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"(a)"</span><span class="p">,</span><span class="w"> </span><span class="s2">"(b)"</span><span class="p">,</span><span class="w"> </span><span class="s2">"(c)"</span><span class="p">))</span><span class="w">
</span><span class="n">fig</span><span class="w">
</span></code></pre></div></div>

<p><img src="_posts/2023-06-24-blog-post-4_files/figure-markdown_github/variance-transform-1.png" alt="Orignal and VT predictors. (a): DWT-MRA (b): MODWT/AT" width="85%" /></p>
<p class="caption">
Orignal and VT predictors. (a): DWT-MRA (b): MODWT/AT
</p>

<h1 id="stepwise-variance-transformation">Stepwise variance transformation</h1>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#-------------------------------------------------------------------</span><span class="w">
</span><span class="c1">### Real-world example</span><span class="w">
</span><span class="n">data</span><span class="p">(</span><span class="s2">"obs.mon"</span><span class="p">)</span><span class="w">
</span><span class="n">data</span><span class="p">(</span><span class="s2">"rain.mon"</span><span class="p">)</span><span class="w">
</span><span class="n">op</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">par</span><span class="p">()</span><span class="w">
</span><span class="n">station.id</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="m">5</span><span class="w">
</span><span class="n">lab.names</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">colnames</span><span class="p">(</span><span class="n">obs.mon</span><span class="p">)[</span><span class="nf">c</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="m">3</span><span class="p">,</span><span class="w"> </span><span class="m">4</span><span class="p">,</span><span class="w"> </span><span class="m">5</span><span class="p">,</span><span class="w"> </span><span class="m">7</span><span class="p">)]</span><span class="w">

</span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="kc">TRUE</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1"># SPI12 as response</span><span class="w">
  </span><span class="n">SPI.12</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">SPEI</span><span class="o">::</span><span class="n">spi</span><span class="p">(</span><span class="n">rain.mon</span><span class="p">,</span><span class="w"> </span><span class="n">scale</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">12</span><span class="p">)</span><span class="o">$</span><span class="n">fitted</span><span class="w">
  </span><span class="n">x</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">window</span><span class="p">(</span><span class="n">SPI.12</span><span class="p">,</span><span class="w"> </span><span class="n">start</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1950</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">),</span><span class="w"> </span><span class="n">end</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">2009</span><span class="p">,</span><span class="w"> </span><span class="m">12</span><span class="p">))</span><span class="w">
  </span><span class="n">dp</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">window</span><span class="p">(</span><span class="n">obs.mon</span><span class="p">[,</span><span class="w"> </span><span class="n">lab.names</span><span class="p">],</span><span class="w"> </span><span class="n">start</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1950</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">),</span><span class="w"> </span><span class="n">end</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">2009</span><span class="p">,</span><span class="w"> </span><span class="m">12</span><span class="p">))</span><span class="w">
</span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1"># rainfall as response</span><span class="w">
  </span><span class="n">x</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">window</span><span class="p">(</span><span class="n">rain.mon</span><span class="p">,</span><span class="w"> </span><span class="n">start</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1950</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">),</span><span class="w"> </span><span class="n">end</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">2009</span><span class="p">,</span><span class="w"> </span><span class="m">12</span><span class="p">))</span><span class="w">
  </span><span class="n">dp</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">window</span><span class="p">(</span><span class="n">obs.mon</span><span class="p">[,</span><span class="w"> </span><span class="n">lab.names</span><span class="p">],</span><span class="w"> </span><span class="n">start</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1950</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">),</span><span class="w"> </span><span class="n">end</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">2009</span><span class="p">,</span><span class="w"> </span><span class="m">12</span><span class="p">))</span><span class="w">
</span><span class="p">}</span><span class="w">

</span><span class="n">data.list</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">lapply</span><span class="p">(</span><span class="n">station.id</span><span class="p">,</span><span class="w"> </span><span class="k">function</span><span class="p">(</span><span class="n">id</span><span class="p">)</span><span class="w"> </span><span class="nf">list</span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">x</span><span class="p">[,</span><span class="w"> </span><span class="n">id</span><span class="p">],</span><span class="w"> </span><span class="n">dp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dp</span><span class="p">))</span><span class="w">


</span><span class="n">ylim</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">data.frame</span><span class="p">(</span><span class="w">
  </span><span class="n">GPH</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">700</span><span class="p">,</span><span class="w"> </span><span class="m">900</span><span class="p">),</span><span class="w"> </span><span class="n">TDP700</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">5</span><span class="p">,</span><span class="w"> </span><span class="m">25</span><span class="p">),</span><span class="w"> </span><span class="n">TDP500</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">5</span><span class="p">,</span><span class="w"> </span><span class="m">25</span><span class="p">),</span><span class="w"> </span><span class="n">EPT</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">300</span><span class="p">,</span><span class="w"> </span><span class="m">330</span><span class="p">),</span><span class="w">
  </span><span class="n">UWND</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">-5</span><span class="p">,</span><span class="w"> </span><span class="m">25</span><span class="p">),</span><span class="w"> </span><span class="n">VWND</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">-5</span><span class="p">,</span><span class="w"> </span><span class="m">10</span><span class="p">),</span><span class="w"> </span><span class="n">MSLP</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">-1</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">)</span><span class="w">
</span><span class="p">)[</span><span class="nf">c</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="m">3</span><span class="p">,</span><span class="w"> </span><span class="m">4</span><span class="p">,</span><span class="w"> </span><span class="m">5</span><span class="p">,</span><span class="w"> </span><span class="m">7</span><span class="p">)]</span><span class="w">

</span><span class="c1">#-------------------------------------------------------------------</span><span class="w">
</span><span class="n">p.list</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">list</span><span class="p">()</span><span class="w">
</span><span class="n">RMSE</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="kc">NULL</span><span class="w">
</span><span class="n">mode.opts</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"MRA"</span><span class="p">,</span><span class="w"> </span><span class="s2">"MODWT"</span><span class="p">,</span><span class="w"> </span><span class="s2">"AT"</span><span class="p">)[</span><span class="m">1</span><span class="o">:</span><span class="m">2</span><span class="p">]</span><span class="w">
</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">mode</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">mode.opts</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="n">cov.opt</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">switch</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="w">
    </span><span class="s2">"auto"</span><span class="p">,</span><span class="w">
    </span><span class="s2">"pos"</span><span class="p">,</span><span class="w">
    </span><span class="s2">"neg"</span><span class="w">
  </span><span class="p">)</span><span class="w">
  </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">mode</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s2">"MRA"</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">method</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">switch</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="w">
      </span><span class="s2">"dwt"</span><span class="p">,</span><span class="w">
      </span><span class="s2">"modwt"</span><span class="w">
    </span><span class="p">)</span><span class="w">
  </span><span class="p">}</span><span class="w">

  </span><span class="c1"># wavelet family, extension mode and package</span><span class="w">
  </span><span class="n">wf</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">switch</span><span class="p">(</span><span class="n">mode</span><span class="p">,</span><span class="s2">"MRA"</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"d4"</span><span class="p">,</span><span class="s2">"MODWT"</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"haar"</span><span class="p">,</span><span class="s2">"AT"</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"haar"</span><span class="p">)</span><span class="w">
  </span><span class="n">pad</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="s2">"zero"</span><span class="w">
  </span><span class="n">boundary</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="s2">"periodic"</span><span class="w">
  </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">wf</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="s2">"haar"</span><span class="p">)</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">as.integer</span><span class="p">(</span><span class="n">readr</span><span class="o">::</span><span class="n">parse_number</span><span class="p">(</span><span class="n">wf</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="m">2</span><span class="p">)</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="m">1</span><span class="w">

  </span><span class="c1"># Maximum decomposition level J</span><span class="w">
  </span><span class="n">n</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">nrow</span><span class="p">(</span><span class="n">x</span><span class="p">)</span><span class="w">
  </span><span class="n">J</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">ceiling</span><span class="p">(</span><span class="nf">log</span><span class="p">(</span><span class="n">n</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="p">(</span><span class="m">2</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="m">1</span><span class="p">))</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nf">log</span><span class="p">(</span><span class="m">2</span><span class="p">))</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="c1"># (Kaiser, 1994)</span><span class="w">

  </span><span class="c1"># high order variance transformation</span><span class="w">
  </span><span class="n">dwt.list</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">lapply</span><span class="p">(</span><span class="n">data.list</span><span class="p">,</span><span class="w"> </span><span class="k">function</span><span class="p">(</span><span class="n">data</span><span class="p">)</span><span class="w"> </span><span class="n">stepwise.VT</span><span class="p">(</span><span class="n">data</span><span class="p">,</span><span class="w"> </span><span class="n">mode</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mode</span><span class="p">,</span><span class="w"> </span><span class="n">wf</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">wf</span><span class="p">,</span><span class="w"> </span><span class="n">J</span><span class="o">=</span><span class="n">J</span><span class="p">))</span><span class="w">

  </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nf">seq_len</span><span class="p">(</span><span class="nf">length</span><span class="p">(</span><span class="n">dwt.list</span><span class="p">)))</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">dwt</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">dwt.list</span><span class="p">[[</span><span class="n">j</span><span class="p">]]</span><span class="w">
    </span><span class="n">cpy</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">dwt</span><span class="o">$</span><span class="n">cpy</span><span class="w">

    </span><span class="n">MSE</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="kc">NULL</span><span class="w">
    </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nf">seq_len</span><span class="p">(</span><span class="nf">length</span><span class="p">(</span><span class="n">cpy</span><span class="p">)))</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="n">m1</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">sqrt</span><span class="p">(</span><span class="n">FNN</span><span class="o">::</span><span class="n">knn.reg</span><span class="p">(</span><span class="n">train</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dwt</span><span class="o">$</span><span class="n">dp</span><span class="p">[,</span><span class="w"> </span><span class="m">1</span><span class="o">:</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dwt</span><span class="o">$</span><span class="n">x</span><span class="p">)</span><span class="o">$</span><span class="n">PRESS</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w">
      </span><span class="n">m2</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">sqrt</span><span class="p">(</span><span class="n">FNN</span><span class="o">::</span><span class="n">knn.reg</span><span class="p">(</span><span class="n">train</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dwt</span><span class="o">$</span><span class="n">dp.n</span><span class="p">[,</span><span class="w"> </span><span class="m">1</span><span class="o">:</span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="n">y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dwt</span><span class="o">$</span><span class="n">x</span><span class="p">)</span><span class="o">$</span><span class="n">PRESS</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">n</span><span class="p">)</span><span class="w">

      </span><span class="n">MSE</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">rbind</span><span class="p">(</span><span class="n">MSE</span><span class="p">,</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="n">m1</span><span class="p">,</span><span class="w"> </span><span class="n">m2</span><span class="p">))</span><span class="w">
    </span><span class="p">}</span><span class="w">

    </span><span class="n">RMSE</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">cbind</span><span class="p">(</span><span class="n">RMSE</span><span class="p">,</span><span class="w"> </span><span class="n">MSE</span><span class="p">)</span><span class="w">

    </span><span class="n">par</span><span class="p">(</span><span class="w">
      </span><span class="n">mfrow</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="nf">length</span><span class="p">(</span><span class="n">cpy</span><span class="p">),</span><span class="w"> </span><span class="m">1</span><span class="p">),</span><span class="w"> </span><span class="n">mar</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">0</span><span class="p">,</span><span class="w"> </span><span class="m">4</span><span class="p">,</span><span class="w"> </span><span class="m">2</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">),</span><span class="w">
      </span><span class="n">oma</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">2</span><span class="p">,</span><span class="w"> </span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="m">0</span><span class="p">,</span><span class="w"> </span><span class="m">0</span><span class="p">),</span><span class="w"> </span><span class="c1"># move plot to the right and up</span><span class="w">
      </span><span class="n">mgp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1.5</span><span class="p">,</span><span class="w"> </span><span class="m">0.5</span><span class="p">,</span><span class="w"> </span><span class="m">0</span><span class="p">),</span><span class="w"> </span><span class="c1"># move axis labels closer to axis</span><span class="w">
      </span><span class="n">pty</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"m"</span><span class="p">,</span><span class="w"> </span><span class="n">bg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"transparent"</span><span class="p">,</span><span class="w">
      </span><span class="n">ps</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">8</span><span class="w">
    </span><span class="p">)</span><span class="w">

    </span><span class="c1"># plot(dwt$x, type="l", xlab=NA, ylab="SPI12", ylim=c(-3,3),col="red")</span><span class="w">
    </span><span class="c1"># plot(dwt$x, type="l", xlab=NA, ylab="Rain", col="red")</span><span class="w">
    </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nf">seq_len</span><span class="p">(</span><span class="nf">length</span><span class="p">(</span><span class="n">cpy</span><span class="p">)))</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="n">ts.plot</span><span class="p">(</span><span class="n">dwt</span><span class="o">$</span><span class="n">dp</span><span class="p">[,</span><span class="w"> </span><span class="n">i</span><span class="p">],</span><span class="w"> </span><span class="n">dwt</span><span class="o">$</span><span class="n">dp.n</span><span class="p">[,</span><span class="w"> </span><span class="n">i</span><span class="p">],</span><span class="w">
        </span><span class="n">xlab</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">NA</span><span class="p">,</span><span class="w"> </span><span class="n">ylab</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">paste0</span><span class="p">(</span><span class="n">lab.names</span><span class="p">[</span><span class="n">cpy</span><span class="p">[</span><span class="n">i</span><span class="p">]]),</span><span class="w"> </span><span class="c1"># ylim=ylim[,i],</span><span class="w">
        </span><span class="n">col</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"black"</span><span class="p">,</span><span class="w"> </span><span class="s2">"blue"</span><span class="p">),</span><span class="w"> </span><span class="n">lwd</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="m">2</span><span class="p">)</span><span class="w">
      </span><span class="p">)</span><span class="w">
    </span><span class="p">}</span><span class="w">

    </span><span class="n">p.list</span><span class="p">[[</span><span class="nf">length</span><span class="p">(</span><span class="n">p.list</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="m">1</span><span class="p">]]</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">recordPlot</span><span class="p">()</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="c1">#&gt; [1] "Variance difference between transformed\n                        and original series by percentage: 17.2263230629905"</span><span class="w">
</span><span class="n">par</span><span class="p">(</span><span class="n">op</span><span class="p">)</span><span class="w">
</span><span class="c1">#-------------------------------------------------------------------</span><span class="w">
</span><span class="c1"># plot and save</span><span class="w">
</span><span class="n">cowplot</span><span class="o">::</span><span class="n">plot_grid</span><span class="p">(</span><span class="n">plotlist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">p.list</span><span class="p">,</span><span class="w"> </span><span class="n">nrow</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="n">labels</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"(a)"</span><span class="p">,</span><span class="w"> </span><span class="s2">"(b)"</span><span class="p">,</span><span class="w"> </span><span class="s2">"(c)"</span><span class="p">))</span><span class="w">
</span></code></pre></div></div>

<p><img src="_posts/2023-06-24-blog-post-4_files/figure-markdown_github/svt-1.png" alt="Orignal and SVT predictors. (a): DWT-MRA (b): MODWT/AT" width="85%" /></p>
<p class="caption">
Orignal and SVT predictors. (a): DWT-MRA (b): MODWT/AT
</p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="w">
</span><span class="c1">#-------------------------------------------------------------------</span><span class="w">
</span><span class="c1"># RMSE when more predictors are included</span><span class="w">
</span><span class="n">tab1</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">round</span><span class="p">(</span><span class="n">RMSE</span><span class="p">,</span><span class="w"> </span><span class="m">3</span><span class="p">)</span><span class="w">
</span><span class="n">tab1</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">cbind</span><span class="p">(</span><span class="m">1</span><span class="o">:</span><span class="n">nrow</span><span class="p">(</span><span class="n">tab1</span><span class="p">),</span><span class="w"> </span><span class="n">tab1</span><span class="p">)</span><span class="w">
</span><span class="n">colnames</span><span class="p">(</span><span class="n">tab1</span><span class="p">)</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"No. of Predictors"</span><span class="p">,</span><span class="w"> </span><span class="nf">rep</span><span class="p">(</span><span class="nf">c</span><span class="p">(</span><span class="s2">"Original"</span><span class="p">,</span><span class="w"> </span><span class="s2">"Transformed"</span><span class="p">),</span><span class="w"> </span><span class="nf">length</span><span class="p">(</span><span class="n">mode.opts</span><span class="p">)))</span><span class="w">

</span><span class="n">kable</span><span class="p">(</span><span class="n">tab1</span><span class="p">,</span><span class="w"> </span><span class="n">caption</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"Comparison of prediction accuracy using Std and SVT"</span><span class="p">,</span><span class="w"> </span><span class="n">booktabs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">T</span><span class="p">)</span><span class="w"> </span><span class="o">%&gt;%</span><span class="w">
  </span><span class="n">kable_styling</span><span class="p">(</span><span class="n">latex_options</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"HOLD_position"</span><span class="p">),</span><span class="w"> </span><span class="n">position</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"center"</span><span class="p">,</span><span class="w"> </span><span class="n">full_width</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">FALSE</span><span class="p">)</span><span class="w">  </span><span class="o">%&gt;%</span><span class="w">
  </span><span class="c1">#  add_header_above(c(" " = 1, "DWT-MRA" = 2, "MODWT" = 2, "AT" = 2))</span><span class="w">
  </span><span class="n">add_header_above</span><span class="p">(</span><span class="nf">c</span><span class="p">(</span><span class="s2">" "</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="s2">"DWT-MRA"</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">2</span><span class="p">,</span><span class="w"> </span><span class="s2">"MODWT/AT"</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">2</span><span class="p">))</span><span class="w">
</span></code></pre></div></div>

<table class="table" style="width: auto !important; margin-left: auto; margin-right: auto;">
<caption>
Comparison of prediction accuracy using Std and SVT
</caption>
<thead>
<tr>
<th style="empty-cells: hide;border-bottom:hidden;" colspan="1">
</th>
<th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; " colspan="2">

DWT-MRA

</th>
<th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; " colspan="2">

MODWT/AT

</th>
</tr>
<tr>
<th style="text-align:right;">
No. of Predictors
</th>
<th style="text-align:right;">
Original
</th>
<th style="text-align:right;">
Transformed
</th>
<th style="text-align:right;">
Original
</th>
<th style="text-align:right;">
Transformed
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:right;">
1
</td>
<td style="text-align:right;">
1.114
</td>
<td style="text-align:right;">
1.007
</td>
<td style="text-align:right;">
1.112
</td>
<td style="text-align:right;">
0.995
</td>
</tr>
<tr>
<td style="text-align:right;">
2
</td>
<td style="text-align:right;">
1.093
</td>
<td style="text-align:right;">
0.876
</td>
<td style="text-align:right;">
1.100
</td>
<td style="text-align:right;">
0.934
</td>
</tr>
<tr>
<td style="text-align:right;">
3
</td>
<td style="text-align:right;">
1.089
</td>
<td style="text-align:right;">
0.743
</td>
<td style="text-align:right;">
1.050
</td>
<td style="text-align:right;">
0.821
</td>
</tr>
<tr>
<td style="text-align:right;">
4
</td>
<td style="text-align:right;">
1.086
</td>
<td style="text-align:right;">
0.744
</td>
<td style="text-align:right;">
1.053
</td>
<td style="text-align:right;">
0.824
</td>
</tr>
</tbody>
</table>
<!-- # Comparison with traditional wavelet-based methods -->]]></content><author><name>Honghui Zhang</name><email>honghui.alice.zhang@gmail.com</email></author><category term="Software" /><summary type="html"><![CDATA[The wavelet-based variance transformation method is used for system modelling and prediction. It refines predictor spectral representation using Wavelet Theory, which leads to improved model specifications and prediction accuracy. A supporting open-source software, Wavelet System Prediction (WASP), can be found under page of Software.]]></summary></entry><entry><title type="html">GitHub Pages: A site to host your personal homepage</title><link href="https://honghui-zhang.github.io//posts/2021/05/blog-post-3/" rel="alternate" type="text/html" title="GitHub Pages: A site to host your personal homepage" /><published>2021-05-06T00:00:00+10:00</published><updated>2021-05-06T00:00:00+10:00</updated><id>https://honghui-zhang.github.io//posts/2021/05/blog-post-3</id><content type="html" xml:base="https://honghui-zhang.github.io//posts/2021/05/blog-post-3/"><![CDATA[<p>GitHub Pages is a static site hosting service that takes HTML, CSS, and JavaScript files straight from a repository on GitHub, optionally runs the files through a build process, and publishes a website.</p>

<h2 id="setup-a-github-pages">Setup a GitHub pages</h2>

<h3 id="template">Template</h3>

<p>There are generally two types of homepage template for researchers, hugo and jekyll theme academic pages. The example shown here uses a customized version based on “minimal-mistakes-jekyll” theme.</p>

<h4 id="github-page">GitHub page</h4>
<p>Open a GitHub account and your personal website will be hosted there.</p>

<p><strong><em>Note: choose your account name carefully since it will become your website link address in the end, if you do not want to pay for any domain address.</em></strong></p>

<p>Download all files of the associated academicpage page from scratch under <a href="https://github.com/academicpages/academicpages.github.io">Code</a>, or download from a researcher’s existing GitHub pages, for example,</p>

<ol>
  <li><a href="https://github.com/zejiang-unsw/zejiang-unsw.github.io">Ze Jiang</a></li>
  <li><a href="https://github.com/oliviergimenez/oliviergimenez.github.io">Olivier Gimenez</a></li>
  <li><a href="https://github.com/samzipper/website-HEAL">Sam Zipper</a></li>
</ol>

<h4 id="version-control">Version control</h4>

<p>Download <a href="https://desktop.github.com/">GitHub Desktop</a> as your version control tool.</p>

<p>Link <strong>GitHub Desktop</strong> with your GitHub account.</p>

<p>Add local repository from the downloaded and unzipped folder. Commit and push changes to GitHub when changes have been made. Refresh you homepage at <strong>“Your account name”.github.io</strong>.</p>

<h4 id="personal-details">Personal details</h4>

<p>Change details to yours, and there are mainly in the files as follows:</p>
<ul>
  <li>_config.yml</li>
  <li>_pages: include each individual pages</li>
  <li>_publications: include your publications</li>
  <li>_talks: include your talks</li>
  <li>_projects: include your projects</li>
  <li>_teaching: include your teaching experience</li>
  <li>_posts: include your blogs</li>
  <li>images: include associated images of the website</li>
  <li>files: include associated files of the website</li>
</ul>

<h3 id="customize">Customize</h3>

<ol>
  <li>
    <p>Organise the order of pages in _data/navigation.yml</p>
  </li>
  <li>Author profile on left side of page:
    <ul>
      <li>author_profile: false or true</li>
    </ul>
  </li>
  <li>Sort the order of sites,for example _pages/talks.html:</li>
</ol>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>### add curly brackets ({}) and percent sign (%) to each line of codes in the talk.html

#normal order
 for post in site.talks 
   include archive-single-talk.html 
 endfor 

#reversed order
 for post in site.talks reversed 
   include archive-single-talk.html 
 endfor 
</code></pre></div></div>

<ol>
  <li>Update _pages/talkmap.html:</li>
</ol>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>###A Git blob (binary large object) is the object type used to store the contents of each file in a repository. 

&lt;p&gt;This map is generated from a Jupyter Notebook file in &lt;a href="https://github.com/zejiang-unsw/zejiang-unsw.github.io/blob/master/talkmap.ipynb"&gt;/_talks/talkmap.ipynb&lt;/a&gt;, which mines the location fields in the .md files in _talks/.&lt;/p&gt;
&lt;iframe src="/talkmap/map.html" height="700" width="850" style="border:none;"&gt;&lt;/iframe&gt;
</code></pre></div></div>

<h2 id="how-to-add-a-new-page">How to add a new page</h2>

<h3 id="_configyml">_config.yml:</h3>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code>collections:
  people:
    output: true
    permalink: /:collection/:path/
      
defaults:
  # _people
  - scope:
      path: ""
      type: people
    values:
      layout: single
      author_profile: true
      read_time: true
      comments: true
      share: true
      related: true
</code></pre></div></div>

<h3 id="_pagespeoplehtml">_pages/people.html</h3>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>---
layout: archive
title: "People"
permalink: /people/
author_profile: true
---
### add curly brackets ({}) and percent sign (%) to each line of codes in the people.html
 include base_path 

### link the documents under _people folder
 for post in site.people reversed 
   include archive-single.html 
 endfor 
</code></pre></div></div>

<h3 id="_datanavigationyml">_data/navigation.yml</h3>

<ul>
  <li>Change the title to change the tab name shown online!</li>
  <li>Comment out to not show the People tab online!</li>
</ul>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code># main links links
main:
  - title: "People"
    url: /people/
</code></pre></div></div>

<h2 id="how-to-add-a-avatar-profile">How to add a Avatar profile</h2>

<h3 id="add-script-to-html-or-md">Add script to HTML or md</h3>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;img</span> <span class="na">src=</span><span class="s">"avatar.png"</span> <span class="na">alt=</span><span class="s">"Avatar"</span> <span class="na">class=</span><span class="s">"avatar"</span><span class="nt">&gt;</span>
</code></pre></div></div>

<h3 id="add-class-to-css-in-assetscssacademiconscss">Add class to CSS in assets/css/academicons.css</h3>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code>.avatar {
  vertical-align: middle;
  width: 100px;
  height: auto;
  position: relative;
	overflow: hidden;
  border-radius: 50%;
}
</code></pre></div></div>]]></content><author><name>Honghui Zhang</name><email>honghui.alice.zhang@gmail.com</email></author><category term="GitHub" /><category term="Homepage" /><summary type="html"><![CDATA[GitHub Pages is a static site hosting service that takes HTML, CSS, and JavaScript files straight from a repository on GitHub, optionally runs the files through a build process, and publishes a website.]]></summary></entry><entry><title type="html">Word Cloud: A tool of visualization, communication and insights</title><link href="https://honghui-zhang.github.io//posts/2021/04/blog-post-2/" rel="alternate" type="text/html" title="Word Cloud: A tool of visualization, communication and insights" /><published>2021-04-30T00:00:00+10:00</published><updated>2021-04-30T00:00:00+10:00</updated><id>https://honghui-zhang.github.io//posts/2021/04/blog-post-2</id><content type="html" xml:base="https://honghui-zhang.github.io//posts/2021/04/blog-post-2/"><![CDATA[<p>A word cloud is a collection or cluster of words described in different sizes. The larger the word appears, the more times it is mentioned in a given text, and the more important it is.</p>

<h2 id="how-it-works">How it works?</h2>

<p>A word cloud (also called a tag cloud) works in a simple way: the more a specific word appears in a text data source (such as a speech, blog post or database), the bigger size it appears in the word cloud.</p>

<h2 id="reasons-why-you-should-use-word-clouds">Reasons why you should use word clouds</h2>

<ol>
  <li>
    <p>Word clouds are killer visualisation tools. They present text data in a simple and clear format, that of a cloud in which the size of the words depends on their respective frequencies. As such, they are visually nice to look at as well as easy and quick to understand.</p>
  </li>
  <li>
    <p>Word clouds are great communication tools. They are incredibly handy for anyone wishing to communicate a basic insight based on text data — whether it’s to analyse a speech, capture the conversation on social media or report on customer reviews.</p>
  </li>
  <li>
    <p>Word clouds are insightful. Visually engaging, word clouds allow us to draw several insights quickly, allowing for some flexibility in their interpretation. Their visual format stimulates us to think and draw the best insight depending on what we wish to analyse.</p>
  </li>
</ol>

<h2 id="text-mining-using-python">Text mining using Python</h2>

<p>WOS_Crawler is a crawler of Web of Science:</p>

<ol>
  <li>Supported crawling approaches:
    <ul>
      <li>Support GUI of crawling (crawl_by_gui)</li>
      <li>Support crawling the search results of any legal advanced search style (crawl_by_query)</li>
      <li>Support crawling a given journal list to crawl all the articles in the journal (crawl_by_journal)</li>
    </ul>
  </li>
  <li>Supported input &amp; output types:
    <ul>
      <li>Support the selection of target document types, such as Article, Proceeding paper, etc.</li>
      <li>Support a variety of storage formats for crawling results, such as Plain text, Bibtex, HTML, etc. Plain text is recommended for the fastest parsing speed</li>
      <li>Support for parsing and importing crawling results into the database (currently supporting Plain text, Bibtex, and XML format parsing and importing). In addition to basic document information (titles, abstracts, keywords, citations, etc.), the parsing data items also include Author institution, fund, classification, references and other information</li>
    </ul>
  </li>
</ol>

<p>More details refer to：</p>

<ol>
  <li>
    <p>https://blog.csdn.net/tomleung1996/article/details/86627443</p>
  </li>
  <li>
    <p>https://github.com/tomleung1996/wos_crawler</p>
  </li>
</ol>

<h3 id="prepare-for-wos_crawler">Prepare for WOS_Crawler</h3>
<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">### In this example, setup crawlering Journal of Hydrology paper from 2001 to 2021
</span>
<span class="c1">#journal_list_water.txt - J HYDROL
</span>
<span class="c1">#select the crawling approach
</span><span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">'__main__'</span><span class="p">:</span>
    <span class="c1"># journal based
</span>    <span class="n">crawl_by_journal</span><span class="p">(</span><span class="n">journal_list_path</span><span class="o">=</span><span class="s">'../input/journal_list_water.txt'</span><span class="p">,</span>
                     <span class="n">output_path</span><span class="o">=</span><span class="s">'../output'</span><span class="p">,</span> <span class="n">output_format</span><span class="o">=</span><span class="s">'fieldtagged'</span><span class="p">,</span> <span class="n">document_type</span><span class="o">=</span><span class="s">'Article'</span><span class="p">)</span>

    <span class="c1"># query based
</span>    <span class="c1"># crawl_by_query(query='TS=(solid waste) AND PY=(1900-1978)',
</span>    <span class="c1">#                output_path='../output', output_format='fieldtagged', document_type='Article', sid='E5gsGHmjPtA2AxeNeM6')
</span>
    <span class="c1"># GUI based
</span>    <span class="c1"># crawl_by_gui()
</span>    <span class="c1"># pass
</span>
</code></pre></div></div>

<h2 id="workflow">Workflow</h2>

<p>Load necessary packages</p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">library</span><span class="p">(</span><span class="n">wordcloud</span><span class="p">)</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">wordcloud2</span><span class="p">)</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">RColorBrewer</span><span class="p">)</span><span class="w">

</span><span class="n">library</span><span class="p">(</span><span class="n">tm</span><span class="p">)</span><span class="w"> </span><span class="c1"># for text mining</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">dplyr</span><span class="p">)</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">readr</span><span class="p">)</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">ggplot2</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<h3 id="text-analysis">Text analysis</h3>
<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#the folder where downloaded text are</span><span class="w">
</span><span class="n">filepath</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="s2">"./data/journal"</span><span class="w"> 

</span><span class="n">file.list</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">list.files</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span><span class="n">full.names</span><span class="o">=</span><span class="kc">TRUE</span><span class="p">)</span><span class="w">

</span><span class="n">file.list.JoH</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">file.list</span><span class="p">[</span><span class="n">grep</span><span class="p">(</span><span class="s2">"J HYDROL"</span><span class="p">,</span><span class="n">file.list</span><span class="p">)]</span><span class="w">


</span><span class="n">tmp.title</span><span class="o">=</span><span class="n">tmp.keyword</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="kc">NULL</span><span class="w">
</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">tmp.file</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">file.list.JoH</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
  
  </span><span class="n">file.txt</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">sapply</span><span class="p">(</span><span class="n">list.files</span><span class="p">(</span><span class="n">tmp.file</span><span class="p">,</span><span class="n">full.names</span><span class="o">=</span><span class="kc">TRUE</span><span class="p">),</span><span class="w"> </span><span class="k">function</span><span class="p">(</span><span class="n">path</span><span class="p">)</span><span class="w"> </span><span class="n">readLines</span><span class="p">(</span><span class="n">path</span><span class="p">))</span><span class="w">
  
  </span><span class="n">tmp.title</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="n">tmp.title</span><span class="p">,</span><span class="w"> </span><span class="n">sapply</span><span class="p">(</span><span class="n">file.txt</span><span class="p">,</span><span class="w"> </span><span class="k">function</span><span class="p">(</span><span class="n">txt</span><span class="p">)</span><span class="w"> </span><span class="n">txt</span><span class="p">[</span><span class="o">!</span><span class="nf">is.na</span><span class="p">(</span><span class="n">stringr</span><span class="o">::</span><span class="n">str_extract</span><span class="p">(</span><span class="n">txt</span><span class="p">,</span><span class="w"> </span><span class="s2">"TI"</span><span class="p">))]))</span><span class="w">
  </span><span class="n">tmp.keyword</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="n">tmp.keyword</span><span class="p">,</span><span class="w"> </span><span class="n">sapply</span><span class="p">(</span><span class="n">file.txt</span><span class="p">,</span><span class="w"> </span><span class="k">function</span><span class="p">(</span><span class="n">txt</span><span class="p">)</span><span class="w"> </span><span class="n">txt</span><span class="p">[</span><span class="o">!</span><span class="nf">is.na</span><span class="p">(</span><span class="n">stringr</span><span class="o">::</span><span class="n">str_extract</span><span class="p">(</span><span class="n">txt</span><span class="p">,</span><span class="w"> </span><span class="s2">"DE"</span><span class="p">))]))</span><span class="w">
  
</span><span class="p">}</span><span class="w">


</span><span class="n">text.keyword</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">do.call</span><span class="p">(</span><span class="n">rbind</span><span class="p">,</span><span class="w"> </span><span class="n">tmp.keyword</span><span class="p">)</span><span class="w">
</span><span class="n">text.title</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">do.call</span><span class="p">(</span><span class="n">rbind</span><span class="p">,</span><span class="w"> </span><span class="n">tmp.title</span><span class="p">)</span><span class="w">

</span><span class="c1"># Clean the text data</span><span class="w">
</span><span class="c1"># gsub("https\\S*", "", text)</span><span class="w">
</span><span class="c1"># gsub("@\\S*", "", text)</span><span class="w">
</span><span class="c1"># gsub("  title = ", "", text)</span><span class="w">
</span><span class="c1"># gsub("[\r\n]", "", text)</span><span class="w">
</span><span class="c1"># gsub("[[:punct:]]", "", text)</span><span class="w">
</span><span class="n">text.title</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">gsub</span><span class="p">(</span><span class="s2">"‐"</span><span class="p">,</span><span class="w"> </span><span class="s2">" "</span><span class="p">,</span><span class="w"> </span><span class="n">text.title</span><span class="p">)</span><span class="w">

</span><span class="n">text.title.n</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">iconv</span><span class="p">(</span><span class="n">text.title</span><span class="p">,</span><span class="w"> </span><span class="s2">"UTF-8"</span><span class="p">,</span><span class="w"> </span><span class="s2">"UTF-8"</span><span class="p">,</span><span class="n">sub</span><span class="o">=</span><span class="s1">''</span><span class="p">)</span><span class="w">
</span><span class="n">text1</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">gsub</span><span class="p">(</span><span class="s2">"\\}.*"</span><span class="p">,</span><span class="w"> </span><span class="s2">"}"</span><span class="p">,</span><span class="w"> </span><span class="n">gsub</span><span class="p">(</span><span class="s2">".*\\{"</span><span class="p">,</span><span class="w"> </span><span class="s2">"{"</span><span class="p">,</span><span class="w"> </span><span class="n">text.title.n</span><span class="p">))</span><span class="w">

</span><span class="c1"># Create a corpus  </span><span class="w">
</span><span class="n">docs</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">Corpus</span><span class="p">(</span><span class="n">VectorSource</span><span class="p">(</span><span class="n">text1</span><span class="p">))</span><span class="w">

</span><span class="c1"># Clean the text data</span><span class="w">
</span><span class="n">docs</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">docs</span><span class="w"> </span><span class="o">%&gt;%</span><span class="w">
  </span><span class="n">tm_map</span><span class="p">(</span><span class="n">removeNumbers</span><span class="p">)</span><span class="w"> </span><span class="o">%&gt;%</span><span class="w">
  </span><span class="n">tm_map</span><span class="p">(</span><span class="n">removePunctuation</span><span class="p">)</span><span class="w"> </span><span class="o">%&gt;%</span><span class="w">
  </span><span class="n">tm_map</span><span class="p">(</span><span class="n">stripWhitespace</span><span class="p">)</span><span class="w">
</span><span class="n">docs1</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">tm_map</span><span class="p">(</span><span class="n">docs</span><span class="p">,</span><span class="w"> </span><span class="n">content_transformer</span><span class="p">(</span><span class="n">tolower</span><span class="p">))</span><span class="w">
</span><span class="n">docs2</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">tm_map</span><span class="p">(</span><span class="n">docs1</span><span class="p">,</span><span class="w"> </span><span class="n">removeWords</span><span class="p">,</span><span class="w"> </span><span class="n">stopwords</span><span class="p">(</span><span class="s2">"english"</span><span class="p">))</span><span class="w">

</span><span class="c1"># Create a document-term-matrix</span><span class="w">
</span><span class="n">dtm</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">TermDocumentMatrix</span><span class="p">(</span><span class="n">docs2</span><span class="p">)</span><span class="w"> 
</span><span class="n">matrix</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">as.matrix</span><span class="p">(</span><span class="n">dtm</span><span class="p">)</span><span class="w"> 
</span><span class="n">words</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">sort</span><span class="p">(</span><span class="n">rowSums</span><span class="p">(</span><span class="n">matrix</span><span class="p">),</span><span class="n">decreasing</span><span class="o">=</span><span class="kc">TRUE</span><span class="p">)</span><span class="w"> 

</span><span class="n">df</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">data.frame</span><span class="p">(</span><span class="n">word</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">names</span><span class="p">(</span><span class="n">words</span><span class="p">),</span><span class="n">freq</span><span class="o">=</span><span class="n">words</span><span class="p">)</span><span class="w">
</span><span class="n">summary</span><span class="p">(</span><span class="n">df</span><span class="p">)</span><span class="w">
</span><span class="n">head</span><span class="p">(</span><span class="n">df</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<h3 id="word-frequency-analysis">Word frequency analysis</h3>
<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">ggplot</span><span class="p">(</span><span class="n">df</span><span class="p">[</span><span class="n">df</span><span class="o">$</span><span class="n">freq</span><span class="o">&gt;</span><span class="n">quantile</span><span class="p">(</span><span class="n">df</span><span class="o">$</span><span class="n">freq</span><span class="p">,</span><span class="m">0.99</span><span class="p">),])</span><span class="w"> </span><span class="o">+</span><span class="w"> 
  </span><span class="n">geom_col</span><span class="p">(</span><span class="n">aes</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">word</span><span class="p">,</span><span class="w"> </span><span class="n">y</span><span class="o">=</span><span class="n">freq</span><span class="p">))</span><span class="w"> </span><span class="o">+</span><span class="w"> 
  </span><span class="n">theme_bw</span><span class="p">()</span><span class="o">+</span><span class="w">
  </span><span class="n">theme</span><span class="p">(</span><span class="n">axis.text.x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">element_text</span><span class="p">(</span><span class="n">angle</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">90</span><span class="p">,</span><span class="w"> </span><span class="n">vjust</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">0.5</span><span class="p">,</span><span class="w"> </span><span class="n">hjust</span><span class="o">=</span><span class="m">1</span><span class="p">))</span><span class="w">
</span></code></pre></div></div>

<h3 id="word-cloud-generation">Word Cloud generation</h3>
<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">###with wordcloud package </span><span class="w">
</span><span class="n">set.seed</span><span class="p">(</span><span class="m">2021-04-28</span><span class="p">)</span><span class="w"> </span><span class="c1"># for reproducibility </span><span class="w">

</span><span class="n">df1</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">df</span><span class="w">
</span><span class="n">head</span><span class="p">(</span><span class="n">df1</span><span class="p">)</span><span class="w">

</span><span class="c1">###remove unwanted words manually</span><span class="w">
</span><span class="n">df.text1</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">df1</span><span class="p">[</span><span class="o">!</span><span class="p">(</span><span class="n">df1</span><span class="o">$</span><span class="n">word</span><span class="w"> </span><span class="o">%in%</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"–"</span><span class="p">,</span><span class="s2">"using"</span><span class="p">,</span><span class="s2">"and"</span><span class="p">,</span><span class="s2">"for"</span><span class="p">,</span><span class="s2">"of"</span><span class="p">)),]</span><span class="w">

</span><span class="n">max.words</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">quantile</span><span class="p">(</span><span class="n">nrow</span><span class="p">(</span><span class="n">df</span><span class="p">),</span><span class="w"> </span><span class="m">0.01</span><span class="p">)</span><span class="w">
</span><span class="n">max.words</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="m">200</span><span class="w">
</span><span class="n">wordcloud</span><span class="p">(</span><span class="n">words</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">df.text1</span><span class="o">$</span><span class="n">word</span><span class="p">,</span><span class="w"> </span><span class="n">freq</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">df.text1</span><span class="o">$</span><span class="n">freq</span><span class="p">,</span><span class="w"> </span><span class="n">min.freq</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">1</span><span class="p">,</span><span class="w"> </span><span class="n">max.words</span><span class="o">=</span><span class="n">max.words</span><span class="p">,</span><span class="w"> </span><span class="n">random.order</span><span class="o">=</span><span class="kc">FALSE</span><span class="p">,</span><span class="w"> 
          </span><span class="n">rot.per</span><span class="o">=</span><span class="m">0.35</span><span class="p">,</span><span class="w"> </span><span class="n">colors</span><span class="o">=</span><span class="n">rev</span><span class="p">(</span><span class="n">brewer.pal</span><span class="p">(</span><span class="m">8</span><span class="p">,</span><span class="w"> </span><span class="s2">"Dark2"</span><span class="p">)))</span><span class="w">

</span></code></pre></div></div>

<p><img src="/images/wordcloud-circle.jpeg" /></p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">###with wordcloud2 package </span><span class="w">
</span><span class="n">set.seed</span><span class="p">(</span><span class="m">1234</span><span class="p">)</span><span class="w"> </span><span class="c1"># for reproducibility </span><span class="w">

</span><span class="n">df2</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">df</span><span class="w">
</span><span class="n">head</span><span class="p">(</span><span class="n">df2</span><span class="p">)</span><span class="w">

</span><span class="n">df.text2</span><span class="w"> </span><span class="o">&lt;-</span><span class="w"> </span><span class="n">df2</span><span class="p">[</span><span class="o">!</span><span class="p">(</span><span class="n">df2</span><span class="o">$</span><span class="n">word</span><span class="w"> </span><span class="o">%in%</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"–"</span><span class="p">,</span><span class="s2">"using"</span><span class="p">,</span><span class="s2">"and"</span><span class="p">,</span><span class="s2">"for"</span><span class="p">,</span><span class="s2">"of"</span><span class="p">)),]</span><span class="w">

</span><span class="n">wordcloud2</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">df.text2</span><span class="p">,</span><span class="w"> </span><span class="n">size</span><span class="o">=</span><span class="m">0.35</span><span class="p">,</span><span class="w"> </span><span class="n">color</span><span class="o">=</span><span class="s1">'random-dark'</span><span class="p">,</span><span class="n">shape</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'circle'</span><span class="p">,</span><span class="n">ellipticity</span><span class="o">=</span><span class="m">1</span><span class="p">)</span><span class="w">
</span><span class="n">wordcloud2</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">df.text2</span><span class="p">,</span><span class="w"> </span><span class="n">size</span><span class="o">=</span><span class="m">0.35</span><span class="p">,</span><span class="w"> </span><span class="n">color</span><span class="o">=</span><span class="s1">'random-dark'</span><span class="p">,</span><span class="n">shape</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'square'</span><span class="p">,</span><span class="n">ellipticity</span><span class="o">=</span><span class="m">1</span><span class="p">)</span><span class="w">
</span><span class="n">wordcloud2</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">df.text2</span><span class="p">,</span><span class="w"> </span><span class="n">size</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">0.35</span><span class="p">,</span><span class="w"> </span><span class="n">shape</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'pentagon'</span><span class="p">,</span><span class="n">ellipticity</span><span class="o">=</span><span class="m">1</span><span class="p">)</span><span class="w">

</span></code></pre></div></div>]]></content><author><name>Honghui Zhang</name><email>honghui.alice.zhang@gmail.com</email></author><category term="WordCloud" /><summary type="html"><![CDATA[A word cloud is a collection or cluster of words described in different sizes. The larger the word appears, the more times it is mentioned in a given text, and the more important it is.]]></summary></entry><entry><title type="html">Word to Latex: Writing papers the right way</title><link href="https://honghui-zhang.github.io//posts/2021/04/blog-post-1/" rel="alternate" type="text/html" title="Word to Latex: Writing papers the right way" /><published>2021-04-04T00:00:00+11:00</published><updated>2021-04-04T00:00:00+11:00</updated><id>https://honghui-zhang.github.io//posts/2021/04/blog-post-1</id><content type="html" xml:base="https://honghui-zhang.github.io//posts/2021/04/blog-post-1/"><![CDATA[<p>LaTeX is a document preparation system for high-quality typesetting. It is most often used for medium-to-large technical or scientific documents, but it can be used for almost any form of publishing.</p>

<h2 id="prerequisite">Prerequisite</h2>

<ul>
  <li>
    <p><a href="https://pandoc.org/installing.html">Pandoc</a>: If you need to convert files from one markup format into another, pandoc is your swiss-army knife.</p>
  </li>
  <li><a href="https://www.jabref.org/">JabRef</a>: Native BibTeX and BibLaTeX support, perfect for text-based typesetting systems such as LaTeX and Markdown.
    <ul>
      <li>Endnote</li>
    </ul>
  </li>
  <li><a href="https://www.latex-project.org/">Latex</a>: MikTex, GhostScript and PDF viewer, and TexStudio</li>
</ul>

<h2 id="workflow">Workflow</h2>

<h3 id="step1-word2latex-using-pandoc">Step1. Word2Latex using Pandoc</h3>
<ul>
  <li>Reference in word using Endnote</li>
  <li>
    <p>Reference in Latex using JabRef</p>
  </li>
  <li>pandoc [options] [input-file]…
    <ul>
      <li>-s: standalone</li>
      <li>–wrap=auto, none, or preserve</li>
      <li>–extract-media=. : extract figures from the document</li>
    </ul>
  </li>
</ul>

<p>Check details in the pandoc <a href="https://pandoc.org/MANUAL.html">manual</a></p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">pandoc</span><span class="w"> </span><span class="o">--</span><span class="n">extract</span><span class="o">-</span><span class="n">media</span><span class="o">=</span><span class="n">.</span><span class="w"> </span><span class="o">--</span><span class="n">wrap</span><span class="o">=</span><span class="n">none</span><span class="w"> </span><span class="o">-</span><span class="n">s</span><span class="w"> </span><span class="n">input.docx</span><span class="w"> </span><span class="o">-</span><span class="n">t</span><span class="w"> </span><span class="n">latex</span><span class="w"> </span><span class="err">–</span><span class="n">o</span><span class="w"> </span><span class="n">output.tex</span><span class="w">
</span></code></pre></div></div>

<h3 id="step2a-equations-tables-and-figures-using-latex">Step2a. Equations, Tables and Figures using Latex</h3>
<ul>
  <li>Equations: Convert to default math function in Word</li>
  <li>Tables: https://www.tablesgenerator.com/</li>
</ul>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">%equation 
\begin{equation}
  \label{eq:eq1}
  x + y = z
\end{equation}

%</span><span class="n">table</span><span class="w"> 
</span><span class="err">\</span><span class="n">begin</span><span class="p">{</span><span class="n">table</span><span class="p">}[</span><span class="n">H</span><span class="p">]</span><span class="w">
  </span><span class="err">\</span><span class="n">caption</span><span class="p">{</span><span class="n">Table</span><span class="w"> </span><span class="m">1</span><span class="err">\</span><span class="n">label</span><span class="p">{</span><span class="n">tab</span><span class="o">:</span><span class="n">tab1</span><span class="p">}}</span><span class="w">
  </span><span class="err">\</span><span class="n">begin</span><span class="p">{</span><span class="n">tabular</span><span class="p">}{</span><span class="n">ll</span><span class="p">}</span><span class="w">
  </span><span class="err">\</span><span class="n">toprule</span><span class="w">
  </span><span class="n">Tabe</span><span class="w"> </span><span class="n">Head</span><span class="w">
  </span><span class="err">\</span><span class="n">midrule</span><span class="w">
  </span><span class="n">text</span><span class="w">
  </span><span class="err">\</span><span class="n">bottomrule</span><span class="w">
  </span><span class="err">\</span><span class="n">end</span><span class="p">{</span><span class="n">tabular</span><span class="p">}</span><span class="w">
</span><span class="err">\</span><span class="n">end</span><span class="p">{</span><span class="n">table</span><span class="p">}</span><span class="w">

</span><span class="o">%</span><span class="n">figure</span><span class="w">
</span><span class="err">\</span><span class="n">begin</span><span class="p">{</span><span class="n">figure</span><span class="p">}</span><span class="w">
  </span><span class="err">\</span><span class="n">caption</span><span class="p">{</span><span class="n">Figure</span><span class="w"> </span><span class="m">1</span><span class="err">\</span><span class="n">label</span><span class="p">{</span><span class="n">fig</span><span class="o">:</span><span class="n">fig1</span><span class="p">}}</span><span class="w">
  </span><span class="err">\</span><span class="n">includegraphics</span><span class="p">[</span><span class="n">width</span><span class="o">=</span><span class="err">\</span><span class="n">linewidth</span><span class="p">]{</span><span class="n">Fig.jpg</span><span class="p">}</span><span class="w">
</span><span class="err">\</span><span class="n">end</span><span class="p">{</span><span class="n">figure</span><span class="p">}</span><span class="w">

</span><span class="n">Cite</span><span class="w"> </span><span class="n">by</span><span class="o">:</span><span class="w"> </span><span class="err">\</span><span class="n">ref</span><span class="p">{</span><span class="n">eq</span><span class="o">:</span><span class="n">eq1</span><span class="p">};</span><span class="w"> </span><span class="err">\</span><span class="n">ref</span><span class="p">{</span><span class="n">tab</span><span class="o">:</span><span class="n">tab1</span><span class="p">};</span><span class="w"> </span><span class="err">\</span><span class="n">ref</span><span class="p">{</span><span class="n">fig</span><span class="o">:</span><span class="n">fig1</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<h3 id="step2b-reference">Step2b. Reference</h3>
<ul>
  <li>JabRef: Generate Citation keys (e.g., RN1)</li>
</ul>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">%in the preamble
\bibliographystyle{plain}

%</span><span class="n">Where</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">bibliography</span><span class="w"> </span><span class="n">will</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">printed</span><span class="w">
</span><span class="err">\</span><span class="n">bibliography</span><span class="p">{</span><span class="n">name</span><span class="w"> </span><span class="n">of</span><span class="w"> </span><span class="n">.bib</span><span class="w"> </span><span class="n">file</span><span class="p">}</span><span class="w">


</span><span class="o">@</span><span class="n">book</span><span class="p">{</span><span class="n">RN1</span><span class="p">,</span><span class="w">
   </span><span class="n">author</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="n">Gastel</span><span class="p">,</span><span class="w"> </span><span class="n">Barbara</span><span class="w"> </span><span class="n">and</span><span class="w"> </span><span class="n">Day</span><span class="p">,</span><span class="w"> </span><span class="n">Robert</span><span class="w"> </span><span class="n">A.</span><span class="p">},</span><span class="w">
   </span><span class="n">title</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="n">How</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">Write</span><span class="w"> </span><span class="n">and</span><span class="w"> </span><span class="n">Publisher</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">Scientific</span><span class="w"> </span><span class="n">Paper</span><span class="p">},</span><span class="w">
   </span><span class="n">publisher</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="n">Cambridge</span><span class="w"> </span><span class="n">University</span><span class="w"> </span><span class="n">Press</span><span class="p">},</span><span class="w">
   </span><span class="n">address</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="n">New</span><span class="w"> </span><span class="n">York</span><span class="p">,</span><span class="w"> </span><span class="n">USA</span><span class="p">},</span><span class="w">
   </span><span class="n">year</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="m">2017</span><span class="p">},</span><span class="w">
   </span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="n">Book</span><span class="p">}</span><span class="w">
</span><span class="p">}</span><span class="w">

</span><span class="n">Cite</span><span class="w"> </span><span class="n">by</span><span class="o">:</span><span class="w"> </span><span class="err">\</span><span class="n">cite</span><span class="p">{</span><span class="n">RN1</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<h3 id="step3-adapting-to-any-required-format-by-journals">Step3. Adapting to any required format by journals</h3>
<ul>
  <li>Document class (e.g., elsarticle.cls)</li>
  <li>Bibliography style (e.g., elsarticle-num.bst)</li>
</ul>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">%Default class: article, book, thesis
\documentclass[12pt]{article}
\bibliographystyle{plain}

%</span><span class="n">Elsevier</span><span class="w">
</span><span class="err">\</span><span class="n">documentclass</span><span class="p">[</span><span class="n">review</span><span class="p">]{</span><span class="n">elsarticle</span><span class="p">}</span><span class="w">
</span><span class="err">\</span><span class="n">bibliographystyle</span><span class="p">{</span><span class="n">elsarticle</span><span class="o">-</span><span class="n">num</span><span class="p">}</span><span class="w">

</span></code></pre></div></div>

<h2 id="alternatives">Alternatives</h2>

<ul>
  <li>Support collaborative online editing
    <ul>
      <li><a href="https://www.overleaf.com/">Overleaf</a></li>
      <li><a href="https://www.authorea.com/">Authorea</a></li>
    </ul>
  </li>
  <li>Support fully reproducible document using multiple languages, eg R or Python
    <ul>
      <li><a href="https://rmarkdown.rstudio.com/">Rmarkdown</a></li>
    </ul>
  </li>
</ul>]]></content><author><name>Honghui Zhang</name><email>honghui.alice.zhang@gmail.com</email></author><category term="Latex" /><summary type="html"><![CDATA[LaTeX is a document preparation system for high-quality typesetting. It is most often used for medium-to-large technical or scientific documents, but it can be used for almost any form of publishing.]]></summary></entry></feed>