tag:blogger.com,1999:blog-64242114134925971692024-03-02T07:11:58.197+01:00me nuggetpossibly maybe useful nuggetsMarc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.comBlogger62125tag:blogger.com,1999:blog-6424211413492597169.post-57813999924769635602016-02-25T10:29:00.000+01:002016-03-01T09:26:48.253+01:00RSpectra::svds function now default method for sinkr::dineofThe summary <a href="http://statr.me/2016/02/large-scale-eigen-and-svd-with-rarpack/">blog post</a> describing the RSpectra (formerly rARPACK) package made a convincing case for the improved decomposition speed of the "svds" function for partial SVD (Singular Value Decomposition) over several other R packages. Until now, the <a href="https://github.com/marchtaylor/sinkr">sinkr</a> package has relied on <a href="https://cran.r-project.org/web/packages/irlba/index.html">irlba</a> for it's dineof function (Data Interpolating Empirical Orthogonal Functions). Since the routine can be quite computationally intensive, I wanted to test the performance of svds as an alternative method.<br />
<br />
In a simple example that performs SVD on a field of sea level pressure of the equatorial Pacific, svds outperforms irlba both in speed and correlation of singular vector (e.g. $u) to the output of the base svd function. One can see in the following graph, that trailing vectors break down in their correlation while svds maintains nearly perfect correlation. Interestingly, this artifact is removed by first centering the data field. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-earWUjaHFx-625MIdccy1gqap_UEBmrziky7XcS9wN6McCw4fZ_wSh0pmn4xb61rmx2jLMihOxonBLDmkzZxpkqIXecn84VAaX6Ptk9_ZDEtVjUmZ28RGm3i4KaflfUNB503HXC19LgF/s1600/corSVD.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-earWUjaHFx-625MIdccy1gqap_UEBmrziky7XcS9wN6McCw4fZ_wSh0pmn4xb61rmx2jLMihOxonBLDmkzZxpkqIXecn84VAaX6Ptk9_ZDEtVjUmZ28RGm3i4KaflfUNB503HXC19LgF/s640/corSVD.png" width="640" /></a></div>
<br />
While the effect looks dramatic above, it should be noted that the trailing vectors usually carry only a small fraction of information, and thus contribute only marginally to errors in field reconstruction. Below is a figure showing the reconstruction error of svd, svds, and irlba with increasing levels of truncation.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxRVHV7QMj-jadS-JRhy3tkWsc7nwLEjVwycDSqKcthQgiaNXkKNr-6xUHUJe551yvzSnimQYqHzKqFh5WWWdVGnfeV06bfiowGemVNPsKMrlaJAMsrgwYTgk8VuTaVzMBLywOiUeu2rqD/s1600/summary_rms.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxRVHV7QMj-jadS-JRhy3tkWsc7nwLEjVwycDSqKcthQgiaNXkKNr-6xUHUJe551yvzSnimQYqHzKqFh5WWWdVGnfeV06bfiowGemVNPsKMrlaJAMsrgwYTgk8VuTaVzMBLywOiUeu2rqD/s320/summary_rms.png" width="320" /></a></div>
<br />
Finally, both methods were compared in their performance within dineof. With the non-centered field both approaches arrive to a similar RMS, but svds converges with less iterations and EOFs than irlba. With the centered data both methods produce nearly identical results. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRjsFcd9XF6CnMBbWoHt_XYkz86D9Aat1cC24uhascpxFRrJoCz-gWUUs8VwFwBKRM3CnaadSAChHAkdfn76OPe42Zr2ihdprBSXfXdEfsy8OWL394EdKHOcWVvu6r80O_gDyGoFNyo45o/s1600/dineofRMS.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRjsFcd9XF6CnMBbWoHt_XYkz86D9Aat1cC24uhascpxFRrJoCz-gWUUs8VwFwBKRM3CnaadSAChHAkdfn76OPe42Zr2ihdprBSXfXdEfsy8OWL394EdKHOcWVvu6r80O_gDyGoFNyo45o/s640/dineofRMS.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
So, even though the differences are small, the rSpectra::svds method will now be the default method for both the eof and dineof functions within sinkr. For the moment, the irlba method is maintained for compatibility with previous versions.<br />
<br />
<b>Code to reproduce: </b><br />
<a name='more'></a><br />
<br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;"># packages ----------------------------------------------------------------</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span>RSpectra<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span>irlba<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span>sinkr<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/plyr">plyr</a><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># data --------------------------------------------------------------------</span>
<span style="color: #666666; font-style: italic;"># full field</span>
<a href="http://inside-r.org/r-doc/utils/data"><span style="color: #003399; font-weight: bold;">data</span></a><span style="color: #009900;">(</span>slp<span style="color: #009900;">)</span>
F <- slp$field
Fs <- <a href="http://inside-r.org/r-doc/base/scale"><span style="color: #003399; font-weight: bold;">scale</span></a><span style="color: #009900;">(</span>F<span style="color: #339933;">,</span> center = <span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/scale"><span style="color: #003399; font-weight: bold;">scale</span></a> = <span style="color: black; font-weight: bold;">FALSE</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># gappy field</span>
gaps <- <a href="http://inside-r.org/r-doc/base/sample"><span style="color: #003399; font-weight: bold;">sample</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>F<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>F<span style="color: #009900;">)</span>*<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
Fg <- <a href="http://inside-r.org/r-doc/base/replace"><span style="color: #003399; font-weight: bold;">replace</span></a><span style="color: #009900;">(</span>F<span style="color: #339933;">,</span> gaps<span style="color: #339933;">,</span> <span style="color: black; font-weight: bold;">NaN</span><span style="color: #009900;">)</span>
Fsg <- <a href="http://inside-r.org/r-doc/base/replace"><span style="color: #003399; font-weight: bold;">replace</span></a><span style="color: #009900;">(</span>Fs<span style="color: #339933;">,</span> gaps<span style="color: #339933;">,</span> <span style="color: black; font-weight: bold;">NaN</span><span style="color: #009900;">)</span>
k <- <span style="color: #cc66cc;">20</span>
<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a> <- <a href="http://inside-r.org/r-doc/base/expand.grid"><span style="color: #003399; font-weight: bold;">expand.grid</span></a><span style="color: #009900;">(</span>nu=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>k<span style="color: #009900;">)</span><span style="color: #339933;">,</span> method=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"svd"</span><span style="color: #339933;">,</span> <span style="color: blue;">"svds"</span><span style="color: #339933;">,</span> <span style="color: blue;">"irlba"</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$cor_w_svd <- <span style="color: black; font-weight: bold;">NaN</span>
<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$recon_rms <- <span style="color: black; font-weight: bold;">NaN</span>
<a href="http://inside-r.org/r-doc/utils/head"><span style="color: #003399; font-weight: bold;">head</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">)</span>
k <- <span style="color: #cc66cc;">30</span>
<a href="http://inside-r.org/r-doc/base/system.time"><span style="color: #003399; font-weight: bold;">system.time</span></a><span style="color: #009900;">(</span>F.svd <- <a href="http://inside-r.org/r-doc/base/svd"><span style="color: #003399; font-weight: bold;">svd</span></a><span style="color: #009900;">(</span>F<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/system.time"><span style="color: #003399; font-weight: bold;">system.time</span></a><span style="color: #009900;">(</span>F.svds <- svds<span style="color: #009900;">(</span>F<span style="color: #339933;">,</span> k=k<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/system.time"><span style="color: #003399; font-weight: bold;">system.time</span></a><span style="color: #009900;">(</span>F.irlba <- irlba<span style="color: #009900;">(</span>F<span style="color: #339933;">,</span> nv=k<span style="color: #339933;">,</span> nu=k<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/system.time"><span style="color: #003399; font-weight: bold;">system.time</span></a><span style="color: #009900;">(</span>Fs.svd <- <a href="http://inside-r.org/r-doc/base/svd"><span style="color: #003399; font-weight: bold;">svd</span></a><span style="color: #009900;">(</span>Fs<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/system.time"><span style="color: #003399; font-weight: bold;">system.time</span></a><span style="color: #009900;">(</span>Fs.svds <- svds<span style="color: #009900;">(</span>Fs<span style="color: #339933;">,</span> k=k<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/system.time"><span style="color: #003399; font-weight: bold;">system.time</span></a><span style="color: #009900;">(</span>Fs.irlba <- irlba<span style="color: #009900;">(</span>Fs<span style="color: #339933;">,</span> nv=k<span style="color: #339933;">,</span> nu=k<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"corSVD.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">7</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">3.5</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/family"><span style="color: #003399; font-weight: bold;">family</span></a>=<span style="color: blue;">"Arial"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>mfrow=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> mgp=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=-<span style="color: #cc66cc;">0.25</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Un-scaled</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/abs"><span style="color: #003399; font-weight: bold;">abs</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/diag"><span style="color: #003399; font-weight: bold;">diag</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/cor"><span style="color: #003399; font-weight: bold;">cor</span></a><span style="color: #009900;">(</span>F.svd$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>k<span style="color: #009900;">)</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> F.svds$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>k<span style="color: #009900;">)</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #339933;">,</span> ylim=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
ylab=<span style="color: blue;">"Correlation to svd [abs(R)]"</span><span style="color: #339933;">,</span> xlab=<span style="color: blue;">"Singular vectors [u]"</span><span style="color: #339933;">,</span>
main=<span style="color: blue;">"Un-centered field [F]"</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/abs"><span style="color: #003399; font-weight: bold;">abs</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/diag"><span style="color: #003399; font-weight: bold;">diag</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/cor"><span style="color: #003399; font-weight: bold;">cor</span></a><span style="color: #009900;">(</span>F.svd$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>k<span style="color: #009900;">)</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> F.irlba$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>k<span style="color: #009900;">)</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span>
<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Scaled</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/abs"><span style="color: #003399; font-weight: bold;">abs</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/diag"><span style="color: #003399; font-weight: bold;">diag</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/cor"><span style="color: #003399; font-weight: bold;">cor</span></a><span style="color: #009900;">(</span>Fs.svd$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>k<span style="color: #009900;">)</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> Fs.svds$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>k<span style="color: #009900;">)</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #339933;">,</span> ylim=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
ylab=<span style="color: blue;">"Correlation to svd [abs(R)]"</span><span style="color: #339933;">,</span> xlab=<span style="color: blue;">"Singular vectors [u]"</span><span style="color: #339933;">,</span>
main=<span style="color: blue;">"Centered field [Fs]"</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/abs"><span style="color: #003399; font-weight: bold;">abs</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/diag"><span style="color: #003399; font-weight: bold;">diag</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/cor"><span style="color: #003399; font-weight: bold;">cor</span></a><span style="color: #009900;">(</span>Fs.svd$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>k<span style="color: #009900;">)</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> Fs.irlba$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>k<span style="color: #009900;">)</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span>
<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># legend</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"bottomright"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"svds"</span><span style="color: #339933;">,</span> <span style="color: blue;">"irlba"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> bty=<span style="color: blue;">"n"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
obj.svd<- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"F.svd"</span><span style="color: #339933;">,</span> <span style="color: blue;">"F.svds"</span><span style="color: #339933;">,</span> <span style="color: blue;">"F.irlba"</span><span style="color: #009900;">)</span>
ref.svd <- <span style="color: blue;">"F.svd"</span>
ref.field <- <span style="color: blue;">"F"</span>
<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a> <- <a href="http://inside-r.org/r-doc/base/expand.grid"><span style="color: #003399; font-weight: bold;">expand.grid</span></a><span style="color: #009900;">(</span>nu=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>k<span style="color: #009900;">)</span><span style="color: #339933;">,</span> obj=obj.svd<span style="color: #339933;">,</span> stringsAsFactors = <span style="color: black; font-weight: bold;">FALSE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$method <- <a href="http://inside-r.org/r-doc/base/substr"><span style="color: #003399; font-weight: bold;">substr</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$obj<span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$svd_cor <- <span style="color: black; font-weight: bold;">NaN</span>
<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$recon_rms <- <span style="color: black; font-weight: bold;">NaN</span>
<span style="color: #666666; font-style: italic;"># df <- data.frame(nu=seq(k), svd.cor=NaN, svds.cor=NaN, irlba.cor=NaN, svd.rms=NaN, svds.rms=NaN, irlba.rms=NaN)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
OBJ <- <a href="http://inside-r.org/r-doc/base/get"><span style="color: #003399; font-weight: bold;">get</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$obj<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">)</span>
NU <- <a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$nu<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span>
<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$svd_cor<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/abs"><span style="color: #003399; font-weight: bold;">abs</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/cor"><span style="color: #003399; font-weight: bold;">cor</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/get"><span style="color: #003399; font-weight: bold;">get</span></a><span style="color: #009900;">(</span>ref.svd<span style="color: #009900;">)</span>$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$nu<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> OBJ$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span>NU<span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
RECON <- <span style="color: #009900;">(</span>OBJ$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>NU<span style="color: #009900;">)</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span> %*% <a href="http://inside-r.org/r-doc/base/diag"><span style="color: #003399; font-weight: bold;">diag</span></a><span style="color: #009900;">(</span>OBJ$d<span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>NU<span style="color: #009900;">)</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span>NU<span style="color: #339933;">,</span>NU<span style="color: #009900;">)</span> %*% <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #009900;">(</span>OBJ$v<span style="color: #009900;">[</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>NU<span style="color: #009900;">)</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$recon_rms<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/sqrt"><span style="color: #003399; font-weight: bold;">sqrt</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">(</span><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/get"><span style="color: #003399; font-weight: bold;">get</span></a><span style="color: #009900;">(</span>ref.field<span style="color: #009900;">)</span> - RECON<span style="color: #009900;">)</span>^<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> na.rm=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"summary_rms.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">3.5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">3.5</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/family"><span style="color: #003399; font-weight: bold;">family</span></a>=<span style="color: blue;">"Arial"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> mgp=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=-<span style="color: #cc66cc;">0.25</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># RMS with F</span>
<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$method <- <a href="http://inside-r.org/r-doc/base/factor"><span style="color: #003399; font-weight: bold;">factor</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$method<span style="color: #009900;">)</span>
levs <- <a href="http://inside-r.org/r-doc/base/levels"><span style="color: #003399; font-weight: bold;">levels</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$method<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a> <- addAlpha<span style="color: #009900;">(</span>jetPal<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>levs<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
lty <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>levs<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
lwd <- <a href="http://inside-r.org/r-doc/base/rep"><span style="color: #003399; font-weight: bold;">rep</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>levs<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>levs<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
<span style="color: black; font-weight: bold;">if</span><span style="color: #009900;">(</span>i == <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>recon_rms~nu<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a>=<span style="color: blue;">"y"</span><span style="color: #339933;">,</span>
ylab=<span style="color: blue;">"RMSE"</span><span style="color: #339933;">,</span> xlab=<span style="color: blue;">"Cumulative singular vectors [u]"</span><span style="color: #339933;">,</span>
main=<span style="color: blue;">"Reconstruction error<span style="color: #000099; font-weight: bold;">\n</span>of un-centered field [F]"</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>recon_rms~nu<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/subset"><span style="color: #003399; font-weight: bold;">subset</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>method==levs<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> lty=lty<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> lwd=lwd<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"topright"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=levs<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a><span style="color: #339933;">,</span> lty=lty<span style="color: #339933;">,</span> lwd=lwd<span style="color: #339933;">,</span> bty=<span style="color: blue;">"n"</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
delta.rms <- 1e-3
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <a href="http://inside-r.org/r-doc/base/system.time"><span style="color: #003399; font-weight: bold;">system.time</span></a><span style="color: #009900;">(</span>Fg.din.irlba <- dineof<span style="color: #009900;">(</span>Fg<span style="color: #339933;">,</span> method = <span style="color: blue;">"irlba"</span><span style="color: #339933;">,</span> delta.rms = delta.rms<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <a href="http://inside-r.org/r-doc/base/system.time"><span style="color: #003399; font-weight: bold;">system.time</span></a><span style="color: #009900;">(</span>Fg.din.svds <- dineof<span style="color: #009900;">(</span>Fg<span style="color: #339933;">,</span> method = <span style="color: blue;">"svds"</span><span style="color: #339933;">,</span> delta.rms = delta.rms<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <a href="http://inside-r.org/r-doc/base/system.time"><span style="color: #003399; font-weight: bold;">system.time</span></a><span style="color: #009900;">(</span>Fsg.din.irlba <- dineof<span style="color: #009900;">(</span>Fsg<span style="color: #339933;">,</span> method = <span style="color: blue;">"irlba"</span><span style="color: #339933;">,</span> delta.rms = delta.rms<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <a href="http://inside-r.org/r-doc/base/system.time"><span style="color: #003399; font-weight: bold;">system.time</span></a><span style="color: #009900;">(</span>Fsg.din.svds <- dineof<span style="color: #009900;">(</span>Fsg<span style="color: #339933;">,</span> method = <span style="color: blue;">"svds"</span><span style="color: #339933;">,</span> delta.rms = delta.rms<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"dineofRMS.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">7</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">3.5</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/family"><span style="color: #003399; font-weight: bold;">family</span></a>=<span style="color: blue;">"Arial"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>mfrow=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> mgp=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=-<span style="color: #cc66cc;">0.25</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Un-scaled</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>Fg.din.svds$RMS<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a>=<span style="color: blue;">"y"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #339933;">,</span>
xlim=<a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>Fg.din.irlba$RMS<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>Fg.din.svds$RMS<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
ylim=<a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>Fg.din.irlba$RMS<span style="color: #339933;">,</span> Fg.din.svds$RMS<span style="color: #009900;">)</span><span style="color: #339933;">,</span>
ylab=<span style="color: blue;">"RMSE"</span><span style="color: #339933;">,</span> xlab=<span style="color: blue;">"Iteration (n)"</span><span style="color: #339933;">,</span>
main=<span style="color: blue;">"DINEOF performance on<span style="color: #000099; font-weight: bold;">\n</span>un-centered gappy field [Fg]"</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>Fg.din.irlba$RMS<span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/methods/new"><span style="color: #003399; font-weight: bold;">new</span></a>=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>Fg.din.svds$NEOF<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a>=<span style="color: blue;">""</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #339933;">,</span>
xlim=<a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>Fg.din.irlba$NEOF<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>Fg.din.svds$NEOF<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
ylim=<a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>Fg.din.irlba$NEOF<span style="color: #339933;">,</span> Fg.din.svds$NEOF<span style="color: #009900;">)</span><span style="color: #339933;">,</span>
axes=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #339933;">,</span> xlab=<span style="color: blue;">""</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">""</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>Fg.din.irlba$NEOF<span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/axis"><span style="color: #003399; font-weight: bold;">axis</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"EOFs [n]"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"top"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"svds"</span><span style="color: #339933;">,</span> <span style="color: blue;">"irlba"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> bty=<span style="color: blue;">"n"</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Scaled</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>Fsg.din.svds$RMS<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a>=<span style="color: blue;">"y"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #339933;">,</span>
xlim=<a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>Fsg.din.irlba$RMS<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>Fsg.din.svds$RMS<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
ylim=<a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>Fsg.din.irlba$RMS<span style="color: #339933;">,</span> Fsg.din.svds$RMS<span style="color: #009900;">)</span><span style="color: #339933;">,</span>
ylab=<span style="color: blue;">"RMSE"</span><span style="color: #339933;">,</span> xlab=<span style="color: blue;">"Iteration (n)"</span><span style="color: #339933;">,</span>
main=<span style="color: blue;">"DINEOF performance on<span style="color: #000099; font-weight: bold;">\n</span>centered gappy field [Fsg]"</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>Fsg.din.irlba$RMS<span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/methods/new"><span style="color: #003399; font-weight: bold;">new</span></a>=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>Fsg.din.svds$NEOF<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a>=<span style="color: blue;">""</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #339933;">,</span>
xlim=<a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>Fsg.din.irlba$NEOF<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>Fsg.din.svds$NEOF<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
ylim=<a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>Fsg.din.irlba$NEOF<span style="color: #339933;">,</span> Fsg.din.svds$NEOF<span style="color: #009900;">)</span><span style="color: #339933;">,</span>
axes=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #339933;">,</span> xlab=<span style="color: blue;">""</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">""</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>Fsg.din.irlba$NEOF<span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/axis"><span style="color: #003399; font-weight: bold;">axis</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"EOFs [n]"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"top"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"svds"</span><span style="color: #339933;">,</span> <span style="color: blue;">"irlba"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> bty=<span style="color: blue;">"n"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com3tag:blogger.com,1999:blog-6424211413492597169.post-55115636817250825802016-02-18T14:53:00.003+01:002016-02-18T20:47:32.214+01:00Visualizing model predictions in 3dHere is a brief exploration of the misc3d package, which has some nice functions that can be used in conjunction with rgl. I am especially pleased with the output of contour3d which I have used to plot GAM predictions in 3d.<br />
The example is a simple dataset of x, y, and z, data that were used to calculate a 4th variable "value" with the equation:<br />
<br />
<div style="text-align: center;">
value = -0.01x<sup>3</sup> + -0.2*y<sup>2</sup> + -0.3*z<sup>2</sup><br />
<div style="text-align: left;">
<br /></div>
</div>
Fitting GAM model to this dataset resulted in the following spline terms.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsrd2ZTOjJikNKZJu0YV72YxAyGfy0MgXauUNie6e8CM4fpO1Ko_4TuBdDFi-g5tM7N7x6Nv-ot1EAK8iG8BTAok6_ni43eAASQ3i7Dse-l2YmujO5GctD8pDm8O91ZcVXA_Mv1T_fmmWO/s1600/gamfit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsrd2ZTOjJikNKZJu0YV72YxAyGfy0MgXauUNie6e8CM4fpO1Ko_4TuBdDFi-g5tM7N7x6Nv-ot1EAK8iG8BTAok6_ni43eAASQ3i7Dse-l2YmujO5GctD8pDm8O91ZcVXA_Mv1T_fmmWO/s640/gamfit.png" width="640" /></a></div>
<br />
Then, the fitted GAM model was used to predict values on a regular 3d grid for plotting with the rgl package. The following plot shows the original data, with value values colored (blue colors of the spectrum are low values, red colors are high values). Finally, the contour3d function is used to add the GAM predictions as colored contours.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKUrxmDGZzqVZVQol7Q0mk0mgc1q2cB6XKebBm2NXAf62q30lwp_aH-MKF-zfVtgGyTzUCRLseA-thSzvBZsXFbKb_jCCR5JDD0h0BJ9ERz_9ekknsekMWQbUgLE0uJvsUr4E2nBFwkgRb/s1600/contour3d.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="373" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKUrxmDGZzqVZVQol7Q0mk0mgc1q2cB6XKebBm2NXAf62q30lwp_aH-MKF-zfVtgGyTzUCRLseA-thSzvBZsXFbKb_jCCR5JDD0h0BJ9ERz_9ekknsekMWQbUgLE0uJvsUr4E2nBFwkgRb/s400/contour3d.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
I got some nice insight from the <a href="https://www.stat.auckland.ac.nz/%7Epaul/RG2e/chapter16.html">R code</a> accompanying the book by Murcell (2011).<br />
<br />
<b>References</b>:<br />
Murrell, P., 2011. R graphics. CRC Press. <br />
<br />
<br />
<b>Example script</b>:<br />
<a name='more'></a><br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;"># make data ---------------------------------------------------------------</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
n <- <span style="color: #cc66cc;">1000</span>
x <- <a href="http://inside-r.org/r-doc/stats/runif"><span style="color: #003399; font-weight: bold;">runif</span></a><span style="color: #009900;">(</span>n<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a>=-<span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a>=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
y <- <a href="http://inside-r.org/r-doc/stats/runif"><span style="color: #003399; font-weight: bold;">runif</span></a><span style="color: #009900;">(</span>n<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a>=-<span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a>=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
z <- <a href="http://inside-r.org/r-doc/stats/runif"><span style="color: #003399; font-weight: bold;">runif</span></a><span style="color: #009900;">(</span>n<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a>=-<span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a>=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
value <- <span style="color: #009900;">(</span>-<span style="color: #cc66cc;">0.01</span>*x^<span style="color: #cc66cc;">3</span> + -<span style="color: #cc66cc;">0.2</span>*y^<span style="color: #cc66cc;">2</span> + -<span style="color: #cc66cc;">0.3</span>*z^<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span> * <a href="http://inside-r.org/r-doc/stats/rlnorm"><span style="color: #003399; font-weight: bold;">rlnorm</span></a><span style="color: #009900;">(</span>n<span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.25</span><span style="color: #009900;">)</span>
dat <- <a href="http://inside-r.org/r-doc/base/data.frame"><span style="color: #003399; font-weight: bold;">data.frame</span></a><span style="color: #009900;">(</span>x=x<span style="color: #339933;">,</span> y=y<span style="color: #339933;">,</span> z=z<span style="color: #339933;">,</span> value=value<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># fit model (GAM) ---------------------------------------------------------</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/mgcv/mgcv"><span style="color: #003399; font-weight: bold;">mgcv</span></a><span style="color: #009900;">)</span>
fit <- <a href="http://inside-r.org/r-doc/mgcv/gam"><span style="color: #003399; font-weight: bold;">gam</span></a><span style="color: #009900;">(</span>value ~ <a href="http://inside-r.org/r-doc/mgcv/s"><span style="color: #003399; font-weight: bold;">s</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span> + <a href="http://inside-r.org/r-doc/mgcv/s"><span style="color: #003399; font-weight: bold;">s</span></a><span style="color: #009900;">(</span>y<span style="color: #009900;">)</span> + <a href="http://inside-r.org/r-doc/mgcv/s"><span style="color: #003399; font-weight: bold;">s</span></a><span style="color: #009900;">(</span>z<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/utils/data"><span style="color: #003399; font-weight: bold;">data</span></a> = dat<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"gamfit.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> mfrow=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> mgp=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.25</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=<span style="color: #cc66cc;">0.25</span><span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>plot.gam<span style="color: #009900;">(</span>fit<span style="color: #339933;">,</span> select=i<span style="color: #339933;">,</span> shade=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/residuals"><span style="color: #003399; font-weight: bold;">residuals</span></a>=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/rug"><span style="color: #003399; font-weight: bold;">rug</span></a>=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #009900;">)</span><span style="color: #009900;">}</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># predict to new grid -----------------------------------------------------</span>
reso <- <span style="color: #cc66cc;">30</span>
limExt <- <span style="color: #cc66cc;">0.1</span>
ranx <- <a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span>
rany <- <a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>y<span style="color: #009900;">)</span>
ranz <- <a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>z<span style="color: #009900;">)</span>
xs <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>ranx<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>-<a href="http://inside-r.org/r-doc/base/diff"><span style="color: #003399; font-weight: bold;">diff</span></a><span style="color: #009900;">(</span>ranx<span style="color: #009900;">)</span>*limExt<span style="color: #339933;">,</span> ranx<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span>+<a href="http://inside-r.org/r-doc/base/diff"><span style="color: #003399; font-weight: bold;">diff</span></a><span style="color: #009900;">(</span>ranx<span style="color: #009900;">)</span>*limExt<span style="color: #339933;">,,</span>reso<span style="color: #009900;">)</span>
ys <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>rany<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>-<a href="http://inside-r.org/r-doc/base/diff"><span style="color: #003399; font-weight: bold;">diff</span></a><span style="color: #009900;">(</span>rany<span style="color: #009900;">)</span>*limExt<span style="color: #339933;">,</span> rany<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span>+<a href="http://inside-r.org/r-doc/base/diff"><span style="color: #003399; font-weight: bold;">diff</span></a><span style="color: #009900;">(</span>rany<span style="color: #009900;">)</span>*limExt<span style="color: #339933;">,,</span>reso<span style="color: #009900;">)</span>
zs <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>ranz<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>-<a href="http://inside-r.org/r-doc/base/diff"><span style="color: #003399; font-weight: bold;">diff</span></a><span style="color: #009900;">(</span>ranz<span style="color: #009900;">)</span>*limExt<span style="color: #339933;">,</span> ranz<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span>+<a href="http://inside-r.org/r-doc/base/diff"><span style="color: #003399; font-weight: bold;">diff</span></a><span style="color: #009900;">(</span>ranz<span style="color: #009900;">)</span>*limExt<span style="color: #339933;">,,</span>reso<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># 3d contours -------------------------------------------------------------</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span>sinkr<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># https://github.com/marchtaylor/sinkr</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/rgl">rgl</a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/misc3d">misc3d</a><span style="color: #009900;">)</span>
nlevs <- <span style="color: #cc66cc;">5</span>
vran <- <a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>dat$value<span style="color: #009900;">)</span>
levs <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>vran<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> vran<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> length.out=nlevs+<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #009900;">[</span>-<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> nlevs+<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #009900;">]</span>
levcols <- val2col<span style="color: #009900;">(</span>levs<span style="color: #339933;">,</span> jetPal<span style="color: #009900;">(</span>nlevs<span style="color: #009900;">)</span><span style="color: #339933;">,</span> zlim = vran<span style="color: #009900;">)</span>
fun <- <a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span>y<span style="color: #339933;">,</span>z<span style="color: #009900;">)</span><span style="color: #009900;">{</span><a href="http://inside-r.org/r-doc/stats/predict"><span style="color: #003399; font-weight: bold;">predict</span></a><span style="color: #009900;">(</span>fit<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/data.frame"><span style="color: #003399; font-weight: bold;">data.frame</span></a><span style="color: #009900;">(</span>x=x<span style="color: #339933;">,</span> y=y<span style="color: #339933;">,</span> z=z<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">}</span>
<a href="http://inside-r.org/r-doc/base/with"><span style="color: #003399; font-weight: bold;">with</span></a><span style="color: #009900;">(</span>dat<span style="color: #339933;">,</span> spheres3d<span style="color: #009900;">(</span>x<span style="color: #339933;">,</span>y<span style="color: #339933;">,</span>z<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=val2col<span style="color: #009900;">(</span>value<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=jetPal<span style="color: #009900;">(</span><span style="color: #cc66cc;">20</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> zlim=vran<span style="color: #009900;">)</span><span style="color: #339933;">,</span> radius = <span style="color: #cc66cc;">0.2</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
contour3d<span style="color: #009900;">(</span>fun<span style="color: #339933;">,</span> level = levs<span style="color: #339933;">,</span>
x=xs<span style="color: #339933;">,</span> y=ys<span style="color: #339933;">,</span> z=zs<span style="color: #339933;">,</span>
color=levcols<span style="color: #339933;">,</span>
engine=<span style="color: blue;">"rgl"</span><span style="color: #339933;">,</span> add=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> alpha=<span style="color: #cc66cc;">0.5</span>
<span style="color: #009900;">)</span>
box3d<span style="color: #009900;">(</span><span style="color: #009900;">)</span>
snapshot3d<span style="color: #009900;">(</span><span style="color: blue;">"contour3d.png"</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com0tag:blogger.com,1999:blog-6424211413492597169.post-10238509919916417152016-02-17T10:09:00.000+01:002016-02-17T10:12:42.384+01:00Working with Globcolour data (Part 2)Just a quick note to announce that the <span style="font-family: "Courier New",Courier,monospace;">makeGlobcolourField </span>and <span style="font-family: "Courier New",Courier,monospace;">isin.convert </span>functions have been added to the <a href="https://github.com/marchtaylor/sinkr">sinkr </a>package. In addition, the <span style="font-family: "Courier New",Courier,monospace;">makeGlobcolourField </span>function now used the <a href="https://cran.r-project.org/web/packages/ncdf4/index.html">ncdf4 </a>package to read the .nc files. Both functions are only set up to deal with the higher resolution 4 km data based on the ISIN grid ("L3b").<br />
The following script is an example of extracting data for the Philippines, and produces a map of mean Chl1 values:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_q_jKpBOzbeyPALBSchUEALn5Aw5CjbXS9Wqs4XCK_f23ALLa81OuJaGc67orYQCvMvJptgmyJb7YoD28C1agtULeMI9S2J5ardogCmmgIzYGUWLtKkWmaWmeRfcF4QVWyYWznRDmdmI9/s1600/meanChla.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_q_jKpBOzbeyPALBSchUEALn5Aw5CjbXS9Wqs4XCK_f23ALLa81OuJaGc67orYQCvMvJptgmyJb7YoD28C1agtULeMI9S2J5ardogCmmgIzYGUWLtKkWmaWmeRfcF4QVWyYWznRDmdmI9/s400/meanChla.png" width="400" /></a></div>
<br />
<br />
<br />
<br />
<br />
<b>Example script</b>:<br />
<a name='more'></a><br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;"># Required packages -------------------------------------------------------</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span>sinkr<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/maps">maps</a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mapproj">mapproj</a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/ncdf4">ncdf4</a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/Matrix/Matrix"><span style="color: #003399; font-weight: bold;">Matrix</span></a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mapdata">mapdata</a><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Create field ------------------------------------------------------------</span>
dat_path <- <a href="http://inside-r.org/r-doc/base/getwd"><span style="color: #003399; font-weight: bold;">getwd</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># or location of Globcolour .nc files</span>
F1 <- makeGlobcolourField<span style="color: #009900;">(</span>
folderPath=dat_path<span style="color: #339933;">,</span>
yearRan=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1997</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2015</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
lonRan=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">116</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">127</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
latRan=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">17</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
greps=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">".nc"</span><span style="color: #339933;">,</span> <span style="color: blue;">"GSM"</span><span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Create grid and polygons ------------------------------------------------</span>
grd <- isin.convert<span style="color: #009900;">(</span>grd=<a href="http://inside-r.org/r-doc/base/as.numeric"><span style="color: #003399; font-weight: bold;">as.numeric</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/colnames"><span style="color: #003399; font-weight: bold;">colnames</span></a><span style="color: #009900;">(</span>F1<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
polys <- isin.convert<span style="color: #009900;">(</span>grd=grd$grd<span style="color: #339933;">,</span> polygons = <span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Plot --------------------------------------------------------------------</span>
breaks <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.01</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.05</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1.5</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2.5</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"meanChla.png"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">6</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/layout"><span style="color: #003399; font-weight: bold;">layout</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> widths=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> heights=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> respect = <span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>cex=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
map<span style="color: #009900;">(</span><span style="color: blue;">"worldHires"</span><span style="color: #339933;">,</span> <span style="color: blue;">"philippines"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span> ylim=<a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>grd$lat<span style="color: #009900;">)</span><span style="color: #339933;">,</span> xlim=<a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>grd$lon<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/axis"><span style="color: #003399; font-weight: bold;">axis</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> <a href="http://inside-r.org/r-doc/graphics/axis"><span style="color: #003399; font-weight: bold;">axis</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/box"><span style="color: #003399; font-weight: bold;">box</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
incl <- <a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/colSums"><span style="color: #003399; font-weight: bold;">colSums</span></a><span style="color: #009900;">(</span>!<a href="http://inside-r.org/r-doc/base/is.na"><span style="color: #003399; font-weight: bold;">is.na</span></a><span style="color: #009900;">(</span>F1<span style="color: #009900;">)</span><span style="color: #009900;">)</span> / <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span>F1<span style="color: #009900;">)</span> > <span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># more that 50% of months are non-NAs</span>
<a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a> <- val2col<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/colMeans"><span style="color: #003399; font-weight: bold;">colMeans</span></a><span style="color: #009900;">(</span>F1<span style="color: #339933;">,</span> na.rm = <span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span><span style="color: #009900;">[</span>incl<span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=jetPal<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>breaks<span style="color: #009900;">)</span>-<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> breaks=breaks<span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>j <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>incl<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
<a href="http://inside-r.org/r-doc/graphics/polygon"><span style="color: #003399; font-weight: bold;">polygon</span></a><span style="color: #009900;">(</span>polys<span style="color: #009900;">[</span><span style="color: #009900;">[</span>incl<span style="color: #009900;">[</span>j<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a><span style="color: #009900;">[</span>j<span style="color: #009900;">]</span><span style="color: #339933;">,</span> border=<a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a><span style="color: #009900;">[</span>j<span style="color: #009900;">]</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">0.001</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
map<span style="color: #009900;">(</span><span style="color: blue;">"worldHires"</span><span style="color: #339933;">,</span> add=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span> resolution = <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> fill=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
imageScale<span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> breaks=breaks<span style="color: #339933;">,</span> axis.pos=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=jetPal<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>breaks<span style="color: #009900;">)</span>-<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a>=<span style="color: blue;">"y"</span><span style="color: #339933;">,</span> add.axis=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/axis"><span style="color: #003399; font-weight: bold;">axis</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> at=breaks<span style="color: #339933;">,</span> las=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com2tag:blogger.com,1999:blog-6424211413492597169.post-80031481950320212002015-10-09T09:29:00.000+02:002015-10-09T09:31:57.615+02:00A gem of a comment regarding likelihood optimizationAn interesting comment on conducting likelihood optimization (frequentist approach) (from <a href="http://www.petrkeil.com/?p=393">http://www.petrkeil.com/?p=393</a>):<br />
<br />
<b>R code</b>:<br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;">### The following R code does just this for a normal linear regression (eq1 above):</span>
<span style="color: #666666; font-style: italic;"># Generate some data</span>
a <- <span style="color: #cc66cc;">5</span>
b <- <span style="color: #cc66cc;">2</span>
sigma <- <span style="color: #cc66cc;">0.5</span>
x <- <a href="http://inside-r.org/r-doc/stats/runif"><span style="color: #003399; font-weight: bold;">runif</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1000</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">20</span><span style="color: #009900;">)</span>
y <- a+<span style="color: #009900;">(</span>b*x<span style="color: #009900;">)</span>+<a href="http://inside-r.org/r-doc/stats/rnorm"><span style="color: #003399; font-weight: bold;">rnorm</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1000</span><span style="color: #009900;">)</span>*sigma
dat <- <a href="http://inside-r.org/r-doc/base/data.frame"><span style="color: #003399; font-weight: bold;">data.frame</span></a><span style="color: #009900;">(</span>x=x<span style="color: #339933;">,</span>y=y<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>dat$x<span style="color: #339933;">,</span>dat$y<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Write the likelihood function for the statistical model (in this case, normal linear regression)</span>
loglike<- <a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #339933;">,</span>dat<span style="color: #009900;">)</span>
<span style="color: #009900;">{</span>
a <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">[</span><span style="color: blue;">'a'</span><span style="color: #009900;">]</span>
b <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">[</span><span style="color: blue;">'b'</span><span style="color: #009900;">]</span>
sigma <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">[</span><span style="color: blue;">'sigma'</span><span style="color: #009900;">]</span>
<a href="http://inside-r.org/r-doc/base/return"><span style="color: #003399; font-weight: bold;">return</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/dnorm"><span style="color: #003399; font-weight: bold;">dnorm</span></a><span style="color: #009900;">(</span>dat$y-a-<span style="color: #009900;">(</span>b*dat$x<span style="color: #009900;">)</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a>=<span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/stats/sd"><span style="color: #003399; font-weight: bold;">sd</span></a>=sigma<span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a>=T<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<span style="color: #666666; font-style: italic;"># Maximise the log likelihood</span>
res <- <a href="http://inside-r.org/r-doc/stats/optim"><span style="color: #003399; font-weight: bold;">optim</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>a=<span style="color: #cc66cc;">1.5</span><span style="color: #339933;">,</span>b=<span style="color: #cc66cc;">1.5</span><span style="color: #339933;">,</span>sigma=<span style="color: #cc66cc;">0.6</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> fn=loglike<span style="color: #339933;">,</span> dat=dat<span style="color: #339933;">,</span> method=<span style="color: blue;">'L-BFGS-B'</span><span style="color: #339933;">,</span> lower=<a href="http://inside-r.org/r-doc/base/rep"><span style="color: #003399; font-weight: bold;">rep</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> upper=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>a=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span>b=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span>sigma=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/boot/control"><span style="color: #003399; font-weight: bold;">control</span></a>=<a href="http://inside-r.org/r-doc/base/list"><span style="color: #003399; font-weight: bold;">list</span></a><span style="color: #009900;">(</span>fnscale=-<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
res$value
res$par
<span style="color: #666666; font-style: italic;"># Plot the fitted result over the data to see if it looks like a good fit (which we know it will be).</span>
x <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>from=<a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span>dat$x<span style="color: #009900;">)</span><span style="color: #339933;">,</span>to=<a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a><span style="color: #009900;">(</span>dat$x<span style="color: #009900;">)</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/by"><span style="color: #003399; font-weight: bold;">by</span></a>=<span style="color: #cc66cc;">0.1</span><span style="color: #009900;">)</span>
y <- res$par<span style="color: #009900;">[</span><span style="color: blue;">'a'</span><span style="color: #009900;">]</span>+<span style="color: #009900;">(</span>res$par<span style="color: #009900;">[</span><span style="color: blue;">'b'</span><span style="color: #009900;">]</span>*x<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>dat$x<span style="color: #339933;">,</span> dat$y<span style="color: #339933;">,</span> type=<span style="color: blue;">'p'</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/points"><span style="color: #003399; font-weight: bold;">points</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> y<span style="color: #339933;">,</span> type=<span style="color: blue;">'l'</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">'red'</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">### And compare to LM</span>
lmfit <- <a href="http://inside-r.org/r-doc/stats/lm"><span style="color: #003399; font-weight: bold;">lm</span></a><span style="color: #009900;">(</span>y ~ x<span style="color: #339933;">,</span> dat<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/summary"><span style="color: #003399; font-weight: bold;">summary</span></a><span style="color: #009900;">(</span>lmfit<span style="color: #009900;">)</span>$coeff
res$par</pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />
<br />
<br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com0tag:blogger.com,1999:blog-6424211413492597169.post-18668763578934141312015-07-22T09:57:00.001+02:002015-07-22T11:22:50.517+02:00A simple square binning function<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu4dQW9s-0lm-6HobzZ3Qx_Mb2Tm4RvwMYKmnU4xe5LQA6zU1hrDBCD41ZU45ZtKwi80bNJsV_B1Lf-LMGpi79p31sxBkG-be9qx9hP-iwF-63OdiYXhdDAD61POD5dSJuk9d6XnWyfIcp/s1600/Screen+Shot+2015-07-22+at+09.50.56.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu4dQW9s-0lm-6HobzZ3Qx_Mb2Tm4RvwMYKmnU4xe5LQA6zU1hrDBCD41ZU45ZtKwi80bNJsV_B1Lf-LMGpi79p31sxBkG-be9qx9hP-iwF-63OdiYXhdDAD61POD5dSJuk9d6XnWyfIcp/s320/Screen+Shot+2015-07-22+at+09.50.56.png" width="320" /></a></div>
<br />
While I like the <a href="https://cran.r-project.org/web/packages/hexbin/index.html"><span style="font-family: "Courier New",Courier,monospace;">hexbin</span></a> package and see the advantage of having more circular bins, I find that square binning allowed me to take advantage of lower level plotting functions like <span style="font-family: "Courier New",Courier,monospace;">image</span>, which allows for more flexibility when plotting. The following is an efficient implementation within the function <span style="font-family: "Courier New",Courier,monospace;">sqbin</span>, available in the <a href="https://github.com/marchtaylor/sinkr"><span style="font-family: "Courier New",Courier,monospace;">sinkr</span></a> package. <br />
<br />
<b>Example:</b><br />
<br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;">#library(devtools)</span>
<span style="color: #666666; font-style: italic;">#install_github("marchtaylor/sinkr")</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span>sinkr<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Synthetic data</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
n <- 1e6
x <- <a href="http://inside-r.org/r-doc/stats/runif"><span style="color: #003399; font-weight: bold;">runif</span></a><span style="color: #009900;">(</span>n<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a>=-<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
y <- <span style="color: #cc66cc;">4</span>*x^<span style="color: #cc66cc;">2</span> + <a href="http://inside-r.org/r-doc/stats/rnorm"><span style="color: #003399; font-weight: bold;">rnorm</span></a><span style="color: #009900;">(</span>n<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/sd"><span style="color: #003399; font-weight: bold;">sd</span></a>=<span style="color: #cc66cc;">5</span><span style="color: #009900;">)</span>
sqbin.res <- sqbin<span style="color: #009900;">(</span>x<span style="color: #339933;">,</span>y<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Plot</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>sqbin.res<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=jetPal<span style="color: #009900;">(</span><span style="color: #cc66cc;">20</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Plot with legend</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>no.readonly = <span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
lo <- <a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/layout"><span style="color: #003399; font-weight: bold;">layout</span></a><span style="color: #009900;">(</span>lo<span style="color: #339933;">,</span> widths=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> heights=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> respect=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>cex=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>sqbin.res<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=jetPal<span style="color: #009900;">(</span><span style="color: #cc66cc;">20</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
imageScale<span style="color: #009900;">(</span>sqbin.res$z<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=jetPal<span style="color: #009900;">(</span><span style="color: #cc66cc;">20</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> axis.pos=<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Frequency"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">2.5</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com0tag:blogger.com,1999:blog-6424211413492597169.post-13488807678555742392015-07-20T10:16:00.000+02:002015-07-21T09:16:18.188+02:00The rise (and fall?) of R-bloggers - A web scraping of posting trends<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiu3qRYn5UAINaFXsS8kFIrkklzFmT3BvbRt3qQFtrfvrCvJpBOposT8kirSfABTT6ReGP2Gkb3blTfDc3SGHDtrfn4VRobwme0ag5JoXGC1ZqqnLShrGsgNs88OVmi80hrifJH-nkFXYWY/s1600/rbloggers_boxplot_wday.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPFPKqrq9i-MB1D7dgcGD8Su7l8YTwjf7DOARtWRxUXbLFO6wdiAyqHFl4hOMb28vN1DpDv2tlZxnBEU3-Kqr3LK3CUBkIkaa42U7zKLg3Ue35Zc3wFXu6LnwmRg_6pElfkXDz9ZyUeggu/s1600/rbloggers_raw_day.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPFPKqrq9i-MB1D7dgcGD8Su7l8YTwjf7DOARtWRxUXbLFO6wdiAyqHFl4hOMb28vN1DpDv2tlZxnBEU3-Kqr3LK3CUBkIkaa42U7zKLg3Ue35Zc3wFXu6LnwmRg_6pElfkXDz9ZyUeggu/s320/rbloggers_raw_day.png" width="320" /></a></div>
I recently came across a great new package for web scraping called <a href="https://cran.r-project.org/web/packages/rvest/index.html">rvest</a> by Hadley Wickham. This nice little post got me started: <a class="moz-txt-link-freetext" href="http://blog.rstudio.org/2014/11/24/rvest-easy-web-scraping-with-r/">http://blog.rstudio.org/2014/11/24/rvest-easy-web-scraping-with-r/</a>. It was really incredibly easy to use when combined with the css selector tool "selector gadget"(<a class="moz-txt-link-freetext" href="http://selectorgadget.com/">http://selectorgadget.com/</a>), which helps you select elements of a webpage to scrape.<br />
<br />
I decided to have a go at extracting some stats for R-bloggers postings (e.g. dates, authors<span style="color: #0000ee;"><span style="color: black;">).<span style="color: #0000ee;"> </span>Aggregating by date results in the plot above. You may notice a prominent outlier on 2011-05-26, which was due to repeat postings of the same entry. I also checked to see if there is a trend according to the number of postings by day of the week:</span></span> <br />
<div style="text-align: center;">
</div>
<div style="text-align: left;">
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqKx8xaMUHBN65m9NovesqkkISZKNVRR9CCqQXoXD4XPHKNajLqEw-oQMYVXdFr66bKiT4p222G1tXxR60Y_376k1aKJup23yOH8gXSA1h91Mge1cZlDzXcSEq7fP0sp-OSsK6syuRqasx/s1600/rbloggers_boxplot_wday.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqKx8xaMUHBN65m9NovesqkkISZKNVRR9CCqQXoXD4XPHKNajLqEw-oQMYVXdFr66bKiT4p222G1tXxR60Y_376k1aKJup23yOH8gXSA1h91Mge1cZlDzXcSEq7fP0sp-OSsK6syuRqasx/s320/rbloggers_boxplot_wday.png" width="320" /></a> </div>
As one might expect, there is a lull in postings on the weekend. So, if you want longer exposure on the front page of R-bloggers, then you might want to post later in the week to lessen the competition!</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
I fit a GAMM (family="poisson") to the data with a cyclical spline term for day of the week ("wday") and another spline term for time (i.e. numeric conversion of date) to further explore the trends (with help from a <a href="http://www.fromthebottomoftheheap.net/2014/05/09/modelling-seasonal-data-with-gam/">great post</a> on using GAMs with temporal data):</div>
<div style="text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ7gzbc-DHNthLlv1_VkpI8xA7bD4G-y8WBA-3y7y3jEE5jPIKyawz5tcBUAwyVyX5nEWiFDXQPU2-rkyfb5YlNpucKfMlwAUTkIakadjDMMmsepvPH9MdFrw_fQa2kh5Q06oP1Mna4uGd/s1600/rbloggers_gam_terms.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ7gzbc-DHNthLlv1_VkpI8xA7bD4G-y8WBA-3y7y3jEE5jPIKyawz5tcBUAwyVyX5nEWiFDXQPU2-rkyfb5YlNpucKfMlwAUTkIakadjDMMmsepvPH9MdFrw_fQa2kh5Q06oP1Mna4uGd/s320/rbloggers_gam_terms.png" width="320" /></a></div>
Both terms are significant, and you can better visualize the long-term trend. Here is a plot of the model prediction:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7Hunf5a5l2TBetFGTcao7_sWv6M48gRd6e35TxX5PLGVEhGctK8cghG7nReNFIW6ygReKgyocO77xSWPFnbGDRtK_9KC7eu88NCEd2Rc3cQhaGCMTNS7CZIVbht6N_hIRubAHubDa79sd/s1600/rbloggers_posts_per_day.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7Hunf5a5l2TBetFGTcao7_sWv6M48gRd6e35TxX5PLGVEhGctK8cghG7nReNFIW6ygReKgyocO77xSWPFnbGDRtK_9KC7eu88NCEd2Rc3cQhaGCMTNS7CZIVbht6N_hIRubAHubDa79sd/s320/rbloggers_posts_per_day.png" width="320" /></a></div>
The day of the week oscillations are strong enough to result in what looks like a band of predicted values - I added a line for a model that only contains the long-term trend (in red) for easier viewing. A zoom in on a smaller subset of the data reveals the weekly oscillations:<br />
<br />
<div style="text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXbGxaw9uFbdKp9vHiQkany81qs0MZotE1ZSfATaD5FgqG58CY6j_SAgFfy47I_lDcotLi9Uf3NcKklO3Gyj-qg2KnoiHugeDCxY1AKkyg7L7GZFBe6AxSd_ar0FX4bMY6b0ODaywJpv54/s1600/rbloggers_posts_per_day_short.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXbGxaw9uFbdKp9vHiQkany81qs0MZotE1ZSfATaD5FgqG58CY6j_SAgFfy47I_lDcotLi9Uf3NcKklO3Gyj-qg2KnoiHugeDCxY1AKkyg7L7GZFBe6AxSd_ar0FX4bMY6b0ODaywJpv54/s320/rbloggers_posts_per_day_short.png" width="320" /></a> </div>
The long-term trend indicates that a decline in the number of posts started in 2013, and continues to to the present. I binned the data by year quarter and found the same:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhANZatVQqwViV1ysFef0FRRlT1ya8A4Oj716HB-AWYkZHdCzEDa4G1HTQ8RRO1ZSmSiU2suSvmLcU9BdflUROBgM_8p5LjDRr4QmjWd1pvgT9irZa9DNn8KWD-mSsP_-WZhNUNLVot6kN5/s1600/rbloggers_quarter_stats.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhANZatVQqwViV1ysFef0FRRlT1ya8A4Oj716HB-AWYkZHdCzEDa4G1HTQ8RRO1ZSmSiU2suSvmLcU9BdflUROBgM_8p5LjDRr4QmjWd1pvgT9irZa9DNn8KWD-mSsP_-WZhNUNLVot6kN5/s640/rbloggers_quarter_stats.png" width="640" /></a></div>
This decline seems to be related to the number of authors that are regularly posting, which is also declining at a similar rate. The correlation is strong enough that we can estimate an average of 3.7 postings / author / quarter (or, ~1 posting / author / month). So, what's going on? My hunch is that, while the use of R (and probably the number of blogs) continues to grow (<a href="http://blog.revolutionanalytics.com/2013/12/r-and-python.html">link1</a>, <a href="http://r4stats.com/2014/04/07/r-continues-its-rapid-growth/">link2</a>), R-bloggers doesn't seem to be accepting all blogs that apply to have their feeds aggregated (and may even be actively removing some; e.g. this blog has unfortunately been dropped without explanation). Maybe the time invested is maxed out at ~ 7 posts / day?<br />
<br />
All in all, I was pleasantly surprised how easy web scraping can be. The code to reproduce this exercise can be found below (be warned that the web scraping loop took about 30 min to gather data from 620 webpages).<br />
<br />
<b>To reproduce the example (</b>required packages: rvest (CRAN), sinkr (<a href="https://github.com/marchtaylor/sinkr">GitHub</a>)):<br />
<a name='more'></a><div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;">#library(devtools)</span>
<span style="color: #666666; font-style: italic;">#install_github("marchtaylor/sinkr")</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span>rvest<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span>sinkr<span style="color: #009900;">)</span>
page1_path <- <span style="color: blue;">"http://www.r-bloggers.com/page/1/"</span>
tmp <- html<span style="color: #009900;">(</span>page1_path<span style="color: #009900;">)</span>
tmp <- html_node<span style="color: #009900;">(</span>tmp<span style="color: #339933;">,</span> <span style="color: blue;">".last"</span><span style="color: #009900;">)</span>
npages <- <a href="http://inside-r.org/r-doc/base/as.numeric"><span style="color: #003399; font-weight: bold;">as.numeric</span></a><span style="color: #009900;">(</span>html_text<span style="color: #009900;">(</span>tmp<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
npages
<span style="color: #666666; font-style: italic;">#npages=10</span>
dates <- <a href="http://inside-r.org/r-doc/base/vector"><span style="color: #003399; font-weight: bold;">vector</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mode"><span style="color: #003399; font-weight: bold;">mode</span></a>=<span style="color: blue;">"list"</span><span style="color: #339933;">,</span> npages<span style="color: #009900;">)</span>
authors <- <a href="http://inside-r.org/r-doc/base/vector"><span style="color: #003399; font-weight: bold;">vector</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mode"><span style="color: #003399; font-weight: bold;">mode</span></a>=<span style="color: blue;">"list"</span><span style="color: #339933;">,</span> npages<span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <span style="color: #cc66cc;">1</span>:npages<span style="color: #009900;">)</span><span style="color: #009900;">{</span>
pagei_path <- <a href="http://inside-r.org/r-doc/base/gsub"><span style="color: #003399; font-weight: bold;">gsub</span></a><span style="color: #009900;">(</span><span style="color: blue;">"page/1/"</span><span style="color: #339933;">,</span> paste0<span style="color: #009900;">(</span><span style="color: blue;">"page/"</span><span style="color: #339933;">,</span>i<span style="color: #339933;">,</span> <span style="color: blue;">"/"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> page1_path<span style="color: #009900;">)</span>
HTML <- html<span style="color: #009900;">(</span>pagei_path<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># dates</span>
tmp <- html_nodes<span style="color: #009900;">(</span>HTML<span style="color: #339933;">,</span> <span style="color: blue;">".date"</span><span style="color: #009900;">)</span>
tmp <- html_text<span style="color: #009900;">(</span>tmp<span style="color: #009900;">)</span>
tmp <- <a href="http://inside-r.org/r-doc/base/as.POSIXct"><span style="color: #003399; font-weight: bold;">as.POSIXct</span></a><span style="color: #009900;">(</span>strptime<span style="color: #009900;">(</span>tmp<span style="color: #339933;">,</span> tz=<span style="color: blue;">"GMT"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/format"><span style="color: #003399; font-weight: bold;">format</span></a>=<span style="color: blue;">"%B %d, %Y"</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
dates<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span> <- tmp
<span style="color: #666666; font-style: italic;"># authors</span>
tmp <- html_nodes<span style="color: #009900;">(</span>HTML<span style="color: #339933;">,</span> <span style="color: blue;">".meta"</span><span style="color: #009900;">)</span>
tmp <- html_text<span style="color: #009900;">(</span>tmp<span style="color: #009900;">)</span>
tmp <- <a href="http://inside-r.org/r-doc/base/substring"><span style="color: #003399; font-weight: bold;">substring</span></a><span style="color: #009900;">(</span>tmp<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/regexpr"><span style="color: #003399; font-weight: bold;">regexpr</span></a><span style="color: #009900;">(</span><span style="color: blue;">"By "</span><span style="color: #339933;">,</span> tmp<span style="color: #009900;">)</span>+<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
authors<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span> <- tmp
<a href="http://inside-r.org/r-doc/base/print"><span style="color: #003399; font-weight: bold;">print</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/paste"><span style="color: #003399; font-weight: bold;">paste</span></a><span style="color: #009900;">(</span>i<span style="color: #339933;">,</span> <span style="color: blue;">"of"</span><span style="color: #339933;">,</span> npages<span style="color: #339933;">,</span> <span style="color: blue;">"finished"</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<span style="color: #666666; font-style: italic;">#save(dates, file="dates.Rdata")</span>
<span style="color: #666666; font-style: italic;">#save(authors, file="authors.Rdata")</span>
<span style="color: #666666; font-style: italic;">#load("dates.Rdata"); load("authors.Rdata")</span>
<span style="color: #666666; font-style: italic;">### By day</span>
<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a> <- <a href="http://inside-r.org/r-doc/base/data.frame"><span style="color: #003399; font-weight: bold;">data.frame</span></a><span style="color: #009900;">(</span>
<a href="http://inside-r.org/r-doc/base/date"><span style="color: #003399; font-weight: bold;">date</span></a>=<a href="http://inside-r.org/r-doc/base/as.Date"><span style="color: #003399; font-weight: bold;">as.Date</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/as.POSIXct"><span style="color: #003399; font-weight: bold;">as.POSIXct</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/unlist"><span style="color: #003399; font-weight: bold;">unlist</span></a><span style="color: #009900;">(</span>dates<span style="color: #009900;">)</span><span style="color: #339933;">,</span> origin=<span style="color: blue;">"1970-01-01"</span><span style="color: #339933;">,</span> tz=<span style="color: blue;">"GMT"</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
author=<a href="http://inside-r.org/r-doc/base/unlist"><span style="color: #003399; font-weight: bold;">unlist</span></a><span style="color: #009900;">(</span>authors<span style="color: #009900;">)</span><span style="color: #339933;">,</span>
npost=<span style="color: #cc66cc;">1</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/utils/head"><span style="color: #003399; font-weight: bold;">head</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">)</span>
daydf <- <a href="http://inside-r.org/r-doc/stats/aggregate"><span style="color: #003399; font-weight: bold;">aggregate</span></a><span style="color: #009900;">(</span>npost ~ <a href="http://inside-r.org/r-doc/base/date"><span style="color: #003399; font-weight: bold;">date</span></a><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">)</span>
daydf$time <- <a href="http://inside-r.org/r-doc/base/as.numeric"><span style="color: #003399; font-weight: bold;">as.numeric</span></a><span style="color: #009900;">(</span>daydf$date<span style="color: #009900;">)</span>
daydf$wday <- <a href="http://inside-r.org/r-doc/base/as.POSIXlt"><span style="color: #003399; font-weight: bold;">as.POSIXlt</span></a><span style="color: #009900;">(</span>daydf$date<span style="color: #009900;">)</span>$wday + <span style="color: #cc66cc;">1</span>
<a href="http://inside-r.org/r-doc/utils/head"><span style="color: #003399; font-weight: bold;">head</span></a><span style="color: #009900;">(</span>daydf<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"rbloggers_raw_day.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> mgp=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=-<span style="color: #cc66cc;">0.25</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>npost ~ <a href="http://inside-r.org/r-doc/base/date"><span style="color: #003399; font-weight: bold;">date</span></a><span style="color: #339933;">,</span> daydf<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"p"</span><span style="color: #339933;">,</span> main=<span style="color: blue;">"R-bloggers posts per day"</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Number of posts"</span><span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> cex=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.3</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"rbloggers_boxplot_wday.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">6</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">6</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> mgp=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=-<span style="color: #cc66cc;">0.25</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/boxplot"><span style="color: #003399; font-weight: bold;">boxplot</span></a><span style="color: #009900;">(</span>npost ~ wday<span style="color: #339933;">,</span> daydf<span style="color: #339933;">,</span> main=<span style="color: blue;">"R-bloggers posts per weekday"</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Number of posts"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span> outline=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #339933;">,</span> xaxt=<span style="color: blue;">"n"</span> <span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/axis"><span style="color: #003399; font-weight: bold;">axis</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> at=<span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">7</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Sunday","Monday"</span><span style="color: #339933;">,</span><span style="color: blue;">"Tuesday"</span><span style="color: #339933;">,</span><span style="color: blue;">"Wednesday"</span><span style="color: #339933;">,</span><span style="color: blue;">"Thursday"</span><span style="color: #339933;">,</span><span style="color: blue;">"Friday"</span><span style="color: #339933;">,</span><span style="color: blue;">"Saturday"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> las=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">### Model</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/mgcv/mgcv"><span style="color: #003399; font-weight: bold;">mgcv</span></a><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># wday + time</span>
fit0 <- <a href="http://inside-r.org/r-doc/mgcv/gamm"><span style="color: #003399; font-weight: bold;">gamm</span></a><span style="color: #009900;">(</span>npost ~ <a href="http://inside-r.org/r-doc/mgcv/s"><span style="color: #003399; font-weight: bold;">s</span></a><span style="color: #009900;">(</span>wday<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/splines/bs"><span style="color: #003399; font-weight: bold;">bs</span></a> = <span style="color: blue;">"cc"</span><span style="color: #339933;">,</span> k = <span style="color: #cc66cc;">7</span><span style="color: #009900;">)</span> + <a href="http://inside-r.org/r-doc/mgcv/s"><span style="color: #003399; font-weight: bold;">s</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/time"><span style="color: #003399; font-weight: bold;">time</span></a><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/utils/data"><span style="color: #003399; font-weight: bold;">data</span></a>=daydf<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/family"><span style="color: #003399; font-weight: bold;">family</span></a>=<a href="http://inside-r.org/r-doc/stats/poisson"><span style="color: #003399; font-weight: bold;">poisson</span></a><span style="color: #339933;">,</span>
knots=<a href="http://inside-r.org/r-doc/base/list"><span style="color: #003399; font-weight: bold;">list</span></a><span style="color: #009900;">(</span>wday=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">7.5</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/summary"><span style="color: #003399; font-weight: bold;">summary</span></a><span style="color: #009900;">(</span>fit0$gam<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"rbloggers_gam_terms.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">7</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> mgp=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=-<span style="color: #cc66cc;">0.25</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>fit0$gam<span style="color: #339933;">,</span> pages=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>fit0$gam<span style="color: #339933;">,</span> select=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>fit0$gam<span style="color: #339933;">,</span> select=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
daydf$pred0 <- <a href="http://inside-r.org/r-doc/stats/predict"><span style="color: #003399; font-weight: bold;">predict</span></a><span style="color: #009900;">(</span>fit0$gam<span style="color: #339933;">,</span> type=<span style="color: blue;">"response"</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># time only</span>
fit1 <- <a href="http://inside-r.org/r-doc/mgcv/gamm"><span style="color: #003399; font-weight: bold;">gamm</span></a><span style="color: #009900;">(</span>npost ~ <a href="http://inside-r.org/r-doc/mgcv/s"><span style="color: #003399; font-weight: bold;">s</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/time"><span style="color: #003399; font-weight: bold;">time</span></a><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/utils/data"><span style="color: #003399; font-weight: bold;">data</span></a>=daydf<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/family"><span style="color: #003399; font-weight: bold;">family</span></a>=<a href="http://inside-r.org/r-doc/stats/poisson"><span style="color: #003399; font-weight: bold;">poisson</span></a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/summary"><span style="color: #003399; font-weight: bold;">summary</span></a><span style="color: #009900;">(</span>fit1$gam<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>fit1$gam<span style="color: #339933;">,</span> pages=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
daydf$pred1 <- <a href="http://inside-r.org/r-doc/stats/predict"><span style="color: #003399; font-weight: bold;">predict</span></a><span style="color: #009900;">(</span>fit1$gam<span style="color: #339933;">,</span> type=<span style="color: blue;">"response"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/stats/AIC"><span style="color: #003399; font-weight: bold;">AIC</span></a><span style="color: #009900;">(</span>fit0$lme<span style="color: #339933;">,</span> fit1$lme<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># plot</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"rbloggers_posts_per_day.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> mgp=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=-<span style="color: #cc66cc;">0.25</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>npost ~ <a href="http://inside-r.org/r-doc/base/date"><span style="color: #003399; font-weight: bold;">date</span></a><span style="color: #339933;">,</span> daydf<span style="color: #009900;">[</span><span style="color: #339933;">,</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"p"</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Number of posts"</span><span style="color: #339933;">,</span> main=<span style="color: blue;">"R-bloggers posts per day"</span><span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> cex=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.3</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> ylim=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">30</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>pred0 ~ <a href="http://inside-r.org/r-doc/base/date"><span style="color: #003399; font-weight: bold;">date</span></a><span style="color: #339933;">,</span> daydf<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>pred1 ~ <a href="http://inside-r.org/r-doc/base/date"><span style="color: #003399; font-weight: bold;">date</span></a><span style="color: #339933;">,</span> daydf<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"topleft"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"data"</span><span style="color: #339933;">,</span><span style="color: blue;">"s(wday)+s(time)"</span><span style="color: #339933;">,</span><span style="color: blue;">"s(time)"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
pch=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span><span style="color: black; font-weight: bold;">NA</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> lty=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> lwd=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.3</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"rbloggers_posts_per_day_short.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> mgp=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=-<span style="color: #cc66cc;">0.25</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>npost ~ <a href="http://inside-r.org/r-doc/base/date"><span style="color: #003399; font-weight: bold;">date</span></a><span style="color: #339933;">,</span> daydf<span style="color: #009900;">[</span><span style="color: #cc66cc;">300</span>:<span style="color: #cc66cc;">600</span><span style="color: #339933;">,</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"p"</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Number of posts"</span><span style="color: #339933;">,</span> main=<span style="color: blue;">"R-bloggers posts per day"</span><span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> cex=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>pred0 ~ <a href="http://inside-r.org/r-doc/base/date"><span style="color: #003399; font-weight: bold;">date</span></a><span style="color: #339933;">,</span> daydf<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>pred1 ~ <a href="http://inside-r.org/r-doc/base/date"><span style="color: #003399; font-weight: bold;">date</span></a><span style="color: #339933;">,</span> daydf<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"topleft"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"data"</span><span style="color: #339933;">,</span><span style="color: blue;">"s(wday)+s(time)"</span><span style="color: #339933;">,</span><span style="color: blue;">"s(time)"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
pch=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span><span style="color: black; font-weight: bold;">NA</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> lty=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> lwd=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># residuals</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>daydf$time<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/resid"><span style="color: #003399; font-weight: bold;">resid</span></a><span style="color: #009900;">(</span>fit0$gam<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>daydf$wday<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/resid"><span style="color: #003399; font-weight: bold;">resid</span></a><span style="color: #009900;">(</span>fit0$gam<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">### Quarters</span>
xint <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/as.Date"><span style="color: #003399; font-weight: bold;">as.Date</span></a><span style="color: #009900;">(</span><span style="color: blue;">"2005-01-01"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/as.Date"><span style="color: #003399; font-weight: bold;">as.Date</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/Sys.time"><span style="color: #003399; font-weight: bold;">Sys.time</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/by"><span style="color: #003399; font-weight: bold;">by</span></a>=<span style="color: blue;">"3 months"</span><span style="color: #009900;">)</span>
xmid <- xint<span style="color: #009900;">[</span>-<a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>xint<span style="color: #009900;">)</span><span style="color: #009900;">]</span>+<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/diff"><span style="color: #003399; font-weight: bold;">diff</span></a><span style="color: #009900;">(</span>xint<span style="color: #009900;">)</span>/<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
quartdf <- <a href="http://inside-r.org/r-doc/base/data.frame"><span style="color: #003399; font-weight: bold;">data.frame</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/date"><span style="color: #003399; font-weight: bold;">date</span></a>=xmid<span style="color: #009900;">)</span>
quartdf$nauthor <- <span style="color: black; font-weight: bold;">NaN</span>
quartdf$npost <- <span style="color: black; font-weight: bold;">NaN</span>
xbin <- <a href="http://inside-r.org/r-doc/base/cut"><span style="color: #003399; font-weight: bold;">cut</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$date<span style="color: #339933;">,</span> xint<span style="color: #009900;">)</span>
rownum <- <a href="http://inside-r.org/r-doc/base/match"><span style="color: #003399; font-weight: bold;">match</span></a><span style="color: #009900;">(</span>xbin<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/levels"><span style="color: #003399; font-weight: bold;">levels</span></a><span style="color: #009900;">(</span>xbin<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>quartdf$date<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
hits <- <a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>rownum == i<span style="color: #009900;">)</span>
quartdf$nauthor<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/unique"><span style="color: #003399; font-weight: bold;">unique</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$author<span style="color: #009900;">[</span>hits<span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
quartdf$npost<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$npost<span style="color: #009900;">[</span>hits<span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"rbloggers_quarter_stats.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/family"><span style="color: #003399; font-weight: bold;">family</span></a>=<span style="color: blue;">"Arial"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> mgp=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=-<span style="color: #cc66cc;">0.25</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>mfcol=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>nauthor ~ <a href="http://inside-r.org/r-doc/base/date"><span style="color: #003399; font-weight: bold;">date</span></a><span style="color: #339933;">,</span> quartdf<span style="color: #339933;">,</span> xlab=<span style="color: blue;">""</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Unique authors"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> cex=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>npost ~ <a href="http://inside-r.org/r-doc/base/date"><span style="color: #003399; font-weight: bold;">date</span></a><span style="color: #339933;">,</span> quartdf<span style="color: #339933;">,</span> xlab=<span style="color: blue;">""</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Number of posts"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> cex=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>npost ~ nauthor<span style="color: #339933;">,</span> quartdf<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #339933;">,</span> xlab=<span style="color: blue;">"Unique authors"</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Number of posts"</span><span style="color: #009900;">)</span>
fit <- <a href="http://inside-r.org/r-doc/stats/lm"><span style="color: #003399; font-weight: bold;">lm</span></a><span style="color: #009900;">(</span>npost ~ nauthor -<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> quartdf<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span>fit<span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.95</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<a href="http://inside-r.org/r-doc/base/bquote"><span style="color: #003399; font-weight: bold;">bquote</span></a><span style="color: #009900;">(</span>
<a href="http://inside-r.org/r-doc/grDevices/italic"><span style="color: #003399; font-weight: bold;">italic</span></a><span style="color: #009900;">(</span>npost<span style="color: #009900;">)</span> == .<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sprintf"><span style="color: #003399; font-weight: bold;">sprintf</span></a><span style="color: #009900;">(</span><span style="color: blue;">"%0.2f"</span><span style="color: #339933;">,</span> <span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/coef"><span style="color: #003399; font-weight: bold;">coef</span></a><span style="color: #009900;">(</span>fit<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>~<span style="color: blue;">"*"</span>~<a href="http://inside-r.org/r-doc/grDevices/italic"><span style="color: #003399; font-weight: bold;">italic</span></a><span style="color: #009900;">(</span>nauthor<span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.85</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<a href="http://inside-r.org/r-doc/base/bquote"><span style="color: #003399; font-weight: bold;">bquote</span></a><span style="color: #009900;">(</span> .<span style="color: #009900;">(</span><span style="color: blue;">"adj."</span><span style="color: #009900;">)</span>~bolditalic<span style="color: #009900;">(</span>R<span style="color: #009900;">)</span>^<span style="color: #cc66cc;">2</span> == .<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/round"><span style="color: #003399; font-weight: bold;">round</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/summary"><span style="color: #003399; font-weight: bold;">summary</span></a><span style="color: #009900;">(</span>fit<span style="color: #009900;">)</span>$adj.r.squared<span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"R-bloggers posts by quarter"</span><span style="color: #339933;">,</span> font=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> cex=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=-<span style="color: #cc66cc;">1.5</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/outer"><span style="color: #003399; font-weight: bold;">outer</span></a>=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com2tag:blogger.com,1999:blog-6424211413492597169.post-40815488274809422332015-05-12T21:42:00.000+02:002015-05-12T21:42:00.622+02:00Updated getcolors function<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghhdLfNesOORLsTB1HuFZn0RR2Ff0u3vCsK57z7mFyYqvNWsNZESnHVqdw7HqSUU1lexFwV_URJ6iMKqpb12TSxszp_geoOs0smVT1UribafkxT_FX_UFZB_E31Tp_iMQvd4klBN_zRK_C/s1600/Screen+Shot+2015-05-12+at+18.21.36.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="282" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghhdLfNesOORLsTB1HuFZn0RR2Ff0u3vCsK57z7mFyYqvNWsNZESnHVqdw7HqSUU1lexFwV_URJ6iMKqpb12TSxszp_geoOs0smVT1UribafkxT_FX_UFZB_E31Tp_iMQvd4klBN_zRK_C/s320/Screen+Shot+2015-05-12+at+18.21.36.png" width="320" /></a></div>
There is an updated version of the <span style="font-family: "Courier New",Courier,monospace;">getcolors</span> function available in the <a href="https://github.com/marchtaylor/sinkr">sinkr</a> package, called <span style="font-family: "Courier New",Courier,monospace;">getcolors2</span>. The <a href="http://menugget.blogspot.de/2013/01/choosing-colors-visually-with-getcolors.html">previous version</a> allowed for the visual selection of colors from a palette of 216 colors. This updated version uses a more natural color palette with a rainbow gradient on the x-axis and lightness on the y-axis. Following a series of color selections via clicks, the function returns the vector of chosen colors that can later be used in a plot: <br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCkbiCc9WXjtb_JvPbHzqVPrzHRG1VIPDCHjSXsRRjnRao-ZEhxTzVTvrbZJgqFNjkOIz6zfzms1w0FK6p3YLxmueA9yVIwkmBaelDDtYCMLP5eNlD2F-SAC8sWt4_mh6FAuSmWBMrlfuZ/s1600/Screen+Shot+2015-05-12+at+18.23.02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="269" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCkbiCc9WXjtb_JvPbHzqVPrzHRG1VIPDCHjSXsRRjnRao-ZEhxTzVTvrbZJgqFNjkOIz6zfzms1w0FK6p3YLxmueA9yVIwkmBaelDDtYCMLP5eNlD2F-SAC8sWt4_mh6FAuSmWBMrlfuZ/s320/Screen+Shot+2015-05-12+at+18.23.02.png" width="320" /></a></div>
<b>Example (from <span style="font-family: "Courier New",Courier,monospace;">getcolors2</span> help)</b>:<br />
<a name='more'></a><br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;">#library(devtools)</span>
<span style="color: #666666; font-style: italic;">#install_github("marchtaylor/sinkr")</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span>sinkr<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Make synthetic data</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
n <- <span style="color: #cc66cc;">100</span>
x <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>n<span style="color: #009900;">)</span>
y1 <- <a href="http://inside-r.org/r-doc/base/cumsum"><span style="color: #003399; font-weight: bold;">cumsum</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/rnorm"><span style="color: #003399; font-weight: bold;">rnorm</span></a><span style="color: #009900;">(</span>n<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
y2 <- <a href="http://inside-r.org/r-doc/base/cumsum"><span style="color: #003399; font-weight: bold;">cumsum</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/rnorm"><span style="color: #003399; font-weight: bold;">rnorm</span></a><span style="color: #009900;">(</span>n<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
y3 <- <a href="http://inside-r.org/r-doc/base/cumsum"><span style="color: #003399; font-weight: bold;">cumsum</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/rnorm"><span style="color: #003399; font-weight: bold;">rnorm</span></a><span style="color: #009900;">(</span>n<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
y4 <- <a href="http://inside-r.org/r-doc/base/cumsum"><span style="color: #003399; font-weight: bold;">cumsum</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/rnorm"><span style="color: #003399; font-weight: bold;">rnorm</span></a><span style="color: #009900;">(</span>n<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
ylim <- <a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>y1<span style="color: #339933;">,</span>y2<span style="color: #339933;">,</span>y3<span style="color: #339933;">,</span>y4<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Select colors</span>
COLS <- getcolors2<span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Plot data with selected colors</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> y1<span style="color: #339933;">,</span> ylim=ylim<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=COLS<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">""</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> y2<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=COLS<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> y3<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=COLS<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> y4<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=COLS<span style="color: #009900;">[</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"topleft"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/paste"><span style="color: #003399; font-weight: bold;">paste</span></a><span style="color: #009900;">(</span><span style="color: blue;">"y"</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> sep=<span style="color: blue;">""</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=COLS<span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com0tag:blogger.com,1999:blog-6424211413492597169.post-82619582484400000252015-04-08T14:18:00.000+02:002015-04-08T16:31:28.137+02:00Map projection cheat sheet<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb37pxyAJQ4-DcYybKKCvYQ7LuH5RaiksoAR8cEiSEdiYe6QooDFGyY583NreFCFk4UPKGvb6fJj0jGbSaNve_Zg7U6FsU7YFy4NS2uG4ijurN-US19mON79e2Xq92OLD3hw9FYgLZS4Uz/s1600/mapproj_cheatsheet.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb37pxyAJQ4-DcYybKKCvYQ7LuH5RaiksoAR8cEiSEdiYe6QooDFGyY583NreFCFk4UPKGvb6fJj0jGbSaNve_Zg7U6FsU7YFy4NS2uG4ijurN-US19mON79e2Xq92OLD3hw9FYgLZS4Uz/s1600/mapproj_cheatsheet.png" height="250" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Here's a cheat sheet for map projection settings for the <a href="http://www.inside-r.org/packages/cran/mapproj/docs/mapproject"><i>mapproject</i></a> function (<a href="http://cran.r-project.org/web/packages/mapproj/">mapproj</a> package). I've repeated the same general procedure for each map: 1. create blank world map, 2. project colored polygons, 3. overlay country boundaries. Some specifications were needed for individual map projections (i.e. different orientation, lat/lon limits, additional parameters). Most projections work well as long as the limits and orientation are valid - in a few cases country boundaries ('square' and 'hex') were wrapped incorrectly. I was unable to get the two spheroid projections working due to the escape character in their names ('sp\_mercator', 'sp\_albers') (<i>maybe someone has a suggestion here</i>?).<br />
<br />
In addition to the <a href="http://cran.r-project.org/web/packages/maps/">maps</a> and <a href="http://cran.r-project.org/web/packages/mapproj/">mapproj</a> packages, the <a href="https://github.com/marchtaylor/sinkr">sinkr</a> package is also used for the calculation of global distance, value to color conversion, and polygon creation. <br />
<br />
<br />
<b>Script to reproduce </b>(high resolution png and pdf versions)<b>:</b><br />
<a name='more'></a><div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;"># required packages =======================================</span>
<span style="color: #666666; font-style: italic;"># library(devtools); install_github("marchtaylor/sinkr") # sinkr package installation</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span>sinkr<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/maps">maps</a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mapproj">mapproj</a><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># make data ===============================================</span>
deg <- <span style="color: #cc66cc;">10</span>
x <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">180</span>+deg/<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">180</span>-deg/<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/by"><span style="color: #003399; font-weight: bold;">by</span></a>=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
y <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">90</span>+deg/<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">90</span>-deg/<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/by"><span style="color: #003399; font-weight: bold;">by</span></a>=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
grd <- <a href="http://inside-r.org/r-doc/base/expand.grid"><span style="color: #003399; font-weight: bold;">expand.grid</span></a><span style="color: #009900;">(</span>x=x<span style="color: #339933;">,</span> y=y<span style="color: #009900;">)</span>
grd$z <- earthDist<span style="color: #009900;">(</span><span style="color: #cc66cc;">40</span>+<span style="color: #009900;">(</span><span style="color: #cc66cc;">38</span>/<span style="color: #cc66cc;">60</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">11</span>+<span style="color: #009900;">(</span><span style="color: #cc66cc;">10</span>/<span style="color: #cc66cc;">60</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> grd$x<span style="color: #339933;">,</span> grd$y<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># distance to Hadar, Ethiopia [km]</span>
mat <- <a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span>grd$z<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>y<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span>y<span style="color: #339933;">,</span> mat<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=jetPal<span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
POLY <- matrixPoly<span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> y<span style="color: #339933;">,</span> z=mat<span style="color: #009900;">)</span>
PAL <- <a href="http://inside-r.org/r-doc/grDevices/colorRampPalette"><span style="color: #003399; font-weight: bold;">colorRampPalette</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> bias=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
COLLEV <- PAL<span style="color: #009900;">(</span><span style="color: #cc66cc;">31</span><span style="color: #009900;">)</span>
ZLIM <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a><span style="color: #009900;">(</span>mat<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
COL <- val2col<span style="color: #009900;">(</span>mat<span style="color: #339933;">,</span> zlim=ZLIM<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=COLLEV<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># create projection settings ==============================</span>
PROJ <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>
<span style="color: blue;">"mercator"</span><span style="color: #339933;">,</span><span style="color: blue;">"sinusoidal"</span><span style="color: #339933;">,</span><span style="color: blue;">"cylequalarea"</span><span style="color: #339933;">,</span><span style="color: blue;">"cylindrical"</span><span style="color: #339933;">,</span><span style="color: blue;">"rectangular"</span><span style="color: #339933;">,</span><span style="color: blue;">"gall"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"mollweide"</span><span style="color: #339933;">,</span><span style="color: blue;">"gilbert"</span><span style="color: #339933;">,</span><span style="color: blue;">"azequidistant"</span><span style="color: #339933;">,</span><span style="color: blue;">"azequalarea"</span><span style="color: #339933;">,</span><span style="color: blue;">"gnomonic"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"perspective"</span><span style="color: #339933;">,</span><span style="color: blue;">"orthographic"</span><span style="color: #339933;">,</span><span style="color: blue;">"stereographic"</span><span style="color: #339933;">,</span><span style="color: blue;">"laue"</span><span style="color: #339933;">,</span><span style="color: blue;">"fisheye"</span><span style="color: #339933;">,</span><span style="color: blue;">"newyorker"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"conic"</span><span style="color: #339933;">,</span><span style="color: blue;">"simpleconic"</span><span style="color: #339933;">,</span><span style="color: blue;">"lambert"</span><span style="color: #339933;">,</span><span style="color: blue;">"albers"</span><span style="color: #339933;">,</span><span style="color: blue;">"bonne"</span><span style="color: #339933;">,</span><span style="color: blue;">"polyconic"</span><span style="color: #339933;">,</span><span style="color: blue;">"aitoff"</span><span style="color: #339933;">,</span><span style="color: blue;">"lagrange"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"bicentric"</span><span style="color: #339933;">,</span><span style="color: blue;">"elliptic"</span><span style="color: #339933;">,</span><span style="color: blue;">"globular"</span><span style="color: #339933;">,</span><span style="color: blue;">"vandergrinten"</span><span style="color: #339933;">,</span><span style="color: blue;">"eisenlohr"</span><span style="color: #339933;">,</span><span style="color: blue;">"guyou"</span><span style="color: #339933;">,</span><span style="color: blue;">"square"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"tetra"</span><span style="color: #339933;">,</span><span style="color: blue;">"hex"</span><span style="color: #339933;">,</span><span style="color: blue;">"harrison"</span><span style="color: #339933;">,</span><span style="color: blue;">"trapezoidal"</span><span style="color: #339933;">,</span><span style="color: blue;">"lune"</span><span style="color: #339933;">,</span><span style="color: blue;">"mecca"</span><span style="color: #339933;">,</span><span style="color: blue;">"homing"</span>
<span style="color: #009900;">)</span>
PARAM <- <a href="http://inside-r.org/r-doc/base/vector"><span style="color: #003399; font-weight: bold;">vector</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mode"><span style="color: #003399; font-weight: bold;">mode</span></a>=<span style="color: blue;">"list"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>PROJ<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
ORIENT <- <a href="http://inside-r.org/r-doc/base/lapply"><span style="color: #003399; font-weight: bold;">lapply</span></a><span style="color: #009900;">(</span>PARAM<span style="color: #339933;">,</span> FUN=<a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span><span style="color: #009900;">{</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">90</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #009900;">}</span><span style="color: #009900;">)</span>
XLIM <- <a href="http://inside-r.org/r-doc/base/lapply"><span style="color: #003399; font-weight: bold;">lapply</span></a><span style="color: #009900;">(</span>PARAM<span style="color: #339933;">,</span> FUN=<a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span><span style="color: #009900;">{</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">180</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">180</span><span style="color: #009900;">)</span><span style="color: #009900;">}</span><span style="color: #009900;">)</span>
YLIM <- <a href="http://inside-r.org/r-doc/base/lapply"><span style="color: #003399; font-weight: bold;">lapply</span></a><span style="color: #009900;">(</span>PARAM<span style="color: #339933;">,</span> FUN=<a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span><span style="color: #009900;">{</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">90</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">90</span><span style="color: #009900;">)</span><span style="color: #009900;">}</span><span style="color: #009900;">)</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"cylequalarea"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<span style="color: #cc66cc;">0</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"rectangular"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<span style="color: #cc66cc;">0</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"gall"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<span style="color: #cc66cc;">0</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"perspective"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span> ORIENT<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">45</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"orthographic"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> ORIENT<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">45</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"azequalarea"</span><span style="color: #009900;">)</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"gnomonic"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> ORIENT<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> XLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">50</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> YLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">50</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"laue"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> ORIENT<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">45</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> XLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">50</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> YLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">50</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"fisheye"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<span style="color: #cc66cc;">1.5</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"newyorker"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<span style="color: #cc66cc;">10</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"conic"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<span style="color: #cc66cc;">45</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"simpleconic"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">30</span><span style="color: #339933;">,</span>-<span style="color: #cc66cc;">80</span><span style="color: #009900;">)</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"lambert"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">45</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">45</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> XLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">50</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> YLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">50</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"albers"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">45</span><span style="color: #339933;">,</span>-<span style="color: #cc66cc;">80</span><span style="color: #009900;">)</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"bonne"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<span style="color: #cc66cc;">0</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"bicentric"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<span style="color: #cc66cc;">0</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"elliptic"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<span style="color: #cc66cc;">0</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"tetra"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> ORIENT<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">45</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"harrison"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> ORIENT<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">45</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"trapezoidal"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">45</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> XLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">50</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> YLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">50</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"lune"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> ORIENT<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> XLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">50</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> YLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">50</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"mecca"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> XLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">50</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> YLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">50</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span>
tmp=<a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>PROJ==<span style="color: blue;">"homing"</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span> XLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">50</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span> YLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>tmp<span style="color: #009900;">]</span><span style="color: #009900;">]</span>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">50</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># map projection testing ==================================</span>
i <- tmp
map<span style="color: #009900;">(</span><span style="color: blue;">"world"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/proj"><span style="color: #003399; font-weight: bold;">proj</span></a>=PROJ<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a>=PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> orient=ORIENT<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> xlim=XLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> ylim=YLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>j <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>POLY<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
<a href="http://inside-r.org/r-doc/graphics/polygon"><span style="color: #003399; font-weight: bold;">polygon</span></a><span style="color: #009900;">(</span>mapproject<span style="color: #009900;">(</span>POLY<span style="color: #009900;">[</span><span style="color: #009900;">[</span>j<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> border=<span style="color: blue;">"white"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=COL<span style="color: #009900;">[</span>j<span style="color: #009900;">]</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
map<span style="color: #009900;">(</span><span style="color: blue;">"world"</span><span style="color: #339933;">,</span> projection=<span style="color: blue;">""</span><span style="color: #339933;">,</span> add=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> wrap=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/box"><span style="color: #003399; font-weight: bold;">box</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span>PROJ<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># create cheat sheet (run from "pdf(..." down for pdf version ============</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"mapproj_cheatsheet.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">16</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">200</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/family"><span style="color: #003399; font-weight: bold;">family</span></a>=<span style="color: blue;">"Helvetica"</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#pdf("mapproj_cheatsheet.pdf", width=16, height=10, family="Helvetica")</span>
<a href="http://inside-r.org/r-doc/graphics/layout"><span style="color: #003399; font-weight: bold;">layout</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">40</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">8</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> widths=<a href="http://inside-r.org/r-doc/base/rep"><span style="color: #003399; font-weight: bold;">rep</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">8</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> heights=<a href="http://inside-r.org/r-doc/base/rep"><span style="color: #003399; font-weight: bold;">rep</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> respect=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>cex=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>PROJ<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
map<span style="color: #009900;">(</span><span style="color: blue;">"world"</span><span style="color: #339933;">,</span> projection=PROJ<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> parameters=PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> orientation=ORIENT<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> xlim=XLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> ylim=YLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
usr <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><span style="color: blue;">"usr"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/rect"><span style="color: #003399; font-weight: bold;">rect</span></a><span style="color: #009900;">(</span>usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"grey95"</span><span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>j <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>POLY<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
<a href="http://inside-r.org/r-doc/graphics/polygon"><span style="color: #003399; font-weight: bold;">polygon</span></a><span style="color: #009900;">(</span>mapproject<span style="color: #009900;">(</span>POLY<span style="color: #009900;">[</span><span style="color: #009900;">[</span>j<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> border=<span style="color: blue;">"white"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=COL<span style="color: #009900;">[</span>j<span style="color: #009900;">]</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
map<span style="color: #009900;">(</span><span style="color: blue;">"world"</span><span style="color: #339933;">,</span> projection=<span style="color: blue;">""</span><span style="color: #339933;">,</span> add=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> wrap=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"grey50"</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">0.2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/box"><span style="color: #003399; font-weight: bold;">box</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span>PROJ<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> font=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.2</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=
<a href="http://inside-r.org/r-doc/base/paste"><span style="color: #003399; font-weight: bold;">paste</span></a><span style="color: #009900;">(</span>
paste0<span style="color: #009900;">(</span><span style="color: blue;">"proj="</span><span style="color: #339933;">,</span> paste0<span style="color: #009900;">(</span><span style="color: blue;">"'"</span><span style="color: #339933;">,</span> PROJ<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <span style="color: blue;">"'"</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
paste0<span style="color: #009900;">(</span><span style="color: blue;">"par=c("</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/paste"><span style="color: #003399; font-weight: bold;">paste</span></a><span style="color: #009900;">(</span>PARAM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/nlme/collapse"><span style="color: #003399; font-weight: bold;">collapse</span></a>=<span style="color: blue;">","</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: blue;">")"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
paste0<span style="color: #009900;">(</span><span style="color: blue;">"orient=c("</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/paste"><span style="color: #003399; font-weight: bold;">paste</span></a><span style="color: #009900;">(</span>ORIENT<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/nlme/collapse"><span style="color: #003399; font-weight: bold;">collapse</span></a>=<span style="color: blue;">","</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: blue;">")"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
paste0<span style="color: #009900;">(</span><span style="color: blue;">"xlim=c("</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/paste"><span style="color: #003399; font-weight: bold;">paste</span></a><span style="color: #009900;">(</span>XLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/nlme/collapse"><span style="color: #003399; font-weight: bold;">collapse</span></a>=<span style="color: blue;">","</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: blue;">")"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
paste0<span style="color: #009900;">(</span><span style="color: blue;">"ylim=c("</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/paste"><span style="color: #003399; font-weight: bold;">paste</span></a><span style="color: #009900;">(</span>YLIM<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/nlme/collapse"><span style="color: #003399; font-weight: bold;">collapse</span></a>=<span style="color: blue;">","</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: blue;">")"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
sep=<span style="color: blue;">"<span style="color: #000099; font-weight: bold;">\n</span>"</span>
<span style="color: #009900;">)</span><span style="color: #339933;">,</span>
pos=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> cex=<span style="color: #cc66cc;">0.8</span><span style="color: #339933;">,</span> font=<span style="color: #cc66cc;">2</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/print"><span style="color: #003399; font-weight: bold;">print</span></a><span style="color: #009900;">(</span>i<span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">7</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> las=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
imageScale<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>mat<span style="color: #009900;">)</span><span style="color: #339933;">,</span> zlim=ZLIM<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=COLLEV<span style="color: #339933;">,</span> axis.pos=<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/box"><span style="color: #003399; font-weight: bold;">box</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>las=<span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Distance to <span style="color: #000099; font-weight: bold;">\n</span>Hadar, Ethiopia [km]"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> font=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />
<br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com2tag:blogger.com,1999:blog-6424211413492597169.post-64727562214679974442015-04-02T17:26:00.000+02:002015-04-03T12:20:25.054+02:00Add text using relative plot region coordinates<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUwV3DNjGkxHNSuuezN5BM5fcuJsFvACBFGWtjM7RpNLoB5LsAYHH4rl6LBoNCLSJzw6rgysjwvn7uJ_b8UuIuAicWAq_BNYg8MJpjnuqHEj-ZnDP9qxuAZhup1DrzE_G7H8uTnMfyp6Fm/s1600/reltext_ex1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUwV3DNjGkxHNSuuezN5BM5fcuJsFvACBFGWtjM7RpNLoB5LsAYHH4rl6LBoNCLSJzw6rgysjwvn7uJ_b8UuIuAicWAq_BNYg8MJpjnuqHEj-ZnDP9qxuAZhup1DrzE_G7H8uTnMfyp6Fm/s1600/reltext_ex1.png" height="320" width="320" /></a></div>
<br />
Here is a simple but useful function for adding text to a plot device using the relative <i>x</i>,<i> y</i> coordinates (<i>i.e. </i>between 0 and 1). I found myself programming these few lines repeatedly and decided to finally bundle it into a function, called <i>reltext()</i>. The function can be found below, and is also available in the <i>sinkr</i> package (<a href="https://github.com/marchtaylor/sinkr">https://github.com/marchtaylor/sinkr</a>).<br />
<a name='more'></a>Example 2:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2ARR0az-IMkj_SoVebDRCPpNJsZ84HWCtvoC1aL0WmhMrzOO1-nJe_HvTvKnT92VrTUSkmzAPLgradLE5d7nikgpRB5okEXqX5-ZMrZx-a9gJQfKlOBPEWJ-P9iMEtVO2P5ono0Gy-vUz/s1600/reltext_ex2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2ARR0az-IMkj_SoVebDRCPpNJsZ84HWCtvoC1aL0WmhMrzOO1-nJe_HvTvKnT92VrTUSkmzAPLgradLE5d7nikgpRB5okEXqX5-ZMrZx-a9gJQfKlOBPEWJ-P9iMEtVO2P5ono0Gy-vUz/s1600/reltext_ex2.png" height="320" width="320" /> </a></div>
<div class="separator" style="clear: both; text-align: left;">
Example 3:</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCwZ9WNFbQolxIy7FGVSPJEN0LvYg9VOI7DjJmbLQJhkmJqqTCWmLW7dUDfE427KT2wjC-OrvMni99HWaDgROO0dO_y_9W1LnOOK6yhjDpdQZAAVSONdI3RerE_7zBQ89e5BduX4sUVI_z/s1600/reltext_ex3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCwZ9WNFbQolxIy7FGVSPJEN0LvYg9VOI7DjJmbLQJhkmJqqTCWmLW7dUDfE427KT2wjC-OrvMni99HWaDgROO0dO_y_9W1LnOOK6yhjDpdQZAAVSONdI3RerE_7zBQ89e5BduX4sUVI_z/s1600/reltext_ex3.png" height="320" width="320" /></a></div>
<br />
<b>Script to reproduce the examples:</b><br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;">reltext <- <a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span>relx=<span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span> rely=<span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a> = <a href="http://inside-r.org/r-doc/base/seq_along"><span style="color: #003399; font-weight: bold;">seq_along</span></a><span style="color: #009900;">(</span>relx<span style="color: #009900;">)</span><span style="color: #339933;">,</span> ...<span style="color: #009900;">)</span><span style="color: #009900;">{</span>
usr <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><span style="color: blue;">"usr"</span><span style="color: #009900;">)</span>
x <- usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span> + relx*<span style="color: #009900;">(</span>usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span>-usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
y <- usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span> + rely*<span style="color: #009900;">(</span>usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">]</span>-usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/text"><span style="color: #003399; font-weight: bold;">text</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> y<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a><span style="color: #339933;">,</span> ...<span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
n <- <span style="color: #cc66cc;">100</span>
a <- <span style="color: #cc66cc;">3</span>
b <- <span style="color: #cc66cc;">5</span>
x <- <a href="http://inside-r.org/r-doc/stats/rnorm"><span style="color: #003399; font-weight: bold;">rnorm</span></a><span style="color: #009900;">(</span>n<span style="color: #009900;">)</span>
y <- a + b*x + <a href="http://inside-r.org/r-doc/stats/rnorm"><span style="color: #003399; font-weight: bold;">rnorm</span></a><span style="color: #009900;">(</span>n<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/sd"><span style="color: #003399; font-weight: bold;">sd</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
fit <- <a href="http://inside-r.org/r-doc/stats/lm"><span style="color: #003399; font-weight: bold;">lm</span></a><span style="color: #009900;">(</span>y ~ x<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"reltext_ex1.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">3.5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">3.5</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">300</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/family"><span style="color: #003399; font-weight: bold;">family</span></a>=<span style="color: blue;">"Arial"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> mgp=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=-<span style="color: #cc66cc;">0.25</span><span style="color: #339933;">,</span> las=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> bty=<span style="color: blue;">"l"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> y<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span>fit<span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.95</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<a href="http://inside-r.org/r-doc/base/bquote"><span style="color: #003399; font-weight: bold;">bquote</span></a><span style="color: #009900;">(</span> <a href="http://inside-r.org/r-doc/grDevices/italic"><span style="color: #003399; font-weight: bold;">italic</span></a><span style="color: #009900;">(</span>y<span style="color: #009900;">)</span> == .<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sprintf"><span style="color: #003399; font-weight: bold;">sprintf</span></a><span style="color: #009900;">(</span><span style="color: blue;">"%0.2f"</span><span style="color: #339933;">,</span> <span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/coef"><span style="color: #003399; font-weight: bold;">coef</span></a><span style="color: #009900;">(</span>fit<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>+.<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sprintf"><span style="color: #003399; font-weight: bold;">sprintf</span></a><span style="color: #009900;">(</span><span style="color: blue;">"%0.2f"</span><span style="color: #339933;">,</span> <span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/coef"><span style="color: #003399; font-weight: bold;">coef</span></a><span style="color: #009900;">(</span>fit<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>~<span style="color: blue;">"*"</span>~<a href="http://inside-r.org/r-doc/grDevices/italic"><span style="color: #003399; font-weight: bold;">italic</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span> <span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.85</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<a href="http://inside-r.org/r-doc/base/bquote"><span style="color: #003399; font-weight: bold;">bquote</span></a><span style="color: #009900;">(</span> bolditalic<span style="color: #009900;">(</span>R<span style="color: #009900;">)</span>^<span style="color: #cc66cc;">2</span> == .<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/round"><span style="color: #003399; font-weight: bold;">round</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/summary"><span style="color: #003399; font-weight: bold;">summary</span></a><span style="color: #009900;">(</span>fit<span style="color: #009900;">)</span>$adj.r.squared<span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"reltext_ex2.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">3.5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">3.5</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">300</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/family"><span style="color: #003399; font-weight: bold;">family</span></a>=<span style="color: blue;">"Arial"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> y<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span>fit<span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">8</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.95</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.95</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.05</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> pos=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"text1"</span><span style="color: #339933;">,</span> <span style="color: blue;">"text2"</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"reltext_ex3.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">3.5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">3.5</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">300</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/family"><span style="color: #003399; font-weight: bold;">family</span></a>=<span style="color: blue;">"Arial"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">8</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> y<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"n"</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"text"</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"text"</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"text"</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"text"</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0.9</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"text"</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0.9</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"text"</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0.9</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"text"</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0.9</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"text"</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.9</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"text"</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.9</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"text"</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.9</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"text"</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.9</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"text"</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0.9</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"text"</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0.9</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"text"</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0.9</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"text"</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
reltext<span style="color: #009900;">(</span><span style="color: #cc66cc;">0.9</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"text"</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com0tag:blogger.com,1999:blog-6424211413492597169.post-42952268211273071902015-04-02T00:00:00.000+02:002015-04-03T12:20:41.404+02:00Exploring fishing harvest feedback policies in R using vector optimization<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimhei-kh3xVh_Ki3ihIAt13ag216hSEJ7OKRIz5oVTLgpbJzOwyYlGWaGOHozJESdZXkJ9JEkAQ4fwTM4PsFmEN1ptnbI4sTcwbTlZiBYn_NMI2YUjBW1jWMItQBgBI-h0pXx8wF5VSNPH/s1600/Yt~Bt.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimhei-kh3xVh_Ki3ihIAt13ag216hSEJ7OKRIz5oVTLgpbJzOwyYlGWaGOHozJESdZXkJ9JEkAQ4fwTM4PsFmEN1ptnbI4sTcwbTlZiBYn_NMI2YUjBW1jWMItQBgBI-h0pXx8wF5VSNPH/s1600/Yt~Bt.png" height="320" width="320" /></a></div>
<br />
Walters and Martell (2004, Section 3.2) present an interesting example of harvest feedback policy exploration using basic spreadsheet techniques and optimization procedures (<i>e.g. Solver</i> in <i>Excel</i>, or <i>Optimizer</i> in <i>Quattro Pro</i>). For a given species, parameters describing growth, mortality, and reproduction/recruitment are used to model the population's dynamics. Given a random series of environmental effects to recruitment parameters (survival and carrying capacity) the optimization procedure can be used to determine the best series of fishing mortality (<i>F</i>) values given a cost function (e.g. maximize the sum of: harvest yield, log-transformed yield, discounted yield):<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhTLlcTjlQ6L2F7z3pPY20WNLTSsa-LZkv1d384y2BjiXNf769WJSEDWRSGzUYBhzfmzgwu-BRBDT_swHPsE0Un8kSMhpHdABdQrkLyLMXo0Da8rStZRwvUzEMHcvqMK4n0zbwKVnFH7Ab/s1600/optim_Ft.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhTLlcTjlQ6L2F7z3pPY20WNLTSsa-LZkv1d384y2BjiXNf769WJSEDWRSGzUYBhzfmzgwu-BRBDT_swHPsE0Un8kSMhpHdABdQrkLyLMXo0Da8rStZRwvUzEMHcvqMK4n0zbwKVnFH7Ab/s1600/optim_Ft.png" height="256" width="320" /></a></div>
<br />
In this example, for a hypothetical population of tilapia, yearly recruitment survival varies by ca. +/-30%, while recruitment carrying capacity has two periods of poor recruitment (-50%, <i>e.g. </i>due to a regime shift) during the simulation years 20-35 and 60-75, as indicated by the shaded areas. The optimal <i>F</i> series are similar for maximizing yield or discounted yield (discount rate = 5%) likely due to the fact that tilapia is a fast-growing, high fecundity species and can rebound quickly following intensive fishing pressure. Maximizing log-transformed biomass is the "risk-averse" strategy, whereby peaks in harvest are less highly valued, and fluctuations in fishing pressure (and yield) are dampened:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRpgm5CC-B0oRkpzeniBINj6abYUOChPx7G6uT6veDPkFNogQcKXduEzUWLZkG3YeV34ULA0bA5D90iUZ8yoY4W4QPM6M5f6bPKRKcfYNNoXdzBJFWR28tuIonv_TxJRHkBWy5Bx3I1bhA/s1600/optim_Yt.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRpgm5CC-B0oRkpzeniBINj6abYUOChPx7G6uT6veDPkFNogQcKXduEzUWLZkG3YeV34ULA0bA5D90iUZ8yoY4W4QPM6M5f6bPKRKcfYNNoXdzBJFWR28tuIonv_TxJRHkBWy5Bx3I1bhA/s1600/optim_Yt.png" height="256" width="320" /></a></div>
<br />
Interesting patterns emerge, <i>e.g.</i> one should increase fishing
pressure at the beginning of a "bad" recruitment regime (grey regions) and reduce
fishing at the beginning a "good" recruitment regime. In both cases,
this speeds the trajectory of the stock to it's new equilibrium and
takes advantage of soon to be lost or gained harvestable biomass. In other words, fish hard before bad times so as not to "waste" a large spawning stock, and lay off of fishing before good times so as to make full use of the spawning potential. Martell and Walters (2004) state,<br />
<blockquote class="tr_bq">
<i>These anticipatory behaviors are a bizarre reversal of our usual prescriptions about how to hedge against uncertain future changes in productivity and would almost certainly never be acceptable as management recommendations in practical decision settings.</i></blockquote>
<div class="separator" style="clear: both; text-align: center;">
</div>
The figure at the top of the post shows the relationship between biomass and yield during the optimal scenarios. The relationship is most strongly linear for the log(<i>Yt</i>) optimization, but a relationship is evident for all three scenarios. One could imagine using the coefficients of this regression as a general harvesting strategy; x-intercept would be the minimum biomass before harvesting is allowed, and the slope gives the exploitation rate (<i>E </i>= harvest/biomass). One would need to program this strategy to be able to make the comparison to the optimal harvested values, but even the simplified strategy of using a constant exploitation rate from the regression (<i>e.g. E</i> = 0.34, 0.23, 0.37) results in 87, 77, and 90% of the optimal solution for <span style="font-family: inherit;">sum(<i>Yt</i>), sum(log(<i>Yt</i>)), and sum(<i>discounted Yt</i>), respectively. These levels of performance (and higher) are typical for most examples explored by the approach (Walters and Parma, 1996).</span><br />
<span style="font-family: inherit;"><br /></span>
Finally, the authors also demonstrate the situation where all sizes are vulnerable to fishing (as opposed to a knife-edge selection of individuals above a given minimum size, as in the above example). Here the <span style="font-family: inherit;">sum(<i>Yt</i>) optimization results in a "pulse-fishing" strategy whereby the stock is fished hard (usually E > 0.5) for 1-2 years, followed by 1-2 years of recovery where no fishing is allowed. This pattern results from "growth overfishing", whereby unselective harvesting wastes a large part of the biomass that is still growing rapidly:</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPSMhN3IIThKNzAzNyXGZqi3pV43LgCLxB3GQKE_fYrl3gUkz1ISpd8ETfp5h0WpRV86B1dAiX2cqwCH3e5pGgUZT88qAksflAjkmfgZNSjAHETdQL3-pVwwwDA_5ZtHaEN1dVPhgXehbS/s1600/Et_Bt_pulse.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPSMhN3IIThKNzAzNyXGZqi3pV43LgCLxB3GQKE_fYrl3gUkz1ISpd8ETfp5h0WpRV86B1dAiX2cqwCH3e5pGgUZT88qAksflAjkmfgZNSjAHETdQL3-pVwwwDA_5ZtHaEN1dVPhgXehbS/s1600/Et_Bt_pulse.png" height="320" width="320" /></a></div>
<br />
The examples use the <span style="font-family: inherit;"><i>stockSim()</i> and <i>optim.stockSim()</i> functions </span>of the R package <i>fishdynr</i>. Instructions for direct installation from GitHub can be found here: <a href="https://github.com/marchtaylor/fishdynr">https://github.com/marchtaylor/fishdynr</a>. Vector optimization of the <i>F</i> series is computed with the <i>optim()</i> function (<i>stats</i> package).<br />
<br />
<b>References</b>:<br />
- Walters, C. J., Martell, S. J., 2004. Fisheries ecology and management. Princeton University Press.<br />
<div class="gs_citr" id="gs_cit1" tabindex="0">
- Walters, C., Parma, A. M., 1996. Fixed exploitation rate strategies for coping with effects of climate change. Canadian Journal of Fisheries and Aquatic Sciences, 53(1), 148-158.</div>
<br />
<b>Script to reproduce the example</b>:<br />
<a name='more'></a><div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span>fishdynr<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/utils/data"><span style="color: #003399; font-weight: bold;">data</span></a><span style="color: #009900;">(</span>tilapia<span style="color: #009900;">)</span>
params <- tilapia
params$knife_edge_size <- <span style="color: #cc66cc;">20</span>
params$N0 <- 1e9
nyears <- <span style="color: #cc66cc;">100</span>
Ft <- <a href="http://inside-r.org/r-doc/base/rep"><span style="color: #003399; font-weight: bold;">rep</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span> nyears<span style="color: #009900;">)</span>
env_at <- <a href="http://inside-r.org/r-doc/stats/runif"><span style="color: #003399; font-weight: bold;">runif</span></a><span style="color: #009900;">(</span>nyears<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a>=<span style="color: #cc66cc;">0.7</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a>=<span style="color: #cc66cc;">1.3</span><span style="color: #009900;">)</span>
env_bt <- <a href="http://inside-r.org/r-doc/base/rep"><span style="color: #003399; font-weight: bold;">rep</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> nyears<span style="color: #009900;">)</span><span style="color: #339933;">;</span> env_bt<span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">20</span>:<span style="color: #cc66cc;">35</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">60</span>:<span style="color: #cc66cc;">75</span><span style="color: #009900;">)</span><span style="color: #009900;">]</span> <- <span style="color: #cc66cc;">0.5</span>
<span style="color: #666666; font-style: italic;"># Optimization Ft for sum(yield)</span>
out1 <- <a href="http://inside-r.org/r-doc/stats/optim"><span style="color: #003399; font-weight: bold;">optim</span></a><span style="color: #009900;">(</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a> = Ft<span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;"># initial guess</span>
fn = optim.stockSim<span style="color: #339933;">,</span>
params = params<span style="color: #339933;">,</span>
nyears = nyears<span style="color: #339933;">,</span>
env_at = env_at<span style="color: #339933;">,</span>
env_bt = env_bt<span style="color: #339933;">,</span>
opt = <span style="color: blue;">"sum"</span><span style="color: #339933;">,</span>
method = <span style="color: blue;">"L-BFGS-B"</span><span style="color: #339933;">,</span>
lower = <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
upper = <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/boot/control"><span style="color: #003399; font-weight: bold;">control</span></a> = <a href="http://inside-r.org/r-doc/base/list"><span style="color: #003399; font-weight: bold;">list</span></a><span style="color: #009900;">(</span>fnscale=-<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/trace"><span style="color: #003399; font-weight: bold;">trace</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
res1 <- stockSim<span style="color: #009900;">(</span>params<span style="color: #339933;">,</span> nyears=nyears<span style="color: #339933;">,</span> Ft=out1$par<span style="color: #339933;">,</span> env_at=env_at<span style="color: #339933;">,</span> env_bt=env_bt<span style="color: #009900;">)</span>
res1$Et <- res1$Yt/res1$Bt
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>Ft ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res1<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Optimization Ft for sum(log(yield))</span>
out2 <- <a href="http://inside-r.org/r-doc/stats/optim"><span style="color: #003399; font-weight: bold;">optim</span></a><span style="color: #009900;">(</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a> = Ft<span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;"># initial guess</span>
fn = optim.stockSim<span style="color: #339933;">,</span>
params = params<span style="color: #339933;">,</span>
nyears = nyears<span style="color: #339933;">,</span>
env_at = env_at<span style="color: #339933;">,</span>
env_bt = env_bt<span style="color: #339933;">,</span>
opt = <span style="color: blue;">"sum.log"</span><span style="color: #339933;">,</span>
method = <span style="color: blue;">"L-BFGS-B"</span><span style="color: #339933;">,</span>
lower = <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
upper = <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/boot/control"><span style="color: #003399; font-weight: bold;">control</span></a> = <a href="http://inside-r.org/r-doc/base/list"><span style="color: #003399; font-weight: bold;">list</span></a><span style="color: #009900;">(</span>fnscale=-<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/trace"><span style="color: #003399; font-weight: bold;">trace</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
res2 <- stockSim<span style="color: #009900;">(</span>params<span style="color: #339933;">,</span> nyears=nyears<span style="color: #339933;">,</span> Ft=out2$par<span style="color: #339933;">,</span> env_at=env_at<span style="color: #339933;">,</span> env_bt=env_bt<span style="color: #009900;">)</span>
res2$Et <- res2$Yt/res2$Bt
<span style="color: #666666; font-style: italic;"># Optimization Ft for sum(discounted yield)</span>
out3 <- <a href="http://inside-r.org/r-doc/stats/optim"><span style="color: #003399; font-weight: bold;">optim</span></a><span style="color: #009900;">(</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a> = Ft<span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;"># initial guess</span>
fn = optim.stockSim<span style="color: #339933;">,</span>
params = params<span style="color: #339933;">,</span>
nyears = nyears<span style="color: #339933;">,</span>
env_at = env_at<span style="color: #339933;">,</span>
env_bt = env_bt<span style="color: #339933;">,</span>
opt = <span style="color: blue;">"sum.disc"</span><span style="color: #339933;">,</span>
disc.rate = <span style="color: #cc66cc;">0.05</span><span style="color: #339933;">,</span>
method = <span style="color: blue;">"L-BFGS-B"</span><span style="color: #339933;">,</span>
lower = <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
upper = <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/boot/control"><span style="color: #003399; font-weight: bold;">control</span></a> = <a href="http://inside-r.org/r-doc/base/list"><span style="color: #003399; font-weight: bold;">list</span></a><span style="color: #009900;">(</span>fnscale=-<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/trace"><span style="color: #003399; font-weight: bold;">trace</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
res3 <- stockSim<span style="color: #009900;">(</span>params<span style="color: #339933;">,</span> nyears=nyears<span style="color: #339933;">,</span> Ft=out3$par<span style="color: #339933;">,</span> env_at=env_at<span style="color: #339933;">,</span> env_bt=env_bt<span style="color: #009900;">)</span>
res3$Et <- res3$Yt/res3$Bt
<span style="color: #666666; font-style: italic;"># plots and results ====================================</span>
<span style="color: #666666; font-style: italic;"># optimum fishing mortality series</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"optim_Ft.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">300</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/family"><span style="color: #003399; font-weight: bold;">family</span></a>=<span style="color: blue;">"Arial"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> mgp=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=-<span style="color: #cc66cc;">0.25</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>Ft ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res1<span style="color: #339933;">,</span> xlab=<span style="color: blue;">"t"</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Fishing mortality"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a>=<span style="color: blue;">""</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/rect"><span style="color: #003399; font-weight: bold;">rect</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">20</span><span style="color: #339933;">,</span> -<span style="color: #cc66cc;">100</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">35</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1000</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"grey90"</span><span style="color: #339933;">,</span> border=<span style="color: black; font-weight: bold;">NA</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/rect"><span style="color: #003399; font-weight: bold;">rect</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">60</span><span style="color: #339933;">,</span> -<span style="color: #cc66cc;">100</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">75</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1000</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"grey90"</span><span style="color: #339933;">,</span> border=<span style="color: black; font-weight: bold;">NA</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>res1$Ft<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>res2$Ft<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>res3$Ft<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/box"><span style="color: #003399; font-weight: bold;">box</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"topleft"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Y"</span><span style="color: #339933;">,</span> <span style="color: blue;">"log(Y)"</span><span style="color: #339933;">,</span> <span style="color: blue;">"disc. Y"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/title"><span style="color: #003399; font-weight: bold;">title</span></a>=<span style="color: blue;">"Optimize:"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> lt=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># optimum exploitation rate series</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"optim_Et.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">300</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/family"><span style="color: #003399; font-weight: bold;">family</span></a>=<span style="color: blue;">"Arial"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> mgp=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=-<span style="color: #cc66cc;">0.25</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>Et ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res1<span style="color: #339933;">,</span> ylim=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> xlab=<span style="color: blue;">"t"</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Exploitation rate"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a>=<span style="color: blue;">""</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/rect"><span style="color: #003399; font-weight: bold;">rect</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">20</span><span style="color: #339933;">,</span> -<span style="color: #cc66cc;">100</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">35</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1000</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"grey90"</span><span style="color: #339933;">,</span> border=<span style="color: black; font-weight: bold;">NA</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/rect"><span style="color: #003399; font-weight: bold;">rect</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">60</span><span style="color: #339933;">,</span> -<span style="color: #cc66cc;">100</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">75</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1000</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"grey90"</span><span style="color: #339933;">,</span> border=<span style="color: black; font-weight: bold;">NA</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>res1$Et<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>res2$Et<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>res3$Et<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/box"><span style="color: #003399; font-weight: bold;">box</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"topleft"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Y"</span><span style="color: #339933;">,</span> <span style="color: blue;">"log(Y)"</span><span style="color: #339933;">,</span> <span style="color: blue;">"disc. Y"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/title"><span style="color: #003399; font-weight: bold;">title</span></a>=<span style="color: blue;">"Optimize:"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> lt=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># optimum yield series</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"optim_Yt.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">300</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/family"><span style="color: #003399; font-weight: bold;">family</span></a>=<span style="color: blue;">"Arial"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> mgp=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=-<span style="color: #cc66cc;">0.25</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>Yt ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res1<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Yield"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/rect"><span style="color: #003399; font-weight: bold;">rect</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">20</span><span style="color: #339933;">,</span> -1e20<span style="color: #339933;">,</span> <span style="color: #cc66cc;">35</span><span style="color: #339933;">,</span> 1e20<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"grey90"</span><span style="color: #339933;">,</span> border=<span style="color: black; font-weight: bold;">NA</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/rect"><span style="color: #003399; font-weight: bold;">rect</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">60</span><span style="color: #339933;">,</span> -1e20<span style="color: #339933;">,</span> <span style="color: #cc66cc;">75</span><span style="color: #339933;">,</span> 1e20<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"grey90"</span><span style="color: #339933;">,</span> border=<span style="color: black; font-weight: bold;">NA</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>Yt ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res1<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>Yt ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res2<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>Yt ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res3<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>res2$Yt<span style="color: #009900;">)</span>/sum<span style="color: #009900;">(</span>res1$Yt<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>res3$Yt<span style="color: #009900;">)</span>/sum<span style="color: #009900;">(</span>res1$Yt<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/box"><span style="color: #003399; font-weight: bold;">box</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"topright"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Y"</span><span style="color: #339933;">,</span> <span style="color: blue;">"log(Y)"</span><span style="color: #339933;">,</span> <span style="color: blue;">"disc. Y"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/title"><span style="color: #003399; font-weight: bold;">title</span></a>=<span style="color: blue;">"Optimize:"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> lt=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># optimum yield versus stock biomass</span>
fit1 <- <a href="http://inside-r.org/r-doc/stats/lm"><span style="color: #003399; font-weight: bold;">lm</span></a><span style="color: #009900;">(</span>Yt ~ Bt<span style="color: #339933;">,</span> res1<span style="color: #009900;">)</span>
fit2 <- <a href="http://inside-r.org/r-doc/stats/lm"><span style="color: #003399; font-weight: bold;">lm</span></a><span style="color: #009900;">(</span>Yt ~ Bt<span style="color: #339933;">,</span> res2<span style="color: #009900;">)</span>
fit3 <- <a href="http://inside-r.org/r-doc/stats/lm"><span style="color: #003399; font-weight: bold;">lm</span></a><span style="color: #009900;">(</span>Yt ~ Bt<span style="color: #339933;">,</span> res3<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Yt~Bt.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">300</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/family"><span style="color: #003399; font-weight: bold;">family</span></a>=<span style="color: blue;">"Arial"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> mgp=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=-<span style="color: #cc66cc;">0.25</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>Yt ~ Bt<span style="color: #339933;">,</span> res1<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> xlab=<span style="color: blue;">"Biomass"</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Yield"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>Yt ~ Bt<span style="color: #339933;">,</span> res3<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>Yt ~ Bt<span style="color: #339933;">,</span> res2<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span>fit1<span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span>fit2<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span>fit3<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
usr <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>$usr
<a href="http://inside-r.org/r-doc/graphics/text"><span style="color: #003399; font-weight: bold;">text</span></a><span style="color: #009900;">(</span>x=usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>+<span style="color: #cc66cc;">1</span>*<span style="color: #009900;">(</span>usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span>-usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>y=usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span>+<span style="color: #cc66cc;">0.15</span>*<span style="color: #009900;">(</span>usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">]</span>-usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<a href="http://inside-r.org/r-doc/base/bquote"><span style="color: #003399; font-weight: bold;">bquote</span></a><span style="color: #009900;">(</span>Yt == .<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sprintf"><span style="color: #003399; font-weight: bold;">sprintf</span></a><span style="color: #009900;">(</span><span style="color: blue;">"%.2e"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/coef"><span style="color: #003399; font-weight: bold;">coef</span></a><span style="color: #009900;">(</span>fit1<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>+.<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sprintf"><span style="color: #003399; font-weight: bold;">sprintf</span></a><span style="color: #009900;">(</span><span style="color: blue;">"%.2f"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/coef"><span style="color: #003399; font-weight: bold;">coef</span></a><span style="color: #009900;">(</span>fit1<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>*Bt<span style="color: #009900;">)</span><span style="color: #339933;">,</span>
pos=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/text"><span style="color: #003399; font-weight: bold;">text</span></a><span style="color: #009900;">(</span>x=usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>+<span style="color: #cc66cc;">1</span>*<span style="color: #009900;">(</span>usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span>-usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>y=usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span>+<span style="color: #cc66cc;">0.1</span>*<span style="color: #009900;">(</span>usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">]</span>-usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<a href="http://inside-r.org/r-doc/base/bquote"><span style="color: #003399; font-weight: bold;">bquote</span></a><span style="color: #009900;">(</span>Yt == .<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sprintf"><span style="color: #003399; font-weight: bold;">sprintf</span></a><span style="color: #009900;">(</span><span style="color: blue;">"%.2e"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/coef"><span style="color: #003399; font-weight: bold;">coef</span></a><span style="color: #009900;">(</span>fit2<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>+.<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sprintf"><span style="color: #003399; font-weight: bold;">sprintf</span></a><span style="color: #009900;">(</span><span style="color: blue;">"%.2f"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/coef"><span style="color: #003399; font-weight: bold;">coef</span></a><span style="color: #009900;">(</span>fit2<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>*Bt<span style="color: #009900;">)</span><span style="color: #339933;">,</span>
pos=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/text"><span style="color: #003399; font-weight: bold;">text</span></a><span style="color: #009900;">(</span>x=usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>+<span style="color: #cc66cc;">1</span>*<span style="color: #009900;">(</span>usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span>-usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>y=usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span>+<span style="color: #cc66cc;">0.05</span>*<span style="color: #009900;">(</span>usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">]</span>-usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<a href="http://inside-r.org/r-doc/base/bquote"><span style="color: #003399; font-weight: bold;">bquote</span></a><span style="color: #009900;">(</span>Yt == .<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sprintf"><span style="color: #003399; font-weight: bold;">sprintf</span></a><span style="color: #009900;">(</span><span style="color: blue;">"%.2e"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/coef"><span style="color: #003399; font-weight: bold;">coef</span></a><span style="color: #009900;">(</span>fit3<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>+.<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sprintf"><span style="color: #003399; font-weight: bold;">sprintf</span></a><span style="color: #009900;">(</span><span style="color: blue;">"%.2f"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/coef"><span style="color: #003399; font-weight: bold;">coef</span></a><span style="color: #009900;">(</span>fit3<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>*Bt<span style="color: #009900;">)</span><span style="color: #339933;">,</span>
pos=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">3</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"topleft"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Y"</span><span style="color: #339933;">,</span> <span style="color: blue;">"log(Y)"</span><span style="color: #339933;">,</span> <span style="color: blue;">"disc. Y"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/title"><span style="color: #003399; font-weight: bold;">title</span></a>=<span style="color: blue;">"Optimize:"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> lt=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Minimum stock size before allowing harvest (x intercept)</span>
<a href="http://inside-r.org/r-doc/base/sprintf"><span style="color: #003399; font-weight: bold;">sprintf</span></a><span style="color: #009900;">(</span><span style="color: blue;">"%.2e"</span><span style="color: #339933;">,</span> -<a href="http://inside-r.org/r-doc/stats/coef"><span style="color: #003399; font-weight: bold;">coef</span></a><span style="color: #009900;">(</span>fit1<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>/coef<span style="color: #009900;">(</span>fit1<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/sprintf"><span style="color: #003399; font-weight: bold;">sprintf</span></a><span style="color: #009900;">(</span><span style="color: blue;">"%.2e"</span><span style="color: #339933;">,</span> -<a href="http://inside-r.org/r-doc/stats/coef"><span style="color: #003399; font-weight: bold;">coef</span></a><span style="color: #009900;">(</span>fit2<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>/coef<span style="color: #009900;">(</span>fit2<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/sprintf"><span style="color: #003399; font-weight: bold;">sprintf</span></a><span style="color: #009900;">(</span><span style="color: blue;">"%.2e"</span><span style="color: #339933;">,</span> -<a href="http://inside-r.org/r-doc/stats/coef"><span style="color: #003399; font-weight: bold;">coef</span></a><span style="color: #009900;">(</span>fit3<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>/coef<span style="color: #009900;">(</span>fit3<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Compare constant F to optimal solution</span>
c1 <- stockSim<span style="color: #009900;">(</span>params<span style="color: #339933;">,</span> nyears=nyears<span style="color: #339933;">,</span> Ft=-<a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span>-<a href="http://inside-r.org/r-doc/stats/coef"><span style="color: #003399; font-weight: bold;">coef</span></a><span style="color: #009900;">(</span>fit1<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> env_at=env_at<span style="color: #339933;">,</span> env_bt=env_bt<span style="color: #009900;">)</span>
c2 <- stockSim<span style="color: #009900;">(</span>params<span style="color: #339933;">,</span> nyears=nyears<span style="color: #339933;">,</span> Ft=-<a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span>-<a href="http://inside-r.org/r-doc/stats/coef"><span style="color: #003399; font-weight: bold;">coef</span></a><span style="color: #009900;">(</span>fit2<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> env_at=env_at<span style="color: #339933;">,</span> env_bt=env_bt<span style="color: #009900;">)</span>
c3 <- stockSim<span style="color: #009900;">(</span>params<span style="color: #339933;">,</span> nyears=nyears<span style="color: #339933;">,</span> Ft=-<a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span>-<a href="http://inside-r.org/r-doc/stats/coef"><span style="color: #003399; font-weight: bold;">coef</span></a><span style="color: #009900;">(</span>fit3<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> env_at=env_at<span style="color: #339933;">,</span> env_bt=env_bt<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>c1$Yt<span style="color: #009900;">)</span>/sum<span style="color: #009900;">(</span>res1$Yt<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>c2$Yt<span style="color: #009900;">)</span>/sum<span style="color: #009900;">(</span>res2$Yt<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>c3$Yt<span style="color: #009900;">)</span>/sum<span style="color: #009900;">(</span>res3$Yt<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Pulse fishing (all sizes vulnerable to fishing) =====================</span>
params$knife_edge_size <- <span style="color: #cc66cc;">0</span>
<span style="color: #666666; font-style: italic;"># Optimization Ft for sum(yield)</span>
out4 <- <a href="http://inside-r.org/r-doc/stats/optim"><span style="color: #003399; font-weight: bold;">optim</span></a><span style="color: #009900;">(</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a> = Ft<span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;"># initial guess</span>
fn = optim.stockSim<span style="color: #339933;">,</span>
params = params<span style="color: #339933;">,</span>
nyears = nyears<span style="color: #339933;">,</span>
env_at = env_at<span style="color: #339933;">,</span>
env_bt = env_bt<span style="color: #339933;">,</span>
opt = <span style="color: blue;">"sum"</span><span style="color: #339933;">,</span>
method = <span style="color: blue;">"L-BFGS-B"</span><span style="color: #339933;">,</span>
lower = <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
upper = <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/boot/control"><span style="color: #003399; font-weight: bold;">control</span></a> = <a href="http://inside-r.org/r-doc/base/list"><span style="color: #003399; font-weight: bold;">list</span></a><span style="color: #009900;">(</span>fnscale=-<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/trace"><span style="color: #003399; font-weight: bold;">trace</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
res4 <- stockSim<span style="color: #009900;">(</span>params<span style="color: #339933;">,</span> nyears=nyears<span style="color: #339933;">,</span> Ft=out4$par<span style="color: #339933;">,</span> env_at=env_at<span style="color: #339933;">,</span> env_bt=env_bt<span style="color: #009900;">)</span>
res4$Et <- res4$Yt/res4$Bt
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Et_Bt_pulse.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">300</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/family"><span style="color: #003399; font-weight: bold;">family</span></a>=<span style="color: blue;">"Arial"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/layout"><span style="color: #003399; font-weight: bold;">layout</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> widths=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> heights=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> respect=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/layout.show"><span style="color: #003399; font-weight: bold;">layout.show</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>mgp=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=-<span style="color: #cc66cc;">0.25</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>Et ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res4<span style="color: #339933;">,</span> ylim=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> xaxt=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Exploitation rate"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/rect"><span style="color: #003399; font-weight: bold;">rect</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">20</span><span style="color: #339933;">,</span> -1e20<span style="color: #339933;">,</span> <span style="color: #cc66cc;">35</span><span style="color: #339933;">,</span> 1e20<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"grey90"</span><span style="color: #339933;">,</span> border=<span style="color: black; font-weight: bold;">NA</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/rect"><span style="color: #003399; font-weight: bold;">rect</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">60</span><span style="color: #339933;">,</span> -1e20<span style="color: #339933;">,</span> <span style="color: #cc66cc;">75</span><span style="color: #339933;">,</span> 1e20<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"grey90"</span><span style="color: #339933;">,</span> border=<span style="color: black; font-weight: bold;">NA</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>Et ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res4<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/axis"><span style="color: #003399; font-weight: bold;">axis</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/box"><span style="color: #003399; font-weight: bold;">box</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>Bt ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res4<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Biomass"</span><span style="color: #339933;">,</span> ylim=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.7</span><span style="color: #009900;">)</span>*<a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>res4$Bt<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/rect"><span style="color: #003399; font-weight: bold;">rect</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">20</span><span style="color: #339933;">,</span> -1e20<span style="color: #339933;">,</span> <span style="color: #cc66cc;">35</span><span style="color: #339933;">,</span> 1e20<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"grey90"</span><span style="color: #339933;">,</span> border=<span style="color: black; font-weight: bold;">NA</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/rect"><span style="color: #003399; font-weight: bold;">rect</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">60</span><span style="color: #339933;">,</span> -1e20<span style="color: #339933;">,</span> <span style="color: #cc66cc;">75</span><span style="color: #339933;">,</span> 1e20<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"grey90"</span><span style="color: #339933;">,</span> border=<span style="color: black; font-weight: bold;">NA</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>Bt ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res4<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/box"><span style="color: #003399; font-weight: bold;">box</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com0tag:blogger.com,1999:blog-6424211413492597169.post-6604208555417554202015-02-01T15:20:00.002+01:002015-12-08T13:05:36.909+01:00R package "fishdynr"<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2_ZZmk2lHcMPswAglln9QDyiFFFOx3plhA2nOgLEYD93QWU0QCSUbrKWfJ4kxGnEqfI3qdbnbQnn4hyphenhyphenHB2eE-yCQ5_yw9YNFR5VTRfnTDKQYUGuwgLiGE_WzVqwbvumemoedGBZDTIp9z/s1600/fishdynr_ypr.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2_ZZmk2lHcMPswAglln9QDyiFFFOx3plhA2nOgLEYD93QWU0QCSUbrKWfJ4kxGnEqfI3qdbnbQnn4hyphenhyphenHB2eE-yCQ5_yw9YNFR5VTRfnTDKQYUGuwgLiGE_WzVqwbvumemoedGBZDTIp9z/s1600/fishdynr_ypr.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
The <a href="https://github.com/marchtaylor/fishdynr"><i>fishdynr</i> package</a> allows for the construction of some basic population dynamics models commonly used in fisheries science. Included are models of a single cohort, <span style="font-family: "courier new" , "courier" , monospace;">cohortSim</span>, and a more complex iterative model that incorporates a stock-recruitment relationship, <span style="font-family: "courier new" , "courier" , monospace;">stockSim</span>. The model functions require a list of parameters as the main argument, which contains information about the given population's dynamics (growth, mortality, recruitment, etc.) and fishery (e.g. selectivity function and related parameters). This allows for a great deal of flexibility in adapting the analyses to particular species or fishery by defining functions of growth, mortality, fishing selectivity, recruitment, etc., outside the analysis. The package (located on GitHub) can be easily installed via the <span style="font-family: "courier new" , "courier" , monospace;">install_github</span> function of the <span style="font-family: "courier new" , "courier" , monospace; font-size: small;">devtools</span> package:<br />
<br />
<span style="font-size: small;"><span style="font-family: "courier new" , "courier" , monospace;">library(devtools)<br />install_github("fishdynr", "marchtaylor")</span></span><br />
<br />
The above figure shows the output of the Beverton and Holt's (1957) yield-per-recruit model (<span style="font-family: "courier new" , "courier" , monospace;">ypr</span> <span style="font-family: inherit;">function</span> - wrapper for <span style="font-family: "courier new" , "courier" , monospace;">cohortSim</span>), based on variable fishing mortality (<i>F</i>) and length at first capture (<i>Lcap</i>, knife-edge selection). Length at maturity is shown as a dashed white line for reference. In this example, the maximum yield (<i>Ymax</i>) is defined as the maximum possible yield without depletion of the spawning biomass below 50% of it's virgin, unfished biomass. This simple cohort model has many additional outputs that can be helpful in visualizing processes of growth and mortality: <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh6URA85R89q1U5JoS_rtaAHWlV9RWieEwZdHqeChwh8PkC6jUFG_QPAX65oQILk4SBp4pjg2AjPtgYaSvu49Jj670snLQ-ZMAc3qdt1_YYOrSinVN5oNIH6U7l6gnsqJyVQwafh3sWSBT/s1600/fishdynr_cohortSim.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh6URA85R89q1U5JoS_rtaAHWlV9RWieEwZdHqeChwh8PkC6jUFG_QPAX65oQILk4SBp4pjg2AjPtgYaSvu49Jj670snLQ-ZMAc3qdt1_YYOrSinVN5oNIH6U7l6gnsqJyVQwafh3sWSBT/s1600/fishdynr_cohortSim.png" width="640" /></a></div>
I hope to continue to document different models used in fisheries science within the package. Any suggestions or comments are welcome.<br />
<br />
<b>References</b><br />
Beverton, R. J. H.; Holt, S. J. (1957), On the Dynamics of Exploited Fish Populations, Fishery Investigations Series II Volume XIX, Ministry of Agriculture, Fisheries and Food <br />
<br />
<b>Script to reproduce the examples</b><br />
<a name='more'></a><br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;">#library(devtools)</span>
<span style="color: #666666; font-style: italic;">#install_github("fishdynr", "marchtaylor")</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span>fishdynr<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Single cohort simulation</span>
<a href="http://inside-r.org/r-doc/utils/data"><span style="color: #003399; font-weight: bold;">data</span></a><span style="color: #009900;">(</span>tilapia<span style="color: #009900;">)</span>
tilapia$N0 <- <span style="color: #cc66cc;">1000</span>
res <- cohortSim<span style="color: #009900;">(</span>tilapia<span style="color: #339933;">,</span> t_incr=<span style="color: #cc66cc;">0.1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"fishdynr_cohortSim.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>mfcol=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>Lt ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>Wt ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>pmat ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>pcap ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>Nt ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a>=<span style="color: blue;">"y"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>Nt.noF ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"topright"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Nt"</span><span style="color: #339933;">,</span> <span style="color: blue;">"Nt; F=0"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>Bt ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>SBt ~ <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> res<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"topright"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Bt"</span><span style="color: #339933;">,</span> <span style="color: blue;">"SBt"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Yield per recruit model</span>
tilapia$N0 <- <span style="color: #cc66cc;">1</span>
n <- <span style="color: #cc66cc;">30</span>
adj.params <- <a href="http://inside-r.org/r-doc/base/list"><span style="color: #003399; font-weight: bold;">list</span></a><span style="color: #009900;">(</span>F=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,,</span>n<span style="color: #009900;">)</span><span style="color: #339933;">,</span> knife_edge_size=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>tilapia$Linf<span style="color: #339933;">,,</span>n<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
res <- ypr<span style="color: #009900;">(</span>params=tilapia<span style="color: #339933;">,</span> adj.params<span style="color: #009900;">)</span>
SB_F0 <- res$SB<span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>res$F==<span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>
res$relSB <- res$SB/SB_F0
Ymax <- <a href="http://inside-r.org/r-doc/base/which.max"><span style="color: #003399; font-weight: bold;">which.max</span></a><span style="color: #009900;">(</span>res$Y*<span style="color: #009900;">(</span>res$relSB > <span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
pal <- <a href="http://inside-r.org/r-doc/grDevices/colorRampPalette"><span style="color: #003399; font-weight: bold;">colorRampPalette</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>
<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"fishdynr_ypr.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>mfcol=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> oma=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Yield</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>x=res$F<span style="color: #339933;">,</span> y=res$knife_edge<span style="color: #339933;">,</span>
z=res$Y<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=pal<span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
xlab=<span style="color: blue;">""</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">""</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/contour"><span style="color: #003399; font-weight: bold;">contour</span></a><span style="color: #009900;">(</span>x=res$F<span style="color: #339933;">,</span> y=res$knife_edge<span style="color: #339933;">,</span> z=res$Y<span style="color: #339933;">,</span> add=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span>h=tilapia$Lmat<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"white"</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/points"><span style="color: #003399; font-weight: bold;">points</span></a><span style="color: #009900;">(</span>res$adj.params.comb<span style="color: #009900;">[</span>Ymax<span style="color: #339933;">,</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"white"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/text"><span style="color: #003399; font-weight: bold;">text</span></a><span style="color: #009900;">(</span>res$adj.params.comb<span style="color: #009900;">[</span>Ymax<span style="color: #339933;">,</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"Ymax"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"white"</span><span style="color: #339933;">,</span> cex=<span style="color: #cc66cc;">1.2</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> font=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Yield-Per-Recruit"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span> cex=<span style="color: #cc66cc;">1.2</span><span style="color: #339933;">,</span> font=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Relative spawning biomass</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>x=res$F<span style="color: #339933;">,</span> y=res$knife_edge<span style="color: #339933;">,</span>
z=res$SB/SB_F0<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=pal<span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
xlab=<span style="color: blue;">""</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">""</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/contour"><span style="color: #003399; font-weight: bold;">contour</span></a><span style="color: #009900;">(</span>x=res$F<span style="color: #339933;">,</span> y=res$knife_edge<span style="color: #339933;">,</span> z=res$SB/SB_F0<span style="color: #339933;">,</span> add=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span>h=tilapia$Lmat<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"white"</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/points"><span style="color: #003399; font-weight: bold;">points</span></a><span style="color: #009900;">(</span>res$adj.params.comb<span style="color: #009900;">[</span>Ymax<span style="color: #339933;">,</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"white"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/text"><span style="color: #003399; font-weight: bold;">text</span></a><span style="color: #009900;">(</span>res$adj.params.comb<span style="color: #009900;">[</span>Ymax<span style="color: #339933;">,</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: blue;">"Ymax"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"white"</span><span style="color: #339933;">,</span> cex=<span style="color: #cc66cc;">1.2</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> font=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Rel. Spawning Biomass"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> cex=<span style="color: #cc66cc;">1.2</span><span style="color: #339933;">,</span> font=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Fishing mortality [F]"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/outer"><span style="color: #003399; font-weight: bold;">outer</span></a>=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Length at capture [Lcap]"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/outer"><span style="color: #003399; font-weight: bold;">outer</span></a>=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com0tag:blogger.com,1999:blog-6424211413492597169.post-6062988940776659152014-12-05T10:50:00.001+01:002015-01-17T07:39:15.564+01:00Data point locator function<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: center;">
</div>
<div style="text-align: left;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOBlQyjGzgeREPfM4gRHWo3g8zGfG3h-6z7wzK2uDwR2QLbrrSKMbTVva-cDBffiVTJWM9oZBBX79vIHIeGmgMdo07h7NSakFfvLQ2z74lDWKXLbbKa8suZisNuX1xYuNQEbMq8slroYAS/s1600/Screen+Shot+2014-12-05+at+12.22.42.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOBlQyjGzgeREPfM4gRHWo3g8zGfG3h-6z7wzK2uDwR2QLbrrSKMbTVva-cDBffiVTJWM9oZBBX79vIHIeGmgMdo07h7NSakFfvLQ2z74lDWKXLbbKa8suZisNuX1xYuNQEbMq8slroYAS/s1600/Screen+Shot+2014-12-05+at+12.22.42.png" height="308" width="320" /></a></div>
<br />
Here's a little function to select data points in an open graphical device (<span style="font-family: "Courier New",Courier,monospace;">ptlocator()</span>). The function does a scaling of the x and y axes in order to give them equal weighting and remove the influence of differing units or ranges. The function then calculates the Euclidean distance between the selected locations (using the <span style="font-family: "Courier New",Courier,monospace;">locator()</span> function) and the x, y coordinates of the plotted data points. Colored points are filled in for the data point that has the lowest distance to the clicked location, and the results give the vector positions of the closest x, y data points.<br />
<br />
[NOTE: I just realized that the <span style="font-family: "Courier New",Courier,monospace;">identify</span> function is very similar in its usage] <br />
<br />
<b>The function</b>:<br />
<a name='more'></a><br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;">ptlocator <- <a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span>n=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> x<span style="color: #339933;">,</span> y<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">20</span><span style="color: #339933;">,</span> ...<span style="color: #009900;">)</span><span style="color: #009900;">{</span>
xsc <- <a href="http://inside-r.org/r-doc/base/scale"><span style="color: #003399; font-weight: bold;">scale</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span>
ysc <- <a href="http://inside-r.org/r-doc/base/scale"><span style="color: #003399; font-weight: bold;">scale</span></a><span style="color: #009900;">(</span>y<span style="color: #009900;">)</span>
pos <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>n<span style="color: #009900;">)</span>*<span style="color: black; font-weight: bold;">NaN</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>n<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
<a href="http://inside-r.org/r-doc/base/print"><span style="color: #003399; font-weight: bold;">print</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/paste"><span style="color: #003399; font-weight: bold;">paste</span></a><span style="color: #009900;">(</span><span style="color: blue;">"choose point"</span><span style="color: #339933;">,</span> i<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/stats/pt"><span style="color: #003399; font-weight: bold;">pt</span></a> <- <a href="http://inside-r.org/r-doc/graphics/locator"><span style="color: #003399; font-weight: bold;">locator</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
ptxsc <- <a href="http://inside-r.org/r-doc/base/scale"><span style="color: #003399; font-weight: bold;">scale</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/pt"><span style="color: #003399; font-weight: bold;">pt</span></a>$x<span style="color: #339933;">,</span> center=<a href="http://inside-r.org/r-doc/base/attr"><span style="color: #003399; font-weight: bold;">attr</span></a><span style="color: #009900;">(</span>xsc<span style="color: #339933;">,</span><span style="color: blue;">"scaled:center"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/scale"><span style="color: #003399; font-weight: bold;">scale</span></a>=<a href="http://inside-r.org/r-doc/base/attr"><span style="color: #003399; font-weight: bold;">attr</span></a><span style="color: #009900;">(</span>xsc<span style="color: #339933;">,</span><span style="color: blue;">"scaled:scale"</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
ptysc <- <a href="http://inside-r.org/r-doc/base/scale"><span style="color: #003399; font-weight: bold;">scale</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/pt"><span style="color: #003399; font-weight: bold;">pt</span></a>$y<span style="color: #339933;">,</span> center=<a href="http://inside-r.org/r-doc/base/attr"><span style="color: #003399; font-weight: bold;">attr</span></a><span style="color: #009900;">(</span>ysc<span style="color: #339933;">,</span><span style="color: blue;">"scaled:center"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/scale"><span style="color: #003399; font-weight: bold;">scale</span></a>=<a href="http://inside-r.org/r-doc/base/attr"><span style="color: #003399; font-weight: bold;">attr</span></a><span style="color: #009900;">(</span>ysc<span style="color: #339933;">,</span><span style="color: blue;">"scaled:scale"</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
pos.i <- <a href="http://inside-r.org/r-doc/base/which.min"><span style="color: #003399; font-weight: bold;">which.min</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sqrt"><span style="color: #003399; font-weight: bold;">sqrt</span></a><span style="color: #009900;">(</span><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>ptxsc<span style="color: #009900;">)</span>-<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>xsc<span style="color: #009900;">)</span><span style="color: #009900;">)</span>^<span style="color: #cc66cc;">2</span> + <span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>ptysc<span style="color: #009900;">)</span>-<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>ysc<span style="color: #009900;">)</span><span style="color: #009900;">)</span>^<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/points"><span style="color: #003399; font-weight: bold;">points</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">[</span>pos.i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> y<span style="color: #009900;">[</span>pos.i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a><span style="color: #339933;">,</span> pch=pch<span style="color: #339933;">,</span> ...<span style="color: #009900;">)</span>
pos<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- pos.i
<span style="color: #009900;">}</span>
pos
<span style="color: #009900;">}</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />
<br />
<br />
<br />
<b>To reproduce example</b>:<br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
n <- <span style="color: #cc66cc;">200</span>
x <- <a href="http://inside-r.org/r-doc/base/sort"><span style="color: #003399; font-weight: bold;">sort</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/runif"><span style="color: #003399; font-weight: bold;">runif</span></a><span style="color: #009900;">(</span>n<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a>=<span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a>=<span style="color: #cc66cc;">10</span>*<span style="color: black; font-weight: bold;">pi</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
y <- <a href="http://inside-r.org/r-doc/base/sin"><span style="color: #003399; font-weight: bold;">sin</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span> + <a href="http://inside-r.org/r-doc/stats/rnorm"><span style="color: #003399; font-weight: bold;">rnorm</span></a><span style="color: #009900;">(</span>n<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/sd"><span style="color: #003399; font-weight: bold;">sd</span></a>=<span style="color: #cc66cc;">0.2</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Select 10 points at maxima and minima</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span>y<span style="color: #339933;">,</span> cex=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
pos <- ptlocator<span style="color: #009900;">(</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> x<span style="color: #339933;">,</span> y<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.75</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> cex=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
pos</pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com1tag:blogger.com,1999:blog-6424211413492597169.post-7749349202687963102014-09-30T17:52:00.000+02:002014-09-30T19:01:17.675+02:00Additional tips for structuring an individual-based model in R<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibvC0ieTaDhUvyGiUhEO_yKlEmV4PtW6FTpRY_NbqBrX_ulQI1j47RqEHZPxMb08ry82S44U4ER7dGTWGGc35kXDFssF0FQura-3n7cdjZMn3IrjWVgTwKMxgKCejy3XbWsmGQQzkU8i3H/s1600/pop_size.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibvC0ieTaDhUvyGiUhEO_yKlEmV4PtW6FTpRY_NbqBrX_ulQI1j47RqEHZPxMb08ry82S44U4ER7dGTWGGc35kXDFssF0FQura-3n7cdjZMn3IrjWVgTwKMxgKCejy3XbWsmGQQzkU8i3H/s1600/pop_size.png" height="320" width="320" /> </a></div>
<div class="separator" style="clear: both; text-align: left;">
I had a reader ask me recently to help understand how to modify the code of an individual-based model (IBM) <a href="http://menugget.blogspot.de/2013/10/a-first-attempt-at-individual-based.html">that I posted a while back</a>. It was my first attempt at an IBM in R, and I realized that I have made some significant changes to the way that I code such models nowadays. Most of the changes are structural, but seem to help a lot in clearly documenting the model and its underlying processes.</div>
<div class="separator" style="clear: both; text-align: left;">
Basically, I follow a structure that a friend taught me (a very experienced modeller, specializing in IBMs). Granted R isn't the best language for such models but, depending on your computational needs, it can also be quite easy to implement if you already have experience in basic R programming. The idea is to code important processes of the IBM as functions, which accept an object of individuals as the main argument. The functions can be as simple or elaborate as needed, but the key is that when you finally set up your simulation, you only need to call these functions again. This results in easily legible code, where you are less likely to get lost in the model and can concentrate more on the processes to be performed during each iteration (e.g. growth, reproduction, mortality):</div>
<br />
<span style="font-family: "Courier New",Courier,monospace;">inds <- grow.inds(inds)<br />inds <- reproduce.inds(inds)<br />inds <- kill.inds(inds)</span><br />
<br />
Since the previous post, I have gone towards using data.frame objects to store individuals and their attributes since I find it easier to apply functions for extracting summary statistics (e.g. histogram of age distribution in the final population):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib8UhoqERSCd3CyusrLx5kvS2ioMN50E6CzTzHUA3Gsapi0ou0zk7z23IJfB957kZcPqHruceDwB9IZ_Hd10nJ17xsfCrupPgwPEkUxIVBtvvHXRMt5kKc6KywwKoKFKPI_GIs1iOIgPy2/s1600/age_dist.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib8UhoqERSCd3CyusrLx5kvS2ioMN50E6CzTzHUA3Gsapi0ou0zk7z23IJfB957kZcPqHruceDwB9IZ_Hd10nJ17xsfCrupPgwPEkUxIVBtvvHXRMt5kKc6KywwKoKFKPI_GIs1iOIgPy2/s1600/age_dist.png" height="320" width="320" /> </a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit;">The example shown here is a <span style="font-family: inherit;">modification</span> of the <a href="http://en.wikipedia.org/wiki/Genetic_drift">genetic drift</a> example<span style="font-family: inherit;"> that I showed before</span></span> - only this time I have included 4 color phenotypes. The model runs until either one phenotype dominates the population or a maximum number of iterations is reached. Reproduction allows for a individuals to have more than one offspring per time step, but skewed towards zero. Death is modeled by a constant instantaneous mortality rate. I have used such a setup with more complicated models of fish genetics and found the performance to be quite fast, even with population sizes of 300,000 individuals. The key is to maintain as much vectorization in the functions as possible.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<span style="font-family: inherit;"><b>To reproduce the example:</b></span></div>
<a name='more'></a><br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;">######################################</span>
<span style="color: #666666; font-style: italic;">### Population dynamics parameters ###</span>
<span style="color: #666666; font-style: italic;">######################################</span>
Colors <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"blue"</span><span style="color: #339933;">,</span> <span style="color: blue;">"green"</span><span style="color: #339933;">,</span> <span style="color: blue;">"orange"</span><span style="color: #339933;">,</span> <span style="color: blue;">"red"</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># population phenotypes</span>
tmax <- <span style="color: #cc66cc;">2000</span> <span style="color: #666666; font-style: italic;"># maximum time duration of simulation</span>
n.initial <- <span style="color: #cc66cc;">50</span>*<a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>Colors<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># inital population size</span>
CC <- <span style="color: #cc66cc;">500</span> <span style="color: #666666; font-style: italic;"># carrying capacity of offspring</span>
M <- <span style="color: #cc66cc;">0.5</span> <span style="color: #666666; font-style: italic;"># natural mortality</span>
<span style="color: #666666; font-style: italic;">#########################</span>
<span style="color: #666666; font-style: italic;">### Process functions ###</span>
<span style="color: #666666; font-style: italic;">#########################</span>
<span style="color: #666666; font-style: italic;"># Creation</span>
make.inds <- <a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span>id=<span style="color: black; font-weight: bold;">NaN</span><span style="color: #339933;">,</span> color=<span style="color: black; font-weight: bold;">NaN</span><span style="color: #339933;">,</span> age=<span style="color: black; font-weight: bold;">NaN</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
inds <- <a href="http://inside-r.org/r-doc/base/data.frame"><span style="color: #003399; font-weight: bold;">data.frame</span></a><span style="color: #009900;">(</span>id = id<span style="color: #339933;">,</span> color = color<span style="color: #339933;">,</span> age = <span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># give then starting attributes (id, color, age)</span>
inds
<span style="color: #009900;">}</span>
<span style="color: #666666; font-style: italic;"># Growth</span>
grow.inds <- <a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span>inds<span style="color: #009900;">)</span><span style="color: #009900;">{</span>
inds$age <- inds$age + <span style="color: #cc66cc;">1</span> <span style="color: #666666; font-style: italic;"># advance age by one</span>
inds
<span style="color: #009900;">}</span>
<span style="color: #666666; font-style: italic;"># Reproduction (breeding, inheritance)</span>
reproduce.inds <- <a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span>inds<span style="color: #009900;">)</span><span style="color: #009900;">{</span>
n.eggs <- <a href="http://inside-r.org/r-doc/stats/rlnorm"><span style="color: #003399; font-weight: bold;">rlnorm</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span>inds<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a>=<span style="color: #cc66cc;">0.01</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/sd"><span style="color: #003399; font-weight: bold;">sd</span></a>=<span style="color: #cc66cc;">0.7</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># how many offspring per adult</span>
n.eggs <- <a href="http://inside-r.org/r-doc/base/round"><span style="color: #003399; font-weight: bold;">round</span></a><span style="color: #009900;">(</span>n.eggs * <span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span> - <a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>n.eggs<span style="color: #009900;">)</span>/CC<span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># mediate by carrying capacity</span>
<span style="color: black; font-weight: bold;">if</span><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>n.eggs<span style="color: #009900;">)</span> > <span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
motherRow <- <a href="http://inside-r.org/r-doc/base/rep"><span style="color: #003399; font-weight: bold;">rep</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span>inds<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> times=n.eggs<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># mother's row</span>
offspring <- make.inds<span style="color: #009900;">(</span>id=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a><span style="color: #009900;">(</span>inds$id<span style="color: #009900;">)</span>+<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> length.out=<a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>n.eggs<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># make offspring</span>
offspring$color <- inds$color<span style="color: #009900;">[</span>motherRow<span style="color: #009900;">]</span> <span style="color: #666666; font-style: italic;"># inherit color</span>
inds <- <a href="http://inside-r.org/r-doc/base/rbind"><span style="color: #003399; font-weight: bold;">rbind</span></a><span style="color: #009900;">(</span>inds<span style="color: #339933;">,</span> offspring<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># add new offspring to adults</span>
<span style="color: #009900;">}</span>
inds
<span style="color: #009900;">}</span>
<span style="color: #666666; font-style: italic;"># Mortality</span>
kill.inds <- <a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span>inds<span style="color: #009900;">)</span><span style="color: #009900;">{</span>
pDeath <- <span style="color: #cc66cc;">1</span> - <a href="http://inside-r.org/r-doc/base/exp"><span style="color: #003399; font-weight: bold;">exp</span></a><span style="color: #009900;">(</span>-M<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># prob. of death</span>
kill <- <a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/runif"><span style="color: #003399; font-weight: bold;">runif</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span>inds<span style="color: #009900;">)</span><span style="color: #009900;">)</span> < pDeath<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># kill these ones</span>
inds <- inds<span style="color: #009900;">[</span>-kill<span style="color: #339933;">,</span><span style="color: #009900;">]</span>
inds
<span style="color: #009900;">}</span>
<span style="color: #666666; font-style: italic;">###################</span>
<span style="color: #666666; font-style: italic;">### Simulation ####</span>
<span style="color: #666666; font-style: italic;">###################</span>
<span style="color: #666666; font-style: italic;"># Initial population</span>
inds <- make.inds<span style="color: #009900;">(</span>id=<span style="color: #cc66cc;">1</span>:n.initial<span style="color: #339933;">,</span> color=<a href="http://inside-r.org/r-doc/base/as.factor"><span style="color: #003399; font-weight: bold;">as.factor</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/array"><span style="color: #003399; font-weight: bold;">array</span></a><span style="color: #009900;">(</span>Colors<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/dim"><span style="color: #003399; font-weight: bold;">dim</span></a>=n.initial<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/utils/head"><span style="color: #003399; font-weight: bold;">head</span></a><span style="color: #009900;">(</span>inds<span style="color: #339933;">,</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Object for storing results (population size in time)</span>
N <- <a href="http://inside-r.org/r-doc/base/array"><span style="color: #003399; font-weight: bold;">array</span></a><span style="color: #009900;">(</span><span style="color: black; font-weight: bold;">NaN</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/dim"><span style="color: #003399; font-weight: bold;">dim</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>tmax<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>Colors<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/colnames"><span style="color: #003399; font-weight: bold;">colnames</span></a><span style="color: #009900;">(</span>N<span style="color: #009900;">)</span> <- Colors
N<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/summary"><span style="color: #003399; font-weight: bold;">summary</span></a><span style="color: #009900;">(</span>inds$color<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Run </span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># optional starting seed</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a> <span style="color: black; font-weight: bold;">in</span> <span style="color: #cc66cc;">2</span>:tmax<span style="color: #009900;">)</span><span style="color: #009900;">{</span>
<span style="color: #666666; font-style: italic;"># population processes</span>
inds <- grow.inds<span style="color: #009900;">(</span>inds<span style="color: #009900;">)</span>
inds <- reproduce.inds<span style="color: #009900;">(</span>inds<span style="color: #009900;">)</span>
inds <- kill.inds<span style="color: #009900;">(</span>inds<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># store results</span>
N<span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span><span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/summary"><span style="color: #003399; font-weight: bold;">summary</span></a><span style="color: #009900;">(</span>inds$color<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/print"><span style="color: #003399; font-weight: bold;">print</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/paste"><span style="color: #003399; font-weight: bold;">paste</span></a><span style="color: #009900;">(</span><span style="color: blue;">"time ="</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> <span style="color: blue;">"; n = "</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>N<span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># break when one phenotype dominates</span>
<span style="color: black; font-weight: bold;">if</span><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>N<span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span><span style="color: #009900;">]</span> > <span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span> == <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span> <span style="color: #009900;">{</span><span style="color: black; font-weight: bold;">break</span><span style="color: #009900;">}</span>
<span style="color: #009900;">}</span>
N <- N<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span>:<a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span><span style="color: #009900;">]</span> <span style="color: #666666; font-style: italic;"># remove excess rows of results object</span>
<span style="color: #666666; font-style: italic;">##############</span>
<span style="color: #666666; font-style: italic;">#### Plots ###</span>
<span style="color: #666666; font-style: italic;">##############</span>
<span style="color: #666666; font-style: italic;"># Population sizes</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"pop_size.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">300</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
ylim <- <span style="color: #cc66cc;">1.2</span> * <a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>N<span style="color: #009900;">)</span>
<a href="http://inside-r.org/packages/cran/time">Time</a> <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span>N<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/time">Time</a><span style="color: #339933;">,</span> N<span style="color: #009900;">[</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> ylim=ylim<span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Population size"</span><span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>Colors<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/time">Time</a><span style="color: #339933;">,</span> N<span style="color: #009900;">[</span><span style="color: #339933;">,</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=Colors<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"topleft"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/paste"><span style="color: #003399; font-weight: bold;">paste</span></a><span style="color: #009900;">(</span>Colors<span style="color: #339933;">,</span> <span style="color: blue;">"pop."</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=Colors<span style="color: #339933;">,</span> bty=<span style="color: blue;">"n"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Age distribution of final population</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"age_dist.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">300</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/hist"><span style="color: #003399; font-weight: bold;">hist</span></a><span style="color: #009900;">(</span>inds$age<span style="color: #339933;">,</span> freq=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span> xlab=<span style="color: blue;">"Age [years]"</span><span style="color: #339933;">,</span> main=<span style="color: blue;">"Age distribution"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />
<br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com4tag:blogger.com,1999:blog-6424211413492597169.post-44368450847091523892014-09-17T13:35:00.000+02:002014-09-17T17:36:05.983+02:00Maximal Information Coefficient (Part II)<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRcPSLsXKbxRKpk2a_lITuohneRCZP8tyY6PzWeZbJ_JItFIqltpdAlDdpBLbrTBfMFTHwzcT8eigm36bN48rOCJhFjKqvTvuSgLRqM-QevoZUQEpFHVnPH3ZwpFpnW3d9Fws5o3-S7_Jl/s1600/MIC_vs_Pearson.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRcPSLsXKbxRKpk2a_lITuohneRCZP8tyY6PzWeZbJ_JItFIqltpdAlDdpBLbrTBfMFTHwzcT8eigm36bN48rOCJhFjKqvTvuSgLRqM-QevoZUQEpFHVnPH3ZwpFpnW3d9Fws5o3-S7_Jl/s1600/MIC_vs_Pearson.png" height="186" width="400" /></a></div>
<br />
<br />
A while back, <a href="http://menugget.blogspot.de/2011/12/maximal-information-coefficient-mic.html">I wrote a post</a> simply announcing a recent paper that described a new statistic called the "Maximal Information Coefficient" (MIC), which is able to describe the correlation between paired variables regardless of linear or nonlinear relationship. This turned out to be quite a popular post, and included a lively discussion as to the merits of the work and difficulties in using the software provided by the authors. Regarding the latter, I also had difficulties running the software on R and thus did not include an example. Checking back on this topic, I was pleased to see that an R package had subsequently been developed: <a href="http://cran.r-project.org/web/packages/minerva/index.html">minerva: Maximal Information-Based Nonparametric Exploration R package for Variable Analysis</a> (Albanese et al. 2013). Further documentation of the package can be found here: <a href="http://minepy.sourceforge.net/">http://minepy.sourceforge.net/</a><br />
<br />
I tried out the package on the <a href="http://www.exploredata.net/Downloads/Baseball-Data-Set">baseball data set</a> used in the original paper by Reshef et al. (2011), where a suite of variables are correlated against a baseball player's salary. The author's state in their paper:<br />
<blockquote class="tr_bq">
<i>"In the MLB data set (131 variables), MIC and ρ both identified many linear relationships, but interesting differences emerged. On the basis of p, the strongest three correlates with player salary are walks, intentional walks, and runs batted in. By contrast, the strongest three associations according to MIC are hits, total bases, and a popular aggregate offensive statistic called Replacement Level Marginal Lineup Value (27, 34) (fig. S12 and table S12). We leave it to baseball enthusiasts to decide which of these statistics are (or should be!) more strongly tied to salary."</i></blockquote>
Here is a summary from the results computed with the function <span style="font-family: "Courier New",Courier,monospace;">mine()</span> of the minerva package (top 10 ranking MIC coefficients), which reproduces the same results as are shown in the Supplementary table S12 of the original paper:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc8ve8gAijDIZ1l2d4rB8lulfZMtiy3Pigkucv6cnKYp8SG8fbd9JVMZMZO8TVVfyK5KcunXNMlEYI76FFeePcp5o-FA_ej4lzBGSgf-2GlVDBR4CVsxFlnjLknETXDbX6ayr3SGZ8pacX/s1600/minerva_res.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc8ve8gAijDIZ1l2d4rB8lulfZMtiy3Pigkucv6cnKYp8SG8fbd9JVMZMZO8TVVfyK5KcunXNMlEYI76FFeePcp5o-FA_ej4lzBGSgf-2GlVDBR4CVsxFlnjLknETXDbX6ayr3SGZ8pacX/s1600/minerva_res.png" height="162" width="320" /></a></div>
<br />
For a visual representation of these results, the top figure plots MIC vs. Pearson and MIC Rank vs. Pearson Rank. Thanks to minerva author and maintainer M. Filosi for helping in reproducing the example.<br />
<br />
<br />
<b>References</b>:<br />
<br />
Albanese, D., Filosi, M., Visintainer, R., Riccadonna, S., Jurman, G., & Furlanello, C. (2013). minerva and minepy: a C engine for the MINE suite and its R, Python and MATLAB wrappers. Bioinformatics, 29(3), 407-408. [<a href="http://bioinformatics.oxfordjournals.org/content/29/3/407.full.pdf+html">link</a>]<br />
<br />
Reshef, D. N., Reshef, Y. A., Finucane, H. K., Grossman, S. R., McVean, G., Turnbaugh, P. J., ... & Sabeti, P. C. (2011). Detecting novel associations in large data sets. science, 334(6062), 1518-1524. [<a href="http://www.sciencemag.org/content/334/6062/1518.full">link</a>]<br />
<br />
<b><br /></b>
<b>Code to reproduce the example</b>:<br />
<a name='more'></a><br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span>minerva<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Load data</span>
dat <- <a href="http://inside-r.org/r-doc/utils/read.csv"><span style="color: #003399; font-weight: bold;">read.csv</span></a><span style="color: #009900;">(</span><span style="color: blue;">"MLB2008.csv"</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># from http://www.exploredata.net/Downloads/Baseball-Data-Set</span>
x <- dat<span style="color: #009900;">[</span><span style="color: #339933;">,</span>-<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #009900;">]</span>
excl <- <a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/diag"><span style="color: #003399; font-weight: bold;">diag</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/var"><span style="color: #003399; font-weight: bold;">var</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span><span style="color: #009900;">)</span> < 1e-5<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># exclude variables with low variance</span>
x <- x<span style="color: #009900;">[</span><span style="color: #339933;">,</span>-excl<span style="color: #009900;">]</span>
y <- dat$SALARY
<span style="color: #666666; font-style: italic;"># Analysis</span>
M <- mine<span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> y=y<span style="color: #339933;">,</span> alpha=<span style="color: #cc66cc;">0.7</span><span style="color: #009900;">)</span>
P <- <a href="http://inside-r.org/r-doc/stats/cor"><span style="color: #003399; font-weight: bold;">cor</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> y=y<span style="color: #009900;">)</span>
res <- <a href="http://inside-r.org/r-doc/base/data.frame"><span style="color: #003399; font-weight: bold;">data.frame</span></a><span style="color: #009900;">(</span>MIC = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>M$MIC<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/rownames"><span style="color: #003399; font-weight: bold;">rownames</span></a><span style="color: #009900;">(</span>res<span style="color: #009900;">)</span> <- <a href="http://inside-r.org/r-doc/base/rownames"><span style="color: #003399; font-weight: bold;">rownames</span></a><span style="color: #009900;">(</span>M$MIC<span style="color: #009900;">)</span>
res$MIC_Rank <- <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span>res<span style="color: #009900;">)</span> - <a href="http://inside-r.org/r-doc/base/rank"><span style="color: #003399; font-weight: bold;">rank</span></a><span style="color: #009900;">(</span>res$MIC<span style="color: #339933;">,</span> ties.method=<span style="color: blue;">"first"</span><span style="color: #009900;">)</span> + <span style="color: #cc66cc;">1</span>
res$Pearson <- P
res$Pearson_Rank <- <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span>res<span style="color: #009900;">)</span> - <a href="http://inside-r.org/r-doc/base/rank"><span style="color: #003399; font-weight: bold;">rank</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/abs"><span style="color: #003399; font-weight: bold;">abs</span></a><span style="color: #009900;">(</span>res$Pearson<span style="color: #009900;">)</span><span style="color: #339933;">,</span> ties.method=<span style="color: blue;">"first"</span><span style="color: #009900;">)</span> + <span style="color: #cc66cc;">1</span>
res <- res<span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/order"><span style="color: #003399; font-weight: bold;">order</span></a><span style="color: #009900;">(</span>res$MIC_Rank<span style="color: #009900;">)</span><span style="color: #339933;">,</span><span style="color: #009900;">]</span>
<a href="http://inside-r.org/r-doc/utils/head"><span style="color: #003399; font-weight: bold;">head</span></a><span style="color: #009900;">(</span>res<span style="color: #339933;">,</span> n=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Plot</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"MIC_vs_Pearson.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">7.5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">3.5</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>mfrow=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>MIC ~ <a href="http://inside-r.org/r-doc/base/abs"><span style="color: #003399; font-weight: bold;">abs</span></a><span style="color: #009900;">(</span>Pearson<span style="color: #009900;">)</span><span style="color: #339933;">,</span> res<span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">21</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> bg=<span style="color: #cc66cc;">5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>MIC_Rank ~ Pearson_Rank<span style="color: #339933;">,</span> res<span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">21</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> bg=<span style="color: #cc66cc;">5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />
<br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com2tag:blogger.com,1999:blog-6424211413492597169.post-46007950667872417852014-09-15T12:16:00.001+02:002015-04-07T11:48:37.563+02:00PCA / EOF for data with missing values - a comparison of accuracy<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: left;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU0VTPrHiAjHdiaw746MNjR1nTPkaxkQbLsdRZm9zSiT7qHnjZw_B5UZs5UmM5qcnEXBy1e7rmwMwo_w2No6r9HheqD8heWtXWissCcDTDT2KcFIsrKFwd8uOGDDS3HesMSN_fyKZzQXZI/s1600/eof_recon_error.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU0VTPrHiAjHdiaw746MNjR1nTPkaxkQbLsdRZm9zSiT7qHnjZw_B5UZs5UmM5qcnEXBy1e7rmwMwo_w2No6r9HheqD8heWtXWissCcDTDT2KcFIsrKFwd8uOGDDS3HesMSN_fyKZzQXZI/s1600/eof_recon_error.png" height="320" width="320" /></a></div>
</div>
Not all Principal Component Analysis (PCA) (also called Empirical Orthogonal Function analysis, EOF) approaches are equal when it comes to dealing with a data field that contain missing values (i.e. "gappy"). The following post compares several methods by assessing the accuracy of the derived PCs to reconstruct the "true" data set, as was similarly conducted by Taylor et al. (2013). <br />
<br />
The gappy EOF methods to be compared are:<br />
<ol>
<li><b>LSEOF</b> - "<i>Least-Squares Empirical Orthogonal Functions</i>" - The traditional approach, which modifies the covariance matrix used for the EOF decomposition by the number of paired observations, and further scales the projected PCs by these same weightings (see Björnsson and Venegas 1997, von Storch and Zweiers 1999 for details).</li>
<li><b>RSEOF</b> - "<i>Recursively Subtracted Empirical Orthogonal Functions</i>"<b> </b>- This approach modifies the LSEOF approach by recursively solving for the leading EOF, whose reconstructed field is then subtracted from the original field. This recursive subtraction is done until a given stopping point (i.e. number of EOFs, % remaining variance, etc.) (see Taylor et al. 2013 for details)</li>
<li><b>DINEOF</b> - "<i>Data Interpolating Empirical Orthogonal Functions</i>" - This approach gradually solves for EOFs by means of an iterative algorothm to fit EOFS to a given number of non-missing value reference points (small percentage of observations) via RMSE minimization (see Beckers and Rixen 2003 for details). </li>
</ol>
I have introduced both the LSEOF [<a href="http://menugget.blogspot.de/2011/11/empirical-orthogonal-function-eof.html">link</a>] and DINEOF [<a href="http://menugget.blogspot.de/2012/10/dineof-data-interpolating-empirical.html">link</a>] methods in the past, but have never directly compared them for the blog. The purpose of this post is to make this comparison and to also introduce a more general EOF function that is capable of conducting RSEOF. All analyses can be reproduced following installation of the "sinkr" package: <a href="https://github.com/marchtaylor/sinkr">https://github.com/marchtaylor/sinkr</a><br />
<br />
The basic problem comes down to the difficulties of decomposing a matrix that is not "positive-definite", i.e. the estimated covariance matrix from a gappy data set. DINEOF entirely avoids this issue by first interpolating the values to create a full data field, while LSEOF and RSEOF rely on decomposing this estimation. A known problem is that the trailing EOFs derived from such a matrix are amplified in their singular values, which can consequently amplify errors in field reconstructions when included. The RSEOF approach thus attempts to remedy these issues by recursively solving for only leading EOFs. In the following examples, I show the performance of the three approaches in terms of reconstructing the data field (including the "true" values).<br />
<br />
<b>Example 1 - Synthetic data set:</b><br />
The first example uses a synthetic data set used by Beckers and Rixen (2003) in their introduction of the DINEOF approach. The accuracy of the reconstruction is dependent on the number of EOFs used. In a non-gappy example, a perfect reconstruction should be possible using this full set of EOFs - In fact it only
takes 9 EOFs when using the non-noisy true field, since it is a composite of 9 signals. In the case of the noisy, gappy data sets, reconstructions with trailing EOFs may increase errors. This can be seen in the figure at the top of the post showing RMSE vs the number of EOFs used in the reconstruction.<br />
<br />
<div style="text-align: left;">
The figure shows the DINEOF approach to be the most accurate. The LSEOF approach has a clear RSME minimum with 4 EOFs, while the RSEOF approach was largely able to remedy the amplification of error when using trailing EOFs. The problem of error amplification is even more dramatic when viewed visually, as in the following where the full set of EOFs have been used:<br />
<a name='more'></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjajhMqroxaRAIClhXqw0eU1ihJ30vnGWu9bOx2ISSb6bo-ZM46QUMLHKTcmZrZ0_FhZRg340isjTbhi4Q71baVrYSSptI6KRsdKGcEADO3ljj95PE-6ahDDOymWaSCGXTo6uEaWGNBwERQ/s1600/eof_interpolation.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjajhMqroxaRAIClhXqw0eU1ihJ30vnGWu9bOx2ISSb6bo-ZM46QUMLHKTcmZrZ0_FhZRg340isjTbhi4Q71baVrYSSptI6KRsdKGcEADO3ljj95PE-6ahDDOymWaSCGXTo6uEaWGNBwERQ/s1600/eof_interpolation.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjajhMqroxaRAIClhXqw0eU1ihJ30vnGWu9bOx2ISSb6bo-ZM46QUMLHKTcmZrZ0_FhZRg340isjTbhi4Q71baVrYSSptI6KRsdKGcEADO3ljj95PE-6ahDDOymWaSCGXTo6uEaWGNBwERQ/s1600/eof_interpolation.png" height="256" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjajhMqroxaRAIClhXqw0eU1ihJ30vnGWu9bOx2ISSb6bo-ZM46QUMLHKTcmZrZ0_FhZRg340isjTbhi4Q71baVrYSSptI6KRsdKGcEADO3ljj95PE-6ahDDOymWaSCGXTo6uEaWGNBwERQ/s1600/eof_interpolation.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
It's clear that the LSEOF approach is only successful in reconstructing the non-gap values of the observed data, while values of gaps are washed out by the error in trailing EOFs. In fact, given the associated amplitude of the noise, there were only about 4 EOFs modes that really carry any information across the entire field. Again, DINEOF does a fine job in precisely estimating the EOF modes, even in cases where modes were quite similar in magnitude (e.g. EOFs 2 & 3). The LSEOF and RSEOF approaches create more of a mixture out of the modes 2 & 3 :<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvVP6Pfl_ChtSlS0F32KiRKSbPHmSAow8E6sWa-I33jnxMHNDp2bmNeO4-D8M3hQTcmoGY2NIppIvoO4cCoXyMkIyXu93xnJkFrzTPMM2n-qqiN0vCvx-PwrqY34vuF2ZxVytZbeOXYff5/s1600/eofs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvVP6Pfl_ChtSlS0F32KiRKSbPHmSAow8E6sWa-I33jnxMHNDp2bmNeO4-D8M3hQTcmoGY2NIppIvoO4cCoXyMkIyXu93xnJkFrzTPMM2n-qqiN0vCvx-PwrqY34vuF2ZxVytZbeOXYff5/s1600/eofs.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvVP6Pfl_ChtSlS0F32KiRKSbPHmSAow8E6sWa-I33jnxMHNDp2bmNeO4-D8M3hQTcmoGY2NIppIvoO4cCoXyMkIyXu93xnJkFrzTPMM2n-qqiN0vCvx-PwrqY34vuF2ZxVytZbeOXYff5/s1600/eofs.png" height="400" width="368" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<b>Example 2 - Sea Level Pressure:</b></div>
<div class="separator" style="clear: both; text-align: left;">
In a more natural example - sea level pressure (SLP) is subjected to the three methods as well. This data set is widely available, which is why I use it here, but it technically doesn't contain gaps - I have added 50% gaps to the data field in a random fashion. High resolution daily chlorophyll or sea surface temperature remote sensing data would be a more obvious application for this analysis, but for the purposes of reproduction, I'll stick with SLP. In this case, EOF provides us with both the spatial and temporal patterns of the dominant modes of variability. PCs (i.e. the temporal signal) have been scaled in magnitude by removing the amplitude of the singular values.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
There is very little difference in the leading 3 modes (the EOF modes of the "true" field is shown for comparison). The explained variance (%) of each EOF is given in the upper right corner of the spatial mode:</div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvVP6Pfl_ChtSlS0F32KiRKSbPHmSAow8E6sWa-I33jnxMHNDp2bmNeO4-D8M3hQTcmoGY2NIppIvoO4cCoXyMkIyXu93xnJkFrzTPMM2n-qqiN0vCvx-PwrqY34vuF2ZxVytZbeOXYff5/s1600/eofs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqSBten4rVbOA4xY_97VHZ17U-cLTNvqJ5CpURFONigmdP8lFZVMHZ-w0yt88AbTbYwMNGQP73ircQujONZSjpr9LFKYpYIUxLSKe_p2f6hU3S_VTVTVKvq5-zGROOwfR0K2IbW77jGmLq/s1600/slp_top3_eof_maps.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqSBten4rVbOA4xY_97VHZ17U-cLTNvqJ5CpURFONigmdP8lFZVMHZ-w0yt88AbTbYwMNGQP73ircQujONZSjpr9LFKYpYIUxLSKe_p2f6hU3S_VTVTVKvq5-zGROOwfR0K2IbW77jGmLq/s1600/slp_top3_eof_maps.png" height="640" width="584" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
In fact, given the large area included in the analysis, there are many significant modes and differences in the error of the reconstruction only become obvious after about 5 EOFs. In the example by Taylor et al. (2013) for chlorophyll anomalies in the Galapagos archipelago, stark differences were immediately seen due to a predominance of a single EOF mode as influenced by ENSO variability.</div>
<div class="separator" style="clear: both; text-align: left;">
For SLP anomalies the error of the reconstruction is not problematic until the higher trailing modes are used:</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8oYmHn0Y9rSVYHYr9dnItpBotENq3rDtcyD52bAM4J6i_l46E4Np69WQ8hXG3VROnBsWUKwF-VMJ4fdbQklXdgjzFzYhg-9c1aaF6CFWXrYB2uD6fMLtSqU1TkwdLYesdd8DLul7RR4TD/s1600/slp_eof_recon_error.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8oYmHn0Y9rSVYHYr9dnItpBotENq3rDtcyD52bAM4J6i_l46E4Np69WQ8hXG3VROnBsWUKwF-VMJ4fdbQklXdgjzFzYhg-9c1aaF6CFWXrYB2uD6fMLtSqU1TkwdLYesdd8DLul7RR4TD/s1600/slp_eof_recon_error.png" height="320" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: left;">
Interestingly the point of error minimum in the LSEOF approach is with 19 EOFs, which is nearly the same number that is given by a null-model permutation test to determine EOF significance (n = 18 EOFs) (similar to "Rule N" by Preisendorfer 1988):</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIhybDv99UBND1fA9JNWX_F4bB8eaILlFV1px8GrybbY7GxWXArIpu8_P7Z76h43cszjZ3uwmCdjlLM7a-1UyRHag5FqD8Sp5MGAVdbuNkrGk9B0w0Ez_gJoQFZi3KOp5BJQ-YQXiHtDvq/s1600/slp_eof_significance.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIhybDv99UBND1fA9JNWX_F4bB8eaILlFV1px8GrybbY7GxWXArIpu8_P7Z76h43cszjZ3uwmCdjlLM7a-1UyRHag5FqD8Sp5MGAVdbuNkrGk9B0w0Ez_gJoQFZi3KOp5BJQ-YQXiHtDvq/s1600/slp_eof_significance.png" height="320" width="320" /></a></div>
I guess this final example may be a good illustration why the LSEOF has persisted in so many climate science references - The problems in EOF estimation may only become apparent in data sets where variability is restricted to a small number of modes, and many applications of EOF are typically applied to larger geographic regions.<br />
<br />
The DINEOF method appears to be a good choice in the estimation of EOFs in gappy data. One is obviously not going to have a "true" data set by which to gauge the relative performance of approaches, but given the guidelines of selecting reference values, DINEOF should perform well under most cases. The RSEOF method also does a good job in correcting for the issues of LSEOF, and is also much less computationally intensive than DINEOF - In the SLP example, deriving 25 EOFs from the data field (dimensions = 1536 x 451) took 68 sec. with DINEOF vs 14 sec. with RSEOF (~20% of the time).<br />
<br />
Again, the functions used for this analysis are available within the <a href="https://github.com/marchtaylor/sinkr">sinkr package</a> - Installation of the sinkr package via <a href="http://cran.r-project.org/web/packages/devtools/index.html">devtools</a> is outlined in the first lines of the example script below. <br />
<br />
<br />
<br />
<b>References:</b><br />
<br />
Beckers, J.-M., Rixen, M., 2003. EOF Calculations and Data Filling from Incomplete Oceanographic Datasets. Journal of Atmospheric and Oceanic Technology 20.12: 1839-1856. [<a href="http://dx.doi.org/10.1175/1520-0426%282003%29020%3C1839:ECADFF%3E2.0.CO;2">link</a>]<br />
<br />
Björnsson, H. and Venegas, S.A., 1997. A manual for EOF and SVD analyses of climate data, McGill University, CCGCR Report No. 97-1, Montréal, Québec, 52pp. [<a href="http://www.nerc-essc.ac.uk/~rec/EOFs/bjornsson_venegas.pdf">link</a>]<br />
<br />
Preisendorfer, R. W., Principle Component Analysis in Meteorology and Oceanography, Elsevier Sci., New York, 1988. <br />
<br />
<div class="articleMeta">
Taylor, M.H., Losch, M., Wenzel, M., Schröter, J., 2013. On the Sensitivity of Field Reconstruction and
Prediction Using Empirical Orthogonal Functions Derived from Gappy Data.
J. Climate, 26, 9194–9205. doi: http://dx.doi.org/10.1175/JCLI-D-13-00089.1. [<a href="http://dx.doi.org/10.6084/m9.figshare.732650">pdf</a>] </div>
<br />
von Storch, H, Zwiers, F.W. (1999). Statistical analysis in climate research. Cambridge University Press.<br />
<br />
<br />
<br />
<b>Code to reproduce:</b><br />
<br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;">#library(devtools)</span>
<span style="color: #666666; font-style: italic;">#install_github("marchtaylor/sinkr")</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span>sinkr<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">###################</span>
<span style="color: #666666; font-style: italic;">### 1st example ###</span>
<span style="color: #666666; font-style: italic;">###################</span>
<span style="color: #666666; font-style: italic;">### Make data</span>
<span style="color: #666666; font-style: italic;">#color palette</span>
pal <- <a href="http://inside-r.org/r-doc/grDevices/colorRampPalette"><span style="color: #003399; font-weight: bold;">colorRampPalette</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"blue"</span><span style="color: #339933;">,</span> <span style="color: blue;">"cyan"</span><span style="color: #339933;">,</span> <span style="color: blue;">"yellow"</span><span style="color: #339933;">,</span> <span style="color: blue;">"red"</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#Generate data</span>
m=<span style="color: #cc66cc;">50</span>
n=<span style="color: #cc66cc;">100</span>
frac.gaps <- <span style="color: #cc66cc;">0.5</span> <span style="color: #666666; font-style: italic;"># the fraction of data with NaNs</span>
N.S.ratio <- <span style="color: #cc66cc;">0.1</span> <span style="color: #666666; font-style: italic;"># the Noise to Signal ratio for adding noise to data</span>
x <- <span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>m<span style="color: #009900;">)</span>*<span style="color: #cc66cc;">2</span>*<span style="color: black; font-weight: bold;">pi</span><span style="color: #009900;">)</span>/m
<a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a> <- <span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>n<span style="color: #009900;">)</span>*<span style="color: #cc66cc;">2</span>*<span style="color: black; font-weight: bold;">pi</span><span style="color: #009900;">)</span>/n
<span style="color: #666666; font-style: italic;">#True field</span>
Xt <-
<a href="http://inside-r.org/r-doc/base/outer"><span style="color: #003399; font-weight: bold;">outer</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sin"><span style="color: #003399; font-weight: bold;">sin</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/sin"><span style="color: #003399; font-weight: bold;">sin</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #009900;">)</span><span style="color: #009900;">)</span> +
<a href="http://inside-r.org/r-doc/base/outer"><span style="color: #003399; font-weight: bold;">outer</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sin"><span style="color: #003399; font-weight: bold;">sin</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2.1</span>*x<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/sin"><span style="color: #003399; font-weight: bold;">sin</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2.1</span>*<a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #009900;">)</span><span style="color: #009900;">)</span> +
<a href="http://inside-r.org/r-doc/base/outer"><span style="color: #003399; font-weight: bold;">outer</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sin"><span style="color: #003399; font-weight: bold;">sin</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3.1</span>*x<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/sin"><span style="color: #003399; font-weight: bold;">sin</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3.1</span>*<a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #009900;">)</span><span style="color: #009900;">)</span> +
<a href="http://inside-r.org/r-doc/base/outer"><span style="color: #003399; font-weight: bold;">outer</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/tanh"><span style="color: #003399; font-weight: bold;">tanh</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/cos"><span style="color: #003399; font-weight: bold;">cos</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #009900;">)</span><span style="color: #009900;">)</span> +
<a href="http://inside-r.org/r-doc/base/outer"><span style="color: #003399; font-weight: bold;">outer</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/tanh"><span style="color: #003399; font-weight: bold;">tanh</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span>*x<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/cos"><span style="color: #003399; font-weight: bold;">cos</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2.1</span>*<a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #009900;">)</span><span style="color: #009900;">)</span> +
<a href="http://inside-r.org/r-doc/base/outer"><span style="color: #003399; font-weight: bold;">outer</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/tanh"><span style="color: #003399; font-weight: bold;">tanh</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span>*x<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/cos"><span style="color: #003399; font-weight: bold;">cos</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.1</span>*<a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #009900;">)</span><span style="color: #009900;">)</span> +
<a href="http://inside-r.org/r-doc/base/outer"><span style="color: #003399; font-weight: bold;">outer</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/tanh"><span style="color: #003399; font-weight: bold;">tanh</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2.4</span>*x<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/cos"><span style="color: #003399; font-weight: bold;">cos</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1.1</span>*<a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #009900;">)</span><span style="color: #009900;">)</span> +
<a href="http://inside-r.org/r-doc/base/tanh"><span style="color: #003399; font-weight: bold;">tanh</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/outer"><span style="color: #003399; font-weight: bold;">outer</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> FUN=<span style="color: blue;">"+"</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> +
<a href="http://inside-r.org/r-doc/base/tanh"><span style="color: #003399; font-weight: bold;">tanh</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/outer"><span style="color: #003399; font-weight: bold;">outer</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span>*<a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #339933;">,</span> FUN=<span style="color: blue;">"+"</span><span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
Xt <- <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #009900;">(</span>Xt<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>Xt<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=pal<span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#Noise field</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
RAND <- <a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/runif"><span style="color: #003399; font-weight: bold;">runif</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>Xt<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a>=-<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a>=<a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span>Xt<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a>=<a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a><span style="color: #009900;">(</span>Xt<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
R <- RAND * N.S.ratio * Xt
<span style="color: #666666; font-style: italic;">#True field + Noise field</span>
Xp <- Xt + R
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>Xp<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=pal<span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#Observed field with gaps</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
gaps <- <a href="http://inside-r.org/r-doc/base/sample"><span style="color: #003399; font-weight: bold;">sample</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>Xp<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> frac.gaps*<a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>Xp<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
Xo <- <a href="http://inside-r.org/r-doc/base/replace"><span style="color: #003399; font-weight: bold;">replace</span></a><span style="color: #009900;">(</span>Xp<span style="color: #339933;">,</span> gaps<span style="color: #339933;">,</span> <span style="color: black; font-weight: bold;">NaN</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>Xo<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=pal<span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">### Interpolation, EOF, and Reconstruction ###</span>
<span style="color: #666666; font-style: italic;">#Interpolation with DINEOF</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
din <- dineof<span style="color: #009900;">(</span>Xo<span style="color: #009900;">)</span>
Xa <- din$Xa
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>Xa<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=pal<span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># EOF</span>
Et <- eof<span style="color: #009900;">(</span>Xp<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># true</span>
El <- eof<span style="color: #009900;">(</span>Xo<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># obs, lseof</span>
Er <- eof<span style="color: #009900;">(</span>Xo<span style="color: #339933;">,</span> recursive=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># obs, rseof</span>
Ed <- eof<span style="color: #009900;">(</span>Xa<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># obs, dineof + lseof</span>
<span style="color: #666666; font-style: italic;">###Reconstruction</span>
VALS <- <a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>Xo == <span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span>
Rt <- eofRecon<span style="color: #009900;">(</span>Et<span style="color: #009900;">)</span>
Rl <- eofRecon<span style="color: #009900;">(</span>El<span style="color: #009900;">)</span>
Rr <- eofRecon<span style="color: #009900;">(</span>Er<span style="color: #009900;">)</span>
Rd <- eofRecon<span style="color: #009900;">(</span>Ed<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">###Plot</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/file"><span style="color: #003399; font-weight: bold;">file</span></a>=<span style="color: blue;">"eof_interpolation.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">7</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">4.5</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>mfrow=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> bg=<span style="color: blue;">"white"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>Xt<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=pal<span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"True"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>Xp<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=pal<span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"True + noise"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>Xo<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=pal<span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Observed"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>Rl<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=pal<span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"LSEOF recon"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>Rr<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=pal<span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"RSEOF recon"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>Rd<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=pal<span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"DINEOF recon"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/file"><span style="color: #003399; font-weight: bold;">file</span></a>=<span style="color: blue;">"eofs.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">6</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">6.5</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>no.readonly=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/layout"><span style="color: #003399; font-weight: bold;">layout</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">9</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> byrow=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> widths=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> heights=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> bg=<span style="color: blue;">"white"</span><span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">9</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
El.sign <- <a href="http://inside-r.org/r-doc/base/sign"><span style="color: #003399; font-weight: bold;">sign</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/cor"><span style="color: #003399; font-weight: bold;">cor</span></a><span style="color: #009900;">(</span>Et$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> El$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span>i<span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
Er.sign <- <a href="http://inside-r.org/r-doc/base/sign"><span style="color: #003399; font-weight: bold;">sign</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/cor"><span style="color: #003399; font-weight: bold;">cor</span></a><span style="color: #009900;">(</span>Et$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> Er$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span>i<span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
Ed.sign <- <a href="http://inside-r.org/r-doc/base/sign"><span style="color: #003399; font-weight: bold;">sign</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/cor"><span style="color: #003399; font-weight: bold;">cor</span></a><span style="color: #009900;">(</span>Et$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> Ed$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span>i<span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
YLIM <- <a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>Et$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> Ed$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span>i<span style="color: #009900;">]</span>*Ed.sign<span style="color: #339933;">,</span> El$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span>i<span style="color: #009900;">]</span>*El.sign<span style="color: #339933;">,</span> Er$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span>i<span style="color: #009900;">]</span>*Er.sign<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> Et$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> ylim=YLIM<span style="color: #339933;">,</span> xlab=<span style="color: blue;">""</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">""</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">8</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> El$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span>i<span style="color: #009900;">]</span>*El.sign<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> Er$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span>i<span style="color: #009900;">]</span>*Er.sign<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> Ed$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span>i<span style="color: #009900;">]</span>*Ed.sign<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/paste"><span style="color: #003399; font-weight: bold;">paste</span></a><span style="color: #009900;">(</span><span style="color: blue;">"EOF"</span><span style="color: #339933;">,</span> i<span style="color: #009900;">)</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">14</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> axes=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #339933;">,</span> bty=<span style="color: blue;">"n"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"center"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"LSEOF (True)"</span><span style="color: #339933;">,</span> <span style="color: blue;">"LSEOF (Obs.)"</span><span style="color: #339933;">,</span> <span style="color: blue;">"RSEOF (Obs.)"</span><span style="color: #339933;">,</span> <span style="color: blue;">"DINEOF (Obs.)"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> pch=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span> <span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span> <span style="color: black; font-weight: bold;">NA</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> lty=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span>:<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> bty=<span style="color: blue;">"n"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">###Error of recon</span>
neof <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">15</span><span style="color: #009900;">)</span>
rmse.Et <- <span style="color: black; font-weight: bold;">NaN</span> * neof
rmse.El <- <span style="color: black; font-weight: bold;">NaN</span> * neof
rmse.Er <- <span style="color: black; font-weight: bold;">NaN</span> * neof
rmse.Ed <- <span style="color: black; font-weight: bold;">NaN</span> * neof
refField <- <span style="color: blue;">"Xp"</span>
<span style="color: black; font-weight: bold;">for</span> <span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> neof<span style="color: #009900;">)</span><span style="color: #009900;">{</span>
Rt <- eofRecon<span style="color: #009900;">(</span>Et<span style="color: #339933;">,</span> <a href="http://inside-r.org/packages/cran/PCS">pcs</a>=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>i<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
Rl <- eofRecon<span style="color: #009900;">(</span>El<span style="color: #339933;">,</span> <a href="http://inside-r.org/packages/cran/PCS">pcs</a>=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>i<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
Rr <- eofRecon<span style="color: #009900;">(</span>Er<span style="color: #339933;">,</span> <a href="http://inside-r.org/packages/cran/PCS">pcs</a>=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>i<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
Rd <- eofRecon<span style="color: #009900;">(</span>Ed<span style="color: #339933;">,</span> <a href="http://inside-r.org/packages/cran/PCS">pcs</a>=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>i<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
rmse.Et<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/sqrt"><span style="color: #003399; font-weight: bold;">sqrt</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">(</span><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/get"><span style="color: #003399; font-weight: bold;">get</span></a><span style="color: #009900;">(</span>refField<span style="color: #009900;">)</span> - Rt<span style="color: #009900;">)</span>^<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> na.rm=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
rmse.El<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/sqrt"><span style="color: #003399; font-weight: bold;">sqrt</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">(</span><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/get"><span style="color: #003399; font-weight: bold;">get</span></a><span style="color: #009900;">(</span>refField<span style="color: #009900;">)</span> - Rl<span style="color: #009900;">)</span>^<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> na.rm=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
rmse.Er<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/sqrt"><span style="color: #003399; font-weight: bold;">sqrt</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">(</span><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/get"><span style="color: #003399; font-weight: bold;">get</span></a><span style="color: #009900;">(</span>refField<span style="color: #009900;">)</span> - Rr<span style="color: #009900;">)</span>^<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> na.rm=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
rmse.Ed<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/sqrt"><span style="color: #003399; font-weight: bold;">sqrt</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">(</span><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/get"><span style="color: #003399; font-weight: bold;">get</span></a><span style="color: #009900;">(</span>refField<span style="color: #009900;">)</span> - Rd<span style="color: #009900;">)</span>^<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> na.rm=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
ylim <- <a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>rmse.Et<span style="color: #339933;">,</span> rmse.El<span style="color: #339933;">,</span> rmse.Er<span style="color: #339933;">,</span> rmse.Ed<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/file"><span style="color: #003399; font-weight: bold;">file</span></a>=<span style="color: blue;">"eof_recon_error.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>neof<span style="color: #339933;">,</span> rmse.Et<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> ylim=ylim<span style="color: #339933;">,</span> xlab=<span style="color: blue;">"No. EOFs"</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"RMSE"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/grid"><span style="color: #003399; font-weight: bold;">grid</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>neof<span style="color: #339933;">,</span> rmse.Et<span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">21</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> bg=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #009900;">(</span>rmse.Et == <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span>rmse.Et<span style="color: #009900;">)</span><span style="color: #009900;">)</span>+<span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>neof<span style="color: #339933;">,</span> rmse.El<span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">21</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> bg=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #009900;">(</span>rmse.El == <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span>rmse.El<span style="color: #009900;">)</span><span style="color: #009900;">)</span>+<span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>neof<span style="color: #339933;">,</span> rmse.Er<span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">21</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> bg=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #009900;">(</span>rmse.Er == <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span>rmse.Er<span style="color: #009900;">)</span><span style="color: #009900;">)</span>+<span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>neof<span style="color: #339933;">,</span> rmse.Ed<span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">21</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> bg=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #009900;">(</span>rmse.Ed == <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span>rmse.Ed<span style="color: #009900;">)</span><span style="color: #009900;">)</span>+<span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"topleft"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"LSEOF (obs.)"</span><span style="color: #339933;">,</span> <span style="color: blue;">"RSEOF (obs.)"</span><span style="color: #339933;">,</span> <span style="color: blue;">"DINEOF (obs.)"</span><span style="color: #339933;">,</span> <span style="color: blue;">"Ref. (true+noise)"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> bty=<span style="color: blue;">"n"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Error of reconstruction"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Null model error comparison</span>
Err <- eofNull<span style="color: #009900;">(</span>Xp<span style="color: #339933;">,</span> centered=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> scaled=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> nperm=<span style="color: #cc66cc;">99</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/file"><span style="color: #003399; font-weight: bold;">file</span></a>=<span style="color: blue;">"eof_significance.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
ylim <- <a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>Err$Lambda.orig<span style="color: #339933;">,</span> Err$Lambda<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>Err$Lambda.orig<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a>=<span style="color: blue;">"y"</span><span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">16</span><span style="color: #339933;">,</span> ylim=ylim<span style="color: #339933;">,</span> xlab=<span style="color: blue;">"EOF"</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Lambda"</span><span style="color: #009900;">)</span>
Qs <- <a href="http://inside-r.org/r-doc/base/apply"><span style="color: #003399; font-weight: bold;">apply</span></a><span style="color: #009900;">(</span>Err$Lambda<span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/quantile"><span style="color: #003399; font-weight: bold;">quantile</span></a><span style="color: #339933;">,</span> probs=<span style="color: #cc66cc;">0.95</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>Qs<span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># 95% error quantile</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span>v=Err$n.sig+<span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/paste"><span style="color: #003399; font-weight: bold;">paste</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Significant EOFs ="</span><span style="color: #339933;">,</span> Err$n.sig<span style="color: #009900;">)</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#############################################</span>
<span style="color: #666666; font-style: italic;">### 2nd example - sea Level pressure data ###</span>
<span style="color: #666666; font-style: italic;">#############################################</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/ncdf">ncdf</a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/akima">akima</a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/maps">maps</a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span>sinkr<span style="color: #009900;">)</span>
nc <- open.ncdf<span style="color: #009900;">(</span><span style="color: blue;">"slp.mnmean.nc"</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># from http://www.esrl.noaa.gov/psd/gcos_wgsp/Gridded/data.hadslp2.html</span>
nc
slp <- get.var.ncdf<span style="color: #009900;">(</span>nc<span style="color: #339933;">,</span> <span style="color: blue;">"slp"</span><span style="color: #009900;">)</span>
lon <- get.var.ncdf<span style="color: #009900;">(</span>nc<span style="color: #339933;">,</span> <span style="color: blue;">"lon"</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#lon[which(lon>180)] <- lon[which(lon>180)]-360</span>
lat <- get.var.ncdf<span style="color: #009900;">(</span>nc<span style="color: #339933;">,</span> <span style="color: blue;">"lat"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/stats/ts"><span style="color: #003399; font-weight: bold;">ts</span></a> <- get.var.ncdf<span style="color: #009900;">(</span>nc<span style="color: #339933;">,</span> <span style="color: blue;">"time"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/stats/ts"><span style="color: #003399; font-weight: bold;">ts</span></a> <- <a href="http://inside-r.org/r-doc/base/as.Date"><span style="color: #003399; font-weight: bold;">as.Date</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/ts"><span style="color: #003399; font-weight: bold;">ts</span></a><span style="color: #339933;">,</span> origin=<span style="color: blue;">"1800-01-01"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/close"><span style="color: #003399; font-weight: bold;">close</span></a><span style="color: #009900;">(</span>nc<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># re-structure into 2-D matrix</span>
slp <- <a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>slp<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a>=<a href="http://inside-r.org/r-doc/base/dim"><span style="color: #003399; font-weight: bold;">dim</span></a><span style="color: #009900;">(</span>slp<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a>=<a href="http://inside-r.org/r-doc/base/prod"><span style="color: #003399; font-weight: bold;">prod</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/dim"><span style="color: #003399; font-weight: bold;">dim</span></a><span style="color: #009900;">(</span>slp<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> byrow=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Make grid id's</span>
grd <- <a href="http://inside-r.org/r-doc/base/expand.grid"><span style="color: #003399; font-weight: bold;">expand.grid</span></a><span style="color: #009900;">(</span>lon=lon<span style="color: #339933;">,</span> lat=lat<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Trim matrix</span>
grd.incl <- lonLatFilter<span style="color: #009900;">(</span>grd$lon<span style="color: #339933;">,</span> grd$lat<span style="color: #339933;">,</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">310</span><span style="color: #339933;">,</span> -<span style="color: #cc66cc;">30</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">30</span><span style="color: #009900;">)</span>
slp <- slp<span style="color: #009900;">[</span><span style="color: #339933;">,</span>grd.incl<span style="color: #009900;">]</span>
grd <- grd<span style="color: #009900;">[</span>grd.incl<span style="color: #339933;">,</span><span style="color: #009900;">]</span>
<span style="color: #666666; font-style: italic;"># Calc. monthly anomaly</span>
slp.anom <- fieldAnomaly<span style="color: #009900;">(</span>y=slp<span style="color: #339933;">,</span> x=<a href="http://inside-r.org/r-doc/base/as.POSIXlt"><span style="color: #003399; font-weight: bold;">as.POSIXlt</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/ts"><span style="color: #003399; font-weight: bold;">ts</span></a><span style="color: #009900;">)</span><span style="color: #339933;">,</span> level=<span style="color: blue;">"monthly"</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Make gappy dataset</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
slpg.anom <- <a href="http://inside-r.org/r-doc/base/replace"><span style="color: #003399; font-weight: bold;">replace</span></a><span style="color: #009900;">(</span>slp.anom<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/sample"><span style="color: #003399; font-weight: bold;">sample</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>slp.anom<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.5</span>*<a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>slp.anom<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: black; font-weight: bold;">NaN</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">### EOFs (leading 25)</span>
neofs <- <span style="color: #cc66cc;">25</span>
t1 <- <a href="http://inside-r.org/r-doc/base/Sys.time"><span style="color: #003399; font-weight: bold;">Sys.time</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
Et <- eof<span style="color: #009900;">(</span>slp.anom<span style="color: #339933;">,</span> recursive=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #339933;">,</span> method=<span style="color: blue;">"irlba"</span><span style="color: #339933;">,</span> nu=neofs<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># LSEOF of true field</span>
Et.time <- <a href="http://inside-r.org/r-doc/base/Sys.time"><span style="color: #003399; font-weight: bold;">Sys.time</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>-t1
t1 <- <a href="http://inside-r.org/r-doc/base/Sys.time"><span style="color: #003399; font-weight: bold;">Sys.time</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
El <- eof<span style="color: #009900;">(</span>slpg.anom<span style="color: #339933;">,</span> recursive=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #339933;">,</span> method=<span style="color: blue;">"irlba"</span><span style="color: #339933;">,</span> nu=neofs<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># LSEOF of gappy field</span>
El.time <- <a href="http://inside-r.org/r-doc/base/Sys.time"><span style="color: #003399; font-weight: bold;">Sys.time</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>-t1
t1 <- <a href="http://inside-r.org/r-doc/base/Sys.time"><span style="color: #003399; font-weight: bold;">Sys.time</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
Er <- eof<span style="color: #009900;">(</span>slpg.anom<span style="color: #339933;">,</span> recursive=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> method=<span style="color: blue;">"irlba"</span><span style="color: #339933;">,</span> nu=neofs<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># RSEOF of gappy field</span>
Er.time <- <a href="http://inside-r.org/r-doc/base/Sys.time"><span style="color: #003399; font-weight: bold;">Sys.time</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>-t1
t1 <- <a href="http://inside-r.org/r-doc/base/Sys.time"><span style="color: #003399; font-weight: bold;">Sys.time</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
din <- dineof<span style="color: #009900;">(</span>slpg.anom<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/print"><span style="color: #003399; font-weight: bold;">print</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/paste"><span style="color: #003399; font-weight: bold;">paste</span></a><span style="color: #009900;">(</span>din$n.eof<span style="color: #339933;">,</span> <span style="color: blue;">"EOFs"</span><span style="color: #339933;">,</span> <span style="color: blue;">";"</span><span style="color: #339933;">,</span> <span style="color: blue;">"RMS = "</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/round"><span style="color: #003399; font-weight: bold;">round</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/utils/tail"><span style="color: #003399; font-weight: bold;">tail</span></a><span style="color: #009900;">(</span>din$RMS<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># "56 EOFs ; RMS = 0.289"</span>
Ed <- eof<span style="color: #009900;">(</span>din$Xa<span style="color: #339933;">,</span> recursive=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #339933;">,</span> method=<span style="color: blue;">"irlba"</span><span style="color: #339933;">,</span> nu=neofs<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># DINEOF + LSEOF of gappy field</span>
Ed.time <- <a href="http://inside-r.org/r-doc/base/Sys.time"><span style="color: #003399; font-weight: bold;">Sys.time</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>-t1
Et.time<span style="color: #339933;">;</span>El.time<span style="color: #339933;">;</span>Er.time<span style="color: #339933;">;</span>Ed.time
<span style="color: #666666; font-style: italic;">#Time difference of 0.7268829 secs</span>
<span style="color: #666666; font-style: italic;">#Time difference of 0.7765241 secs</span>
<span style="color: #666666; font-style: italic;">#Time difference of 14.77254 secs</span>
<span style="color: #666666; font-style: italic;">#Time difference of 1.143369 mins</span>
<span style="color: #666666; font-style: italic;">#############</span>
<span style="color: #666666; font-style: italic;">### Plots ###</span>
<span style="color: #666666; font-style: italic;">#############</span>
<span style="color: #666666; font-style: italic;"># Error of reconstruction</span>
neof <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">25</span><span style="color: #009900;">)</span>
rmse.Et <- <span style="color: black; font-weight: bold;">NaN</span> * neof
rmse.El <- <span style="color: black; font-weight: bold;">NaN</span> * neof
rmse.Er <- <span style="color: black; font-weight: bold;">NaN</span> * neof
rmse.Ed <- <span style="color: black; font-weight: bold;">NaN</span> * neof
<span style="color: black; font-weight: bold;">for</span> <span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> neof<span style="color: #009900;">)</span><span style="color: #009900;">{</span>
Rt <- eofRecon<span style="color: #009900;">(</span>Et<span style="color: #339933;">,</span> <a href="http://inside-r.org/packages/cran/PCS">pcs</a>=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>i<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
Rl <- eofRecon<span style="color: #009900;">(</span>El<span style="color: #339933;">,</span> <a href="http://inside-r.org/packages/cran/PCS">pcs</a>=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>i<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
Rr <- eofRecon<span style="color: #009900;">(</span>Er<span style="color: #339933;">,</span> <a href="http://inside-r.org/packages/cran/PCS">pcs</a>=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>i<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
Rd <- eofRecon<span style="color: #009900;">(</span>Ed<span style="color: #339933;">,</span> <a href="http://inside-r.org/packages/cran/PCS">pcs</a>=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>i<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
rmse.Et<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/sqrt"><span style="color: #003399; font-weight: bold;">sqrt</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">(</span><span style="color: #009900;">(</span>slp.anom - Rt<span style="color: #009900;">)</span>^<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> na.rm=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
rmse.El<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/sqrt"><span style="color: #003399; font-weight: bold;">sqrt</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">(</span><span style="color: #009900;">(</span>slp.anom - Rl<span style="color: #009900;">)</span>^<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> na.rm=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
rmse.Er<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/sqrt"><span style="color: #003399; font-weight: bold;">sqrt</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">(</span><span style="color: #009900;">(</span>slp.anom - Rr<span style="color: #009900;">)</span>^<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> na.rm=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
rmse.Ed<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/sqrt"><span style="color: #003399; font-weight: bold;">sqrt</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">(</span><span style="color: #009900;">(</span>slp.anom - Rd<span style="color: #009900;">)</span>^<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> na.rm=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
ylim <- <a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>rmse.Et<span style="color: #339933;">,</span> rmse.El<span style="color: #339933;">,</span> rmse.Er<span style="color: #339933;">,</span> rmse.Ed<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/file"><span style="color: #003399; font-weight: bold;">file</span></a>=<span style="color: blue;">"slp_eof_recon_error.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>neof<span style="color: #339933;">,</span> rmse.Et<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a>=<span style="color: blue;">""</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> ylim=ylim<span style="color: #339933;">,</span> xlab=<span style="color: blue;">"No. EOFs"</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"RMSE"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/grid"><span style="color: #003399; font-weight: bold;">grid</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>neof<span style="color: #339933;">,</span> rmse.Et<span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">21</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> bg=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #009900;">(</span>rmse.Et == <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span>rmse.Et<span style="color: #009900;">)</span><span style="color: #009900;">)</span>+<span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>neof<span style="color: #339933;">,</span> rmse.El<span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">21</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> bg=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #009900;">(</span>rmse.El == <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span>rmse.El<span style="color: #009900;">)</span><span style="color: #009900;">)</span>+<span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>neof<span style="color: #339933;">,</span> rmse.Er<span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">21</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> bg=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #009900;">(</span>rmse.Er == <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span>rmse.Er<span style="color: #009900;">)</span><span style="color: #009900;">)</span>+<span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>neof<span style="color: #339933;">,</span> rmse.Ed<span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">21</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> bg=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #009900;">(</span>rmse.Ed == <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span>rmse.Ed<span style="color: #009900;">)</span><span style="color: #009900;">)</span>+<span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"topright"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"LSEOF (obs.)"</span><span style="color: #339933;">,</span> <span style="color: blue;">"RSEOF (obs.)"</span><span style="color: #339933;">,</span> <span style="color: blue;">"DINEOF (obs.)"</span><span style="color: #339933;">,</span> <span style="color: blue;">"Ref. (true)"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> bty=<span style="color: blue;">"n"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Error of reconstruction"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Null model error comparison</span>
Err <- eofNull<span style="color: #009900;">(</span>slp.anom<span style="color: #339933;">,</span> method=<span style="color: blue;">"irlba"</span><span style="color: #339933;">,</span> nu=neofs<span style="color: #339933;">,</span> nperm=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/file"><span style="color: #003399; font-weight: bold;">file</span></a>=<span style="color: blue;">"slp_eof_significance.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
ylim <- <a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>Err$Lambda.orig<span style="color: #339933;">,</span> Err$Lambda<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>Err$Lambda.orig<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a>=<span style="color: blue;">"y"</span><span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">16</span><span style="color: #339933;">,</span> ylim=ylim<span style="color: #339933;">,</span> xlab=<span style="color: blue;">"EOF"</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Lambda"</span><span style="color: #009900;">)</span>
Qs <- <a href="http://inside-r.org/r-doc/base/apply"><span style="color: #003399; font-weight: bold;">apply</span></a><span style="color: #009900;">(</span>Err$Lambda<span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/quantile"><span style="color: #003399; font-weight: bold;">quantile</span></a><span style="color: #339933;">,</span> probs=<span style="color: #cc66cc;">0.95</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>Qs<span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># 95% error quantile</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span>v=Err$n.sig+<span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/paste"><span style="color: #003399; font-weight: bold;">paste</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Significant EOFs ="</span><span style="color: #339933;">,</span> Err$n.sig<span style="color: #009900;">)</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
eof
<span style="color: #666666; font-style: italic;"># EOF maps</span>
DAT <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Et"</span><span style="color: #339933;">,</span> <span style="color: blue;">"El"</span><span style="color: #339933;">,</span> <span style="color: blue;">"Er"</span><span style="color: #339933;">,</span> <span style="color: blue;">"Ed"</span><span style="color: #009900;">)</span>
TITLE1 <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>
<span style="color: blue;">"True SLP"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"Gappy SLP"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"Gappy SLP"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"Gappy SLP"</span>
<span style="color: #009900;">)</span>
TITLE2 <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>
<span style="color: blue;">"(LSEOF)"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"(LSEOF)"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"(RSEOF)"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"(DINEOF)"</span>
<span style="color: #009900;">)</span>
Qs <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>k <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>DAT<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
DAT.tmp <- <a href="http://inside-r.org/r-doc/base/get"><span style="color: #003399; font-weight: bold;">get</span></a><span style="color: #009900;">(</span>DAT<span style="color: #009900;">[</span>k<span style="color: #009900;">]</span><span style="color: #009900;">)</span>
Asc <- DAT.tmp$A<span style="color: #009900;">[</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span> %*% expmat<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/diag"><span style="color: #003399; font-weight: bold;">diag</span></a><span style="color: #009900;">(</span>DAT.tmp$Lambda<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> -<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
Qs <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>Qs<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/quantile"><span style="color: #003399; font-weight: bold;">quantile</span></a><span style="color: #009900;">(</span>Asc<span style="color: #339933;">,</span> probs=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.01</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.99</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> na.rm=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/rm"><span style="color: #003399; font-weight: bold;">rm</span></a><span style="color: #009900;">(</span>DAT.tmp<span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
YLIM <- <a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>Qs<span style="color: #009900;">)</span>
ZRAN <- <a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/get"><span style="color: #003399; font-weight: bold;">get</span></a><span style="color: #009900;">(</span>DAT<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/get"><span style="color: #003399; font-weight: bold;">get</span></a><span style="color: #009900;">(</span>DAT<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/get"><span style="color: #003399; font-weight: bold;">get</span></a><span style="color: #009900;">(</span>DAT<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/get"><span style="color: #003399; font-weight: bold;">get</span></a><span style="color: #009900;">(</span>DAT<span style="color: #009900;">[</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
ZLIM <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/abs"><span style="color: #003399; font-weight: bold;">abs</span></a><span style="color: #009900;">(</span>ZRAN<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/abs"><span style="color: #003399; font-weight: bold;">abs</span></a><span style="color: #009900;">(</span>ZRAN<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
reso <- <span style="color: #cc66cc;">100</span>
PAL <- <a href="http://inside-r.org/r-doc/grDevices/colorRampPalette"><span style="color: #003399; font-weight: bold;">colorRampPalette</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.3</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.9</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.9</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.9</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/NCOL"><span style="color: #003399; font-weight: bold;">NCOL</span></a> <- <span style="color: #cc66cc;">15</span>
lonlat.rat <- earthDist<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span>grd$lon<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span>grd$lat<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a><span style="color: #009900;">(</span>grd$lon<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span>grd$lat<span style="color: #009900;">)</span><span style="color: #009900;">)</span> / earthDist<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span>grd$lon<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span>grd$lat<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span>grd$lon<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a><span style="color: #009900;">(</span>grd$lat<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
map.width <- <span style="color: #cc66cc;">2</span>
map.height <- map.width / lonlat.rat
ts.height <- <span style="color: #cc66cc;">0.7</span>
scale.height <- <span style="color: #cc66cc;">1</span>
RES <- <span style="color: #cc66cc;">400</span>
PS <- <span style="color: #cc66cc;">10</span>
CEX <- <span style="color: #cc66cc;">1</span>
OMI=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.3</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.7</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.3</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0.2</span><span style="color: #009900;">)</span>
WIDTHS = <a href="http://inside-r.org/r-doc/base/rep"><span style="color: #003399; font-weight: bold;">rep</span></a><span style="color: #009900;">(</span>map.width<span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
HEIGHTS <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/rep"><span style="color: #003399; font-weight: bold;">rep</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>map.height<span style="color: #339933;">,</span> ts.height<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> scale.height<span style="color: #009900;">)</span>
L.LWD <- <span style="color: #cc66cc;">0.5</span>
WIDTH = <a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>WIDTHS<span style="color: #009900;">)</span> + <a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>OMI<span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
HEIGHT = <a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>HEIGHTS<span style="color: #009900;">)</span> + <a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>OMI<span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
WIDTH <span style="color: #339933;">;</span> HEIGHT
OPPSIGN <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">7</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">9</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">13</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">15</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">20</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span>filename=<span style="color: blue;">"slp_top3_eof_maps.png"</span><span style="color: #339933;">,</span> width=WIDTH<span style="color: #339933;">,</span> height=HEIGHT<span style="color: #339933;">,</span> res=RES<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#pdf("eofx3_maps.pdf", width=WIDTH, height=HEIGHT)</span>
<span style="color: #666666; font-style: italic;">#x11(width=WIDTH, height=HEIGHT)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>omi=OMI<span style="color: #339933;">,</span> ps=PS<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/layout"><span style="color: #003399; font-weight: bold;">layout</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">24</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">25</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">25</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">25</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a>=<span style="color: #cc66cc;">9</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> byrow=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> widths = WIDTHS<span style="color: #339933;">,</span> heights = HEIGHTS<span style="color: #339933;">,</span> respect=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>cex=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
plot.num <- <span style="color: #cc66cc;">0</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>k <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>DAT<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
<span style="color: #666666; font-style: italic;">#k=1</span>
DAT.tmp <- <a href="http://inside-r.org/r-doc/base/get"><span style="color: #003399; font-weight: bold;">get</span></a><span style="color: #009900;">(</span>DAT<span style="color: #009900;">[</span>k<span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#DAT2.tmp <- get(DAT2[k])</span>
TITLE1.tmp <- TITLE1<span style="color: #009900;">[</span>k<span style="color: #009900;">]</span>
TITLE2.tmp <- TITLE2<span style="color: #009900;">[</span>k<span style="color: #009900;">]</span>
<span style="color: #666666; font-style: italic;"># Spatial patterns</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.25</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.25</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
<span style="color: #666666; font-style: italic;">#i=1</span>
plot.num <- plot.num + <span style="color: #cc66cc;">1</span>
u <- DAT.tmp$u<span style="color: #009900;">[</span><span style="color: #339933;">,</span>i<span style="color: #009900;">]</span>
<span style="color: black; font-weight: bold;">if</span><span style="color: #009900;">(</span>plot.num %in% OPPSIGN<span style="color: #009900;">)</span><span style="color: #009900;">{</span>
u <- u * -<span style="color: #cc66cc;">1</span>
<span style="color: #009900;">}</span>
F <- interp<span style="color: #009900;">(</span>x=grd$lon<span style="color: #339933;">,</span> y=grd$lat<span style="color: #339933;">,</span> z=u<span style="color: #339933;">,</span>
xo=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span>grd$lon<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a><span style="color: #009900;">(</span>grd$lon<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a>=reso<span style="color: #009900;">)</span><span style="color: #339933;">,</span>
yo=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span>grd$lat<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a><span style="color: #009900;">(</span>grd$lat<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a>=reso<span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>F<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=PAL<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/NCOL"><span style="color: #003399; font-weight: bold;">NCOL</span></a><span style="color: #009900;">)</span><span style="color: #339933;">,</span> zlim=ZLIM<span style="color: #339933;">,</span> xaxs=<span style="color: blue;">"i"</span><span style="color: #339933;">,</span> yaxs=<span style="color: blue;">"i"</span><span style="color: #339933;">,</span> xlab=<span style="color: blue;">""</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">""</span><span style="color: #339933;">,</span> axes=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #009900;">)</span>
map<span style="color: #009900;">(</span><span style="color: blue;">"world2"</span><span style="color: #339933;">,</span> add=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> lwd=<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
USR <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>$usr
EXPLVAR <- DAT.tmp$Lambda / DAT.tmp$tot.var * <span style="color: #cc66cc;">100</span>
<a href="http://inside-r.org/r-doc/graphics/text"><span style="color: #003399; font-weight: bold;">text</span></a><span style="color: #009900;">(</span>x=USR<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>+<span style="color: #cc66cc;">0.9</span>*<span style="color: #009900;">(</span>USR<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span>-USR<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> y=USR<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span>+<span style="color: #cc66cc;">0.9</span>*<span style="color: #009900;">(</span>USR<span style="color: #009900;">[</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">]</span>-USR<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<a href="http://inside-r.org/r-doc/base/paste"><span style="color: #003399; font-weight: bold;">paste</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/round"><span style="color: #003399; font-weight: bold;">round</span></a><span style="color: #009900;">(</span>EXPLVAR<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: blue;">"%"</span><span style="color: #339933;">,</span> sep=<span style="color: blue;">""</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> font=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/box"><span style="color: #003399; font-weight: bold;">box</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">if</span><span style="color: #009900;">(</span>k ==<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/paste"><span style="color: #003399; font-weight: bold;">paste</span></a><span style="color: #009900;">(</span><span style="color: blue;">"EOF"</span><span style="color: #339933;">,</span> i<span style="color: #009900;">)</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span> font=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<span style="color: black; font-weight: bold;">if</span><span style="color: #009900;">(</span>i == <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span>TITLE1.tmp<span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span>TITLE2.tmp<span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<span style="color: #009900;">}</span>
<span style="color: #666666; font-style: italic;"># Temporal patterns</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.25</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
DAT.tmp$Asc <- DAT.tmp$A<span style="color: #009900;">[</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span> %*% expmat<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/diag"><span style="color: #003399; font-weight: bold;">diag</span></a><span style="color: #009900;">(</span>DAT.tmp$Lambda<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> -<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
<span style="color: #666666; font-style: italic;">#i=1</span>
TS <- <a href="http://inside-r.org/r-doc/base/as.POSIXct"><span style="color: #003399; font-weight: bold;">as.POSIXct</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/ts"><span style="color: #003399; font-weight: bold;">ts</span></a><span style="color: #009900;">)</span>
TS.SEQ <- <a href="http://inside-r.org/r-doc/base/as.POSIXct"><span style="color: #003399; font-weight: bold;">as.POSIXct</span></a><span style="color: #009900;">(</span>seq.Date<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/as.Date"><span style="color: #003399; font-weight: bold;">as.Date</span></a><span style="color: #009900;">(</span><span style="color: blue;">"1800-01-01"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/as.Date"><span style="color: #003399; font-weight: bold;">as.Date</span></a><span style="color: #009900;">(</span><span style="color: blue;">"2100-01-01"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/by"><span style="color: #003399; font-weight: bold;">by</span></a>=<span style="color: blue;">"10 years"</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
TS.SEQ2 <- <a href="http://inside-r.org/r-doc/base/as.POSIXct"><span style="color: #003399; font-weight: bold;">as.POSIXct</span></a><span style="color: #009900;">(</span>seq.Date<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/as.Date"><span style="color: #003399; font-weight: bold;">as.Date</span></a><span style="color: #009900;">(</span><span style="color: blue;">"1800-01-01"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/as.Date"><span style="color: #003399; font-weight: bold;">as.Date</span></a><span style="color: #009900;">(</span><span style="color: blue;">"2100-01-01"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/by"><span style="color: #003399; font-weight: bold;">by</span></a>=<span style="color: blue;">"30 years"</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
plot.num <- plot.num + <span style="color: #cc66cc;">1</span>
Asc <- DAT.tmp$Asc<span style="color: #009900;">[</span><span style="color: #339933;">,</span>i<span style="color: #009900;">]</span>
<span style="color: black; font-weight: bold;">if</span><span style="color: #009900;">(</span>plot.num %in% <span style="color: #009900;">(</span>OPPSIGN+<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
Asc <- Asc * -<span style="color: #cc66cc;">1</span>
<span style="color: #009900;">}</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>TS<span style="color: #339933;">,</span> Asc<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> lwd=L.LWD<span style="color: #339933;">,</span> xaxs=<span style="color: blue;">"i"</span><span style="color: #339933;">,</span> xlab=<span style="color: blue;">""</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">""</span><span style="color: #339933;">,</span> xaxt=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> yaxt=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> ylim=YLIM<span style="color: #009900;">)</span>
USR <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>$usr
<a href="http://inside-r.org/r-doc/graphics/rect"><span style="color: #003399; font-weight: bold;">rect</span></a><span style="color: #009900;">(</span>USR<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> USR<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> USR<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> USR<span style="color: #009900;">[</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.7</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.7</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.7</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>TS<span style="color: #339933;">,</span> Asc<span style="color: #339933;">,</span> lwd=L.LWD<span style="color: #009900;">)</span>
df.tmp <- <a href="http://inside-r.org/r-doc/base/data.frame"><span style="color: #003399; font-weight: bold;">data.frame</span></a><span style="color: #009900;">(</span>sig=Asc<span style="color: #339933;">,</span> year=<a href="http://inside-r.org/r-doc/base/as.POSIXlt"><span style="color: #003399; font-weight: bold;">as.POSIXlt</span></a><span style="color: #009900;">(</span>TS<span style="color: #009900;">)</span>$year+<span style="color: #cc66cc;">1900</span><span style="color: #009900;">)</span>
agg <- <a href="http://inside-r.org/r-doc/stats/aggregate"><span style="color: #003399; font-weight: bold;">aggregate</span></a><span style="color: #009900;">(</span>sig ~ year<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/utils/data"><span style="color: #003399; font-weight: bold;">data</span></a>=df.tmp<span style="color: #339933;">,</span> FUN=<a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/as.POSIXct"><span style="color: #003399; font-weight: bold;">as.POSIXct</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/paste"><span style="color: #003399; font-weight: bold;">paste</span></a><span style="color: #009900;">(</span>agg$year<span style="color: #339933;">,</span> <span style="color: blue;">"07-01"</span><span style="color: #339933;">,</span> sep=<span style="color: blue;">"-"</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> agg$sig<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">7</span><span style="color: #339933;">,</span> lwd=L.LWD*<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#lines(smooth.spline(x=TS, y=Asc, spar=0.3), col=7, lwd=L.LWD*2)</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span>h=<span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> lwd=L.LWD<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span>v=TS.SEQ<span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> lwd=L.LWD<span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">if</span><span style="color: #009900;">(</span>k == <a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>DAT<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=-<span style="color: #cc66cc;">0.25</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/axis.POSIXct"><span style="color: #003399; font-weight: bold;">axis.POSIXct</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> at=TS.SEQ<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span> las=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/tcltk/tcl">tcl</a>=-<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/axis.POSIXct"><span style="color: #003399; font-weight: bold;">axis.POSIXct</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> at=TS.SEQ2<span style="color: #339933;">,</span> las=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<span style="color: black; font-weight: bold;">if</span><span style="color: #009900;">(</span>i == <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span> <a href="http://inside-r.org/r-doc/graphics/axis"><span style="color: #003399; font-weight: bold;">axis</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> at=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<a href="http://inside-r.org/r-doc/base/rm"><span style="color: #003399; font-weight: bold;">rm</span></a><span style="color: #009900;">(</span>DAT.tmp<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/rm"><span style="color: #003399; font-weight: bold;">rm</span></a><span style="color: #009900;">(</span>TITLE1.tmp<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/rm"><span style="color: #003399; font-weight: bold;">rm</span></a><span style="color: #009900;">(</span>TITLE2.tmp<span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<span style="color: #666666; font-style: italic;">#plot scale</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
plot.num <- plot.num + <span style="color: #cc66cc;">1</span>
imageScale<span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> ZLIM<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=PAL<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/NCOL"><span style="color: #003399; font-weight: bold;">NCOL</span></a><span style="color: #009900;">)</span><span style="color: #339933;">,</span> axis.pos=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/box"><span style="color: #003399; font-weight: bold;">box</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com4tag:blogger.com,1999:blog-6424211413492597169.post-9425877857495011422014-09-02T15:18:00.002+02:002015-03-31T10:22:23.238+02:00"sinkr" - a collection of functions featured on "me nugget"<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2PA7FHuuuTDjdm_99lF6zG8xX_H6RAVgKqfo4QcWo9SSMaGj-iSGH_YxHcWxpfMSwB8VliDr-Qf-54MpXejjhuHDPwCvsn67s596FjCS7HC1mTTJTwy9_e1m8f8LJ9A67L5zxtvWdtsL9/s1600/Gold-49956.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2PA7FHuuuTDjdm_99lF6zG8xX_H6RAVgKqfo4QcWo9SSMaGj-iSGH_YxHcWxpfMSwB8VliDr-Qf-54MpXejjhuHDPwCvsn67s596FjCS7HC1mTTJTwy9_e1m8f8LJ9A67L5zxtvWdtsL9/s1600/Gold-49956.jpg" height="153" width="200" /></a></div>
The R package <b><i>sinkr</i></b> (version 1.0) has now been released: <a href="https://github.com/marchtaylor/sinkr">https://github.com/marchtaylor/sinkr</a><br />
<br />
I have finally gotten around to learning how to create an R package and decided to start by bundling <a href="http://menugget.blogspot.de/search/label/function">functions that I have featured on the blog</a>. Thanks to the <a href="http://www.rstudio.com/">R Studio</a> team for making this so easy (in combination with the R packages <span style="font-family: "Courier New",Courier,monospace;"><a href="http://cran.r-project.org/web/packages/roxygen2/index.html">roxygen2</a></span> and <span style="font-family: "Courier New",Courier,monospace;"><a href="http://cran.r-project.org/web/packages/devtools/index.html">devtools</a></span>). In addition to the great tips on the R Studio website, I found the following Youtube videos helpful along the way:<br />
<ul>
<li><a href="https://www.youtube.com/watch?v=9PyQlbAEujY">Create an R Package in RStudio</a> (Basic package creation)</li>
<li><a href="https://www.youtube.com/watch?v=YxZ8J2rqhEM">Creating RStudio projects from GitHub Repositories</a> (especially the tip to use the SSH clone URL link rather than HTTPS)</li>
</ul>
<span style="font-size: small;">Being new to the world of R packages (</span><span style="font-size: small;"><span style="font-size: small;">and due to the eclectic nature of the functions in <i>sinkr</i>)</span>, I'm not confident to upload this to CRAN. But, one can easily install the package using <span style="font-family: "Courier New",Courier,monospace;">devtools</span> and the following code (see <a href="https://github.com/hadley/devtools">https://github.com/hadley/devtools</a> for OS-specific package updating tips):</span><br />
<span style="font-family: "Courier New",Courier,monospace;"><br />library(devtools)</span><br />
<span style="font-family: "Courier New",Courier,monospace;">install_github("marchtaylor/sinkr")</span><br />
<br />
<span style="font-size: small;">For those using functions that were featured on this site in the past, the present versions may differ slightly, especially in the case of function names. For example, function names like <span style="font-family: "Courier New",Courier,monospace;">plot.stacked</span> </span>were getting associated with the general <a href="http://stat.ethz.ch/R-manual/R-devel/library/graphics/html/plot.html"><span style="font-family: "Courier New",Courier,monospace;">plot</span></a> function during the package build and thus "." characters have been removed from all function names (e.g. <span style="font-family: "Courier New",Courier,monospace;">plotStacked</span>).<br />
<br />
<i>sinkr</i> functions include:<br />
<a name='more'></a><br />
<ul>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">addAlpha Add alpha channel (transparency) to colors</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">bioEnv Clarke and Ainsworth's BIO-ENV routine</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">bvStep Clarke and Ainsworth's BVSTEP routine</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">cov4gappy Covariance matrix calculation for gappy data</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">dineof DINEOF (Data Interpolating Empirical Orthogonal<br /> Functions)</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">earthBear Directional bearing between two geographic<br /> locations</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">earthDist Earth distance between two geographic locations</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">eof EOF (Empirical Orthogonal Functions analysis)</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">eofBoot Calculate number of non-mixed EOFs (eof<br /> version)</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">eofNull Calculate significance of EOFs compared to a<br /> null model (eof version)</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">eofRecon EOF reconstruction (Empirical Orthogonal<br /> Functions analysis)</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">expmat Exponentiation of a matrix</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">fieldAnomaly Calculate the daily or monthly anomaly of a<br /> field</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">getcolors Select colors visually</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">gmtColors GMT palette colors</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">imageScale Make a color scale to accompany an image or<br /> other plot</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">jetPal jet palette</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">lonLatFilter Filter lon/lat positions that fall within<br /> defined boundaries</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">lsos List top n objects by size</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">matrixPoly Make polygons from a matrix</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">nearest Calculate the nearest element in a vector as<br /> compared to a reference value</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">newLonLat Directional bearing between two geographic<br /> locations </span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">newRange Define a new range for a numeric</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">northTest North's Rule of Thumb for EOF significance</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">plotStacked Stacked plot</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">plotStream Stream plot</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">prcompBoot Calculate number of non-mixed EOFs (prcomp<br /> version)</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">prcompNull Calculate significance of EOFs compared to a<br /> null model (prcomp version)</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">prcompRecon prcomp object reconstruction</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">round2reso Round to defined resolution increment</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">spirographR Make a sprirograph-like design</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">unscale Unscale a matrix</span></span></li>
<li><span style="font-size: x-small;"><span style="font-family: "Courier New",Courier,monospace;">val2col Convert values to color levels </span></span></li>
</ul>
<ul></ul>
<br />
I can recommend package creation to anyone who wants greater control and clearer documentation of functions. I also used to do a lot of numbering of R scripts to keep track of versions (e.g. "plotstacked.03.R"). R studio combined with <a href="https://github.com/">GitHub</a> has been a real revelation to me in this regard (thanks to Tal Galili for the final nudge!: <a href="http://datascience.la/a-conversation-with-tal-galili-at-user-2014/">http://datascience.la/a-conversation-with-tal-galili-at-user-2014/</a>).<br />
<br />
I hope that future function examples will be easier to reproduce through simple loading of the <i>sinkr</i> package.Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com0tag:blogger.com,1999:blog-6424211413492597169.post-32107878111121119532014-08-05T13:57:00.001+02:002014-08-05T13:59:49.602+02:00Rotated axis labels in R plots<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9ExnPHeNWQ_fywl-IswzDHlChEoqmVqrTEdZtwNmowYnNHmuTYO0ojhoxJzETDWJJq-9u1ELsnuzI8aYSyR85rJ5Ih3Rh6x-08P5ZzG-rzEm78-VY-tRVXL7NB8wbW0WAGaxfGzL1QUBP/s1600/plot_w_rotated_axis_labels.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9ExnPHeNWQ_fywl-IswzDHlChEoqmVqrTEdZtwNmowYnNHmuTYO0ojhoxJzETDWJJq-9u1ELsnuzI8aYSyR85rJ5Ih3Rh6x-08P5ZzG-rzEm78-VY-tRVXL7NB8wbW0WAGaxfGzL1QUBP/s1600/plot_w_rotated_axis_labels.png" height="200" width="400" /></a></div>
<div style="text-align: left;">
<br />
It's somehow amazing to me that the option for slanted or rotated axes labels is not an option within the basic <span style="font-family: "Courier New",Courier,monospace;"><a href="http://stat.ethz.ch/R-manual/R-devel/library/graphics/html/plot.html">plot()</a></span> or <a href="http://stat.ethz.ch/R-manual/R-devel/library/graphics/html/axis.html"><span style="font-family: "Courier New",Courier,monospace;">axis()</span></a> functions in R. The advantage is mainly in saving plot area space when long labels are needed (rather than as a means of preventing excessive head tilting). The topic is briefly covered in <a href="http://cran.r-project.org/doc/FAQ/R-FAQ.html#How-can-I-create-rotated-axis-labels_003f">this FAQ</a>, and the solution is a bit tricky, especially for a new R user. Below is an example of this procedure.</div>
<br />
<b>To reproduce example: </b><br />
<a name='more'></a><br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;"># Example data</span>
tmin <- <a href="http://inside-r.org/r-doc/base/as.Date"><span style="color: #003399; font-weight: bold;">as.Date</span></a><span style="color: #009900;">(</span><span style="color: blue;">"2000-01-01"</span><span style="color: #009900;">)</span>
tmax <- <a href="http://inside-r.org/r-doc/base/as.Date"><span style="color: #003399; font-weight: bold;">as.Date</span></a><span style="color: #009900;">(</span><span style="color: blue;">"2001-01-01"</span><span style="color: #009900;">)</span>
tlab <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>tmin<span style="color: #339933;">,</span> tmax<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/by"><span style="color: #003399; font-weight: bold;">by</span></a>=<span style="color: blue;">"month"</span><span style="color: #009900;">)</span>
lab <- <a href="http://inside-r.org/r-doc/base/format"><span style="color: #003399; font-weight: bold;">format</span></a><span style="color: #009900;">(</span>tlab<span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/format"><span style="color: #003399; font-weight: bold;">format</span></a>=<span style="color: blue;">"%Y-%b"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">111</span><span style="color: #009900;">)</span>
x <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>tmin<span style="color: #339933;">,</span> tmax<span style="color: #339933;">,</span> <span style="color: #339933;">,</span> <span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span>
y <- <a href="http://inside-r.org/r-doc/base/cumsum"><span style="color: #003399; font-weight: bold;">cumsum</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/rnorm"><span style="color: #003399; font-weight: bold;">rnorm</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Plot</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"plot_w_rotated_axis_labels.png"</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">6</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">6</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> y<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #339933;">,</span> xaxt=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> xlab=<span style="color: blue;">""</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/axis"><span style="color: #003399; font-weight: bold;">axis</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> at=tlab<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/text"><span style="color: #003399; font-weight: bold;">text</span></a><span style="color: #009900;">(</span>x=tlab<span style="color: #339933;">,</span> y=<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>$usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span>-<span style="color: #cc66cc;">0.1</span>*<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>$usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">]</span>-<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>$usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=lab<span style="color: #339933;">,</span> srt=<span style="color: #cc66cc;">45</span><span style="color: #339933;">,</span> adj=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> xpd=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />
<br />
<br />
<br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com1tag:blogger.com,1999:blog-6424211413492597169.post-39928369800070670812014-07-23T20:04:00.000+02:002014-07-23T20:33:36.420+02:00Flood fill a region of an active device in R<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitkyhufJa3nH6f0yG-oD2IoCg2YMKbF9l-ckADUIyOcQvNTILIUDd9f-YjN9ty91UuAmfngbfbQCYRu3c7KiJkM_ECpLManthjWWhRJIZUlLxqUBrcSq6ntYjBJ4kN9n5vrJ1mqHfemoUm/s1600/floodfill_ex.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitkyhufJa3nH6f0yG-oD2IoCg2YMKbF9l-ckADUIyOcQvNTILIUDd9f-YjN9ty91UuAmfngbfbQCYRu3c7KiJkM_ECpLManthjWWhRJIZUlLxqUBrcSq6ntYjBJ4kN9n5vrJ1mqHfemoUm/s1600/floodfill_ex.png" height="320" width="320" /></a></div>
<br />
The following is a function to "<a href="http://en.wikipedia.org/wiki/Flood_fill">flood fill</a>" a region on the active plotting device. Once called, the user will be asked to click on the desired target region. The flood fill algorithm then searches neighbors in 4 directions of the target cell (down, left, up, right) and checks for similar colors to the target cell. If neighboring cells are of the same color, their color is changed to a defined replacement color, and the cell number is added to a "queue" for further searches of neighbors. Once a cell has been checked, its position is added to a list of completed cells. This algorithm is referred to as "Four-way flood fill using a queue for storage".<br />
<br />
Here's a visualization of the Four-way flood fill from Wikimedia Commons:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguQawZAbBRxBEQoprgym_Yfiq7ABq08iN8tqSqaJFNUfDMrs2Phk_o_Wmcc9dTklHLiETwiR76KhbJbwVaFLlR5w9atHs3Bp6hL3gIonyVGJqGdAPVKZBe7aowhHRJzi0PT_KWWAyrh4HT/s1600/Wfm_floodfill_animation_queue.gif" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguQawZAbBRxBEQoprgym_Yfiq7ABq08iN8tqSqaJFNUfDMrs2Phk_o_Wmcc9dTklHLiETwiR76KhbJbwVaFLlR5w9atHs3Bp6hL3gIonyVGJqGdAPVKZBe7aowhHRJzi0PT_KWWAyrh4HT/s1600/Wfm_floodfill_animation_queue.gif" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><a href="http://commons.wikimedia.org/wiki/File:Wfm_floodfill_animation_stack.gif">http://commons.wikimedia.org/wiki/File:Wfm_floodfill_animation_stack.gif</a></td></tr>
</tbody></table>
<div style="text-align: left;">
This is kind of a pointless exercise given that any basic image editing programs (e.g. Microsoft Paint) can do this much more efficiently; Nevertheless, I felt compelled to figure out a way of programming this in R (I was originally interested in filling in land areas on a map that I created in R). You'll see from my example above that I didn't quite get it right - there is still some blank white space within the regions that I filled. Part of this problem is remedied by exporting a higher resolution image (<span style="font-family: "Courier New",Courier,monospace;">floodfill</span> argument "<span style="font-family: "Courier New",Courier,monospace;">res</span>"), but this slows things down considerably.</div>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
In order to have this function work directly on an open graphics device, I exported a PNG image and then re-imported it and trimmed off the margins. What remains is an image of the plot region itself which I convert to a matrix and look-up dataframe, where each cell's color and neighboring cells are defined. It is this dataframe that forms the basis of my searching algorithm. I'm guessing I have made some sort of small mistake in how I trimmed the margins of the image, thus creating the slight offset in the filled region. Anyway, feel free to suggest improvements!</div>
<br />
<b>Function:</b><br />
<a name='more'></a><br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;">#arguments: </span>
<span style="color: #666666; font-style: italic;"># replCol - The color to apply to the flood region. Should be given as a hexadecimal string, as is the format of the output from rgb().</span>
<span style="color: #666666; font-style: italic;"># res - The resolution (per inch) of the temporarily exported figure (7 X 7 inches) used to create a matrix of color values for the flood fill algorithm. </span>
<span style="color: #666666; font-style: italic;">#</span>
floodfill <- <a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span>replCol=<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.7</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.7</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
<span style="color: #666666; font-style: italic;">#####################</span>
<span style="color: #666666; font-style: italic;">### Required package</span>
<a href="http://inside-r.org/r-doc/base/require"><span style="color: #003399; font-weight: bold;">require</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#####################</span>
<span style="color: #666666; font-style: italic;">### Choose target position</span>
<a href="http://inside-r.org/r-doc/base/print"><span style="color: #003399; font-weight: bold;">print</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Choose a region to flood fill"</span><span style="color: #009900;">)</span>
pos <- <a href="http://inside-r.org/r-doc/graphics/locator"><span style="color: #003399; font-weight: bold;">locator</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
Pars <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.print"><span style="color: #003399; font-weight: bold;">dev.print</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/file"><span style="color: #003399; font-weight: bold;">file</span></a>=<span style="color: blue;">"4fill.png"</span><span style="color: #339933;">,</span> device = <a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">7</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">7</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span>
mat <- readPNG<span style="color: #009900;">(</span><span style="color: blue;">"4fill.png"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/dim"><span style="color: #003399; font-weight: bold;">dim</span></a><span style="color: #009900;">(</span>mat<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#####################</span>
<span style="color: #666666; font-style: italic;">### Make Colors matrix ('Col')</span>
Col <- <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span>mat<span style="color: #009900;">[</span><span style="color: #339933;">,,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> mat<span style="color: #009900;">[</span><span style="color: #339933;">,,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> mat<span style="color: #009900;">[</span><span style="color: #339933;">,,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> mat<span style="color: #009900;">[</span><span style="color: #339933;">,,</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
Col <- <a href="http://inside-r.org/r-doc/base/array"><span style="color: #003399; font-weight: bold;">array</span></a><span style="color: #009900;">(</span>Col<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/dim"><span style="color: #003399; font-weight: bold;">dim</span></a>=<a href="http://inside-r.org/r-doc/base/dim"><span style="color: #003399; font-weight: bold;">dim</span></a><span style="color: #009900;">(</span>mat<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
Col <- <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #009900;">(</span>Col<span style="color: #009900;">)</span>
Col <- Col<span style="color: #009900;">[</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/dim"><span style="color: #003399; font-weight: bold;">dim</span></a><span style="color: #009900;">(</span>Col<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span>:<span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>
<span style="color: #666666; font-style: italic;">#####################</span>
<span style="color: #666666; font-style: italic;">### Trim Colors matrix ('Col') to only plot area</span>
rows <- <a href="http://inside-r.org/r-doc/base/round"><span style="color: #003399; font-weight: bold;">round</span></a><span style="color: #009900;">(</span>Pars$mai<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span>/<span style="color: #cc66cc;">7</span>*<a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span>Col<span style="color: #009900;">)</span><span style="color: #009900;">)</span>:<a href="http://inside-r.org/r-doc/base/round"><span style="color: #003399; font-weight: bold;">round</span></a><span style="color: #009900;">(</span><span style="color: #009900;">(</span><span style="color: #cc66cc;">7</span>-Pars$mai<span style="color: #009900;">[</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>/<span style="color: #cc66cc;">7</span>*<a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span>Col<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
cols <- <a href="http://inside-r.org/r-doc/base/round"><span style="color: #003399; font-weight: bold;">round</span></a><span style="color: #009900;">(</span>Pars$mai<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>/<span style="color: #cc66cc;">7</span>*<a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a><span style="color: #009900;">(</span>Col<span style="color: #009900;">)</span><span style="color: #009900;">)</span>:<a href="http://inside-r.org/r-doc/base/round"><span style="color: #003399; font-weight: bold;">round</span></a><span style="color: #009900;">(</span><span style="color: #009900;">(</span><span style="color: #cc66cc;">7</span>-Pars$mai<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>/<span style="color: #cc66cc;">7</span>*<a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a><span style="color: #009900;">(</span>Col<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
Col <- Col<span style="color: #009900;">[</span>rows<span style="color: #339933;">,</span> cols<span style="color: #009900;">]</span>
<span style="color: #666666; font-style: italic;">#####################</span>
<span style="color: #666666; font-style: italic;">### Make lookup table</span>
rowVal <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>Pars$usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> Pars$usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #339933;">,,</span> <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span>Col<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
colVal <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>Pars$usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> Pars$usr<span style="color: #009900;">[</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">]</span><span style="color: #339933;">,,</span> <a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a><span style="color: #009900;">(</span>Col<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
tarPos <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/which.min"><span style="color: #003399; font-weight: bold;">which.min</span></a><span style="color: #009900;">(</span><span style="color: #009900;">(</span>rowVal-pos$x<span style="color: #009900;">)</span>^<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/which.min"><span style="color: #003399; font-weight: bold;">which.min</span></a><span style="color: #009900;">(</span><span style="color: #009900;">(</span>colVal-pos$y<span style="color: #009900;">)</span>^<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
tarCol <- Col<span style="color: #009900;">[</span>tarPos<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> tarPos<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #009900;">]</span>
<span style="color: #666666; font-style: italic;">#replCol <- rgb(0,0.5,0.5,1)</span>
grd <- <a href="http://inside-r.org/r-doc/base/cbind"><span style="color: #003399; font-weight: bold;">cbind</span></a><span style="color: #009900;">(</span>posi=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>Col<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/expand.grid"><span style="color: #003399; font-weight: bold;">expand.grid</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/row"><span style="color: #003399; font-weight: bold;">row</span></a>=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span>Col<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a><span style="color: #009900;">(</span>Col<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> done=<span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
grd$Col <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>Col<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#Get neighbors</span>
posi <- <a href="http://inside-r.org/r-doc/base/array"><span style="color: #003399; font-weight: bold;">array</span></a><span style="color: #009900;">(</span>grd$posi<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/dim"><span style="color: #003399; font-weight: bold;">dim</span></a>=<a href="http://inside-r.org/r-doc/base/dim"><span style="color: #003399; font-weight: bold;">dim</span></a><span style="color: #009900;">(</span>Col<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#down</span>
down <- posi*<span style="color: black; font-weight: bold;">NaN</span>
down<span style="color: #009900;">[</span>-<a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span>posi<span style="color: #009900;">)</span><span style="color: #339933;">,</span><span style="color: #009900;">]</span> <- posi<span style="color: #009900;">[</span>-<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #009900;">]</span>
grd$down <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>down<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#left</span>
left <- posi*<span style="color: black; font-weight: bold;">NaN</span>
left<span style="color: #009900;">[</span><span style="color: #339933;">,</span>-<span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span> <- posi<span style="color: #009900;">[</span><span style="color: #339933;">,</span>-<a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a><span style="color: #009900;">(</span>posi<span style="color: #009900;">)</span><span style="color: #009900;">]</span>
grd$left <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>left<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#up</span>
up <- posi*<span style="color: black; font-weight: bold;">NaN</span>
up<span style="color: #009900;">[</span>-<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #009900;">]</span> <- posi<span style="color: #009900;">[</span>-<a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span>posi<span style="color: #009900;">)</span><span style="color: #339933;">,</span><span style="color: #009900;">]</span>
grd$up <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>up<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#right</span>
right <- posi*<span style="color: black; font-weight: bold;">NaN</span>
right<span style="color: #009900;">[</span><span style="color: #339933;">,</span>-<a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a><span style="color: #009900;">(</span>posi<span style="color: #009900;">)</span><span style="color: #009900;">]</span> <- posi<span style="color: #009900;">[</span><span style="color: #339933;">,</span>-<span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>
grd$right <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>right<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#####################</span>
<span style="color: #666666; font-style: italic;">### Search for similar colors to target cell and record "done" or checked cells</span>
queue <- <a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>grd$row==tarPos<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span> & grd$col==tarPos<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
grd$Col<span style="color: #009900;">[</span>queue<span style="color: #009900;">]</span> <- replCol
count <- <span style="color: #cc66cc;">1</span>
pb <- <a href="http://inside-r.org/r-doc/utils/txtProgressBar"><span style="color: #003399; font-weight: bold;">txtProgressBar</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a> = count<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a> = <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span>grd<span style="color: #009900;">)</span><span style="color: #339933;">,</span> initial = count<span style="color: #339933;">,</span> style=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">while</span><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>queue<span style="color: #009900;">)</span> > <span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
queue2 <- <a href="http://inside-r.org/r-doc/base/vector"><span style="color: #003399; font-weight: bold;">vector</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mode"><span style="color: #003399; font-weight: bold;">mode</span></a>=<span style="color: blue;">"list"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>queue<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/utils/setTxtProgressBar"><span style="color: #003399; font-weight: bold;">setTxtProgressBar</span></a><span style="color: #009900;">(</span>pb<span style="color: #339933;">,</span> count<span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> queue<span style="color: #009900;">)</span><span style="color: #009900;">{</span>
incl <- <a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>grd$down<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> grd$left<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> grd$up<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> grd$right<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">)</span> > <span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span>
check <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>grd$down<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> grd$left<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> grd$up<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> grd$right<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">[</span>incl<span style="color: #009900;">]</span>
check <- check<span style="color: #009900;">[</span>grd$done<span style="color: #009900;">[</span>check<span style="color: #009900;">]</span> == <span style="color: #cc66cc;">0</span><span style="color: #009900;">]</span>
repl <- check<span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>grd$Col<span style="color: #009900;">[</span>check<span style="color: #009900;">]</span> == tarCol<span style="color: #009900;">)</span><span style="color: #009900;">]</span>
grd$Col<span style="color: #009900;">[</span>repl<span style="color: #009900;">]</span> <- replCol
queue2<span style="color: #009900;">[</span><span style="color: #009900;">[</span>count<span style="color: #009900;">]</span><span style="color: #009900;">]</span> <- repl
count <- count + <span style="color: #cc66cc;">1</span>
grd$done<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- <span style="color: #cc66cc;">1</span>
<span style="color: #009900;">}</span>
queue <- <a href="http://inside-r.org/r-doc/base/unlist"><span style="color: #003399; font-weight: bold;">unlist</span></a><span style="color: #009900;">(</span>queue2<span style="color: #009900;">)</span>
queue <- queue<span style="color: #009900;">[</span>grd$done<span style="color: #009900;">[</span>queue<span style="color: #009900;">]</span> == <span style="color: #cc66cc;">0</span><span style="color: #009900;">]</span>
<span style="color: #009900;">}</span>
<span style="color: #666666; font-style: italic;">#####################</span>
<span style="color: #666666; font-style: italic;">### Add flood fill layer to plot region</span>
Fill <- <a href="http://inside-r.org/r-doc/base/array"><span style="color: #003399; font-weight: bold;">array</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/dim"><span style="color: #003399; font-weight: bold;">dim</span></a><span style="color: #009900;">(</span>Col<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
Fill<span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>grd$Col == replCol<span style="color: #009900;">)</span><span style="color: #009900;">]</span> <- <span style="color: #cc66cc;">1</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>x=rowVal<span style="color: #339933;">,</span> y=colVal<span style="color: #339933;">,</span> z=Fill<span style="color: #339933;">,</span> add=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> useRaster=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> replCol<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />
<br />
<br />
<br />
<b>Example:</b><br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;">#install.packages("png")</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> bg=<span style="color: blue;">"white"</span><span style="color: #009900;">)</span>
x <- <span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">10</span>
y <- <span style="color: #cc66cc;">2</span>*x
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> y<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"l"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> xaxs=<span style="color: blue;">"i"</span><span style="color: #339933;">,</span> yaxs=<span style="color: blue;">"i"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span>-<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">20</span><span style="color: #339933;">,</span>-<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">20</span><span style="color: #339933;">,</span>-<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
floodfill<span style="color: #009900;">(</span>replCol=<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.7</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.7</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># Choose a 1st area</span>
floodfill<span style="color: #009900;">(</span>replCol=<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/grDevices/col2rgb"><span style="color: #003399; font-weight: bold;">col2rgb</span></a><span style="color: #009900;">(</span><span style="color: blue;">"pink"</span><span style="color: #339933;">,</span> alpha=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> maxColorValue = <span style="color: #cc66cc;">255</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># Chose a 2nd area</span>
floodfill<span style="color: #009900;">(</span>replCol=<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.9</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.7</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># Choose a 3rd area</span>
floodfill<span style="color: #009900;">(</span>replCol=<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># Choose a 3rd area</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Export graphics device</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.print"><span style="color: #003399; font-weight: bold;">dev.print</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/file"><span style="color: #003399; font-weight: bold;">file</span></a>=<span style="color: blue;">"floodfill_ex.png"</span><span style="color: #339933;">,</span> device = <a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">200</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />
<br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com1tag:blogger.com,1999:blog-6424211413492597169.post-9419793617177139272014-05-19T01:00:00.000+02:002015-09-13T09:07:20.682+02:00Automated determination of distribution groupings - A StackOverflow collaboration<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8WMNPtGl2Ob69Q8GsSo-SBftNG0mTm1OvUPmdxlYgO_1RFUhV-b8mYEpzW3EyoXjLEZNSxRfd7SrefNa-xswNjBDGiAAl8v3OyEJcD_UVJwt7dVT8Pia96XS9YX6QU7IuFf9CVzpPERHs/s1600/combined_boxplot_igraph.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8WMNPtGl2Ob69Q8GsSo-SBftNG0mTm1OvUPmdxlYgO_1RFUhV-b8mYEpzW3EyoXjLEZNSxRfd7SrefNa-xswNjBDGiAAl8v3OyEJcD_UVJwt7dVT8Pia96XS9YX6QU7IuFf9CVzpPERHs/s400/combined_boxplot_igraph.png" width="400" /></a></div>
For those of you not familiar with <a href="http://stackoverflow.com/questions/tagged/r">StackOverflow</a> (SO), it's a coder's help forum on the <a href="http://stackexchange.com/">StackExchange</a> website. It's one of the best resources for R-coding tips that I know of, due entirely to the community of users that routinely give expert advise (assuming you show that you have done your homework and provide a clear question and a <a href="http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example">reproducible example</a>). It's hard to believe that users spend time to offer this help for nothing more than virtual reputation points. I think a lot of coders are probably puzzle fanatics at heart, and enjoy the challenge of a given problem, but I'm nevertheless amazed by the depth of some of the R-related answers. The following is a short example of the value of this community (via SO), which helped me find a solution to a tricky problem. <br />
<br />
I have used figures like the one above (left) in my work at various times. It present various distributions in the form of a boxplot, and uses differing labels (in this case, the lowercase letters) to denote significant differences; i.e. levels sharing a label are not significantly different. This type of presentation is common when showing changes in organism condition indices over time (e.g. Figs 3 & 4, <a href="http://www.scielo.cl/scielo.php?pid=S0718-19572007000300018&script=sci_arttext">Bullseye puffer fish in Mexico</a>). <br />
<br />
In the example above, a Kruskal-Wallis rank sum test is used to test differences across all levels, followed by pairwise Mann-Whitney rank tests. The result is a matrix of p-values showing significant differences in distribution. So far so good, but it's not always clear how the grouping relationships should be labelled. In this relatively simple example, the tricky part is that level 1 should be grouped with 3 and 5, <i>but</i> 3 and 5 should not be grouped; Therefore, two labeling codes should be designated, with level 1 sharing both. I have wondered, for some time, if there might be some way to do this in an automated fashion using an algorithm. After many attempts on my own, I finally decided to post a question to SO.<br />
<br />
So, my first question "<a href="http://stackoverflow.com/q/23681709">Algorithm for automating pairwise significance grouping labels in R</a>" led me to the concept of the "<a href="http://en.wikipedia.org/wiki/Clique_cover_problem">clique cover problem</a>", and "<a href="http://en.wikipedia.org/wiki/Graph_theory">graph theory</a>" in general, via SO user "<a href="http://stackoverflow.com/users/2144669/david-eisenstat">David Eisenstat</a>". While I didn't completely understand his recommendation at first, it got me pointed in the right direction - I ultimately found the R package <a href="http://igraph.org/r/">igraph</a> for analyzing and plotting these types of problems.<br />
<br />
The next questions were a bit more technical. I figured out that I could return the "cliques" of my grouping relationships network using the <span style="font-family: "Courier New",Courier,monospace;">cliques</span> function of the igraph package, but my original attempt was giving me a list all relationships in my matrix. It was obvious to me that I would need to identify groupings where all levels were <i>fully connected </i>(i.e. each node in the clique connects to all others). So, my next question "<a href="http://stackoverflow.com/q/23686729">How to identify fully connected node clusters with igraph [in R]</a>" got me a tip from SO user "<a href="http://stackoverflow.com/users/1575670/majom">majom</a>", who showed me that these fully connected cliques could be identified by first reordering the starting nodes in my list of connections (before use in the <span style="font-family: "Courier New",Courier,monospace;">graph.data.frame</span> function), and then subjecting the resulting igraph object to the function <span style="font-family: "Courier New",Courier,monospace;">maximal.cliques</span>. So, the first suggestions from David were right on, even though they didn't include code. The result shows nicely all those groupings in the above example (right plot) with fully connected cliques [i.e. (1, 3), (1, 5), (2), (4, 6), (7)].<br />
<a href="http://stackoverflow.com/questions/23686729/how-to-identify-fully-connected-node-clusters-with-igraph-in-r"></a><br />
The final piece of the puzzle was more cosmetic - "<a href="http://stackoverflow.com/q/23692173">How to order a list of vectors based on the order of values contained within [in R]</a>". A bit vague, I know, but what I was trying to do was to label groups in a progressive way so that earlier levels received their labels first. I think this leads to more legible labeling, especially when levels represent some process of progression. At the time of this posting, I have received a single negative (-1) vote on this question... This may have to do with the clarity of the question - I seem to have confused some of the respondents based on follow up comments for clarification - or, maybe someone thought I hadn't shown enough effort on my own. There's no way to know without an accompanying comment. In any case, I got a robust approach from SO user "<a href="http://stackoverflow.com/users/2372064/mrflick">MrFlick</a>", and I can safely say that I would never have come up with such an eloquent solution on my own.<br />
<br />
In all, this solution seems to work great. I have tried it out on larger problems involving more levels and it appears to give correct results. Here is an example with 20 levels (a problem that would have been an amazing headache to do manually):<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQsyAVV32Wn3Ulz74eC004j3WLQB2EXaTMabYzU00uiwsvBgzQ_78tpr-icg4ENwGSL1nV3hvQNRsGcPJKRyZAL9ZcF1U5RVFW6pNkOT5yPjTx89Ph4tA46mmtS-dFW0x76lYO2PJ7gwuS/s1600/combined_boxplot_igraph_20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQsyAVV32Wn3Ulz74eC004j3WLQB2EXaTMabYzU00uiwsvBgzQ_78tpr-icg4ENwGSL1nV3hvQNRsGcPJKRyZAL9ZcF1U5RVFW6pNkOT5yPjTx89Ph4tA46mmtS-dFW0x76lYO2PJ7gwuS/s400/combined_boxplot_igraph_20.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
Any comments are welcome. There might be other ways of doing this (clustering?), but searching for similar methods seems to be limited by my ability to articulate the problem. Who would have thought this was an example of a "clique cover problem"? Thanks again to all those that provided help on SO!<br />
<br />
<b>Code to reproduce the example:</b><br />
<a name='more'></a><br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/igraph">igraph</a><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># version 1.0.1</span>
<span style="color: #666666; font-style: italic;">### Synthetic data set</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
n <- <span style="color: #cc66cc;">20</span>
n2 <- <span style="color: #cc66cc;">100</span>
mu <- <a href="http://inside-r.org/r-doc/base/cumsum"><span style="color: #003399; font-weight: bold;">cumsum</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/runif"><span style="color: #003399; font-weight: bold;">runif</span></a><span style="color: #009900;">(</span>n<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a>=-<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
sigma <- <a href="http://inside-r.org/r-doc/stats/runif"><span style="color: #003399; font-weight: bold;">runif</span></a><span style="color: #009900;">(</span>n<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
dat <- <a href="http://inside-r.org/r-doc/base/vector"><span style="color: #003399; font-weight: bold;">vector</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mode"><span style="color: #003399; font-weight: bold;">mode</span></a>=<span style="color: blue;">"list"</span><span style="color: #339933;">,</span> n<span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>dat<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
dat<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/stats/rnorm"><span style="color: #003399; font-weight: bold;">rnorm</span></a><span style="color: #009900;">(</span>n2<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a>=mu<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/sd"><span style="color: #003399; font-weight: bold;">sd</span></a>=sigma<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a> <- <a href="http://inside-r.org/r-doc/base/data.frame"><span style="color: #003399; font-weight: bold;">data.frame</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/grDevices/group"><span style="color: #003399; font-weight: bold;">group</span></a>=<a href="http://inside-r.org/r-doc/base/as.factor"><span style="color: #003399; font-weight: bold;">as.factor</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/rep"><span style="color: #003399; font-weight: bold;">rep</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>n<span style="color: #009900;">)</span><span style="color: #339933;">,</span> each=n2<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> y=<a href="http://inside-r.org/r-doc/base/unlist"><span style="color: #003399; font-weight: bold;">unlist</span></a><span style="color: #009900;">(</span>dat<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">### Plot</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"boxplot_levels_nolabels.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">6</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/boxplot"><span style="color: #003399; font-weight: bold;">boxplot</span></a><span style="color: #009900;">(</span>y ~ <a href="http://inside-r.org/r-doc/grDevices/group"><span style="color: #003399; font-weight: bold;">group</span></a><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #339933;">,</span> notch=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> outline=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># boxplot of factor level distributions</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Levels"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">2.5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"y"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">2.5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">### Test for significant differences in factor level distributions</span>
<a href="http://inside-r.org/r-doc/stats/kruskal.test"><span style="color: #003399; font-weight: bold;">kruskal.test</span></a><span style="color: #009900;">(</span>y ~ <a href="http://inside-r.org/r-doc/grDevices/group"><span style="color: #003399; font-weight: bold;">group</span></a><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># Significant differences as determined by Kruskal-Wallis rank sum test</span>
<a href="http://inside-r.org/r-doc/stats/pairwise.wilcox.test"><span style="color: #003399; font-weight: bold;">pairwise.wilcox.test</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$y<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$g<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># Pairwise Wilcoxon (or "Mann-Whitney") rank sum tests between all factor level combinations</span>
<span style="color: #666666; font-style: italic;">### Labeling of factor level groupings</span>
mw <- <a href="http://inside-r.org/r-doc/stats/pairwise.wilcox.test"><span style="color: #003399; font-weight: bold;">pairwise.wilcox.test</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$y<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$g<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Create matrix showing factor levels that should be grouped</span>
g <- <a href="http://inside-r.org/r-doc/base/as.matrix"><span style="color: #003399; font-weight: bold;">as.matrix</span></a><span style="color: #009900;">(</span>mw$p.value > <span style="color: #cc66cc;">0.05</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># TRUE signifies that pairs of not significantly different at the p < 0.05 level</span>
g <- <a href="http://inside-r.org/r-doc/base/cbind"><span style="color: #003399; font-weight: bold;">cbind</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/rbind"><span style="color: #003399; font-weight: bold;">rbind</span></a><span style="color: #009900;">(</span><span style="color: black; font-weight: bold;">NA</span><span style="color: #339933;">,</span> g<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: black; font-weight: bold;">NA</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># make square</span>
g <- <a href="http://inside-r.org/r-doc/base/replace"><span style="color: #003399; font-weight: bold;">replace</span></a><span style="color: #009900;">(</span>g<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/is.na"><span style="color: #003399; font-weight: bold;">is.na</span></a><span style="color: #009900;">(</span>g<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: black; font-weight: bold;">FALSE</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># replace NAs with FALSE</span>
g <- g + <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #009900;">(</span>g<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># not necessary, but make matrix symmetric</span>
<a href="http://inside-r.org/r-doc/base/diag"><span style="color: #003399; font-weight: bold;">diag</span></a><span style="color: #009900;">(</span>g<span style="color: #009900;">)</span> <- <span style="color: #cc66cc;">1</span> <span style="color: #666666; font-style: italic;"># diagonal equals 1</span>
<a href="http://inside-r.org/r-doc/base/rownames"><span style="color: #003399; font-weight: bold;">rownames</span></a><span style="color: #009900;">(</span>g<span style="color: #009900;">)</span> <- <span style="color: #cc66cc;">1</span>:n <span style="color: #666666; font-style: italic;"># change row names</span>
<a href="http://inside-r.org/r-doc/base/colnames"><span style="color: #003399; font-weight: bold;">colnames</span></a><span style="color: #009900;">(</span>g<span style="color: #009900;">)</span> <- <span style="color: #cc66cc;">1</span>:n <span style="color: #666666; font-style: italic;"># change column names</span>
g <span style="color: #666666; font-style: italic;"># resulting matrix</span>
<span style="color: #666666; font-style: italic;"># Re-arrange data into an "edge list" for use in igraph (i.e. which groups are "connected") - Solution from "David Eisenstat" ()</span>
same <- <a href="http://inside-r.org/r-doc/base/which"><span style="color: #003399; font-weight: bold;">which</span></a><span style="color: #009900;">(</span>g==<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
g2 <- <a href="http://inside-r.org/r-doc/base/data.frame"><span style="color: #003399; font-weight: bold;">data.frame</span></a><span style="color: #009900;">(</span>N1=<span style="color: #009900;">(</span><span style="color: #009900;">(</span>same-<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span> %% n<span style="color: #009900;">)</span> + <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> N2=<span style="color: #009900;">(</span><span style="color: #009900;">(</span>same-<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span> %/% n<span style="color: #009900;">)</span> + <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
g2 <- g2<span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/order"><span style="color: #003399; font-weight: bold;">order</span></a><span style="color: #009900;">(</span>g2<span style="color: #009900;">[</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span><span style="color: #009900;">]</span> <span style="color: #666666; font-style: italic;"># Get rid of loops and ensure right naming of vertices</span>
g3 <- simplify<span style="color: #009900;">(</span>graph.data.frame<span style="color: #009900;">(</span>g2<span style="color: #339933;">,</span>directed = <span style="color: black; font-weight: bold;">FALSE</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
get.data.frame<span style="color: #009900;">(</span>g3<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># view connections</span>
<span style="color: #666666; font-style: italic;"># Plot igraph</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"igraph_level_groupings.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
V<span style="color: #009900;">(</span>g3<span style="color: #009900;">)</span>$color <- <span style="color: blue;">"grey"</span>
V<span style="color: #009900;">(</span>g3<span style="color: #009900;">)</span>$label.color <- <span style="color: blue;">"black"</span>
V<span style="color: #009900;">(</span>g3<span style="color: #009900;">)</span>$size <- <span style="color: #cc66cc;">15</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>g3<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># plot all nodes are connections</span>
<a href="http://inside-r.org/r-doc/graphics/box"><span style="color: #003399; font-weight: bold;">box</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Linked levels are not significantly different <span style="color: #000099; font-weight: bold;">\n</span>(Mann-Whitney)"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Calcuate the maximal cliques - these are groupings where every node is connected to all others</span>
cliq <- maximal.cliques<span style="color: #009900;">(</span>g3<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># Solution from "majom" (http://stackoverflow.com/users/1575670/majom)</span>
<span style="color: #666666; font-style: italic;"># Reorder by level order - Solution from "MrFlick" (http://stackoverflow.com/users/2372064/mrflick) and "ckluss"</span>
ml<-<a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sapply"><span style="color: #003399; font-weight: bold;">sapply</span></a><span style="color: #009900;">(</span>cliq<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
sf <- <a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span> <a href="http://inside-r.org/r-doc/base/sort"><span style="color: #003399; font-weight: bold;">sort</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span><span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/seq_len"><span style="color: #003399; font-weight: bold;">seq_len</span></a><span style="color: #009900;">(</span>ml<span style="color: #009900;">)</span><span style="color: #009900;">]</span>
cliq2 <- <a href="http://inside-r.org/r-doc/base/lapply"><span style="color: #003399; font-weight: bold;">lapply</span></a><span style="color: #009900;">(</span>cliq<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/as.numeric"><span style="color: #003399; font-weight: bold;">as.numeric</span></a><span style="color: #009900;">)</span>
reord <- <a href="http://inside-r.org/r-doc/base/do.call"><span style="color: #003399; font-weight: bold;">do.call</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/order"><span style="color: #003399; font-weight: bold;">order</span></a><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/as.data.frame"><span style="color: #003399; font-weight: bold;">as.data.frame</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/do.call"><span style="color: #003399; font-weight: bold;">do.call</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/rbind"><span style="color: #003399; font-weight: bold;">rbind</span></a><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/lapply"><span style="color: #003399; font-weight: bold;">lapply</span></a><span style="color: #009900;">(</span>cliq2<span style="color: #339933;">,</span> sf<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
cliq <- cliq<span style="color: #009900;">[</span>reord<span style="color: #009900;">]</span>
cliq
<span style="color: #666666; font-style: italic;"># Generate labels to factor levels</span>
lab.txt <- <a href="http://inside-r.org/r-doc/base/vector"><span style="color: #003399; font-weight: bold;">vector</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mode"><span style="color: #003399; font-weight: bold;">mode</span></a>=<span style="color: blue;">"list"</span><span style="color: #339933;">,</span> n<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># empty list</span>
lab <- <span style="color: black; font-weight: bold;">letters</span><span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>cliq<span style="color: #009900;">)</span><span style="color: #009900;">]</span> <span style="color: #666666; font-style: italic;"># clique labels</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>cliq<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span> <span style="color: #666666; font-style: italic;"># loop to concatenate clique labels</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>j <span style="color: black; font-weight: bold;">in</span> cliq<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
lab.txt<span style="color: #009900;">[</span><span style="color: #009900;">[</span>j<span style="color: #009900;">]</span><span style="color: #009900;">]</span> <- paste0<span style="color: #009900;">(</span>lab.txt<span style="color: #009900;">[</span><span style="color: #009900;">[</span>j<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> lab<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<span style="color: #009900;">}</span>
<span style="color: #666666; font-style: italic;"># Boxplot with facor level grouping labels</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"boxplot_levels_withlabels.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">6</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
ylim <- <a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$y<span style="color: #009900;">)</span> + <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
bp <- <a href="http://inside-r.org/r-doc/graphics/boxplot"><span style="color: #003399; font-weight: bold;">boxplot</span></a><span style="color: #009900;">(</span>y ~ <a href="http://inside-r.org/r-doc/grDevices/group"><span style="color: #003399; font-weight: bold;">group</span></a><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #339933;">,</span> notch=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> ylim=ylim<span style="color: #339933;">,</span> outline=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># boxplot of factor level distributions</span>
<a href="http://inside-r.org/r-doc/graphics/text"><span style="color: #003399; font-weight: bold;">text</span></a><span style="color: #009900;">(</span>x=<span style="color: #cc66cc;">1</span>:n<span style="color: #339933;">,</span> y=bp$stats<span style="color: #009900;">[</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=lab.txt<span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> cex=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> font=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Levels"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">2.5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"y"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">2.5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># Combined plot</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"combined_boxplot_igraph.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/layout"><span style="color: #003399; font-weight: bold;">layout</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> widths=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> heights=<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">8</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># plot 1</span>
ylim <- <a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$y<span style="color: #009900;">)</span> + <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
bp <- <a href="http://inside-r.org/r-doc/graphics/boxplot"><span style="color: #003399; font-weight: bold;">boxplot</span></a><span style="color: #009900;">(</span>y ~ <a href="http://inside-r.org/r-doc/grDevices/group"><span style="color: #003399; font-weight: bold;">group</span></a><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #339933;">,</span> notch=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> ylim=ylim<span style="color: #339933;">,</span> outline=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># boxplot of factor level distributions</span>
<a href="http://inside-r.org/r-doc/graphics/text"><span style="color: #003399; font-weight: bold;">text</span></a><span style="color: #009900;">(</span>x=<span style="color: #cc66cc;">1</span>:n<span style="color: #339933;">,</span> y=bp$stats<span style="color: #009900;">[</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=lab.txt<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> cex=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> font=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Levels"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">2.5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"y"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">2.5</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;"># plot 2</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
V<span style="color: #009900;">(</span>g3<span style="color: #009900;">)</span>$color <- <span style="color: blue;">"grey"</span>
V<span style="color: #009900;">(</span>g3<span style="color: #009900;">)</span>$label.color <- <span style="color: blue;">"black"</span>
V<span style="color: #009900;">(</span>g3<span style="color: #009900;">)</span>$size <- <span style="color: #cc66cc;">15</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>g3<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># plot all nodes are connections</span>
<a href="http://inside-r.org/r-doc/graphics/box"><span style="color: #003399; font-weight: bold;">box</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Linked levels are not significantly different <span style="color: #000099; font-weight: bold;">\n</span>(Mann-Whitney)"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com10tag:blogger.com,1999:blog-6424211413492597169.post-12320703874782048862014-05-03T15:38:00.002+02:002014-09-02T16:24:49.223+02:00Evaluating model performance - A practical example of the effects of overfitting and data size on prediction <div style="text-align: center;">
</div>
<div style="text-align: left;">
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLxWcxs4WZtP7b-cFGjsgtYEaHWekz2jFYpoC96UyqciS-WXjVBRXKdemzoJeH9McpkCc0PUaLQKLFpoVYcIBzj76xZ2NeJWJgA25-W-c9D-XpNrR01eSztSBPoJS4D5HeF4iPhGaS7hCG/s1600/model_fit~terms.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLxWcxs4WZtP7b-cFGjsgtYEaHWekz2jFYpoC96UyqciS-WXjVBRXKdemzoJeH9McpkCc0PUaLQKLFpoVYcIBzj76xZ2NeJWJgA25-W-c9D-XpNrR01eSztSBPoJS4D5HeF4iPhGaS7hCG/s1600/model_fit~terms.png" height="320" width="400" /></a></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBPbTqabnu0arI7TJzE8exmZI0VC1MaWWDbZ8Yk6E_nh1CqOoaHlzvo3O2T_qABjMoSdhoMlrMiWRerEqZoX8X4-XwPi7rVoZ7JGFRS1M4djgL8taQs-LWI24p9EqPJUU3wspObnn51Nht/s1600/model_fit~terms.png"></a><br /></div>
Following my last post on <a href="http://menugget.blogspot.de/2014/04/decision-making-trees-and-machine.html">decision making trees and machine learning</a>, where I presented some tips gathered from the "<a href="http://horicky.blogspot.de/">Pragmatic Programming Techniques</a>" blog, I have again been impressed by its clear presentation of strategies regarding the <a href="http://horicky.blogspot.de/2012/06/predictive-analytics-evaluate-model.html">evaluation of model performance</a>. I have seen some of these topics presented elsewhere - especially graphics showing the link between model complexity and prediction error (i.e. "<a href="http://en.wikipedia.org/wiki/Overfitting">overfitting</a>") - but this particular presentation made me want to go back to this topic and try to make a practical example in R that I could use when teaching. <br />
<br />
<b>Effect of overfitting on prediction</b><br />
The above graph shows polynomial fitting of various degrees to an artificial data set - The "real" underlying model is a 3rd-degree polynomial (y ~ b3*x^3 + b2*x^2 + b1*x + a). One gets a good idea that the higher degree models are incorrect give the single-term removal significance tests provided by the <span style="font-family: "Courier New",Courier,monospace;">summary</span> function (e.g. 5th-degree polynomial model):<br />
<span style="font-size: x-small;"><br /><span style="font-family: "Courier New",Courier,monospace; font-size: small;">Call:<br />lm(formula = ye ~ poly(x, degree = 5), data = df)<br />Residuals:<br /> Min 1Q Median 3Q Max <br />-4.4916 -2.0382 -0.4417 2.2340 8.1518 <br />Coefficients:<br /> Estimate Std. Error t value Pr(>|t|) <br />(Intercept) 29.3696 0.4304 68.242 < 2e-16 ***<br />poly(x, degree = 5)1 74.4980 3.0432 24.480 < 2e-16 ***<br />poly(x, degree = 5)2 54.0712 3.0432 17.768 < 2e-16 ***<br />poly(x, degree = 5)3 23.5394 3.0432 7.735 9.72e-10 ***<br />poly(x, degree = 5)4 -3.0043 3.0432 -0.987 0.329 <br />poly(x, degree = 5)5 1.1392 3.0432 0.374 0.710 <br />---<br />Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1<br />Residual standard error: 3.043 on 44 degrees of freedom<br />Multiple R-squared: 0.9569, Adjusted R-squared: 0.952 <br />F-statistic: 195.2 on 5 and 44 DF, p-value: < 2.2e-16</span></span><br />
<br />
Nevertheless, a more robust analysis of prediction error is through a cross-validation - by splitting the data into training and validation sub-sets. The following example does this split at 50% training and 50% validation, with 500 permutations.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqLicYJnqDzRm1eQUSDNHNtge14ysRh11h8yihZgra5iM862Kw3TBpVhFS2RxCYLecJ4uPBX2o_-Y9nqoIPoV1enK_PtzMsoHHsnJBIGqlPH-dQ5TP8Q9q7iIkk9HaaHJbSiVp8esktbPb/s1600/error%257Ecomplexity.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqLicYJnqDzRm1eQUSDNHNtge14ysRh11h8yihZgra5iM862Kw3TBpVhFS2RxCYLecJ4uPBX2o_-Y9nqoIPoV1enK_PtzMsoHHsnJBIGqlPH-dQ5TP8Q9q7iIkk9HaaHJbSiVp8esktbPb/s1600/error%257Ecomplexity.png" height="320" width="400" /></a></div>
<br />
<div style="text-align: center;">
</div>
So, here we have the typical trend of increasing prediction error with model complexity (via cross-validation - CV) when the model is overfit (i.e. > 3rd-degree polynomial, vertical grey dashed line). As reference, the horizontal grey dashed line shows the original amount of error added, which is where the CV error reaches a minimum.<br />
<br />
<b>Effect of data size on prediction</b><br />
Another interesting aspect presented in the post is the use of CV in estimating the relationship between prediction error and the amount of data used in the model fitting (credit given to <a href="http://cs.stanford.edu/people/ang/">Andrew Ng</a> from Stanford). This is helpful concept when determining what the benefit in prediction would be following an invest in more data sampling:<br />
<div style="text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS7YvR_dEWrQUmYWtzG8QYHnwDtb6uKjUOMOS_rQxhon7HvajMrw1N-v06E4tIKVWk5gwrPBCBWFjQ5gOXQ5OL-2paD8Z2rOUlllERB0Pz_bHPeIWi5F05xalUKqNltxGVEYrZjjltyI_A/s1600/error~data_size_7term.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS7YvR_dEWrQUmYWtzG8QYHnwDtb6uKjUOMOS_rQxhon7HvajMrw1N-v06E4tIKVWk5gwrPBCBWFjQ5gOXQ5OL-2paD8Z2rOUlllERB0Pz_bHPeIWi5F05xalUKqNltxGVEYrZjjltyI_A/s1600/error~data_size_7term.png" height="320" width="400" /></a></div>
<div style="text-align: center;">
<br /></div>
Here we see that, given a fixed model complexity, training error and CV error converges. Again, the horizontal grey dashed line indicates the actual measurement error of the response variable. So, in this example, there is not much improvement in prediction error following a data size of ca. 100. Interestingly, the example also demonstrates that even with an overfit model containing a 7th-degree polynomial, the increased prediction error is overcome with a larger data set. For comparison, the same exercise done with the correct 3rd-degree model shows that even the smaller data set achieves a relatively low prediction error even when the data size is small (2.6 MAE in 3rd-degree poly. vs 3.7 MAE in 7th-degree poly.):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmvX-gNkRp9SzMTOCMmVhL12KdFMMAq2oQTz6Z_5pXtwzdeyC1cHJIhIi0XFkioaRodOAYR8GXwIiZRKrOEqE2cgHLd6wPCVambvJaSqdZnKGTkSoUEeiw37sdtThsALvqvf91OwkykGrT/s1600/error%257Edata_size_3term.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmvX-gNkRp9SzMTOCMmVhL12KdFMMAq2oQTz6Z_5pXtwzdeyC1cHJIhIi0XFkioaRodOAYR8GXwIiZRKrOEqE2cgHLd6wPCVambvJaSqdZnKGTkSoUEeiw37sdtThsALvqvf91OwkykGrT/s1600/error%257Edata_size_3term.png" height="320" width="400" /></a></div>
<div style="text-align: left;">
<br /></div>
<b>Code to reproduce example:</b><br />
<a name='more'></a><br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;">### Data and model fitting</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1111</span><span style="color: #009900;">)</span>
n <- <span style="color: #cc66cc;">50</span>
x <- <a href="http://inside-r.org/r-doc/base/sort"><span style="color: #003399; font-weight: bold;">sort</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/runif"><span style="color: #003399; font-weight: bold;">runif</span></a><span style="color: #009900;">(</span>n<span style="color: #339933;">,</span> -<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
y <- <span style="color: #cc66cc;">3</span>*x^<span style="color: #cc66cc;">3</span> + <span style="color: #cc66cc;">5</span>*x^<span style="color: #cc66cc;">2</span> + <span style="color: #cc66cc;">0.5</span>*x + <span style="color: #cc66cc;">20</span> <span style="color: #666666; font-style: italic;"># a 3 polynomial model</span>
err <- <a href="http://inside-r.org/r-doc/stats/rnorm"><span style="color: #003399; font-weight: bold;">rnorm</span></a><span style="color: #009900;">(</span>n<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/sd"><span style="color: #003399; font-weight: bold;">sd</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
ye <- y + err
<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a> <- <a href="http://inside-r.org/r-doc/base/data.frame"><span style="color: #003399; font-weight: bold;">data.frame</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> ye<span style="color: #009900;">)</span>
nterm <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">7</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">9</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"model_fit~terms.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>ye~x<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"y"</span><span style="color: #009900;">)</span>
PAL <- <a href="http://inside-r.org/r-doc/grDevices/colorRampPalette"><span style="color: #003399; font-weight: bold;">colorRampPalette</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"blue"</span><span style="color: #339933;">,</span> <span style="color: blue;">"cyan"</span><span style="color: #339933;">,</span> <span style="color: blue;">"yellow"</span><span style="color: #339933;">,</span> <span style="color: blue;">"red"</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
COLS <- PAL<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>nterm<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>nterm<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
fit <- <a href="http://inside-r.org/r-doc/stats/lm"><span style="color: #003399; font-weight: bold;">lm</span></a><span style="color: #009900;">(</span>ye ~ <a href="http://inside-r.org/r-doc/stats/poly"><span style="color: #003399; font-weight: bold;">poly</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> degree=nterm<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/utils/data"><span style="color: #003399; font-weight: bold;">data</span></a>=<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">)</span>
newdat <- <a href="http://inside-r.org/r-doc/base/data.frame"><span style="color: #003399; font-weight: bold;">data.frame</span></a><span style="color: #009900;">(</span>x=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/min"><span style="color: #003399; font-weight: bold;">min</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$x<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$x<span style="color: #009900;">)</span><span style="color: #339933;">,,</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>newdat$x<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/predict"><span style="color: #003399; font-weight: bold;">predict</span></a><span style="color: #009900;">(</span>fit<span style="color: #339933;">,</span> newdat<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=COLS<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"topleft"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=paste0<span style="color: #009900;">(</span>nterm<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">""</span><span style="color: #339933;">,</span> <span style="color: blue;">""</span><span style="color: #339933;">,</span> <span style="color: blue;">"*"</span><span style="color: #339933;">,</span> <span style="color: blue;">""</span><span style="color: #339933;">,</span> <span style="color: blue;">""</span><span style="color: #339933;">,</span> <span style="color: blue;">""</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/title"><span style="color: #003399; font-weight: bold;">title</span></a>=<span style="color: blue;">"polynomial degrees"</span><span style="color: #339933;">,</span> bty=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=COLS<span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">### Term significance</span>
fit <- <a href="http://inside-r.org/r-doc/stats/lm"><span style="color: #003399; font-weight: bold;">lm</span></a><span style="color: #009900;">(</span>ye ~ <a href="http://inside-r.org/r-doc/stats/poly"><span style="color: #003399; font-weight: bold;">poly</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> degree=<span style="color: #cc66cc;">5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/utils/data"><span style="color: #003399; font-weight: bold;">data</span></a>=<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/summary"><span style="color: #003399; font-weight: bold;">summary</span></a><span style="color: #009900;">(</span>fit<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">### Error as a function of model complexity</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1111</span><span style="color: #009900;">)</span>
n <- <span style="color: #cc66cc;">50</span>
nterm <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">12</span><span style="color: #009900;">)</span>
perms <- <span style="color: #cc66cc;">500</span>
frac.train <- <span style="color: #cc66cc;">0.5</span> <span style="color: #666666; font-style: italic;">#training fraction of data</span>
run <- <a href="http://inside-r.org/r-doc/base/data.frame"><span style="color: #003399; font-weight: bold;">data.frame</span></a><span style="color: #009900;">(</span>n<span style="color: #339933;">,</span> nterm<span style="color: #339933;">,</span> train.err=<span style="color: black; font-weight: bold;">NaN</span><span style="color: #339933;">,</span> cv.err=<span style="color: black; font-weight: bold;">NaN</span><span style="color: #009900;">)</span>
run
x <- <a href="http://inside-r.org/r-doc/base/sort"><span style="color: #003399; font-weight: bold;">sort</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/runif"><span style="color: #003399; font-weight: bold;">runif</span></a><span style="color: #009900;">(</span>n<span style="color: #339933;">,</span> -<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
y <- <span style="color: #cc66cc;">3</span>*x^<span style="color: #cc66cc;">3</span> + <span style="color: #cc66cc;">5</span>*x^<span style="color: #cc66cc;">2</span> + <span style="color: #cc66cc;">0.5</span>*x + <span style="color: #cc66cc;">20</span> <span style="color: #666666; font-style: italic;"># a 3 polynomial model</span>
err <- <a href="http://inside-r.org/r-doc/stats/rnorm"><span style="color: #003399; font-weight: bold;">rnorm</span></a><span style="color: #009900;">(</span>n<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/sd"><span style="color: #003399; font-weight: bold;">sd</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
ye <- y + err
<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a> <- <a href="http://inside-r.org/r-doc/base/data.frame"><span style="color: #003399; font-weight: bold;">data.frame</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> ye<span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span>run<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
pred.train <- <a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span><span style="color: black; font-weight: bold;">NaN</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a>=<a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a>=perms<span style="color: #009900;">)</span>
pred.valid <- <a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span><span style="color: black; font-weight: bold;">NaN</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a>=<a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a>=perms<span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>j <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>perms<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
train <- <a href="http://inside-r.org/r-doc/base/sample"><span style="color: #003399; font-weight: bold;">sample</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">)</span>*frac.train<span style="color: #009900;">)</span>
valid <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">[</span>-train<span style="color: #009900;">]</span>
dftrain <- <a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">[</span>train<span style="color: #339933;">,</span><span style="color: #009900;">]</span>
dfvalid <- <a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">[</span>valid<span style="color: #339933;">,</span><span style="color: #009900;">]</span>
fit <- <a href="http://inside-r.org/r-doc/stats/lm"><span style="color: #003399; font-weight: bold;">lm</span></a><span style="color: #009900;">(</span>ye ~ <a href="http://inside-r.org/r-doc/stats/poly"><span style="color: #003399; font-weight: bold;">poly</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> degree=run$nterm<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/utils/data"><span style="color: #003399; font-weight: bold;">data</span></a>=dftrain<span style="color: #009900;">)</span>
pred.train<span style="color: #009900;">[</span>train<span style="color: #339933;">,</span>j<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/stats/predict"><span style="color: #003399; font-weight: bold;">predict</span></a><span style="color: #009900;">(</span>fit<span style="color: #009900;">)</span>
pred.valid<span style="color: #009900;">[</span>valid<span style="color: #339933;">,</span>j<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/stats/predict"><span style="color: #003399; font-weight: bold;">predict</span></a><span style="color: #009900;">(</span>fit<span style="color: #339933;">,</span> dfvalid<span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
run$train.err<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/abs"><span style="color: #003399; font-weight: bold;">abs</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$ye - pred.train<span style="color: #009900;">)</span><span style="color: #339933;">,</span> na.rm=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># sqrt(mean((df$ye - pred.train)^2, na.rm=TRUE))</span>
run$cv.err<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/abs"><span style="color: #003399; font-weight: bold;">abs</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$ye - pred.valid<span style="color: #009900;">)</span><span style="color: #339933;">,</span> na.rm=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># sqrt(mean((df$ye - pred.valid)^2, na.rm=TRUE))</span>
<a href="http://inside-r.org/r-doc/base/print"><span style="color: #003399; font-weight: bold;">print</span></a><span style="color: #009900;">(</span>i<span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"error~complexity.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
ylim <- <a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>run$train.err<span style="color: #339933;">,</span> run$cv.err<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>run$nterm<span style="color: #339933;">,</span> run$train.err<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a>=<span style="color: blue;">"y"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #339933;">,</span> ylim=ylim<span style="color: #339933;">,</span> xlab=<span style="color: blue;">"Model complexity [polynomial degrees]"</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Mean absolute error [MAE]"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>run$nterm<span style="color: #339933;">,</span> run$cv.err<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span>v=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">8</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span>h=<a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/abs"><span style="color: #003399; font-weight: bold;">abs</span></a><span style="color: #009900;">(</span>err<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">8</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"top"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Training error"</span><span style="color: #339933;">,</span> <span style="color: blue;">"Cross-validation error"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> bty=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">### Error as a function of data size</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1111</span><span style="color: #009900;">)</span>
n <- <a href="http://inside-r.org/r-doc/base/round"><span style="color: #003399; font-weight: bold;">round</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/exp"><span style="color: #003399; font-weight: bold;">exp</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">500</span><span style="color: #009900;">)</span><span style="color: #339933;">,,</span> <span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
nterm <- <span style="color: #cc66cc;">7</span>
perms <- <span style="color: #cc66cc;">500</span>
frac.train <- <span style="color: #cc66cc;">0.5</span> <span style="color: #666666; font-style: italic;">#training fraction of data</span>
run <- <a href="http://inside-r.org/r-doc/base/data.frame"><span style="color: #003399; font-weight: bold;">data.frame</span></a><span style="color: #009900;">(</span>n<span style="color: #339933;">,</span> nterm<span style="color: #339933;">,</span> train.err=<span style="color: black; font-weight: bold;">NaN</span><span style="color: #339933;">,</span> cv.err=<span style="color: black; font-weight: bold;">NaN</span><span style="color: #009900;">)</span>
run
x <- <a href="http://inside-r.org/r-doc/base/sort"><span style="color: #003399; font-weight: bold;">sort</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/runif"><span style="color: #003399; font-weight: bold;">runif</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a><span style="color: #009900;">(</span>n<span style="color: #009900;">)</span><span style="color: #339933;">,</span> -<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
y <- <span style="color: #cc66cc;">3</span>*x^<span style="color: #cc66cc;">3</span> + <span style="color: #cc66cc;">5</span>*x^<span style="color: #cc66cc;">2</span> + <span style="color: #cc66cc;">0.5</span>*x + <span style="color: #cc66cc;">20</span> <span style="color: #666666; font-style: italic;"># a 3 polynomial model</span>
err <- <a href="http://inside-r.org/r-doc/stats/rnorm"><span style="color: #003399; font-weight: bold;">rnorm</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/max"><span style="color: #003399; font-weight: bold;">max</span></a><span style="color: #009900;">(</span>n<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/sd"><span style="color: #003399; font-weight: bold;">sd</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
ye <- y + err
DF <- <a href="http://inside-r.org/r-doc/base/data.frame"><span style="color: #003399; font-weight: bold;">data.frame</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> ye<span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span>run<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
<a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a> <- DF<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span>:run$n<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span><span style="color: #009900;">]</span>
pred.train <- <a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span><span style="color: black; font-weight: bold;">NaN</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a>=<a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a>=perms<span style="color: #009900;">)</span>
pred.valid <- <a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span><span style="color: black; font-weight: bold;">NaN</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a>=<a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a>=perms<span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>j <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>perms<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
train <- <a href="http://inside-r.org/r-doc/base/sample"><span style="color: #003399; font-weight: bold;">sample</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">)</span>*frac.train<span style="color: #009900;">)</span>
valid <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">[</span>-train<span style="color: #009900;">]</span>
dftrain <- <a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">[</span>train<span style="color: #339933;">,</span><span style="color: #009900;">]</span>
dfvalid <- <a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a><span style="color: #009900;">[</span>valid<span style="color: #339933;">,</span><span style="color: #009900;">]</span>
fit <- <a href="http://inside-r.org/r-doc/stats/lm"><span style="color: #003399; font-weight: bold;">lm</span></a><span style="color: #009900;">(</span>ye ~ <a href="http://inside-r.org/r-doc/stats/poly"><span style="color: #003399; font-weight: bold;">poly</span></a><span style="color: #009900;">(</span>x<span style="color: #339933;">,</span> degree=run$nterm<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/utils/data"><span style="color: #003399; font-weight: bold;">data</span></a>=dftrain<span style="color: #009900;">)</span>
pred.train<span style="color: #009900;">[</span>train<span style="color: #339933;">,</span>j<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/stats/predict"><span style="color: #003399; font-weight: bold;">predict</span></a><span style="color: #009900;">(</span>fit<span style="color: #009900;">)</span>
pred.valid<span style="color: #009900;">[</span>valid<span style="color: #339933;">,</span>j<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/stats/predict"><span style="color: #003399; font-weight: bold;">predict</span></a><span style="color: #009900;">(</span>fit<span style="color: #339933;">,</span> dfvalid<span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
run$train.err<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/abs"><span style="color: #003399; font-weight: bold;">abs</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$ye - pred.train<span style="color: #009900;">)</span><span style="color: #339933;">,</span> na.rm=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># sqrt(mean((df$ye - pred.train)^2, na.rm=TRUE))</span>
run$cv.err<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/abs"><span style="color: #003399; font-weight: bold;">abs</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/stats/df"><span style="color: #003399; font-weight: bold;">df</span></a>$ye - pred.valid<span style="color: #009900;">)</span><span style="color: #339933;">,</span> na.rm=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># sqrt(mean((df$ye - pred.valid)^2, na.rm=TRUE))</span>
<a href="http://inside-r.org/r-doc/base/print"><span style="color: #003399; font-weight: bold;">print</span></a><span style="color: #009900;">(</span>i<span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span>paste0<span style="color: #009900;">(</span><span style="color: blue;">"error~data_size_"</span><span style="color: #339933;">,</span> paste0<span style="color: #009900;">(</span>nterm<span style="color: #339933;">,</span> <span style="color: blue;">"term"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: blue;">".png"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
ylim <- <a href="http://inside-r.org/r-doc/base/range"><span style="color: #003399; font-weight: bold;">range</span></a><span style="color: #009900;">(</span>run$train.err<span style="color: #339933;">,</span> run$cv.err<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>run$n<span style="color: #339933;">,</span> run$train.err<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/log"><span style="color: #003399; font-weight: bold;">log</span></a>=<span style="color: blue;">"xy"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #339933;">,</span> ylim=ylim<span style="color: #339933;">,</span> xlab=<span style="color: blue;">"Data size [n]"</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">"Mean absolute error [MAE]"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>run$n<span style="color: #339933;">,</span> run$cv.err<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a>=<span style="color: blue;">"o"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/abline"><span style="color: #003399; font-weight: bold;">abline</span></a><span style="color: #009900;">(</span>h=<a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/abs"><span style="color: #003399; font-weight: bold;">abs</span></a><span style="color: #009900;">(</span>err<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">8</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"bottomright"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=paste0<span style="color: #009900;">(</span><span style="color: blue;">"No. of polynomial degrees = "</span><span style="color: #339933;">,</span> nterm<span style="color: #009900;">)</span><span style="color: #339933;">,</span> bty=<span style="color: blue;">"n"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"top"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Training error"</span><span style="color: #339933;">,</span> <span style="color: blue;">"Cross-validation error"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> bty=<span style="color: blue;">"n"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com3tag:blogger.com,1999:blog-6424211413492597169.post-39014593431916246972014-04-30T11:51:00.000+02:002014-09-02T16:24:49.305+02:00Decision making trees and machine learning resources for RI have recently come across Ricky Ho's blog "Pragmatic Programming Techniques", which seems to be excellent resource for all sorts of aspects regarding data exploration and predictive modelling. The post "<a href="http://horicky.blogspot.de/2013/08/six-steps-in-data-science.html">Six steps in data science</a>" provides a nice overview to some of the topics covered in the blog. For some reason, this blog does not seem to be listed on R-Bloggers (attn: Tal Galili!).<br />
<br />
I was drawn to the page from my interest in understanding Classification and Regression Tree (CART) models, and quickly became amazed by the blog's <a href="http://horicky.blogspot.de/2012/06/predictive-analytics-decision-tree-and.html">nice review of some available methods</a>. I was specifically looking for a example that uses <a href="http://stat.ethz.ch/R-manual/R-patched/library/datasets/html/iris.html">Edgar Anderson's iris data set</a> as I find it to be a very understandable example for this type of problem - i.e. <i>Can we develop a model to predict the iris species based on it's morphological characteristics?</i><br />
<br />
Below is a sample of just two methods that were presented using the <a href="http://cran.r-project.org/web/packages/rpart/index.html">rpart</a> and <a href="http://cran.r-project.org/web/packages/randomForest/index.html">randomForest</a> packages. rpart is a referred to as a "Decision Tree" method, while randomForest is an example of a "Tree Ensemble" method. The blog explains many of the pros and cons for each method, and a further post show even further examples of predictive analytics, including Neural Network, Support Vector Machine, Naive Bayes and Nearest Neighbor approaches (all using the iris data set). I would love to know a bit more about the comparative predictive powers of each of these methods. For the meantime, the example below shows a cross-validation comparison of prediction accuracy for the rpart and randomForest methods using 100 permutations. Half the data set is used as the training set and the other half is used as the validation set.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqTP3vnhPxCoB3J_9fb2jD5RPb0mGAKKNAelZa_wGZz_c1pfL-omYweDmjqRnKkTYtBZl80vGVr_GYBHKF3Cbta-E1fbMxBsFrVKJgwb3tAGNhELyxllWWptdOGHaxvad2W7SgBDoRlF3P/s1600/CART_model_accuracy.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqTP3vnhPxCoB3J_9fb2jD5RPb0mGAKKNAelZa_wGZz_c1pfL-omYweDmjqRnKkTYtBZl80vGVr_GYBHKF3Cbta-E1fbMxBsFrVKJgwb3tAGNhELyxllWWptdOGHaxvad2W7SgBDoRlF3P/s1600/CART_model_accuracy.png" height="285" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
The results show a slight improvement in accuracy for the randomForest method, especially for the species versicolor and virginica - which are more similar in morphology. This can be see in the degree of overlap in the plot of the first 2 principle components (explaining ~98% of the variance):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHPg_VX4C4rmgn4BDejhwaWFbZvGWd4TfbFyitYqDnJGTW047RU9SqK15zB7_4l_7QQPf7qJSkaz9h0ZN78mckXQfThAht7UQ2H3noKUOxP0Y-4OiyK851L0GNlI0-Nm_5fRvUQ9wkQUPf/s1600/iris_pca.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHPg_VX4C4rmgn4BDejhwaWFbZvGWd4TfbFyitYqDnJGTW047RU9SqK15zB7_4l_7QQPf7qJSkaz9h0ZN78mckXQfThAht7UQ2H3noKUOxP0Y-4OiyK851L0GNlI0-Nm_5fRvUQ9wkQUPf/s1600/iris_pca.png" height="320" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<b></b><br />
<b></b><br />
<br />The setosa species is different enough that there is perfect (100%) accuracy in it's prediction. I'm looking forward to continuing with this comparison for the other methods as well.<br />
<br />
<b>Example code:</b><br />
<a name='more'></a><br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;">### rpart</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/rpart/rpart"><span style="color: #003399; font-weight: bold;">rpart</span></a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
perms <- <span style="color: #cc66cc;">100</span>
pred <- <a href="http://inside-r.org/r-doc/base/vector"><span style="color: #003399; font-weight: bold;">vector</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mode"><span style="color: #003399; font-weight: bold;">mode</span></a>=<span style="color: blue;">"list"</span><span style="color: #339933;">,</span> perms<span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>perms<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
train <- <a href="http://inside-r.org/r-doc/base/sample"><span style="color: #003399; font-weight: bold;">sample</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/datasets/iris"><span style="color: #003399; font-weight: bold;">iris</span></a><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/datasets/iris"><span style="color: #003399; font-weight: bold;">iris</span></a><span style="color: #009900;">)</span>*<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
valid <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/datasets/iris"><span style="color: #003399; font-weight: bold;">iris</span></a><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">[</span>-train<span style="color: #009900;">]</span>
iristrain <- <a href="http://inside-r.org/r-doc/datasets/iris"><span style="color: #003399; font-weight: bold;">iris</span></a><span style="color: #009900;">[</span>train<span style="color: #339933;">,</span><span style="color: #009900;">]</span>
irisvalid <- <a href="http://inside-r.org/r-doc/datasets/iris"><span style="color: #003399; font-weight: bold;">iris</span></a><span style="color: #009900;">[</span>valid<span style="color: #339933;">,</span><span style="color: #009900;">]</span>
model <- <a href="http://inside-r.org/r-doc/rpart/rpart"><span style="color: #003399; font-weight: bold;">rpart</span></a><span style="color: #009900;">(</span>Species~.<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/utils/data"><span style="color: #003399; font-weight: bold;">data</span></a>=iristrain<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#Predict</span>
prediction <- <a href="http://inside-r.org/r-doc/stats/predict"><span style="color: #003399; font-weight: bold;">predict</span></a><span style="color: #009900;">(</span>model<span style="color: #339933;">,</span> newdata=irisvalid<span style="color: #339933;">,</span> type=<span style="color: blue;">'class'</span><span style="color: #009900;">)</span>
pred<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/table"><span style="color: #003399; font-weight: bold;">table</span></a><span style="color: #009900;">(</span>prediction<span style="color: #339933;">,</span> irisvalid$Species<span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<span style="color: #666666; font-style: italic;">#accuracy overall</span>
rpart.acc.all <- <a href="http://inside-r.org/r-doc/base/sapply"><span style="color: #003399; font-weight: bold;">sapply</span></a><span style="color: #009900;">(</span>pred<span style="color: #339933;">,</span> FUN=<a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span> <a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/diag"><span style="color: #003399; font-weight: bold;">diag</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span><span style="color: #009900;">)</span> / <a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">(</span>rpart.acc.all<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/boxplot"><span style="color: #003399; font-weight: bold;">boxplot</span></a><span style="color: #009900;">(</span>rpart.acc.all<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"grey"</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">### accuracy by spp</span>
rpart.acc.spp <- <a href="http://inside-r.org/r-doc/base/sapply"><span style="color: #003399; font-weight: bold;">sapply</span></a><span style="color: #009900;">(</span>pred<span style="color: #339933;">,</span> FUN=<a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span> <a href="http://inside-r.org/r-doc/base/diag"><span style="color: #003399; font-weight: bold;">diag</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span> / <a href="http://inside-r.org/r-doc/base/colSums"><span style="color: #003399; font-weight: bold;">colSums</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/rowMeans"><span style="color: #003399; font-weight: bold;">rowMeans</span></a><span style="color: #009900;">(</span>rpart.acc.spp<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/boxplot"><span style="color: #003399; font-weight: bold;">boxplot</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #009900;">(</span>rpart.acc.spp<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#randomForest</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/randomForest">randomForest</a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/set.seed"><span style="color: #003399; font-weight: bold;">set.seed</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
perms <- <span style="color: #cc66cc;">100</span>
pred <- <a href="http://inside-r.org/r-doc/base/vector"><span style="color: #003399; font-weight: bold;">vector</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mode"><span style="color: #003399; font-weight: bold;">mode</span></a>=<span style="color: blue;">"list"</span><span style="color: #339933;">,</span> perms<span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>perms<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
train <- <a href="http://inside-r.org/r-doc/base/sample"><span style="color: #003399; font-weight: bold;">sample</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/datasets/iris"><span style="color: #003399; font-weight: bold;">iris</span></a><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/datasets/iris"><span style="color: #003399; font-weight: bold;">iris</span></a><span style="color: #009900;">)</span>*<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
valid <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/nrow"><span style="color: #003399; font-weight: bold;">nrow</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/datasets/iris"><span style="color: #003399; font-weight: bold;">iris</span></a><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">[</span>-train<span style="color: #009900;">]</span>
iristrain <- <a href="http://inside-r.org/r-doc/datasets/iris"><span style="color: #003399; font-weight: bold;">iris</span></a><span style="color: #009900;">[</span>train<span style="color: #339933;">,</span><span style="color: #009900;">]</span>
irisvalid <- <a href="http://inside-r.org/r-doc/datasets/iris"><span style="color: #003399; font-weight: bold;">iris</span></a><span style="color: #009900;">[</span>valid<span style="color: #339933;">,</span><span style="color: #009900;">]</span>
model <- <a href="http://inside-r.org/packages/cran/randomForest">randomForest</a><span style="color: #009900;">(</span>Species~.<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/utils/data"><span style="color: #003399; font-weight: bold;">data</span></a>=iristrain<span style="color: #339933;">,</span> nTree=<span style="color: #cc66cc;">500</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#Predict using the forest</span>
prediction <- <a href="http://inside-r.org/r-doc/stats/predict"><span style="color: #003399; font-weight: bold;">predict</span></a><span style="color: #009900;">(</span>model<span style="color: #339933;">,</span> newdata=irisvalid<span style="color: #339933;">,</span> type=<span style="color: blue;">'class'</span><span style="color: #009900;">)</span>
pred<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/table"><span style="color: #003399; font-weight: bold;">table</span></a><span style="color: #009900;">(</span>prediction<span style="color: #339933;">,</span> irisvalid$Species<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#importance(model)</span>
<span style="color: #009900;">}</span>
<span style="color: #666666; font-style: italic;">#accuracy overall</span>
randomForest.acc.all <- <a href="http://inside-r.org/r-doc/base/sapply"><span style="color: #003399; font-weight: bold;">sapply</span></a><span style="color: #009900;">(</span>pred<span style="color: #339933;">,</span> FUN=<a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span> <a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/diag"><span style="color: #003399; font-weight: bold;">diag</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span><span style="color: #009900;">)</span> / <a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/mean"><span style="color: #003399; font-weight: bold;">mean</span></a><span style="color: #009900;">(</span>randomForest.acc.all<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/boxplot"><span style="color: #003399; font-weight: bold;">boxplot</span></a><span style="color: #009900;">(</span>randomForest.acc.all<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: blue;">"grey"</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#accuracy by spp</span>
randomForest.acc.spp <- <a href="http://inside-r.org/r-doc/base/sapply"><span style="color: #003399; font-weight: bold;">sapply</span></a><span style="color: #009900;">(</span>pred<span style="color: #339933;">,</span> FUN=<a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span> <a href="http://inside-r.org/r-doc/base/diag"><span style="color: #003399; font-weight: bold;">diag</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span> / <a href="http://inside-r.org/r-doc/base/colSums"><span style="color: #003399; font-weight: bold;">colSums</span></a><span style="color: #009900;">(</span>x<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/rowMeans"><span style="color: #003399; font-weight: bold;">rowMeans</span></a><span style="color: #009900;">(</span>randomForest.acc.spp<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/boxplot"><span style="color: #003399; font-weight: bold;">boxplot</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #009900;">(</span>randomForest.acc.spp<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">### plot</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"CART_model_accuracy.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">7</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #339933;">,</span> type=<span style="color: blue;">"cairo"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
comb.acc.spp <- <a href="http://inside-r.org/r-doc/base/rbind"><span style="color: #003399; font-weight: bold;">rbind</span></a><span style="color: #009900;">(</span>rpart.acc.spp<span style="color: #339933;">,</span> randomForest.acc.spp<span style="color: #009900;">)</span> * <span style="color: #cc66cc;">100</span>
comb.acc.spp <- comb.acc.spp<span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">6</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span><span style="color: #009900;">]</span>
<a href="http://inside-r.org/r-doc/graphics/boxplot"><span style="color: #003399; font-weight: bold;">boxplot</span></a><span style="color: #009900;">(</span>
<a href="http://inside-r.org/r-doc/base/t"><span style="color: #003399; font-weight: bold;">t</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/rbind"><span style="color: #003399; font-weight: bold;">rbind</span></a><span style="color: #009900;">(</span>comb.acc.spp<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>
<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.7</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.7</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.7</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.7</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.7</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.7</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<span style="color: #009900;">)</span><span style="color: #339933;">,</span>
<a href="http://inside-r.org/r-doc/base/names"><span style="color: #003399; font-weight: bold;">names</span></a>=paste0<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/rep"><span style="color: #003399; font-weight: bold;">rep</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/levels"><span style="color: #003399; font-weight: bold;">levels</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/datasets/iris"><span style="color: #003399; font-weight: bold;">iris</span></a>$Species<span style="color: #009900;">)</span><span style="color: #339933;">,</span> each=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"<span style="color: #000099; font-weight: bold;">\n</span>rpart"</span><span style="color: #339933;">,</span> <span style="color: blue;">"<span style="color: #000099; font-weight: bold;">\n</span>randomForest"</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span>
las=<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span>
ylab=<span style="color: blue;">"CART model accuracy [%]"</span>
<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"Species classification - Edgar Anderson's Iris Data"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"iris_pca.png"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">6</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">6</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
pca <- <a href="http://inside-r.org/r-doc/stats/prcomp"><span style="color: #003399; font-weight: bold;">prcomp</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/datasets/iris"><span style="color: #003399; font-weight: bold;">iris</span></a><span style="color: #009900;">[</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">4</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>pca$x<span style="color: #009900;">[</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span>:<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span><span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/datasets/iris"><span style="color: #003399; font-weight: bold;">iris</span></a>$Species<span style="color: #009900;">]</span><span style="color: #009900;">)</span>
sc <- <span style="color: #cc66cc;">2</span>
<a href="http://inside-r.org/r-doc/graphics/arrows"><span style="color: #003399; font-weight: bold;">arrows</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> x1=pca$rotation<span style="color: #009900;">[</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>*pca$sdev<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>*sc<span style="color: #339933;">,</span> y1=pca$rotation<span style="color: #009900;">[</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span>*pca$sdev<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span>*sc<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/text"><span style="color: #003399; font-weight: bold;">text</span></a><span style="color: #009900;">(</span>x=pca$rotation<span style="color: #009900;">[</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>*pca$sdev<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>*sc<span style="color: #339933;">,</span> y=pca$rotation<span style="color: #009900;">[</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span>*pca$sdev<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span>*sc<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/labels"><span style="color: #003399; font-weight: bold;">labels</span></a>=<a href="http://inside-r.org/r-doc/base/rownames"><span style="color: #003399; font-weight: bold;">rownames</span></a><span style="color: #009900;">(</span>pca$rotation<span style="color: #009900;">)</span><span style="color: #339933;">,</span> pos=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"topright"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/levels"><span style="color: #003399; font-weight: bold;">levels</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/datasets/iris"><span style="color: #003399; font-weight: bold;">iris</span></a>$Species<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=<span style="color: #cc66cc;">2</span>:<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> pch=<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com4tag:blogger.com,1999:blog-6424211413492597169.post-38011630436812116422014-03-23T20:20:00.001+01:002014-03-24T09:45:39.162+01:00The power of PCA strikes again!Amazing study using genetic markers to predict principle components of facial features:<br />
New Scientist article - <a href="http://www.newscientist.com/article/mg22129613.600-genetic-mugshot-recreates-faces-from-nothing-but-dna.html#.Uy8zPoXbZ7Y.blogger">Genetic mugshot recreates faces from nothing but DNA - life - 20 March 2014 - New Scientist</a><br />
Original article - (<a href="http://www.plosgenetics.org/doi/pgen.1004224"><i>PLoS Genetics</i>, DOI: 10.1371/journal.pgen.1004224</a>) Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com0tag:blogger.com,1999:blog-6424211413492597169.post-52608713233712846252014-01-25T21:26:00.005+01:002014-09-02T16:24:49.334+02:00Importing bathymetry and coastline data in R<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPzmig-OT9NwqfsjGWfky7y0uad9s2MXnkbl-RHkqtsPQBLBar94hbWkCcqgGd9ZAYCGzqVg7j5Shb2dYbercc-F-2lGnwfp15h5l7X1wyRawVAPuWqrspSzs4FJtUOHVGxJKUmq5qOYZs/s1600/coastline_compare2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPzmig-OT9NwqfsjGWfky7y0uad9s2MXnkbl-RHkqtsPQBLBar94hbWkCcqgGd9ZAYCGzqVg7j5Shb2dYbercc-F-2lGnwfp15h5l7X1wyRawVAPuWqrspSzs4FJtUOHVGxJKUmq5qOYZs/s1600/coastline_compare2.png" height="320" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div style="text-align: center;">
<br /></div>
After noticing some frustrating inaccuracies with the high-resolution world coastlines and national boundaries database found in <span style="font-family: "Courier New",Courier,monospace;">worldHires</span> from the package <a href="http://cran.r-project.org/web/packages/mapdata/index.html"><span style="font-family: "Courier New",Courier,monospace;">mapdata</span></a> (based on CIA World Data Bank II data), I decided to look into other options. Although listed as "depreciated", the data found in NOAAs online "<a href="http://www.ngdc.noaa.gov/mgg/coast/getcoast.html">Coastline Extractor</a>" is a big step forward. There seem to be more up-to-date products, but this served my needs for the moment, and I thought I'd pass along the address to other R users. I exported the data in ASCII "Matlab" format, which is basically just a 2-column text file (.dat) with NaN's in the rows that separate line segments.<br />
<br />
I've also discovered the bathymetry / topography data from GEBCO. Again, very easy to import into R from the netCDF files.<br />
<br />
The above map of the Galapagos Archipelago illustrates the quality of both datasets. It also shows the comparison of coastline accuracy between World Vector Shoreline (1:250,000), world (<span style="font-family: "Courier New",Courier,monospace;">map</span> package), and <span style="font-family: "Courier New",Courier,monospace;">worldHires</span> (<span style="font-family: "Courier New",Courier,monospace;">mapdata</span> package) datasets. Obviously, the low-resolution world data only makes sense for quick plotting at large scales, but the high-resolution data is as much as 1/10° off in some locations. I noticed these errors for the first time when trying to map some data for smaller coastal bays. It drove me crazy trying to figure out where the errors were - in my data locations or the map itself. Bathymetry used in the map was 30 arc-second resolution GEBCO data.<br />
<br />
[<i><b>EDIT</b></i>: The comparison of coastline data now includes the high resolution data from the <a href="http://cran.r-project.org/web/packages/rworldmap/index.html"><span style="font-family: "Courier New",Courier,monospace;">rworldmap</span></a> package.]<br />
<br />
A more detailed description export settings:<br />
<ul>
<li>Coastline data (from 'Coastline Extractor') :</li>
<ul>
<li>Coastline database: World Vector Shoreline (1:250,000)</li>
</ul>
<ul>
<li>Compression method for extracted ASCII data: None</li>
</ul>
<ul>
<li>Coast Format options: Matlab</li>
</ul>
<ul>
<li>Coast Preview options: GMT Plot</li>
</ul>
<li>Bathymetry / topography data [<a href="https://www.bodc.ac.uk/data/online_delivery/gebco/">link</a>]:</li>
<ul>
<li>General Bathymetric Chart of the Oceans (GEBCO) : GEBCO_08 Grid (30 arc-second resolution)</li>
</ul>
</ul>
Here's another example of bathymetry / topography data for the western Pacific (1 minute resolution GEBCO data): <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHTm3fBUy8Ql379qKMB8JxjNk-z_9kq9_u71eNqdhSmvRWcT7nGT9XBIve_8zU0apkqax39p1_MQwqE6akqtGgnIt1XvejOrfyJmUn6nugpvuVVO_2WLld_fVd845nnyAjHRrXceG73CXW/s1600/west_pac.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHTm3fBUy8Ql379qKMB8JxjNk-z_9kq9_u71eNqdhSmvRWcT7nGT9XBIve_8zU0apkqax39p1_MQwqE6akqtGgnIt1XvejOrfyJmUn6nugpvuVVO_2WLld_fVd845nnyAjHRrXceG73CXW/s1600/west_pac.png" height="320" width="400" /></a></div>
<br />
<br />
For both maps, I took inspiration for the color palettes from GMT. The rgb color levels of these palettes have got to be documented somwhere, but I gave up looking after a while and managed to hack their levels from color scales contained in .png files [<a href="http://menugget.blogspot.de/2014/01/gmt-standard-color-palettes.html">link</a>].<br />
<br />
Below is the R code to reproduce the figures.<br />
<a name='more'></a><ul>
</ul>
<b>To reproduce Galapagos coastline example</b>:<br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;">###required packages</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/RNetCDF">RNetCDF</a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/maps">maps</a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mapdata">mapdata</a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/rworldmap">rworldmap</a><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span>rworldxtra<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">###Data</span>
<span style="color: #666666; font-style: italic;">#data locations</span>
bathy_fname <- <span style="color: blue;">"galapagos_gebco_08_-92_-2_-88_2.nc"</span> <span style="color: #666666; font-style: italic;"># from https://www.bodc.ac.uk/data/online_delivery/gebco/gebco_08_grid/</span>
coast_fname <- <span style="color: blue;">"galapagos_18563.dat"</span> <span style="color: #666666; font-style: italic;"># from http://www.ngdc.noaa.gov/mgg/coast/getcoast.html</span>
<span style="color: #666666; font-style: italic;">#load bathy data</span>
nc <- open.nc<span style="color: #009900;">(</span>bathy_fname<span style="color: #009900;">)</span>
print.nc<span style="color: #009900;">(</span>nc<span style="color: #009900;">)</span>
tmp <- read.nc<span style="color: #009900;">(</span>nc<span style="color: #009900;">)</span>
z <- <a href="http://inside-r.org/r-doc/base/array"><span style="color: #003399; font-weight: bold;">array</span></a><span style="color: #009900;">(</span>tmp$z<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/dim"><span style="color: #003399; font-weight: bold;">dim</span></a>=tmp$dim<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#z[which(z > 0)] <- NaN</span>
z <- z<span style="color: #009900;">[</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/rev"><span style="color: #003399; font-weight: bold;">rev</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a><span style="color: #009900;">(</span>z<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">]</span>
xran <- tmp$x_range
yran <- tmp$y_range
zran <- tmp$z_range
lon <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>tmp$x<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> tmp$x<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> tmp$spac<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
lat <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>tmp$y<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> tmp$y<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> tmp$spac<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/rm"><span style="color: #003399; font-weight: bold;">rm</span></a><span style="color: #009900;">(</span>tmp<span style="color: #009900;">)</span>
close.nc<span style="color: #009900;">(</span>nc<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#load coast data</span>
coast <- <a href="http://inside-r.org/r-doc/utils/read.table"><span style="color: #003399; font-weight: bold;">read.table</span></a><span style="color: #009900;">(</span>coast_fname<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/names"><span style="color: #003399; font-weight: bold;">names</span></a><span style="color: #009900;">(</span>coast<span style="color: #009900;">)</span> <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"lon"</span><span style="color: #339933;">,</span> <span style="color: blue;">"lat"</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">###Plot</span>
<span style="color: #666666; font-style: italic;">#make palette</span>
ocean.pal <- <a href="http://inside-r.org/r-doc/grDevices/colorRampPalette"><span style="color: #003399; font-weight: bold;">colorRampPalette</span></a><span style="color: #009900;">(</span>
<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#000000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#000413"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#000728"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#002650"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#005E8C"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#0096C8"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#45BCBB"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#8AE2AE"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#BCF8B9"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#DBFBDC"</span><span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
land.pal <- <a href="http://inside-r.org/r-doc/grDevices/colorRampPalette"><span style="color: #003399; font-weight: bold;">colorRampPalette</span></a><span style="color: #009900;">(</span>
<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#467832"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#887438"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#B19D48"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#DBC758"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FAE769"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FAEB7E"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FCED93"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FCF1A7"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FCF6C1"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FDFAE0"</span><span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
zbreaks <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">8000</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">8000</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/by"><span style="color: #003399; font-weight: bold;">by</span></a>=<span style="color: #cc66cc;">100</span><span style="color: #009900;">)</span>
cols <-<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>ocean.pal<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>zbreaks<=<span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span>-<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> land.pal<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>zbreaks><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#compare coastlines to package 'mapdata' and 'rworldxtra'</span>
LWD <- <span style="color: #cc66cc;">1</span>
COL <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">4</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"coastline_compare2.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">7.5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">6</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">600</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#quartz(width=7.5, height=6)</span>
<a href="http://inside-r.org/r-doc/graphics/layout"><span style="color: #003399; font-weight: bold;">layout</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> widths=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">6</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> heights=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">6</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>lon<span style="color: #339933;">,</span> lat<span style="color: #339933;">,</span> z=z<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=cols<span style="color: #339933;">,</span> breaks=zbreaks<span style="color: #339933;">,</span> useRaster=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> ylim=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">1.5</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> xlim=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">92</span><span style="color: #339933;">,</span>-<span style="color: #cc66cc;">90</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/lines"><span style="color: #003399; font-weight: bold;">lines</span></a><span style="color: #009900;">(</span>coast<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=COL<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> lwd=LWD<span style="color: #009900;">)</span>
map<span style="color: #009900;">(</span><span style="color: blue;">"world"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=COL<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> ylim=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> xlim=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">93</span><span style="color: #339933;">,</span>-<span style="color: #cc66cc;">88</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> add=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> lwd=LWD<span style="color: #009900;">)</span>
map<span style="color: #009900;">(</span><span style="color: blue;">"worldHires"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=COL<span style="color: #009900;">[</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> ylim=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> xlim=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">93</span><span style="color: #339933;">,</span>-<span style="color: #cc66cc;">88</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> lwd=LWD<span style="color: #339933;">,</span> add=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/plot"><span style="color: #003399; font-weight: bold;">plot</span></a><span style="color: #009900;">(</span>getMap<span style="color: #009900;">(</span>resolution=<span style="color: blue;">'high'</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> border=COL<span style="color: #009900;">[</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> lwd=LWD<span style="color: #339933;">,</span> add=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a><span style="color: #009900;">(</span><span style="color: blue;">"bottomleft"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/graphics/legend"><span style="color: #003399; font-weight: bold;">legend</span></a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"World Vector Shoreline"</span><span style="color: #339933;">,</span> <span style="color: blue;">"maps: world"</span><span style="color: #339933;">,</span> <span style="color: blue;">"mapdata: worldHires"</span><span style="color: #339933;">,</span> <span style="color: blue;">"rworldmap: high res."</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> lty=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> lwd=LWD<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=COL<span style="color: #339933;">,</span> bg=<span style="color: blue;">"white"</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>x=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> y=zbreaks<span style="color: #339933;">,</span> z=<a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span>zbreaks<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>zbreaks<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=cols<span style="color: #339933;">,</span> breaks=zbreaks<span style="color: #339933;">,</span> useRaster=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> xlab=<span style="color: blue;">""</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">""</span><span style="color: #339933;">,</span> axes=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/axis"><span style="color: #003399; font-weight: bold;">axis</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> at=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">8000</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">8000</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1000</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> las=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"[meters]"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/box"><span style="color: #003399; font-weight: bold;">box</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />
<br />
<br />
<br />
<br />
<b>To reproduce western Pacific map:</b><br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;">###required packages</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/RNetCDF">RNetCDF</a><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">###Data</span>
<span style="color: #666666; font-style: italic;">#data location</span>
bathy_fname <- <span style="color: blue;">"west_pac_gebco_1min_100_-20_170_50.nc"</span> <span style="color: #666666; font-style: italic;"># from https://www.bodc.ac.uk/data/online_delivery/gebco/gebco_08_grid/</span>
<span style="color: #666666; font-style: italic;">#load bathy data</span>
nc <- open.nc<span style="color: #009900;">(</span>bathy_fname<span style="color: #009900;">)</span>
print.nc<span style="color: #009900;">(</span>nc<span style="color: #009900;">)</span>
tmp <- read.nc<span style="color: #009900;">(</span>nc<span style="color: #009900;">)</span>
z <- <a href="http://inside-r.org/r-doc/base/array"><span style="color: #003399; font-weight: bold;">array</span></a><span style="color: #009900;">(</span>tmp$z<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/dim"><span style="color: #003399; font-weight: bold;">dim</span></a>=tmp$dim<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#z[which(z > 0)] <- NaN</span>
z <- z<span style="color: #009900;">[</span><span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/rev"><span style="color: #003399; font-weight: bold;">rev</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/ncol"><span style="color: #003399; font-weight: bold;">ncol</span></a><span style="color: #009900;">(</span>z<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">]</span>
xran <- tmp$x_range
yran <- tmp$y_range
zran <- tmp$z_range
lon <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>tmp$x<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> tmp$x<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> tmp$spac<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
lat <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>tmp$y<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> tmp$y<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> tmp$spac<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/rm"><span style="color: #003399; font-weight: bold;">rm</span></a><span style="color: #009900;">(</span>tmp<span style="color: #009900;">)</span>
close.nc<span style="color: #009900;">(</span>nc<span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">###Plot</span>
<span style="color: #666666; font-style: italic;">#make palette</span>
ocean.pal <- <a href="http://inside-r.org/r-doc/grDevices/colorRampPalette"><span style="color: #003399; font-weight: bold;">colorRampPalette</span></a><span style="color: #009900;">(</span>
<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#000000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#000209"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#000413"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#00061E"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#000728"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#000932"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#002650"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#00426E"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#005E8C"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#007AAA"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#0096C8"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#22A9C2"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#45BCBB"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#67CFB5"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#8AE2AE"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#ACF6A8"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#BCF8B9"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#CBF9CA"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#DBFBDC"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#EBFDED"</span><span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
land.pal <- <a href="http://inside-r.org/r-doc/grDevices/colorRampPalette"><span style="color: #003399; font-weight: bold;">colorRampPalette</span></a><span style="color: #009900;">(</span>
<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#336600"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#F3CA89"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#D9A627"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#A49019"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#9F7B0D"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#996600"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#B27676"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#C2B0B0"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#E5E5E5"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FFFFFF"</span><span style="color: #009900;">)</span>
<span style="color: #009900;">)</span>
zbreaks <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">11000</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">7000</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/by"><span style="color: #003399; font-weight: bold;">by</span></a>=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
cols <-<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>ocean.pal<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>zbreaks<=<span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span>-<span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> land.pal<span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/sum"><span style="color: #003399; font-weight: bold;">sum</span></a><span style="color: #009900;">(</span>zbreaks><span style="color: #cc66cc;">0</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#compare coastlines to package 'mapdata'</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"west_pac.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">7.5</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">6</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">200</span><span style="color: #009900;">)</span>
<span style="color: #666666; font-style: italic;">#quartz(width=7.5, height=6)</span>
<a href="http://inside-r.org/r-doc/graphics/layout"><span style="color: #003399; font-weight: bold;">layout</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span>:<span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> widths=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">6</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1.5</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> heights=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">6</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>lon<span style="color: #339933;">,</span> lat<span style="color: #339933;">,</span> z=z<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=cols<span style="color: #339933;">,</span> breaks=zbreaks<span style="color: #339933;">,</span> useRaster=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> ylim=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">20</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">50</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> xlim=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">100</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">170</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">5</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span>x=<span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> y=zbreaks<span style="color: #339933;">,</span> z=<a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span>zbreaks<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>zbreaks<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=cols<span style="color: #339933;">,</span> breaks=zbreaks<span style="color: #339933;">,</span> useRaster=<span style="color: black; font-weight: bold;">TRUE</span><span style="color: #339933;">,</span> xlab=<span style="color: blue;">""</span><span style="color: #339933;">,</span> ylab=<span style="color: blue;">""</span><span style="color: #339933;">,</span> axes=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/axis"><span style="color: #003399; font-weight: bold;">axis</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> at=<a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>-<span style="color: #cc66cc;">11000</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">7000</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1000</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> las=<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><span style="color: blue;">"[meters]"</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">4</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">3</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/box"><span style="color: #003399; font-weight: bold;">box</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />
<br />
<br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com14tag:blogger.com,1999:blog-6424211413492597169.post-977612738058919032014-01-25T15:14:00.000+01:002014-09-02T16:24:49.403+02:00GMT standard color palettesGMT (Generic Mapping Tools) (<a href="http://gmt.soest.hawaii.edu/">http://gmt.soest.hawaii.edu/</a>) is a great mapping tool. I'm hoping to use it more in the future, but for the meantime I wanted to recreate some of the it's standard color palettes in R. Unfortunately, I couldn't find documentation of the precise rgb color levels used, so I ended up "stealing" them from the .png images on this website: <a href="http://www.geos.ed.ac.uk/it/howto/GMT/CPT/palettes.html">http://www.geos.ed.ac.uk/it/howto/GMT/CPT/palettes.html</a><br />
<br />
Here's the result:<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-GWK49i4TxrblvNqxhI6NstFxX3RtRcU22w7s5QVDTIbBd5lAyx3vdlx5NrL0mOLojYxMMpZ6j4Pa8EyZJ5S1-cAEBKbmbSbNRI5QMSddP9d7vgXik5s50qG1lHDU0LTrajluXIOESf3v/s1600/gmt_palettes.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-GWK49i4TxrblvNqxhI6NstFxX3RtRcU22w7s5QVDTIbBd5lAyx3vdlx5NrL0mOLojYxMMpZ6j4Pa8EyZJ5S1-cAEBKbmbSbNRI5QMSddP9d7vgXik5s50qG1lHDU0LTrajluXIOESf3v/s1600/gmt_palettes.png" height="640" width="384" /> </a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Here's how I extracted the color levels from the .png images:</div>
<a name='more'></a><br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;">#make palettes</span>
<a href="http://inside-r.org/r-doc/base/library"><span style="color: #003399; font-weight: bold;">library</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">)</span>
pal.names <- <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span>
<span style="color: blue;">"cool"</span><span style="color: #339933;">,</span><span style="color: blue;">"copper"</span><span style="color: #339933;">,</span><span style="color: blue;">"gebco"</span><span style="color: #339933;">,</span><span style="color: blue;">"globe"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"gray"</span><span style="color: #339933;">,</span><span style="color: blue;">"haxby"</span><span style="color: #339933;">,</span><span style="color: blue;">"hot"</span><span style="color: #339933;">,</span><span style="color: blue;">"jet"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"no_green"</span><span style="color: #339933;">,</span><span style="color: blue;">"ocean"</span><span style="color: #339933;">,</span><span style="color: blue;">"polar"</span><span style="color: #339933;">,</span><span style="color: blue;">"rainbow"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"red2green"</span><span style="color: #339933;">,</span><span style="color: blue;">"relief"</span><span style="color: #339933;">,</span><span style="color: blue;">"sealand"</span><span style="color: #339933;">,</span><span style="color: blue;">"seis"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"split"</span><span style="color: #339933;">,</span><span style="color: blue;">"topo"</span><span style="color: #339933;">,</span><span style="color: blue;">"wysiwyg"</span>
<span style="color: #009900;">)</span>
png.urls <- paste0<span style="color: #009900;">(</span><span style="color: blue;">"http://www.geos.ed.ac.uk/it/howto/GMT/CPT/cpt-"</span><span style="color: #339933;">,</span> pal.names<span style="color: #339933;">,</span> <span style="color: blue;">".png"</span><span style="color: #009900;">)</span>
gmt.pals <- <a href="http://inside-r.org/r-doc/base/vector"><span style="color: #003399; font-weight: bold;">vector</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/mode"><span style="color: #003399; font-weight: bold;">mode</span></a>=<span style="color: blue;">"list"</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>pal.names<span style="color: #009900;">)</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/names"><span style="color: #003399; font-weight: bold;">names</span></a><span style="color: #009900;">(</span>gmt.pals<span style="color: #009900;">)</span> <- pal.names
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>gmt.pals<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
myurl <- png.urls<span style="color: #009900;">[</span>i<span style="color: #009900;">]</span>
tmp <- <a href="http://inside-r.org/r-doc/base/tempfile"><span style="color: #003399; font-weight: bold;">tempfile</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/utils/download.file"><span style="color: #003399; font-weight: bold;">download.file</span></a><span style="color: #009900;">(</span>myurl<span style="color: #339933;">,</span>tmp<span style="color: #339933;">,</span><a href="http://inside-r.org/r-doc/base/mode"><span style="color: #003399; font-weight: bold;">mode</span></a>=<span style="color: blue;">"wb"</span><span style="color: #009900;">)</span>
pic <- readPNG<span style="color: #009900;">(</span>tmp<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/file.remove"><span style="color: #003399; font-weight: bold;">file.remove</span></a><span style="color: #009900;">(</span>tmp<span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># cleanup</span>
Colors <- <span style="color: black; font-weight: bold;">NA</span> * <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">20</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/base/row"><span style="color: #003399; font-weight: bold;">row</span></a> <- <a href="http://inside-r.org/r-doc/base/round"><span style="color: #003399; font-weight: bold;">round</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/dim"><span style="color: #003399; font-weight: bold;">dim</span></a><span style="color: #009900;">(</span>pic<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span>/<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span>
breaks <- <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/dim"><span style="color: #003399; font-weight: bold;">dim</span></a><span style="color: #009900;">(</span>pic<span style="color: #009900;">)</span><span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #339933;">,,</span><span style="color: #cc66cc;">21</span><span style="color: #009900;">)</span>
cols <- <a href="http://inside-r.org/r-doc/base/round"><span style="color: #003399; font-weight: bold;">round</span></a><span style="color: #009900;">(</span>breaks<span style="color: #009900;">[</span>-<span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span> - <span style="color: #009900;">(</span><span style="color: #009900;">(</span>breaks<span style="color: #009900;">[</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span>-breaks<span style="color: #009900;">[</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span>/<span style="color: #cc66cc;">2</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
gmt.pals<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span> <- <a href="http://inside-r.org/r-doc/base/rev"><span style="color: #003399; font-weight: bold;">rev</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/grDevices/rgb"><span style="color: #003399; font-weight: bold;">rgb</span></a><span style="color: #009900;">(</span>pic<span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/row"><span style="color: #003399; font-weight: bold;">row</span></a><span style="color: #339933;">,</span>cols<span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> pic<span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/row"><span style="color: #003399; font-weight: bold;">row</span></a><span style="color: #339933;">,</span>cols<span style="color: #339933;">,</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> pic<span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/row"><span style="color: #003399; font-weight: bold;">row</span></a><span style="color: #339933;">,</span>cols<span style="color: #339933;">,</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span> <span style="color: #666666; font-style: italic;"># reverses colors to put low color values first in the vector</span>
<span style="color: #009900;">}</span>
<span style="color: #666666; font-style: italic;">#plot of palettes</span>
<a href="http://inside-r.org/r-doc/grDevices/png"><span style="color: #003399; font-weight: bold;">png</span></a><span style="color: #009900;">(</span><span style="color: blue;">"gmt_palettes.png"</span><span style="color: #339933;">,</span> width=<span style="color: #cc66cc;">6</span><span style="color: #339933;">,</span> height=<span style="color: #cc66cc;">10</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/units"><span style="color: #003399; font-weight: bold;">units</span></a>=<span style="color: blue;">"in"</span><span style="color: #339933;">,</span> res=<span style="color: #cc66cc;">400</span><span style="color: #009900;">)</span>
op <- <a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/packages/cran/mAr">mar</a>=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: #cc66cc;">0.25</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.25</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1.25</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0.25</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> mfrow=<a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>gmt.pals<span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> ps=<span style="color: #cc66cc;">10</span><span style="color: #009900;">)</span>
<span style="color: black; font-weight: bold;">for</span><span style="color: #009900;">(</span>i <span style="color: black; font-weight: bold;">in</span> <a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>gmt.pals<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
<a href="http://inside-r.org/r-doc/graphics/image"><span style="color: #003399; font-weight: bold;">image</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/matrix"><span style="color: #003399; font-weight: bold;">matrix</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/seq"><span style="color: #003399; font-weight: bold;">seq</span></a><span style="color: #009900;">(</span>gmt.pals<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/length"><span style="color: #003399; font-weight: bold;">length</span></a><span style="color: #009900;">(</span>gmt.pals<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/col"><span style="color: #003399; font-weight: bold;">col</span></a>=gmt.pals<span style="color: #009900;">[</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #009900;">]</span><span style="color: #339933;">,</span> axes=<span style="color: black; font-weight: bold;">FALSE</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/box"><span style="color: #003399; font-weight: bold;">box</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/graphics/mtext"><span style="color: #003399; font-weight: bold;">mtext</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/names"><span style="color: #003399; font-weight: bold;">names</span></a><span style="color: #009900;">(</span>gmt.pals<span style="color: #009900;">)</span><span style="color: #009900;">[</span>i<span style="color: #009900;">]</span><span style="color: #339933;">,</span> side=<span style="color: #cc66cc;">3</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/stats/line"><span style="color: #003399; font-weight: bold;">line</span></a>=<span style="color: #cc66cc;">0.1</span><span style="color: #009900;">)</span>
<span style="color: #009900;">}</span>
<a href="http://inside-r.org/r-doc/graphics/par"><span style="color: #003399; font-weight: bold;">par</span></a><span style="color: #009900;">(</span>op<span style="color: #009900;">)</span>
<a href="http://inside-r.org/r-doc/grDevices/dev.off"><span style="color: #003399; font-weight: bold;">dev.off</span></a><span style="color: #009900;">(</span><span style="color: #009900;">)</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<div style="text-align: left;">
<br />
<br /></div>
Finally, I created a function ('<span style="font-family: "Courier New",Courier,monospace;">gmtColors</span>') that allows me to call these color levels by GMT palette name:<br />
<br />
<div style="overflow: auto;">
<div class="geshifilter">
<pre class="r geshifilter-R" style="font-family: monospace;"><span style="color: #666666; font-style: italic;">#function 'gmtColors' to call color levels.</span>
<span style="color: #666666; font-style: italic;">#palette name `pal.name` is one of the following:</span>
<span style="color: #666666; font-style: italic;">#"cool", "copper", "gebco", "globe", "gray",</span>
<span style="color: #666666; font-style: italic;">#"haxby", "hot", "jet", "no_green", "ocean",</span>
<span style="color: #666666; font-style: italic;">#"polar", "rainbow", "red2green", "relief", "sealand",</span>
<span style="color: #666666; font-style: italic;">#"seis", "split", "topo", "wysiwyg"</span>
gmtColors <- <a href="http://inside-r.org/r-doc/base/function"><span style="color: #003399; font-weight: bold;">function</span></a><span style="color: #009900;">(</span>pal.name=<span style="color: blue;">"relief"</span><span style="color: #009900;">)</span><span style="color: #009900;">{</span>
tmp <- <a href="http://inside-r.org/r-doc/base/structure"><span style="color: #003399; font-weight: bold;">structure</span></a><span style="color: #009900;">(</span><a href="http://inside-r.org/r-doc/base/list"><span style="color: #003399; font-weight: bold;">list</span></a><span style="color: #009900;">(</span>cool = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#00FFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#0DF2FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#19E6FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#26D9FF"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#33CCFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#3FBFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#4CB3FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#59A6FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#6699FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#738CFF"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#7F7FFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#8C73FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#9966FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#A659FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#B24DFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#BF3FFF"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#CC33FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#D926FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#E619FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#F20DFF"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> copper = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#000000"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#100906"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#1F130D"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#301E13"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#40281A"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#50321F"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#603C26"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#70462D"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#805033"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#905A3A"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#A06440"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#B06E46"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#C0784D"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#D08253"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#E08C5A"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#F09660"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFA066"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFAA6D"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFB473"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FFBE7A"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> gebco = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#00F0FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#00F0FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#00F0FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#23FFFF"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#23FFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#23FFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#5AFFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#5AFFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#5AFFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#8CFFE6"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#8CFFE6"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#8CFFE6"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#A5FFD7"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#A5FFD7"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#A5FFD7"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#C3FFD7"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#C3FFD7"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#C3FFD7"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#D2FFD7"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#E6FFF0"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> globe = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#9900FF"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#9900FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#7722FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#5544FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#3366FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#1188FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#1BA4FF"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#51BAFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#86D0FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#BCE6FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#336600"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#F3CA89"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#D9A627"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#A49019"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#9F7B0D"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#996600"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#B27676"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#C2B0B0"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#E5E5E5"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FFFFFF"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/gray"><span style="color: #003399; font-weight: bold;">gray</span></a> = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#000000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#0D0D0D"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#191919"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#262626"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#333333"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#3F3F3F"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#4C4C4C"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#595959"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#666666"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#737373"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#7F7F7F"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#8C8C8C"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#999999"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#A6A6A6"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#B2B2B2"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#BFBFBF"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#CCCCCC"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#D9D9D9"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#E6E6E6"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#F2F2F2"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> haxby = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#090079"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#280096"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#0009C8"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#0019D4"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#1A66F0"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#19AFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#32BEFF"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#61E1F0"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#6AECE1"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#8AECAE"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#CDFFA2"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#DFF68D"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#F8D768"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FFBD57"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#F4754B"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF5A5A"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF7C7C"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#F6B3AE"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFC4C4"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FFECEC"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/packages/cran/hot">hot</a> = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#000000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#220000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#440000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#660000"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#880000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#AA0000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#CC0000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#EE0000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF1100"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF3300"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FF5500"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF7700"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF9900"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFBB00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFDD00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFFF00"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FFFF33"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFFF66"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFFF99"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFFFCC"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> jet = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#00007F"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#0000B2"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#0000E5"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#0019FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#004DFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#007FFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#00B2FF"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#00E5FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFFFF2"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFFFD9"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFFFBF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFFFA5"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFFF8C"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FFE500"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFB300"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF7F00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF4C00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF1900"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#E50000"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#B20000"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> no_green = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#1F60FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#1F60FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#1F9FFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#1FBFFF"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#00CFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#2AFFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#2AFFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#55FFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#7FFFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#AAFFFF"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FFFF54"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFFF54"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFF000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFBF00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFA800"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF8A00"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FF8A00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF7000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF4D00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF0000"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> ocean = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#000000"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#000209"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#000413"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#00061E"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#000728"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#000932"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#002650"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#00426E"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#005E8C"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#007AAA"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#0096C8"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#22A9C2"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#45BCBB"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#67CFB5"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#8AE2AE"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#ACF6A8"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#BCF8B9"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#CBF9CA"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#DBFBDC"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#EBFDED"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/boot/polar"><span style="color: #003399; font-weight: bold;">polar</span></a> = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#0000FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#1919FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#3333FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#4C4CFF"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#6666FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#7F7FFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#9999FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#B2B2FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#CCCCFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#E6E6FF"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FFFFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFE5E5"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFCCCC"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFB2B2"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF9999"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF7F7F"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FF6666"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF4C4C"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF3333"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF1A1A"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/grDevices/rainbow"><span style="color: #003399; font-weight: bold;">rainbow</span></a> = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#FF00FF"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#BF00FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#7F00FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#3F00FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#0000FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#003FFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#007FFF"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#00BFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#00FFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#00FFBF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#00FF7F"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#00FF3F"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#00FF00"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#3FFF00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#7FFF00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#BFFF00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFFF00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFBF00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF7F00"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FF3F00"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> red2green = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#FF0000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF1919"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF3333"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF4C4C"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FF6666"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF7F7F"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF9999"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFB2B2"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFCCCC"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFE6E6"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FFFFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#E5FFE5"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#CCFFCC"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#B2FFB2"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#99FF99"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#7FFF7F"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#66FF66"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#4CFF4C"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#33FF33"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#1AFF1A"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> relief = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#000000"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#000413"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#000728"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#002650"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#005E8C"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#0096C8"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#45BCBB"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#8AE2AE"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#BCF8B9"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#DBFBDC"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#467832"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#887438"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#B19D48"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#DBC758"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FAE769"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FAEB7E"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FCED93"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FCF1A7"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FCF6C1"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FDFAE0"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> sealand = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#8C66FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#6A66FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#6684FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#66A7FF"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#66CAFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#66ECFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#66FFF0"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#66FFCE"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#66FFAB"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#66FF88"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#66FF66"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#88FF66"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#ABFF66"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#CEFF66"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFEEA6"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFD3A6"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FFB8A6"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFAAB0"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFB5CB"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFC0E1"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> seis = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#AA0000"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#D00000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#F70000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF1D00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF4400"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF6A00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF9000"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FFB700"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFDD00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFFF00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFFF00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFFF00"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#BDFF0C"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#73FF1A"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#3FFA36"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#16F45A"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#00D08B"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#0087CD"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#0048FA"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#0024E3"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/split"><span style="color: #003399; font-weight: bold;">split</span></a> = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#7F7FFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#6666E6"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#4D4DCC"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#3333B3"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#1A1A99"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#00007F"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#000066"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#00004D"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#000033"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#00001A"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#000000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#1A0000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#330000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#4D0000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#660000"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#7F0000"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#991A1A"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#B33333"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#CC4D4D"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#E66666"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/MASS/topo"><span style="color: #003399; font-weight: bold;">topo</span></a> = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#C977D9"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#A18AE6"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#8AA2E6"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#8BD1E7"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#8AF3CF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#85F38E"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#BDF385"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#EDE485"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#F0B086"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#DE9F8B"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#74A3B3"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#99CC70"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#DCD68E"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#EDDFAD"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#F7E8CA"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFF9F3"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFF9F6"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFFBF9"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFFCFA"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FFFEFD"</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> wysiwyg = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"#3F003F"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#3F003F"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#3F00BF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#003FFF"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#00A0FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#3FBFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#3FBFFF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#40E0FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#3FFFBF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#3FFF3F"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#7FFF3F"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#BFFF3F"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#BFFF3F"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFE040"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFE040"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF6040"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"#FF1F40"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FF60C0"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFA0FF"</span><span style="color: #339933;">,</span> <span style="color: blue;">"#FFA0FF"</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> .Names = <a href="http://inside-r.org/r-doc/base/c"><span style="color: #003399; font-weight: bold;">c</span></a><span style="color: #009900;">(</span><span style="color: blue;">"cool"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"copper"</span><span style="color: #339933;">,</span> <span style="color: blue;">"gebco"</span><span style="color: #339933;">,</span> <span style="color: blue;">"globe"</span><span style="color: #339933;">,</span> <span style="color: blue;">"gray"</span><span style="color: #339933;">,</span> <span style="color: blue;">"haxby"</span><span style="color: #339933;">,</span> <span style="color: blue;">"hot"</span><span style="color: #339933;">,</span> <span style="color: blue;">"jet"</span><span style="color: #339933;">,</span> <span style="color: blue;">"no_green"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"ocean"</span><span style="color: #339933;">,</span> <span style="color: blue;">"polar"</span><span style="color: #339933;">,</span> <span style="color: blue;">"rainbow"</span><span style="color: #339933;">,</span> <span style="color: blue;">"red2green"</span><span style="color: #339933;">,</span> <span style="color: blue;">"relief"</span><span style="color: #339933;">,</span> <span style="color: blue;">"sealand"</span><span style="color: #339933;">,</span>
<span style="color: blue;">"seis"</span><span style="color: #339933;">,</span> <span style="color: blue;">"split"</span><span style="color: #339933;">,</span> <span style="color: blue;">"topo"</span><span style="color: #339933;">,</span> <span style="color: blue;">"wysiwyg"</span><span style="color: #009900;">)</span><span style="color: #009900;">)</span>
tmp<span style="color: #009900;">[</span><span style="color: #009900;">[</span><a href="http://inside-r.org/r-doc/base/match"><span style="color: #003399; font-weight: bold;">match</span></a><span style="color: #009900;">(</span>pal.name<span style="color: #339933;">,</span> <a href="http://inside-r.org/r-doc/base/names"><span style="color: #003399; font-weight: bold;">names</span></a><span style="color: #009900;">(</span>tmp<span style="color: #009900;">)</span><span style="color: #009900;">)</span><span style="color: #009900;">]</span><span style="color: #009900;">]</span>
<span style="color: #009900;">}</span></pre>
</div>
</div>
<a href="http://www.inside-r.org/pretty-r" title="Created by Pretty R at inside-R.org">Created by Pretty R at inside-R.org</a><br />
<br />
<br />Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com3tag:blogger.com,1999:blog-6424211413492597169.post-33981645280824721642013-12-09T09:23:00.000+01:002014-09-02T16:24:49.263+02:00Data mountains and streams - stacked area plots in R <div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd3H1CrF1zbH0yXUgMK7r9vAKM0Hf0nTSiBFRxT3ykd-L4G8a4eyBugMe-WkXrnCQqzlVmLAL5IyejM-G3ObC-GGWyDMCGfP6eOpNuEckzom6YI-k5q9A5D-l2z0Wg7tlSI_4ctDkgNX1o/s1600/stacked_stream_color_by_first.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhd3H1CrF1zbH0yXUgMK7r9vAKM0Hf0nTSiBFRxT3ykd-L4G8a4eyBugMe-WkXrnCQqzlVmLAL5IyejM-G3ObC-GGWyDMCGfP6eOpNuEckzom6YI-k5q9A5D-l2z0Wg7tlSI_4ctDkgNX1o/s400/stacked_stream_color_by_first.png" height="285" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<span style="font-family: inherit;"><br /></span>
<span style="font-family: inherit;">Below are two functions for producing stacked area plots. The first is the more typical approach where sequential series are stacked on top of another (function: <span style="font-family: "Courier New",Courier,monospace;">plot.stacked</span>), while the second approach is the more aesthetically-oriented version called a "stream plot" (function: <span style="font-family: "Courier New",Courier,monospace;">plot.stream</span>), which alternates series on either side of a meandering baseline (see <a href="http://stackoverflow.com/a/13087137/1199289">here</a> for the motivation, and <a href="http://www.leebyron.com/else/streamgraph/">here </a>for the inspiration). </span><br />
<br />
<span style="font-family: inherit;">Arguments are similar for both functions regarding the input of <span style="font-family: "Courier New",Courier,monospace;">x </span>and <span style="font-family: "Courier New",Courier,monospace;">y</span> series and polygon attributes (fill color, border color, border line width). The stream plot also requires that the degree of meandering for the baseline be defined by the arguments <span style="font-family: "Courier New",Courier,monospace;">frac.rand </span>and <span style="font-family: "Courier New",Courier,monospace;">spar</span>; <span style="font-family: "Courier New",Courier,monospace;">frac.rand</span>, controls the meander amplitude (uniform random numbers added to baseline as a fraction of the total y range) and <span style="font-family: "Courier New",Courier,monospace;">spar </span>controls the amount of smoothing (as fit by the function <span style="font-family: "Courier New",Courier,monospace;"><a href="http://stat.ethz.ch/R-manual/R-patched/library/stats/html/smooth.spline.html">smooth.spline</a></span>). </span><br />
<br />
The plot above colors the series with a color gradient of when the first appear in the series, while the plot below colors series by their maximum value. The order of the plotting of the series can also affect the the emphasis on the plot. By default, plotting order is sequential by column, although two ordering options are built-in to the functions: order by maximum value, and order by first appearance.<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div style="text-align: center;">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoqqHhKelnBlfXVETynjUhyScQFe7IqmRrqk4-p4gMOdavsFI5cRf7a42-vsCQclnHKxHRXV2q-gBFGPnMblgbVA25rHoqSFEYFWk-B16ObQmG8_X2PTFQeciw3_wf0LNdAUyWnRohOM0H/s1600/stacked_stream_color_by_max.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoqqHhKelnBlfXVETynjUhyScQFe7IqmRrqk4-p4gMOdavsFI5cRf7a42-vsCQclnHKxHRXV2q-gBFGPnMblgbVA25rHoqSFEYFWk-B16ObQmG8_X2PTFQeciw3_wf0LNdAUyWnRohOM0H/s400/stacked_stream_color_by_max.png" height="342" width="400" /></a></div>
<div style="text-align: left;">
<br /></div>
</div>
<div style="text-align: left;">
</div>
<br />
<b>The plot.stacked function:</b><br />
<a name='more'></a><br />
<script src="https://gist.github.com/menugget/7864471.js"></script>
<br />
<b>The plot.stream function:</b><br />
<script src="https://gist.github.com/menugget/7864454.js"></script>
<br />
<b>To reproduce example:</b><br />
<script src="https://gist.github.com/menugget/7864627.js"></script>
Marc in the boxhttp://www.blogger.com/profile/00459761376667614040noreply@blogger.com4