PageSourceSearch

https://yingyingzh.github.io/Research.html

html yingyingzh.github.io collected 2026-10-03 10:12:58 UTC 58,789 bytes, 2,227 lines download raw bytes

1<!DOCTYPE html>
2
3<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
4
5<head>
6  <meta charset="utf-8"/>
7  <meta name="viewport" content="width=device-width, initial-scale=1"/>
8  <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/>
9  <meta name="generator" content="distill" />
10
11  <style type="text/css">
12  /* Hide doc at startup (prevent jankiness while JS renders/transforms) */
13  body {
14    visibility: hidden;
15  }
16  </style>
17
18 <!--radix_placeholder_import_source-->
19 <!--/radix_placeholder_import_source-->
20
21<style type="text/css">code{white-space: pre;}</style>
22<style type="text/css" data-origin="pandoc">
23html { -webkit-text-size-adjust: 100%; }
24pre > code.sourceCode { white-space: pre; position: relative; }
25pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
26pre > code.sourceCode > span:empty { height: 1.2em; }
27.sourceCode { overflow: visible; }
28code.sourceCode > span { color: inherit; text-decoration: inherit; }
29div.sourceCode { margin: 1em 0; }
30pre.sourceCode { margin: 0; }
31@media screen {
32div.sourceCode { overflow: auto; }
33}
34@media print {
35pre > code.sourceCode { white-space: pre-wrap; }
36pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
37}
38pre.numberSource code
39  { counter-reset: source-line 0; }
40pre.numberSource code > span
41  { position: relative; left: -4em; counter-increment: source-line; }
42pre.numberSource code > span > a:first-child::before
43  { content: counter(source-line);
44    position: relative; left: -1em; text-align: right; vertical-align: baseline;
45    border: none; display: inline-block;
46    -webkit-touch-callout: none; -webkit-user-select: none;
47    -khtml-user-select: none; -moz-user-select: none;
48    -ms-user-select: none; user-select: none;
49    padding: 0 4px; width: 4em;
50    color: #aaaaaa;
51  }
52pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa;  padding-left: 4px; }
53div.sourceCode
54  { color: #00769e; background-color: #f1f3f5; }
55@media screen {
56pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
57}
58code span { color: #00769e; } /* Normal */
59code span.al { color: #ad0000; } /* Alert */
60code span.an { color: #5e5e5e; } /* Annotation */
61code span.at { color: #657422; } /* Attribute */
62code span.bn { color: #ad0000; } /* BaseN */
63code span.bu { } /* BuiltIn */
64code span.cf { color: #00769e; } /* ControlFlow */
65code span.ch { color: #20794d; } /* Char */
66code span.cn { color: #8f5902; } /* Constant */
67code span.co { color: #5e5e5e; } /* Comment */
68code span.cv { color: #5e5e5e; font-style: italic; } /* CommentVar */
69code span.do { color: #5e5e5e; font-style: italic; } /* Documentation */
70code span.dt { color: #ad0000; } /* DataType */
71code span.dv { color: #ad0000; } /* DecVal */
72code span.er { color: #ad0000; } /* Error */
73code span.ex { } /* Extension */
74code span.fl { color: #ad0000; } /* Float */
75code span.fu { color: #4758ab; } /* Function */
76code span.im { } /* Import */
77code span.in { color: #5e5e5e; } /* Information */
78code span.kw { color: #00769e; } /* Keyword */
79code span.op { color: #5e5e5e; } /* Operator */
80code span.ot { color: #00769e; } /* Other */
81code span.pp { color: #ad0000; } /* Preprocessor */
82code span.sc { color: #5e5e5e; } /* SpecialChar */
83code span.ss { color: #20794d; } /* SpecialString */
84code span.st { color: #20794d; } /* String */
85code span.va { color: #111111; } /* Variable */
86code span.vs { color: #20794d; } /* VerbatimString */
87code span.wa { color: #5e5e5e; font-style: italic; } /* Warning */
88</style>
89
90
91  <!--radix_placeholder_meta_tags-->
92  <title>Yingying Zhang: Research</title>
93
94
95
96
97  <!--  https://developers.facebook.com/docs/sharing/webmasters#markup -->
98  <meta property="og:title" content="Yingying Zhang: Research"/>
99  <meta property="og:type" content="article"/>
100  <meta property="og:locale" content="en_US"/>
101  <meta property="og:site_name" content="Yingying Zhang"/>
102
103  <!--  https://dev.twitter.com/cards/types/summary -->
104  <meta property="twitter:card" content="summary"/>
105  <meta property="twitter:title" content="Yingying Zhang: Research"/>
106
107  <!--/radix_placeholder_meta_tags-->
108  <!--radix_placeholder_rmarkdown_metadata-->
109
110  
110<script type="text/json" id="radix-rmarkdown-metadata">
111  {"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["title","output"]}},"value":[{"type":"character","attributes":{},"value":["Research"]},{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["distill::distill_article"]}},"value":[{"type":"list","attributes":{"names":{"type":"character","attributes":{},"value":["self_contained","css"]}},"value":[{"type":"logical","attributes":{},"value":[true]},{"type":"character","attributes":{},"value":["styles.css"]}]}]}]}
112  </script>
112
113  <!--/radix_placeholder_rmarkdown_metadata-->
114  <!--radix_placeholder_navigation_in_header-->
115  <meta name="distill:offset" content=""/>
116
117  
117<script type="application/javascript">
118
119    window.headroom_prevent_pin = false;
120
121    window.document.addEventListener("DOMContentLoaded", function (event) {
122
123      // initialize headroom for banner
124      var header = $('header').get(0);
125      var headerHeight = header.offsetHeight;
126      var headroom = new Headroom(header, {
127        tolerance: 5,
128        onPin : function() {
129          if (window.headroom_prevent_pin) {
130            window.headroom_prevent_pin = false;
131            headroom.unpin();
132          }
133        }
134      });
135      headroom.init();
136      if(window.location.hash)
137        headroom.unpin();
138      $(header).addClass('headroom--transition');
139
140      // offset scroll location for banner on hash change
141      // (see: https://github.com/WickyNilliams/headroom.js/issues/38)
142      window.addEventListener("hashchange", function(event) {
143        window.scrollTo(0, window.pageYOffset - (headerHeight + 25));
144      });
145
146      // responsive menu
147      $('.distill-site-header').each(function(i, val) {
148        var topnav = $(this);
149        var toggle = topnav.find('.nav-toggle');
150        toggle.on('click', function() {
151          topnav.toggleClass('responsive');
152        });
153      });
154
155      // nav dropdowns
156      $('.nav-dropbtn').click(function(e) {
157        $(this).next('.nav-dropdown-content').toggleClass('nav-dropdown-active');
158        $(this).parent().siblings('.nav-dropdown')
159           .children('.nav-dropdown-content').removeClass('nav-dropdown-active');
160      });
161      $("body").click(function(e){
162        $('.nav-dropdown-content').removeClass('nav-dropdown-active');
163      });
164      $(".nav-dropdown").click(function(e){
165        e.stopPropagation();
166      });
167    });
168  </script>
168
169
170  <style type="text/css">
171
172  /* Theme (user-documented overrideables for nav appearance) */
173
174  .distill-site-nav {
175    color: rgba(255, 255, 255, 0.8);
176    background-color: #0F2E3D;
177    font-size: 15px;
178    font-weight: 300;
179  }
180
181  .distill-site-nav a {
182    color: inherit;
183    text-decoration: none;
184  }
185
186  .distill-site-nav a:hover {
187    color: white;
188  }
189
190  @media print {
191    .distill-site-nav {
192      display: none;
193    }
194  }
195
196  .distill-site-header {
197
198  }
199
200  .distill-site-footer {
201
202  }
203
204
205  /* Site Header */
206
207  .distill-site-header {
208    width: 100%;
209    box-sizing: border-box;
210    z-index: 3;
211  }
212
213  .distill-site-header .nav-left {
214    display: inline-block;
215    margin-left: 8px;
216  }
217
218  @media screen and (max-width: 768px) {
219    .distill-site-header .nav-left {
220      margin-left: 0;
221    }
222  }
223
224
225  .distill-site-header .nav-right {
226    float: right;
227    margin-right: 8px;
228  }
229
230  .distill-site-header a,
231  .distill-site-header .title {
232    display: inline-block;
233    text-align: center;
234    padding: 14px 10px 14px 10px;
235  }
236
237  .distill-site-header .title {
238    font-size: 18px;
239    min-width: 150px;
240  }
241
242  .distill-site-header .logo {
243    padding: 0;
244  }
245
246  .distill-site-header .logo img {
247    display: none;
248    max-height: 20px;
249    width: auto;
250    margin-bottom: -4px;
251  }
252
253  .distill-site-header .nav-image img {
254    max-height: 18px;
255    width: auto;
256    display: inline-block;
257    margin-bottom: -3px;
258  }
259
260
261
262  @media screen and (min-width: 1000px) {
263    .distill-site-header .logo img {
264      display: inline-block;
265    }
266    .distill-site-header .nav-left {
267      margin-left: 20px;
268    }
269    .distill-site-header .nav-right {
270      margin-right: 20px;
271    }
272    .distill-site-header .title {
273      padding-left: 12px;
274    }
275  }
276
277
278  .distill-site-header .nav-toggle {
279    display: none;
280  }
281
282  .nav-dropdown {
283    display: inline-block;
284    position: relative;
285  }
286
287  .nav-dropdown .nav-dropbtn {
288    border: none;
289    outline: none;
290    color: rgba(255, 255, 255, 0.8);
291    padding: 16px 10px;
292    background-color: transparent;
293    font-family: inherit;
294    font-size: inherit;
295    font-weight: inherit;
296    margin: 0;
297    margin-top: 1px;
298    z-index: 2;
299  }
300
301  .nav-dropdown-content {
302    display: none;
303    position: absolute;
304    background-color: white;
305    min-width: 200px;
306    border: 1px solid rgba(0,0,0,0.15);
307    border-radius: 4px;
308    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.1);
309    z-index: 1;
310    margin-top: 2px;
311    white-space: nowrap;
312    padding-top: 4px;
313    padding-bottom: 4px;
314  }
315
316  .nav-dropdown-content hr {
317    margin-top: 4px;
318    margin-bottom: 4px;
319    border: none;
320    border-bottom: 1px solid rgba(0, 0, 0, 0.1);
321  }
322
323  .nav-dropdown-active {
324    display: block;
325  }
326
327  .nav-dropdown-content a, .nav-dropdown-content .nav-dropdown-header {
328    color: black;
329    padding: 6px 24px;
330    text-decoration: none;
331    display: block;
332    text-align: left;
333  }
334
335  .nav-dropdown-content .nav-dropdown-header {
336    display: block;
337    padding: 5px 24px;
338    padding-bottom: 0;
339    text-transform: uppercase;
340    font-size: 14px;
341    color: #999999;
342    white-space: nowrap;
343  }
344
345  .nav-dropdown:hover .nav-dropbtn {
346    color: white;
347  }
348
349  .nav-dropdown-content a:hover {
350    background-color: #ddd;
351    color: black;
352  }
353
354  .nav-right .nav-dropdown-content {
355    margin-left: -45%;
356    right: 0;
357  }
358
359  @media screen and (max-width: 768px) {
360    .distill-site-header a, .distill-site-header .nav-dropdown  {display: none;}
361    .distill-site-header a.nav-toggle {
362      float: right;
363      display: block;
364    }
365    .distill-site-header .title {
366      margin-left: 0;
367    }
368    .distill-site-header .nav-right {
369      margin-right: 0;
370    }
371    .distill-site-header {
372      overflow: hidden;
373    }
374    .nav-right .nav-dropdown-content {
375      margin-left: 0;
376    }
377  }
378
379
380  @media screen and (max-width: 768px) {
381    .distill-site-header.responsive {position: relative; min-height: 500px; }
382    .distill-site-header.responsive a.nav-toggle {
383      position: absolute;
384      right: 0;
385      top: 0;
386    }
387    .distill-site-header.responsive a,
388    .distill-site-header.responsive .nav-dropdown {
389      display: block;
390      text-align: left;
391    }
392    .distill-site-header.responsive .nav-left,
393    .distill-site-header.responsive .nav-right {
394      width: 100%;
395    }
396    .distill-site-header.responsive .nav-dropdown {float: none;}
397    .distill-site-header.responsive .nav-dropdown-content {position: relative;}
398    .distill-site-header.responsive .nav-dropdown .nav-dropbtn {
399      display: block;
400      width: 100%;
401      text-align: left;
402    }
403  }
404
405  /* Site Footer */
406
407  .distill-site-footer {
408    width: 100%;
409    overflow: hidden;
410    box-sizing: border-box;
411    z-index: 3;
412    margin-top: 30px;
413    padding-top: 30px;
414    padding-bottom: 30px;
415    text-align: center;
416  }
417
418  /* Headroom */
419
420  d-title {
421    padding-top: 6rem;
422  }
423
424  @media print {
425    d-title {
426      padding-top: 4rem;
427    }
428  }
429
430  .headroom {
431    z-index: 1000;
432    position: fixed;
433    top: 0;
434    left: 0;
435    right: 0;
436  }
437
438  .headroom--transition {
439    transition: all .4s ease-in-out;
440  }
441
442  .headroom--unpinned {
443    top: -100px;
444  }
445
446  .headroom--pinned {
447    top: 0;
448  }
449
450  /* adjust viewport for navbar height */
451  /* helps vertically center bootstrap (non-distill) content */
452  .min-vh-100 {
453    min-height: calc(100vh - 100px) !important;
454  }
455
456  </style>
457
458  
458<script src="site_libs/jquery-3.6.0/jquery-3.6.0.min.js"></script>
458
459  <link href="site_libs/font-awesome-6.5.2/css/all.min.css" rel="stylesheet"/>
460  <link href="site_libs/font-awesome-6.5.2/css/v4-shims.min.css" rel="stylesheet"/>
461  
461<script src="site_libs/headroom-0.9.4/headroom.min.js"></script>
461
462  
462<script src="site_libs/autocomplete-0.37.1/autocomplete.min.js"></script>
462
463  
463<script src="site_libs/fuse-6.4.1/fuse.min.js"></script>
463
464
465  
465<script type="application/javascript">
466
467  function getMeta(metaName) {
468    var metas = document.getElementsByTagName('meta');
469    for (let i = 0; i < metas.length; i++) {
470      if (metas[i].getAttribute('name') === metaName) {
471        return metas[i].getAttribute('content');
472      }
473    }
474    return '';
475  }
476
477  function offsetURL(url) {
478    var offset = getMeta('distill:offset');
479    return offset ? offset + '/' + url : url;
480  }
481
482  function createFuseIndex() {
483
484    // create fuse index
485    var options = {
486      keys: [
487        { name: 'title', weight: 20 },
488        { name: 'categories', weight: 15 },
489        { name: 'description', weight: 10 },
490        { name: 'contents', weight: 5 },
491      ],
492      ignoreLocation: true,
493      threshold: 0
494    };
495    var fuse = new window.Fuse([], options);
496
497    // fetch the main search.json
498    return fetch(offsetURL('search.json'))
499      .then(function(response) {
500        if (response.status == 200) {
501          return response.json().then(function(json) {
502            // index main articles
503            json.articles.forEach(function(article) {
504              fuse.add(article);
505            });
506            // download collections and index their articles
507            return Promise.all(json.collections.map(function(collection) {
508              return fetch(offsetURL(collection)).then(function(response) {
509                if (response.status === 200) {
510                  return response.json().then(function(articles) {
511                    articles.forEach(function(article) {
512                      fuse.add(article);
513                    });
514                  })
515                } else {
516                  return Promise.reject(
517                    new Error('Unexpected status from search index request: ' +
518                              response.status)
519                  );
520                }
521              });
522            })).then(function() {
523              return fuse;
524            });
525          });
526
527        } else {
528          return Promise.reject(
529            new Error('Unexpected status from search index request: ' +
530                        response.status)
531          );
532        }
533      });
534  }
535
536  window.document.addEventListener("DOMContentLoaded", function (event) {
537
538    // get search element (bail if we don't have one)
539    var searchEl = window.document.getElementById('distill-search');
540    if (!searchEl)
541      return;
542
543    createFuseIndex()
544      .then(function(fuse) {
545
546        // make search box visible
547        searchEl.classList.remove('hidden');
548
549        // initialize autocomplete
550        var options = {
551          autoselect: true,
552          hint: false,
553          minLength: 2,
554        };
555        window.autocomplete(searchEl, options, [{
556          source: function(query, callback) {
557            const searchOptions = {
558              isCaseSensitive: false,
559              shouldSort: true,
560              minMatchCharLength: 2,
561              limit: 10,
562            };
563            var results = fuse.search(query, searchOptions);
564            callback(results
565              .map(function(result) { return result.item; })
566            );
567          },
568          templates: {
569            suggestion: function(suggestion) {
570              var img = suggestion.preview && Object.keys(suggestion.preview).length > 0
571                ? `<img src="${offsetURL(suggestion.preview)}"</img>`
572                : '';
573              var html = `
574                <div class="search-item">
575                  <h3>${suggestion.title}</h3>
576                  <div class="search-item-description">
577                    ${suggestion.description || ''}
578                  </div>
579                  <div class="search-item-preview">
580                    ${img}
581                  </div>
582                </div>
583              `;
584              return html;
585            }
586          }
587        }]).on('autocomplete:selected', function(event, suggestion) {
588          window.location.href = offsetURL(suggestion.path);
589        });
590        // remove inline display style on autocompleter (we want to
591        // manage responsive display via css)
592        $('.algolia-autocomplete').css("display", "");
593      })
594      .catch(function(error) {
595        console.log(error);
596      });
597
598  });
599
600  </script>
600
601
602  <style type="text/css">
603
604  .nav-search {
605    font-size: x-small;
606  }
607
608  /* Algolioa Autocomplete */
609
610  .algolia-autocomplete {
611    display: inline-block;
612    margin-left: 10px;
613    vertical-align: sub;
614    background-color: white;
615    color: black;
616    padding: 6px;
617    padding-top: 8px;
618    padding-bottom: 0;
619    border-radius: 6px;
620    border: 1px #0F2E3D solid;
621    width: 180px;
622  }
623
624
625  @media screen and (max-width: 768px) {
626    .distill-site-nav .algolia-autocomplete {
627      display: none;
628      visibility: hidden;
629    }
630    .distill-site-nav.responsive .algolia-autocomplete {
631      display: inline-block;
632      visibility: visible;
633    }
634    .distill-site-nav.responsive .algolia-autocomplete .aa-dropdown-menu {
635      margin-left: 0;
636      width: 400px;
637      max-height: 400px;
638    }
639  }
640
641  .algolia-autocomplete .aa-input, .algolia-autocomplete .aa-hint {
642    width: 90%;
643    outline: none;
644    border: none;
645  }
646
647  .algolia-autocomplete .aa-hint {
648    color: #999;
649  }
650  .algolia-autocomplete .aa-dropdown-menu {
651    width: 550px;
652    max-height: 70vh;
653    overflow-x: visible;
654    overflow-y: scroll;
655    padding: 5px;
656    margin-top: 3px;
657    margin-left: -150px;
658    background-color: #fff;
659    border-radius: 5px;
660    border: 1px solid #999;
661    border-top: none;
662  }
663
664  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion {
665    cursor: pointer;
666    padding: 5px 4px;
667    border-bottom: 1px solid #eee;
668  }
669
670  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion:last-of-type {
671    border-bottom: none;
672    margin-bottom: 2px;
673  }
674
675  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item {
676    overflow: hidden;
677    font-size: 0.8em;
678    line-height: 1.4em;
679  }
680
681  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item h3 {
682    font-size: 1rem;
683    margin-block-start: 0;
684    margin-block-end: 5px;
685  }
686
687  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-description {
688    display: inline-block;
689    overflow: hidden;
690    height: 2.8em;
691    width: 80%;
692    margin-right: 4%;
693  }
694
695  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview {
696    display: inline-block;
697    width: 15%;
698  }
699
700  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview img {
701    height: 3em;
702    width: auto;
703    display: none;
704  }
705
706  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion .search-item-preview img[src] {
707    display: initial;
708  }
709
710  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor {
711    background-color: #eee;
712  }
713  .algolia-autocomplete .aa-dropdown-menu .aa-suggestion em {
714    font-weight: bold;
715    font-style: normal;
716  }
717
718  </style>
719
720
721  <!--/radix_placeholder_navigation_in_header-->
722  <!--radix_placeholder_distill-->
723
724  <style type="text/css">
725
726  body {
727    background-color: white;
728  }
729
730  .pandoc-table {
731    width: 100%;
732  }
733
734  .pandoc-table>caption {
735    margin-bottom: 10px;
736  }
737
738  .pandoc-table th:not([align]) {
739    text-align: left;
740  }
741
742  .pagedtable-footer {
743    font-size: 15px;
744  }
745
746  d-byline .byline {
747    grid-template-columns: 2fr 2fr;
748  }
749
750  d-byline .byline h3 {
751    margin-block-start: 1.5em;
752  }
753
754  d-byline .byline .authors-affiliations h3 {
755    margin-block-start: 0.5em;
756  }
757
758  .authors-affiliations .orcid-id {
759    width: 16px;
760    height:16px;
761    margin-left: 4px;
762    margin-right: 4px;
763    vertical-align: middle;
764    padding-bottom: 2px;
765  }
766
767  d-title .dt-tags {
768    margin-top: 1em;
769    grid-column: text;
770  }
771
772  .dt-tags .dt-tag {
773    text-decoration: none;
774    display: inline-block;
775    color: rgba(0,0,0,0.6);
776    padding: 0em 0.4em;
777    margin-right: 0.5em;
778    margin-bottom: 0.4em;
779    font-size: 70%;
780    border: 1px solid rgba(0,0,0,0.2);
781    border-radius: 3px;
782    text-transform: uppercase;
783    font-weight: 500;
784  }
785
786  d-article table.gt_table td,
787  d-article table.gt_table th {
788    border-bottom: none;
789    font-size: 100%;
790  }
791
792  .html-widget {
793    margin-bottom: 2.0em;
794  }
795
796  .l-screen-inset {
797    padding-right: 16px;
798  }
799
800  .l-screen .caption {
801    margin-left: 10px;
802  }
803
804  .shaded {
805    background: rgb(247, 247, 247);
806    padding-top: 20px;
807    padding-bottom: 20px;
808    border-top: 1px solid rgba(0, 0, 0, 0.1);
809    border-bottom: 1px solid rgba(0, 0, 0, 0.1);
810  }
811
812  .shaded .html-widget {
813    margin-bottom: 0;
814    border: 1px solid rgba(0, 0, 0, 0.1);
815  }
816
817  .shaded .shaded-content {
818    background: white;
819  }
820
821  .text-output {
822    margin-top: 0;
823    line-height: 1.5em;
824  }
825
826  .hidden {
827    display: none !important;
828  }
829
830  hr.section-separator {
831    border: none;
832    border-top: 1px solid rgba(0, 0, 0, 0.1);
833    margin: 0px;
834  }
835
836
837  d-byline {
838    border-top: none;
839  }
840
841  d-article {
842    padding-top: 2.5rem;
843    padding-bottom: 30px;
844    border-top: none;
845  }
846
847  d-appendix {
848    padding-top: 30px;
849  }
850
851  d-article>p>img {
852    width: 100%;
853  }
854
855  d-article h2 {
856    margin: 1rem 0 1.5rem 0;
857  }
858
859  d-article h3 {
860    margin-top: 1.5rem;
861  }
862
863  d-article iframe {
864    border: 1px solid rgba(0, 0, 0, 0.1);
865    margin-bottom: 2.0em;
866    width: 100%;
867  }
868
869  /* Tweak code blocks */
870
871  d-article div.sourceCode code,
872  d-article pre code {
873    font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
874  }
875
876  d-article pre,
877  d-article div.sourceCode,
878  d-article div.sourceCode pre {
879    overflow: auto;
880  }
881
882  d-article div.sourceCode {
883    background-color: white;
884  }
885
886  d-article div.sourceCode pre {
887    padding-left: 10px;
888    font-size: 12px;
889    border-left: 2px solid rgba(0,0,0,0.1);
890  }
891
892  d-article pre {
893    font-size: 12px;
894    color: black;
895    background: none;
896    margin-top: 0;
897    text-align: left;
898    white-space: pre;
899    word-spacing: normal;
900    word-break: normal;
901    word-wrap: normal;
902    line-height: 1.5;
903
904    -moz-tab-size: 4;
905    -o-tab-size: 4;
906    tab-size: 4;
907
908    -webkit-hyphens: none;
909    -moz-hyphens: none;
910    -ms-hyphens: none;
911    hyphens: none;
912  }
913
914  d-article pre a {
915    border-bottom: none;
916  }
917
918  d-article pre a:hover {
919    border-bottom: none;
920    text-decoration: underline;
921  }
922
923  d-article details {
924    grid-column: text;
925    margin-bottom: 0.8em;
926  }
927
928  @media(min-width: 768px) {
929
930  d-article pre,
931  d-article div.sourceCode,
932  d-article div.sourceCode pre {
933    overflow: visible !important;
934  }
935
936  d-article div.sourceCode pre {
937    padding-left: 18px;
938    font-size: 14px;
939  }
940
941  /* tweak for Pandoc numbered line within distill */
942  d-article pre.numberSource code > span {
943      left: -2em;
944  }
945
946  d-article pre {
947    font-size: 14px;
948  }
949
950  }
951
952  figure img.external {
953    background: white;
954    border: 1px solid rgba(0, 0, 0, 0.1);
955    box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
956    padding: 18px;
957    box-sizing: border-box;
958  }
959
960  /* CSS for d-contents */
961
962  .d-contents {
963    grid-column: text;
964    color: rgba(0,0,0,0.8);
965    font-size: 0.9em;
966    padding-bottom: 1em;
967    margin-bottom: 1em;
968    padding-bottom: 0.5em;
969    margin-bottom: 1em;
970    padding-left: 0.25em;
971    justify-self: start;
972  }
973
974  @media(min-width: 1000px) {
975    .d-contents.d-contents-float {
976      height: 0;
977      grid-column-start: 1;
978      grid-column-end: 4;
979      justify-self: center;
980      padding-right: 3em;
981      padding-left: 2em;
982    }
983  }
984
985  .d-contents nav h3 {
986    font-size: 18px;
987    margin-top: 0;
988    margin-bottom: 1em;
989  }
990
991  .d-contents li {
992    list-style-type: none
993  }
994
995  .d-contents nav > ul {
996    padding-left: 0;
997  }
998
999  .d-contents ul {
1000    padding-left: 1em
1001  }
1002
1003  .d-contents nav ul li {
1004    margin-top: 0.6em;
1005    margin-bottom: 0.2em;
1006  }
1007
1008  .d-contents nav a {
1009    font-size: 13px;
1010    border-bottom: none;
1011    text-decoration: none
1012    color: rgba(0, 0, 0, 0.8);
1013  }
1014
1015  .d-contents nav a:hover {
1016    text-decoration: underline solid rgba(0, 0, 0, 0.6)
1017  }
1018
1019  .d-contents nav > ul > li > a {
1020    font-weight: 600;
1021  }
1022
1023  .d-contents nav > ul > li > ul {
1024    font-weight: inherit;
1025  }
1026
1027  .d-contents nav > ul > li > ul > li {
1028    margin-top: 0.2em;
1029  }
1030
1031
1032  .d-contents nav ul {
1033    margin-top: 0;
1034    margin-bottom: 0.25em;
1035  }
1036
1037  .d-article-with-toc h2:nth-child(2) {
1038    margin-top: 0;
1039  }
1040
1041
1042  /* Figure */
1043
1044  .figure {
1045    position: relative;
1046    margin-bottom: 2.5em;
1047    margin-top: 1.5em;
1048  }
1049
1050  .figure .caption {
1051    color: rgba(0, 0, 0, 0.6);
1052    font-size: 12px;
1053    line-height: 1.5em;
1054  }
1055
1056  .figure img.external {
1057    background: white;
1058    border: 1px solid rgba(0, 0, 0, 0.1);
1059    box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);
1060    padding: 18px;
1061    box-sizing: border-box;
1062  }
1063
1064  .figure .caption a {
1065    color: rgba(0, 0, 0, 0.6);
1066  }
1067
1068  .figure .caption b,
1069  .figure .caption strong, {
1070    font-weight: 600;
1071    color: rgba(0, 0, 0, 1.0);
1072  }
1073
1074  /* Citations */
1075
1076  d-article .citation {
1077    color: inherit;
1078    cursor: inherit;
1079  }
1080
1081  div.hanging-indent{
1082    margin-left: 1em; text-indent: -1em;
1083  }
1084
1085  /* Citation hover box */
1086
1087  .tippy-box[data-theme~=light-border] {
1088    background-color: rgba(250, 250, 250, 0.95);
1089  }
1090
1091  .tippy-content > p {
1092    margin-bottom: 0;
1093    padding: 2px;
1094  }
1095
1096
1097  /* Tweak 1000px media break to show more text */
1098
1099  @media(min-width: 1000px) {
1100    .base-grid,
1101    distill-header,
1102    d-title,
1103    d-abstract,
1104    d-article,
1105    d-appendix,
1106    distill-appendix,
1107    d-byline,
1108    d-footnote-list,
1109    d-citation-list,
1110    distill-footer {
1111      grid-template-columns: [screen-start] 1fr [page-start kicker-start] 80px [middle-start] 50px [text-start kicker-end] 65px 65px 65px 65px 65px 65px 65px 65px [text-end gutter-start] 65px [middle-end] 65px [page-end gutter-end] 1fr [screen-end];
1112      grid-column-gap: 16px;
1113    }
1114
1115    .grid {
1116      grid-column-gap: 16px;
1117    }
1118
1119    d-article {
1120      font-size: 1.06rem;
1121      line-height: 1.7em;
1122    }
1123    figure .caption, .figure .caption, figure figcaption {
1124      font-size: 13px;
1125    }
1126  }
1127
1128  @media(min-width: 1180px) {
1129    .base-grid,
1130    distill-header,
1131    d-title,
1132    d-abstract,
1133    d-article,
1134    d-appendix,
1135    distill-appendix,
1136    d-byline,
1137    d-footnote-list,
1138    d-citation-list,
1139    distill-footer {
1140      grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];
1141      grid-column-gap: 32px;
1142    }
1143
1144    .grid {
1145      grid-column-gap: 32px;
1146    }
1147  }
1148
1149
1150  /* Get the citation styles for the appendix (not auto-injected on render since
1151     we do our own rendering of the citation appendix) */
1152
1153  d-appendix .citation-appendix,
1154  .d-appendix .citation-appendix {
1155    font-size: 11px;
1156    line-height: 15px;
1157    border-left: 1px solid rgba(0, 0, 0, 0.1);
1158    padding-left: 18px;
1159    border: 1px solid rgba(0,0,0,0.1);
1160    background: rgba(0, 0, 0, 0.02);
1161    padding: 10px 18px;
1162    border-radius: 3px;
1163    color: rgba(150, 150, 150, 1);
1164    overflow: hidden;
1165    margin-top: -12px;
1166    white-space: pre-wrap;
1167    word-wrap: break-word;
1168  }
1169
1170  /* Include appendix styles here so they can be overridden */
1171
1172  d-appendix {
1173    contain: layout style;
1174    font-size: 0.8em;
1175    line-height: 1.7em;
1176    margin-top: 60px;
1177    margin-bottom: 0;
1178    border-top: 1px solid rgba(0, 0, 0, 0.1);
1179    color: rgba(0,0,0,0.5);
1180    padding-top: 60px;
1181    padding-bottom: 48px;
1182  }
1183
1184  d-appendix h3 {
1185    grid-column: page-start / text-start;
1186    font-size: 15px;
1187    font-weight: 500;
1188    margin-top: 1em;
1189    margin-bottom: 0;
1190    color: rgba(0,0,0,0.65);
1191  }
1192
1193  d-appendix h3 + * {
1194    margin-top: 1em;
1195  }
1196
1197  d-appendix ol {
1198    padding: 0 0 0 15px;
1199  }
1200
1201  @media (min-width: 768px) {
1202    d-appendix ol {
1203      padding: 0 0 0 30px;
1204      margin-left: -30px;
1205    }
1206  }
1207
1208  d-appendix li {
1209    margin-bottom: 1em;
1210  }
1211
1212  d-appendix a {
1213    color: rgba(0, 0, 0, 0.6);
1214  }
1215
1216  d-appendix > * {
1217    grid-column: text;
1218  }
1219
1220  d-appendix > d-footnote-list,
1221  d-appendix > d-citation-list,
1222  d-appendix > distill-appendix {
1223    grid-column: screen;
1224  }
1225
1226  /* Include footnote styles here so they can be overridden */
1227
1228  d-footnote-list {
1229    contain: layout style;
1230  }
1231
1232  d-footnote-list > * {
1233    grid-column: text;
1234  }
1235
1236  d-footnote-list a.footnote-backlink {
1237    color: rgba(0,0,0,0.3);
1238    padding-left: 0.5em;
1239  }
1240
1241
1242
1243  /* Anchor.js */
1244
1245  .anchorjs-link {
1246    /*transition: all .25s linear; */
1247    text-decoration: none;
1248    border-bottom: none;
1249  }
1250  *:hover > .anchorjs-link {
1251    margin-left: -1.125em !important;
1252    text-decoration: none;
1253    border-bottom: none;
1254  }
1255
1256  /* Social footer */
1257
1258  .social_footer {
1259    margin-top: 30px;
1260    margin-bottom: 0;
1261    color: rgba(0,0,0,0.67);
1262  }
1263
1264  .disqus-comments {
1265    margin-right: 30px;
1266  }
1267
1268  .disqus-comment-count {
1269    border-bottom: 1px solid rgba(0, 0, 0, 0.4);
1270    cursor: pointer;
1271  }
1272
1273  #disqus_thread {
1274    margin-top: 30px;
1275  }
1276
1277  .article-sharing a {
1278    border-bottom: none;
1279    margin-right: 8px;
1280  }
1281
1282  .article-sharing a:hover {
1283    border-bottom: none;
1284  }
1285
1286  .sidebar-section.subscribe {
1287    font-size: 12px;
1288    line-height: 1.6em;
1289  }
1290
1291  .subscribe p {
1292    margin-bottom: 0.5em;
1293  }
1294
1295
1296  .article-footer .subscribe {
1297    font-size: 15px;
1298    margin-top: 45px;
1299  }
1300
1301
1302  .sidebar-section.custom {
1303    font-size: 12px;
1304    line-height: 1.6em;
1305  }
1306
1307  .custom p {
1308    margin-bottom: 0.5em;
1309  }
1310
1311  /* Styles for listing layout (hide title) */
1312  .layout-listing d-title, .layout-listing .d-title {
1313    display: none;
1314  }
1315
1316  /* Styles for posts lists (not auto-injected) */
1317
1318
1319  .posts-with-sidebar {
1320    padding-left: 45px;
1321    padding-right: 45px;
1322  }
1323
1324  .posts-list .description h2,
1325  .posts-list .description p {
1326    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
1327  }
1328
1329  .posts-list .description h2 {
1330    font-weight: 700;
1331    border-bottom: none;
1332    padding-bottom: 0;
1333  }
1334
1335  .posts-list h2.post-tag {
1336    border-bottom: 1px solid rgba(0, 0, 0, 0.2);
1337    padding-bottom: 12px;
1338  }
1339  .posts-list {
1340    margin-top: 60px;
1341    margin-bottom: 24px;
1342  }
1343
1344  .posts-list .post-preview {
1345    text-decoration: none;
1346    overflow: hidden;
1347    display: block;
1348    border-bottom: 1px solid rgba(0, 0, 0, 0.1);
1349    padding: 24px 0;
1350  }
1351
1352  .post-preview-last {
1353    border-bottom: none !important;
1354  }
1355
1356  .posts-list .posts-list-caption {
1357    grid-column: screen;
1358    font-weight: 400;
1359  }
1360
1361  .posts-list .post-preview h2 {
1362    margin: 0 0 6px 0;
1363    line-height: 1.2em;
1364    font-style: normal;
1365    font-size: 24px;
1366  }
1367
1368  .posts-list .post-preview p {
1369    margin: 0 0 12px 0;
1370    line-height: 1.4em;
1371    font-size: 16px;
1372  }
1373
1374  .posts-list .post-preview .thumbnail {
1375    box-sizing: border-box;
1376    margin-bottom: 24px;
1377    position: relative;
1378    max-width: 500px;
1379  }
1380  .posts-list .post-preview img {
1381    width: 100%;
1382    display: block;
1383  }
1384
1385  .posts-list .metadata {
1386    font-size: 12px;
1387    line-height: 1.4em;
1388    margin-bottom: 18px;
1389  }
1390
1391  .posts-list .metadata > * {
1392    display: inline-block;
1393  }
1394
1395  .posts-list .metadata .publishedDate {
1396    margin-right: 2em;
1397  }
1398
1399  .posts-list .metadata .dt-authors {
1400    display: block;
1401    margin-top: 0.3em;
1402    margin-right: 2em;
1403  }
1404
1405  .posts-list .dt-tags {
1406    display: block;
1407    line-height: 1em;
1408  }
1409
1410  .posts-list .dt-tags .dt-tag {
1411    display: inline-block;
1412    color: rgba(0,0,0,0.6);
1413    padding: 0.3em 0.4em;
1414    margin-right: 0.2em;
1415    margin-bottom: 0.4em;
1416    font-size: 60%;
1417    border: 1px solid rgba(0,0,0,0.2);
1418    border-radius: 3px;
1419    text-transform: uppercase;
1420    font-weight: 500;
1421  }
1422
1423  .posts-list img {
1424    opacity: 1;
1425  }
1426
1427  .posts-list img[data-src] {
1428    opacity: 0;
1429  }
1430
1431  .posts-more {
1432    clear: both;
1433  }
1434
1435
1436  .posts-sidebar {
1437    font-size: 16px;
1438  }
1439
1440  .posts-sidebar h3 {
1441    font-size: 16px;
1442    margin-top: 0;
1443    margin-bottom: 0.5em;
1444    font-weight: 400;
1445    text-transform: uppercase;
1446  }
1447
1448  .sidebar-section {
1449    margin-bottom: 30px;
1450  }
1451
1452  .categories ul {
1453    list-style-type: none;
1454    margin: 0;
1455    padding: 0;
1456  }
1457
1458  .categories li {
1459    color: rgba(0, 0, 0, 0.8);
1460    margin-bottom: 0;
1461  }
1462
1463  .categories li>a {
1464    border-bottom: none;
1465  }
1466
1467  .categories li>a:hover {
1468    border-bottom: 1px solid rgba(0, 0, 0, 0.4);
1469  }
1470
1471  .categories .active {
1472    font-weight: 600;
1473  }
1474
1475  .categories .category-count {
1476    color: rgba(0, 0, 0, 0.4);
1477  }
1478
1479
1480  @media(min-width: 768px) {
1481    .posts-list .post-preview h2 {
1482      font-size: 26px;
1483    }
1484    .posts-list .post-preview .thumbnail {
1485      float: right;
1486      width: 30%;
1487      margin-bottom: 0;
1488    }
1489    .posts-list .post-preview .description {
1490      float: left;
1491      width: 45%;
1492    }
1493    .posts-list .post-preview .metadata {
1494      float: left;
1495      width: 20%;
1496      margin-top: 8px;
1497    }
1498    .posts-list .post-preview p {
1499      margin: 0 0 12px 0;
1500      line-height: 1.5em;
1501      font-size: 16px;
1502    }
1503    .posts-with-sidebar .posts-list {
1504      float: left;
1505      width: 75%;
1506    }
1507    .posts-with-sidebar .posts-sidebar {
1508      float: right;
1509      width: 20%;
1510      margin-top: 60px;
1511      padding-top: 24px;
1512      padding-bottom: 24px;
1513    }
1514  }
1515
1516
1517  /* Improve display for browsers without grid (IE/Edge <= 15) */
1518
1519  .downlevel {
1520    line-height: 1.6em;
1521    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;
1522    margin: 0;
1523  }
1524
1525  .downlevel .d-title {
1526    padding-top: 6rem;
1527    padding-bottom: 1.5rem;
1528  }
1529
1530  .downlevel .d-title h1 {
1531    font-size: 50px;
1532    font-weight: 700;
1533    line-height: 1.1em;
1534    margin: 0 0 0.5rem;
1535  }
1536
1537  .downlevel .d-title p {
1538    font-weight: 300;
1539    font-size: 1.2rem;
1540    line-height: 1.55em;
1541    margin-top: 0;
1542  }
1543
1544  .downlevel .d-byline {
1545    padding-top: 0.8em;
1546    padding-bottom: 0.8em;
1547    font-size: 0.8rem;
1548    line-height: 1.8em;
1549  }
1550
1551  .downlevel .section-separator {
1552    border: none;
1553    border-top: 1px solid rgba(0, 0, 0, 0.1);
1554  }
1555
1556  .downlevel .d-article {
1557    font-size: 1.06rem;
1558    line-height: 1.7em;
1559    padding-top: 1rem;
1560    padding-bottom: 2rem;
1561  }
1562
1563
1564  .downlevel .d-appendix {
1565    padding-left: 0;
1566    padding-right: 0;
1567    max-width: none;
1568    font-size: 0.8em;
1569    line-height: 1.7em;
1570    margin-bottom: 0;
1571    color: rgba(0,0,0,0.5);
1572    padding-top: 40px;
1573    padding-bottom: 48px;
1574  }
1575
1576  .downlevel .footnotes ol {
1577    padding-left: 13px;
1578  }
1579
1580  .downlevel .base-grid,
1581  .downlevel .distill-header,
1582  .downlevel .d-title,
1583  .downlevel .d-abstract,
1584  .downlevel .d-article,
1585  .downlevel .d-appendix,
1586  .downlevel .distill-appendix,
1587  .downlevel .d-byline,
1588  .downlevel .d-footnote-list,
1589  .downlevel .d-citation-list,
1590  .downlevel .distill-footer,
1591  .downlevel .appendix-bottom,
1592  .downlevel .posts-container {
1593    padding-left: 40px;
1594    padding-right: 40px;
1595  }
1596
1597  @media(min-width: 768px) {
1598    .downlevel .base-grid,
1599    .downlevel .distill-header,
1600    .downlevel .d-title,
1601    .downlevel .d-abstract,
1602    .downlevel .d-article,
1603    .downlevel .d-appendix,
1604    .downlevel .distill-appendix,
1605    .downlevel .d-byline,
1606    .downlevel .d-footnote-list,
1607    .downlevel .d-citation-list,
1608    .downlevel .distill-footer,
1609    .downlevel .appendix-bottom,
1610    .downlevel .posts-container {
1611    padding-left: 150px;
1612    padding-right: 150px;
1613    max-width: 900px;
1614  }
1615  }
1616
1617  .downlevel pre code {
1618    display: block;
1619    border-left: 2px solid rgba(0, 0, 0, .1);
1620    padding: 0 0 0 20px;
1621    font-size: 14px;
1622  }
1623
1624  .downlevel code, .downlevel pre {
1625    color: black;
1626    background: none;
1627    font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
1628    text-align: left;
1629    white-space: pre;
1630    word-spacing: normal;
1631    word-break: normal;
1632    word-wrap: normal;
1633    line-height: 1.5;
1634
1635    -moz-tab-size: 4;
1636    -o-tab-size: 4;
1637    tab-size: 4;
1638
1639    -webkit-hyphens: none;
1640    -moz-hyphens: none;
1641    -ms-hyphens: none;
1642    hyphens: none;
1643  }
1644
1645  .downlevel .posts-list .post-preview {
1646    color: inherit;
1647  }
1648
1649
1650
1651  </style>
1652
1653  
1653<script type="application/javascript">
1654
1655  function is_downlevel_browser() {
1656    if (bowser.isUnsupportedBrowser({ msie: "12", msedge: "16"},
1657                                   window.navigator.userAgent)) {
1658      return true;
1659    } else {
1660      return window.load_distill_framework === undefined;
1661    }
1662  }
1663
1664  // show body when load is complete
1665  function on_load_complete() {
1666
1667    // add anchors
1668    if (window.anchors) {
1669      window.anchors.options.placement = 'left';
1670      window.anchors.add('d-article > h2, d-article > h3, d-article > h4, d-article > h5');
1671    }
1672
1673
1674    // set body to visible
1675    document.body.style.visibility = 'visible';
1676
1677    // force redraw for leaflet widgets
1678    if (window.HTMLWidgets) {
1679      var maps = window.HTMLWidgets.findAll(".leaflet");
1680      $.each(maps, function(i, el) {
1681        var map = this.getMap();
1682        map.invalidateSize();
1683        map.eachLayer(function(layer) {
1684          if (layer instanceof L.TileLayer)
1685            layer.redraw();
1686        });
1687      });
1688    }
1689
1690    // trigger 'shown' so htmlwidgets resize
1691    $('d-article').trigger('shown');
1692  }
1693
1694  function init_distill() {
1695
1696    init_common();
1697
1698    // create front matter
1699    var front_matter = $('<d-front-matter></d-front-matter>');
1700    $('#distill-front-matter').wrap(front_matter);
1701
1702    // create d-title
1703    $('.d-title').changeElementType('d-title');
1704
1705    // separator
1706    var separator = '<hr class="section-separator" style="clear: both"/>';
1707    // prepend separator above appendix
1708    $('.d-byline').before(separator);
1709    $('.d-article').before(separator);
1710
1711    // create d-byline
1712    var byline = $('<d-byline></d-byline>');
1713    $('.d-byline').replaceWith(byline);
1714
1715    // create d-article
1716    var article = $('<d-article></d-article>');
1717    $('.d-article').wrap(article).children().unwrap();
1718
1719    // move posts container into article
1720    $('.posts-container').appendTo($('d-article'));
1721
1722    // create d-appendix
1723    $('.d-appendix').changeElementType('d-appendix');
1724
1725    // flag indicating that we have appendix items
1726    var appendix = $('.appendix-bottom').children('h3').length > 0;
1727
1728    // replace footnotes with <d-footnote>
1729    $('.footnote-ref').each(function(i, val) {
1730      appendix = true;
1731      var href = $(this).attr('href');
1732      var id = href.replace('#', '');
1733      var fn = $('#' + id);
1734      var fn_p = $('#' + id + '>p');
1735      fn_p.find('.footnote-back').remove();
1736      var text = fn_p.html();
1737      var dtfn = $('<d-footnote></d-footnote>');
1738      dtfn.html(text);
1739      $(this).replaceWith(dtfn);
1740    });
1741    // remove footnotes
1742    $('.footnotes').remove();
1743
1744    // move refs into #references-listing
1745    $('#references-listing').replaceWith($('#refs'));
1746
1747    $('h1.appendix, h2.appendix').each(function(i, val) {
1748      $(this).changeElementType('h3');
1749    });
1750    $('h3.appendix').each(function(i, val) {
1751      var id = $(this).attr('id');
1752      $('.d-contents a[href="#' + id + '"]').parent().remove();
1753      appendix = true;
1754      $(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('d-appendix'));
1755    });
1756
1757    // show d-appendix if we have appendix content
1758    $("d-appendix").css('display', appendix ? 'grid' : 'none');
1759
1760    // localize layout chunks to just output
1761    $('.layout-chunk').each(function(i, val) {
1762
1763      // capture layout
1764      var layout = $(this).attr('data-layout');
1765
1766      // apply layout to markdown level block elements
1767      var elements = $(this).children().not('details, div.sourceCode, pre, script');
1768      elements.each(function(i, el) {
1769        var layout_div = $('<div class="' + layout + '"></div>');
1770        if (layout_div.hasClass('shaded')) {
1771          var shaded_content = $('<div class="shaded-content"></div>');
1772          $(this).wrap(shaded_content);
1773          $(this).parent().wrap(layout_div);
1774        } else {
1775          $(this).wrap(layout_div);
1776        }
1777      });
1778
1779
1780      // unwrap the layout-chunk div
1781      $(this).children().unwrap();
1782    });
1783
1784    // remove code block used to force  highlighting css
1785    $('.distill-force-highlighting-css').parent().remove();
1786
1787    // remove empty line numbers inserted by pandoc when using a
1788    // custom syntax highlighting theme, except when numbering line
1789    // in code chunk
1790    $('pre:not(.numberLines) code.sourceCode a:empty').remove();
1791
1792    // load distill framework
1793    load_distill_framework();
1794
1795    // wait for window.distillRunlevel == 4 to do post processing
1796    function distill_post_process() {
1797
1798      if (!window.distillRunlevel || window.distillRunlevel < 4)
1799        return;
1800
1801      // hide author/affiliations entirely if we have no authors
1802      var front_matter = JSON.parse($("#distill-front-matter").html());
1803      var have_authors = front_matter.authors && front_matter.authors.length > 0;
1804      if (!have_authors)
1805        $('d-byline').addClass('hidden');
1806
1807      // article with toc class
1808      $('.d-contents').parent().addClass('d-article-with-toc');
1809
1810      // strip links that point to #
1811      $('.authors-affiliations').find('a[href="#"]').removeAttr('href');
1812
1813      // add orcid ids
1814      $('.authors-affiliations').find('.author').each(function(i, el) {
1815        var orcid_id = front_matter.authors[i].orcidID;
1816        var author_name = front_matter.authors[i].author
1817        if (orcid_id) {
1818          var a = $('<a></a>');
1819          a.attr('href', 'https://orcid.org/' + orcid_id);
1820          var img = $('<img></img>');
1821          img.addClass('orcid-id');
1822          img.attr('alt', author_name ? 'ORCID ID for ' + author_name : 'ORCID ID');
1823          img.attr('src','data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2ZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1N0NEMjA4MDI1MjA2ODExOTk0QzkzNTEzRjZEQTg1NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozM0NDOEJGNEZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozM0NDOEJGM0ZGNTcxMUUxODdBOEVCODg2RjdCQ0QwOSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IE1hY2ludG9zaCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZDN0YxMTc0MDcyMDY4MTE5NUZFRDc5MUM2MUUwNEREIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU3Q0QyMDgwMjUyMDY4MTE5OTRDOTM1MTNGNkRBODU3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+84NovQAAAR1JREFUeNpiZEADy85ZJgCpeCB2QJM6AMQLo4yOL0AWZETSqACk1gOxAQN+cAGIA4EGPQBxmJA0nwdpjjQ8xqArmczw5tMHXAaALDgP1QMxAGqzAAPxQACqh4ER6uf5MBlkm0X4EGayMfMw/Pr7Bd2gRBZogMFBrv01hisv5jLsv9nLAPIOMnjy8RDDyYctyAbFM2EJbRQw+aAWw/LzVgx7b+cwCHKqMhjJFCBLOzAR6+lXX84xnHjYyqAo5IUizkRCwIENQQckGSDGY4TVgAPEaraQr2a4/24bSuoExcJCfAEJihXkWDj3ZAKy9EJGaEo8T0QSxkjSwORsCAuDQCD+QILmD1A9kECEZgxDaEZhICIzGcIyEyOl2RkgwAAhkmC+eAm0TAAAAABJRU5ErkJggg==');
1824          a.append(img);
1825          $(this).append(a);
1826        }
1827      });
1828
1829      // hide elements of author/affiliations grid that have no value
1830      function hide_byline_column(caption) {
1831        $('d-byline').find('h3:contains("' + caption + '")').parent().css('visibility', 'hidden');
1832      }
1833
1834      // affiliations
1835      var have_affiliations = false;
1836      for (var i = 0; i<front_matter.authors.length; ++i) {
1837        var author = front_matter.authors[i];
1838        if (author.affiliation !== "&nbsp;") {
1839          have_affiliations = true;
1840          break;
1841        }
1842      }
1843      if (!have_affiliations)
1844        $('d-byline').find('h3:contains("Affiliations")').css('visibility', 'hidden');
1845
1846      // published date
1847      if (!front_matter.publishedDate)
1848        hide_byline_column("Published");
1849
1850      // document object identifier
1851      var doi = $('d-byline').find('h3:contains("DOI")');
1852      var doi_p = doi.next().empty();
1853      if (!front_matter.doi) {
1854        // if we have a citation and valid citationText then link to that
1855        if ($('#citation').length > 0 && front_matter.citationText) {
1856          doi.html('Citation');
1857          $('<a href="#citation"></a>')
1858            .text(front_matter.citationText)
1859            .appendTo(doi_p);
1860        } else {
1861          hide_byline_column("DOI");
1862        }
1863      } else {
1864        $('<a></a>')
1865           .attr('href', "https://doi.org/" + front_matter.doi)
1866           .html(front_matter.doi)
1867           .appendTo(doi_p);
1868      }
1869
1870       // change plural form of authors/affiliations
1871      if (front_matter.authors.length === 1) {
1872        var grid = $('.authors-affiliations');
1873        grid.children('h3:contains("Authors")').text('Author');
1874        grid.children('h3:contains("Affiliations")').text('Affiliation');
1875      }
1876
1877      // remove d-appendix and d-footnote-list local styles
1878      $('d-appendix > style:first-child').remove();
1879      $('d-footnote-list > style:first-child').remove();
1880
1881      // move appendix-bottom entries to the bottom
1882      $('.appendix-bottom').appendTo('d-appendix').children().unwrap();
1883      $('.appendix-bottom').remove();
1884
1885      // hoverable references
1886      $('span.citation[data-cites]').each(function() {
1887        const citeChild = $(this).children()[0]
1888        // Do not process if @xyz has been used without escaping and without bibliography activated
1889        // https://github.com/rstudio/distill/issues/466
1890        if (citeChild === undefined) return true
1891
1892        if (citeChild.nodeName == "D-FOOTNOTE") {
1893          var fn = citeChild
1894          $(this).html(fn.shadowRoot.querySelector("sup"))
1895          $(this).id = fn.id
1896          fn.remove()
1897        }
1898        var refs = $(this).attr('data-cites').split(" ");
1899        var refHtml = refs.map(function(ref) {
1900          // Could use CSS.escape too here, we insure backward compatibility in navigator
1901          return "<p>" + $('div[id="ref-' + ref + '"]').html() + "</p>";
1902        }).join("\n");
1903        window.tippy(this, {
1904          allowHTML: true,
1905          content: refHtml,
1906          maxWidth: 500,
1907          interactive: true,
1908          interactiveBorder: 10,
1909          theme: 'light-border',
1910          placement: 'bottom-start'
1911        });
1912      });
1913
1914      // fix footnotes in tables (#411)
1915      // replacing broken distill.pub feature
1916      $('table d-footnote').each(function() {
1917        // we replace internal showAtNode methode which is triggered when hovering a footnote
1918        this.hoverBox.showAtNode = function(node) {
1919          // ported from https://github.com/distillpub/template/pull/105/files
1920          calcOffset = function(elem) {
1921              let x = elem.offsetLeft;
1922              let y = elem.offsetTop;
1923              // Traverse upwards until an `absolute` element is found or `elem`
1924              // becomes null.
1925              while (elem = elem.offsetParent && elem.style.position != 'absolute') {
1926                  x += elem.offsetLeft;
1927                  y += elem.offsetTop;
1928              }
1929
1930              return { left: x, top: y };
1931          }
1932          // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop
1933          const bbox = node.getBoundingClientRect();
1934          const offset = calcOffset(node);
1935          this.show([offset.left + bbox.width, offset.top + bbox.height]);
1936        }
1937      })
1938
1939      // clear polling timer
1940      clearInterval(tid);
1941
1942      // show body now that everything is ready
1943      on_load_complete();
1944    }
1945
1946    var tid = setInterval(distill_post_process, 50);
1947    distill_post_process();
1948
1949  }
1950
1951  function init_downlevel() {
1952
1953    init_common();
1954
1955     // insert hr after d-title
1956    $('.d-title').after($('<hr class="section-separator"/>'));
1957
1958    // check if we have authors
1959    var front_matter = JSON.parse($("#distill-front-matter").html());
1960    var have_authors = front_matter.authors && front_matter.authors.length > 0;
1961
1962    // manage byline/border
1963    if (!have_authors)
1964      $('.d-byline').remove();
1965    $('.d-byline').after($('<hr class="section-separator"/>'));
1966    $('.d-byline a').remove();
1967
1968    // remove toc
1969    $('.d-contents').remove();
1970
1971    // move appendix elements
1972    $('h1.appendix, h2.appendix').each(function(i, val) {
1973      $(this).changeElementType('h3');
1974    });
1975    $('h3.appendix').each(function(i, val) {
1976      $(this).nextUntil($('h1, h2, h3')).addBack().appendTo($('.d-appendix'));
1977    });
1978
1979
1980    // inject headers into references and footnotes
1981    var refs_header = $('<h3></h3>');
1982    refs_header.text('References');
1983    $('#refs').prepend(refs_header);
1984
1985    var footnotes_header = $('<h3></h3');
1986    footnotes_header.text('Footnotes');
1987    $('.footnotes').children('hr').first().replaceWith(footnotes_header);
1988
1989    // move appendix-bottom entries to the bottom
1990    $('.appendix-bottom').appendTo('.d-appendix').children().unwrap();
1991    $('.appendix-bottom').remove();
1992
1993    // remove appendix if it's empty
1994    if ($('.d-appendix').children().length === 0)
1995      $('.d-appendix').remove();
1996
1997    // prepend separator above appendix
1998    $('.d-appendix').before($('<hr class="section-separator" style="clear: both"/>'));
1999
2000    // trim code
2001    $('pre>code').each(function(i, val) {
2002      $(this).html($.trim($(this).html()));
2003    });
2004
2005    // move posts-container right before article
2006    $('.posts-container').insertBefore($('.d-article'));
2007
2008    $('body').addClass('downlevel');
2009
2010    on_load_complete();
2011  }
2012
2013
2014  function init_common() {
2015
2016    // jquery plugin to change element types
2017    (function($) {
2018      $.fn.changeElementType = function(newType) {
2019        var attrs = {};
2020
2021        $.each(this[0].attributes, function(idx, attr) {
2022          attrs[attr.nodeName] = attr.nodeValue;
2023        });
2024
2025        this.replaceWith(function() {
2026          return $("<" + newType + "/>", attrs).append($(this).contents());
2027        });
2028      };
2029    })(jQuery);
2030
2031    // prevent underline for linked images
2032    $('a > img').parent().css({'border-bottom' : 'none'});
2033
2034    // mark non-body figures created by knitr chunks as 100% width
2035    $('.layout-chunk').each(function(i, val) {
2036      var figures = $(this).find('img, .html-widget');
2037      // ignore leaflet img layers (#106)
2038      figures = figures.filter(':not(img[class*="leaflet"])')
2039      if ($(this).attr('data-layout') !== "l-body") {
2040        figures.css('width', '100%');
2041      } else {
2042        figures.css('max-width', '100%');
2043        figures.filter("[width]").each(function(i, val) {
2044          var fig = $(this);
2045          fig.css('width', fig.attr('width') + 'px');
2046        });
2047
2048      }
2049    });
2050
2051    // auto-append index.html to post-preview links in file: protocol
2052    // and in rstudio ide preview
2053    $('.post-preview').each(function(i, val) {
2054      if (window.location.protocol === "file:")
2055        $(this).attr('href', $(this).attr('href') + "index.html");
2056    });
2057
2058    // get rid of index.html references in header
2059    if (window.location.protocol !== "file:") {
2060      $('.distill-site-header a[href]').each(function(i,val) {
2061        $(this).attr('href', $(this).attr('href').replace(/^index[.]html/, "./"));
2062      });
2063    }
2064
2065    // add class to pandoc style tables
2066    $('tr.header').parent('thead').parent('table').addClass('pandoc-table');
2067    $('.kable-table').children('table').addClass('pandoc-table');
2068
2069    // add figcaption style to table captions
2070    $('caption').parent('table').addClass("figcaption");
2071
2072    // initialize posts list
2073    if (window.init_posts_list)
2074      window.init_posts_list();
2075
2076    // implmement disqus comment link
2077    $('.disqus-comment-count').click(function() {
2078      window.headroom_prevent_pin = true;
2079      $('#disqus_thread').toggleClass('hidden');
2080      if (!$('#disqus_thread').hasClass('hidden')) {
2081        var offset = $(this).offset();
2082        $(window).resize();
2083        $('html, body').animate({
2084          scrollTop: offset.top - 35
2085        });
2086      }
2087    });
2088  }
2089
2090  document.addEventListener('DOMContentLoaded', function() {
2091    if (is_downlevel_browser())
2092      init_downlevel();
2093    else
2094      window.addEventListener('WebComponentsReady', init_distill);
2095  });
2096
2097  </script>
2097
2098
2099  <!--/radix_placeholder_distill-->
2100  
2100<script src="site_libs/header-attrs-2.30/header-attrs.js"></script>
2100
2101  
2101<script src="site_libs/popper-2.6.0/popper.min.js"></script>
2101
2102  <link href="site_libs/tippy-6.2.7/tippy.css" rel="stylesheet" />
2103  <link href="site_libs/tippy-6.2.7/tippy-light-border.css" rel="stylesheet" />
2104  
2104<script src="site_libs/tippy-6.2.7/tippy.umd.min.js"></script>
2104
2105  
2105<script src="site_libs/anchor-4.2.2/anchor.min.js"></script>
2105
2106  
2106<script src="site_libs/bowser-1.9.3/bowser.min.js"></script>
2106
2107  
2107<script src="site_libs/webcomponents-2.0.0/webcomponents.js"></script>
2107
2108  
2108<script src="site_libs/distill-2.2.21/template.v2.js"></script>
2108
2109  <!--radix_placeholder_site_in_header-->
2110  <!--/radix_placeholder_site_in_header-->
2111
2112  <link rel="stylesheet" href="styles.css" type="text/css"/>
2113
2114</head>
2115
2116<body>
2117
2118<!--radix_placeholder_front_matter-->
2119
2120<script id="distill-front-matter" type="text/json">
2121{"title":"Research","authors":[]}
2122</script>
2122
2123
2124<!--/radix_placeholder_front_matter-->
2125<!--radix_placeholder_navigation_before_body-->
2126<header class="header header--fixed" role="banner">
2127<nav class="distill-site-nav distill-site-header">
2128<div class="nav-left">
2129<a href="index.html" class="title">Yingying Zhang</a>
2130<a href="index.html">Home</a>
2131<a href="Research.html">Research</a>
2132<a href="Teaching.html">Teaching</a>
2133</div>
2134<div class="nav-right">
2135<a href="javascript:void(0);" class="nav-toggle">&#9776;</a>
2136</div>
2137</nav>
2138</header>
2139<!--/radix_placeholder_navigation_before_body-->
2140<!--radix_placeholder_site_before_body-->
2141<!--/radix_placeholder_site_before_body-->
2142
2143<div class="d-title">
2144<h1>Research</h1>
2145
2146<!--radix_placeholder_categories-->
2147<!--/radix_placeholder_categories-->
2148
2149</div>
2150
2151
2152<div class="d-article">
2153<h2 id="research-interests">Research Interests</h2>
2154<ul>
2155<li>computational statistics</li>
2156<li>finite mixture modeling</li>
2157<li>model-based clustering</li>
2158<li>data visualization</li>
2159</ul>
2160<h2 id="publicationacceptance">Publication/Acceptance</h2>
2161<ul>
2162<li><p><strong>Zhang,Y.,</strong>,Zhu,X.,Tong,H., Melnykov,V.(2026)<br />
2163Model-based clustering of music pieces.<br />
2164<em>Pattern Recognition</em></p></li>
2165<li><p><strong>Zhang,Y.,</strong>, Melnykov,V. (2025)<br />
2166<a href="https://www.sciencedirect.com/science/article/pii/S003132032500809X">Modeling and clustering of heterogeneous multivariate categorical sequences</a>.<br />
2167<em>Pattern Recognition</em></p></li>
2168<li><p><strong>Zhang,Y.,</strong>, Melnykov,V., Zhu,X. (2025)<br />
2169<a href="https://link.springer.com/article/10.1007/s13171-025-00406-9">Study on the overlap in matrix-variate data with applications in discriminant analysis</a>.<br />
2170<em>Sankhya A</em></p></li>
2171<li><p><strong>Zhang,Y.,</strong>, Sarkar,S., Chen,Y., Zhu,X. (2024)<br />
2172<a href="https://link.springer.com/article/10.1007/s10618-024-01051-w">On regime changes in text data using hidden Markov model of contaminated vMF distribution</a>.<br />
2173<em>Data Mining and Knowledge Discovery</em></p></li>
2174<li><p><strong>Zhang,Y.,</strong>, Melnykov,V., Melnykov,I. (2023)<br />
2175<a href="https://link.springer.com/article/10.1007/s00357-023-09445-z">On model-based clustering of directional data with heavy tails</a>.<br />
2176<em>Journal of Classification</em></p></li>
2177<li><p><strong>Zhang,Y.,</strong>, Melnykov,V., Melnykov,I. (2022)<br />
2178<a href="https://journals.sagepub.com/doi/10.1177/1471082X21989170">Semi-supervised clustering of time-dependent categorical sequences with application to discovering education-based life pattern</a>.<br />
2179<em>Statistical Modelling</em></p></li>
2180<li><p><strong>Zhang,Y.,</strong>, Melnykov,V., Zhu,X. (2021)<br />
2181<a href="https://onlinelibrary.wiley.com/doi/abs/10.1002/sam.11502">Model-based clustering of time-dependent categorical sequences with application to the analysis of major life event patterns</a>.<br />
2182<em>Statistical Analysis and Data Mining</em></p></li>
2183<li><p>Chen,H., Zhu,C., <strong>Zhang,Y.,</strong> (2014)<br />
2184<a href="https://www.sciencedirect.com/science/article/pii/S0096300313011156">A note on exponential stability for impulsive neutral stochastic partial functional differential equations</a>.<br />
2185<em>Applied Mathematics and Computation</em></p></li>
2186</ul>
2187<h2 id="under-reviewrevision">Under Review/Revision</h2>
2188<ul>
2189<li><strong>Zhang,Y.,</strong>, Zhu,X.,<br />
2190Study on the overlap of finite mixture modeling of categorical sequences.<br />
2191Under revision at <em>Advances in Data Analysis and Classification</em></li>
2192</ul>
2193<h2 id="in-progress">In-progress</h2>
2194<ul>
2195<li><p>Melnykov,Y., <strong>Zhang,Y.,</strong>, Zheng, R.,<br />
2196Clustering analysis on the spatial-temporal and intensity patterns of tornado data in USA.</p></li>
2197<li><p>Chen, Y., <strong>Zhang, Y.,</strong>, Zhu, X., Tian, A.,<br />
2198The effect of AI actions between leading and following corporations.</p></li>
2199<li><p>Joint work with Sarkar,S., Zhu,X.<br />
2200On model-based clustering of multivariate categorical sequences with missing values.</p></li>
2201<li><p>Joint work with Su,H.<br />
2202Analysis of Reddit depression community support through text-based methods.</p></li>
2203<li><p>Joint work with Shields,B.<br />
2204On model-based clustering of dynamic multivariate categorical sequences.</p></li>
2205<li><p><strong>Zhang, Y.,</strong>
2206Study on the overlap of high-dimensional finite mixture modeling of Gaussian distributions.</p></li>
2207</ul>
2208<div class="sourceCode" id="cb1"><pre class="sourceCode r distill-force-highlighting-css"><code class="sourceCode r"></code></pre></div>
2209<!--radix_placeholder_article_footer-->
2210<!--/radix_placeholder_article_footer-->
2211</div>
2212
2213<div class="d-appendix">
2214</div>
2215
2216
2217<!--radix_placeholder_site_after_body-->
2218<!--/radix_placeholder_site_after_body-->
2219<!--radix_placeholder_appendices-->
2220<div class="appendix-bottom"></div>
2221<!--/radix_placeholder_appendices-->
2222<!--radix_placeholder_navigation_after_body-->
2223<!--/radix_placeholder_navigation_after_body-->
2224
2225</body>
2226
2227</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.