<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://eliascis.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://eliascis.github.io/" rel="alternate" type="text/html" /><updated>2026-02-06T04:16:10+00:00</updated><id>https://eliascis.github.io/feed.xml</id><title type="html">Elías Cisneros</title><subtitle>My name is Elías Cisneros and I am an Assistant Professor of Political Economy and Sustainability.</subtitle><author><name>Elías Cisneros</name></author><entry><title type="html">Shift-share</title><link href="https://eliascis.github.io/media/shif-share/" rel="alternate" type="text/html" title="Shift-share" /><published>2024-02-09T00:00:00+00:00</published><updated>2024-02-09T00:00:00+00:00</updated><id>https://eliascis.github.io/media/shif-share</id><content type="html" xml:base="https://eliascis.github.io/media/shif-share/"><![CDATA[<h2 id="to-start-with">To start with:</h2>

<p><a href="https://mixtape.scunning.com/07-instrumental_variables#bartik-instruments">The Mixtape</a></p>

<p><a href="https://www.aeaweb.org/articles?id=10.1257/aer.20181047">Bartik Instruments: What, When, Why, and How</a></p>

<h2 id="more-detail-with">More detail with:</h2>
<ul>
  <li>
    <p><a href="https://doi.org/10.1257/aer.20181047">https://doi.org/10.1257/aer.20181047</a></p>
  </li>
  <li>
    <p><a href="https://doi.org/10.1093/qje/qjz025">https://doi.org/10.1093/qje/qjz025</a></p>
  </li>
  <li>
    <p><a href="https://doi.org/10.1093/restud/rdab030">https://doi.org/10.1093/restud/rdab030</a></p>
  </li>
</ul>

<h2 id="reading">Reading:</h2>

<p><a href="https://eliascis.github.io/assets/teaching/teaching-general/shift-share.bib" target="_blank">shift-share.bib</a></p>]]></content><author><name>Elías Cisneros</name></author><category term="media" /><summary type="html"><![CDATA[Some shift-share links]]></summary></entry><entry><title type="html">Corruption and deforestation</title><link href="https://eliascis.github.io/media/forestry-corruption/" rel="alternate" type="text/html" title="Corruption and deforestation" /><published>2023-05-14T00:00:00+00:00</published><updated>2023-05-14T00:00:00+00:00</updated><id>https://eliascis.github.io/media/forestry-corruption</id><content type="html" xml:base="https://eliascis.github.io/media/forestry-corruption/"><![CDATA[<!--Please find a collection of corruption scandals related to deforesation and agricultural expansion across the tropics at (this google docs document). Please feel free to add new scandals or send me information via (email).
-->

<p>This is a collection of corruption scandals and newspaper articles related to deforestation and agriculture in tropical forest countries. If you have additional links please send them to me.</p>

<h2 id="indonesia">Indonesia</h2>

<ul>
  <li>
    <p>Nine cases of corruption in the forestry sector,
<em>kompas.com</em>,
3/15/2010,
<a href="https://nasional.kompas.com/read/2010/03/16/15081665/Inilah.Sembilan.Kasus.Korupsi.di.Sektor.Kehutanan" target="_blank">link</a>.</p>
  </li>
  <li>
    <p>Corruption in Forest Business Permits, Indonesia’s Corruption Eradication Commission (KPK) Arrests Siak’s District Mayor,
<em>Republika</em>,
3/25/2011,
<a href="https://republika.co.id/berita/lim9se/korupsi-izin-usaha-hutan-kpk-tahan-bupati-siak" target="_blank">link</a>.</p>
  </li>
  <li>
    <p>PTPN V (Oil palm company) Found Guilty of Setting Up Palm Oil Plantation without Permit,
<em>Republika</em>,
4/14/2013,
<a href="https://republika.co.id/berita/n3ykc7/ptpn-v-dinyatakan-bersalah-buat-kebun-sawit-tanpa-izin" target="_blank">link</a>.</p>
  </li>
  <li>
    <p>NGO Condemns Oil Palm Plantation in Wildlife Reserve,
<em>Antara Sulateng</em>,
12/15/2014,
<a href="https://sulteng.antaranews.com/berita/17104/lsm-kecam-perkebunan-sawit-di-suaka-margasatwa" target="_blank">link</a>.</p>
  </li>
  <li>
    <p>How corrupt elections fuel the sell-offof Indonesia’s natural resources,
<em>Mongabay</em>,
6/7/2018,
<a href="https://news.mongabay.com/2018/06/how-corrupt-elections-fuel-the-sell-off-of-indonesias-natural-resources/" target="_blank">link</a>.</p>
  </li>
  <li>
    <p>Rita Widyasari, District Mayor of Kukar, Sentenced to 15 years in Jail,
<em>CNN Indonesia</em>,
6/25/2018,
<a href="https://www.cnnindonesia.com/nasional/20180625164855-12-308887/bupati-kukar-rita-widyasari-dituntut-15-tahun-penjara" target="_blank">link</a>.</p>
  </li>
  <li>
    <p>The Political Corruption of Palm oil Licensing,
<em>Tempo</em>,
11/23/2018,
<a href="https://majalah.tempo.co/read/kolom/156643/korupsi-politik-perizinan-sawit" target="_blank">link</a>.</p>
  </li>
  <li>
    <p>Palm Oil Permit Bribery Case: Two Members of the Central Kalimantan DPRD (The Regional People’s Representative Council) Sentenced to 4 years in jail,
<em>CNN Indonesia</em>,
7/4/2019,
<a href="https://www.cnnindonesia.com/nasional/20190704020417-12-408899/kasus-suap-izin-sawit-2-anggota-dprd-kalteng-divonis-4-tahun" target="_blank">link</a>.</p>
  </li>
  <li>
    <p>Palang Karaya Kejari district prosecutor’s office investigates the Environment Office of Central Kalimantan Province in relation to corruption,
<em>bisnis.com</em>,
9/20/2019,
<a href="https://kalimantan.bisnis.com/read/20190920/407/1150796/kejari-palangka-raya-geledah-kantor-dinas-terkait-korupsi" target="_blank">link</a>.</p>
  </li>
  <li>
    <p>Western Kalimantan National Land Agency (BPN) Bribery case: Indonesia’s Corruption Eradication Commission (KPK) investigates Palm Oil Boss,
<em>Suara Pemred</em>,
12/15/2019,
<a href="https://www.suarapemredkalbar.com/read/ponticity/15122019/kasus-gratifikasi-bpn-kalbar-kpk-kantongi-nama-bos-sawit" target="_blank">link</a>.</p>
  </li>
  <li>
    <p>Indonesia’s Corruption Eradication Commission (KPK) detains Suspect in Forest Use Change Case,
<em>kompass.com</em>,
6/4/2020,
<a href="https://nasional.kompas.com/read/2020/04/06/06255721/kpk-tahan-tersangka-kasus-alih-fungsi-hutan" target="_blank">link</a>.</p>
  </li>
  <li>
    <p>Indonesia’s Corruption Eradication Commission (KPK) Confiscated Nurhadi’s Palm Oil Plantation in North Sumatra,
<em>CNN Indonesia</em>,
9/3/2020,
<a href="https://www.cnnindonesia.com/nasional/20200903101803-12-542291/kpk-kembali-sita-kebun-kelapa-sawit-nurhadi-di-sumut" target="_blank">link</a>.</p>
  </li>
  <li>
    <p>Direct Elections for Local Leaders (Pilkada) and Palm Oil Concession,
<em>kompas.com</em>,
9/23/2020,
<a href="https://www.kompas.com/tren/read/2020/09/23/085738165/pilkada-dan-konsesi-sawit?page=all" target="_blank">link</a>.</p>
  </li>
</ul>]]></content><author><name>Elías Cisneros</name></author><category term="media" /><summary type="html"><![CDATA[A collection of corruption scandals and newspaper articles related to deforestation.]]></summary></entry><entry><title type="html">*Media:* Publication highlighted in Nature Climate Change</title><link href="https://eliascis.github.io/media/defcycle-ncc-highlight/" rel="alternate" type="text/html" title="*Media:* Publication highlighted in Nature Climate Change" /><published>2021-07-09T00:00:00+00:00</published><updated>2021-07-09T00:00:00+00:00</updated><id>https://eliascis.github.io/media/defcycle-ncc-highlight</id><content type="html" xml:base="https://eliascis.github.io/media/defcycle-ncc-highlight/"><![CDATA[<p>The new issue of Nature Climate Change provides a wonderful short presentation of our paper <em>“Palm oil and the politics of deforestation”</em> (<a href="https://doi.org/10.1016/j.jeem.2021.102453">JEEM, 2021</a>) in it’s <em>“research highlights”</em>. You find the article <a href="https://doi.org/10.1038/s41558-021-01096-5">here</a> or you can download it <a href="https://rdcu.be/cnZqf">here</a>. Many thanks to the editors of NCC, especially to <a href="https://www.linkedin.com/in/lingxiao-yan-8b58374a/">Lingxiao Yan</a> for reaching out.</p>]]></content><author><name>Elías Cisneros</name></author><category term="media" /><summary type="html"><![CDATA[NCC presents our political palm-oil paper in its 'research highlights'.]]></summary></entry><entry><title type="html">*Presentation:* EPG Online: Palm oil and the politics of deforestation</title><link href="https://eliascis.github.io/defcycle-presentation/" rel="alternate" type="text/html" title="*Presentation:* EPG Online: Palm oil and the politics of deforestation" /><published>2021-07-08T00:00:00+00:00</published><updated>2021-07-08T00:00:00+00:00</updated><id>https://eliascis.github.io/defcycle-presentation</id><content type="html" xml:base="https://eliascis.github.io/defcycle-presentation/"><![CDATA[<p>Find my presentation at EPG Online on <a href="https://www.youtube.com/watch?v=J7jrCi3jT28">YouTube</a> - where I present my now published paper <em>“Palm oil and the politics of deforestation in Indonesia”</em> (<a href="https://doi.org/10.1016/j.jeem.2021.102453">JEEM, 2021</a>).
The <a href="https://www.pecclab.com/project/epg-online/">Environmental Politics and Governance (EPG) Online</a> is an exciting webinar with a fantastic  group of researchers on environmental politics and governance. I received many highly valuable comments. Many thanks to <a href="http://www.liambeisermcgrath.com/">Liam F. Beiser-McGrath</a> for organizing this seminar series!!</p>]]></content><author><name>Elías Cisneros</name></author><category term="presentation" /><summary type="html"><![CDATA[Political and agricultural incentives reinforce each other leading to 18% more deforestation in pre-election years.]]></summary></entry><entry><title type="html">*Publication:* Palm oil and the politics of deforestation in Indonesia</title><link href="https://eliascis.github.io/research/defcycle/" rel="alternate" type="text/html" title="*Publication:* Palm oil and the politics of deforestation in Indonesia" /><published>2021-04-30T00:00:00+00:00</published><updated>2021-04-30T00:00:00+00:00</updated><id>https://eliascis.github.io/research/defcycle</id><content type="html" xml:base="https://eliascis.github.io/research/defcycle/"><![CDATA[<p><strong>Cisneros, E</strong>., K. Kis-Katos, and N. Nuryartono (2021): Palm Oil and the Politics of Deforestation in Indonesia. <em>Journal of Environmental Economics and Management</em> 108: 102,453, <a href="https://doi.org/10.1016/j.jeem.2021.102453">https://doi.org/10.1016/j.jeem.2021.102453</a>.</p>

<h2 id="abstract">Abstract</h2>
<p class="text-justify">This paper studies the interactions between political and economic incentives to foster forest conversion in Indonesian districts. Using a district–level panel data set from 2001 to 2016, we analyze variation in remotely sensed forest losses as well as measures of land-use licensing. We link these outcomes to political incentives arising before idiosyncratically–timed local mayoral elections as well as to price exposure measures based on oil palm soil suitability combined with global price variations for palm oil. Empirical results document increases of about 4% in deforestation in the year prior to local mayoral elections on average. Additionally, palm oil plays a crucial role in driving deforestation dynamics. Deforestation rates increase by 7% in places that experience a one standard deviation increase in local price exposure, but no upcoming elections. These effects are amplified to almost 19% larger forest losses in places that experience pre-election years and a standard deviation higher palm oil price exposure at the same time. We thus find clear evidence for economic and political incentives reinforcing each other as drivers of forest loss and land conversion for oil palm cultivation.</p>

<p>https://doi.org/10.1016/j.jeem.2021.102453</p>]]></content><author><name>Elías Cisneros</name></author><category term="research" /><summary type="html"><![CDATA[Deforestation increases in the year before local district elections especially in locations facing high incentives to plant oil palm.]]></summary></entry><entry><title type="html">*Honor:* Received the Marie Skłodowska-Curie fellowship</title><link href="https://eliascis.github.io/msca-honor/" rel="alternate" type="text/html" title="*Honor:* Received the Marie Skłodowska-Curie fellowship" /><published>2021-02-09T00:00:00+00:00</published><updated>2021-02-09T00:00:00+00:00</updated><id>https://eliascis.github.io/msca-honor</id><content type="html" xml:base="https://eliascis.github.io/msca-honor/"><![CDATA[<p>I am incredibly excited to announce that I received the Marie Skłodowska-Curie Global Fellowship (MSCA-IF-GF).
Together with <a href="https://www.uni-goettingen.de/de/545784.html">Prof. Krisztina Kis-Katos</a> (University of Göttingen) and <a href="https://liberalarts.utexas.edu/geography/faculty/ea9267">Prof. Eugenio Arima</a> (University of Texas at Austin), I will work on the project:</p>

<p><strong>From human to planetary health: Global land-use impacts of the COVID-19 pandemic (<a href="http://planet-health.eu/">PlanetHealth</a>)</strong></p>

<p>These are unbelievable news. I am extremely happy and still recuperating from the shock. These weeks and months had been full of doubts, uncertainties, and fears about the future - especially living through these crazy political and pandemic crises.</p>

<p>I feel very honored and want to thank the reviewers of the proposal and the <em>European Commission</em> for finding this project interesting, relevant, and trustworthy.
I am very thankful to my colleagues in Göttingen for all their help. Without their scientific input and discussions during the last years, I wouldn’t have developed this research idea and this particular way of proposing it. I appreciate all their emotional support and the positivism that they give me.
I am incredibly thankful to Ms. Ricarda Blumentritt and Ms. Laura Hoffmann from the International Office for their dedicated and excellent support in the application process.
Particularly, I want to wholeheartedly thank my dear friends, Regine Weber, Alin Radu, Jan Börner, and my financée, Stephanie Vargas. Without their precious input, reviewing, and editing of the proposal, I would have been completely lost and never been able to write a successful proposal.</p>

<p>Some links related to the funding:</p>

<ul>
  <li>Project link: <a href="http://planet-health.eu">www.planet-health.eu</a></li>
</ul>]]></content><author><name>Elías Cisneros</name></author><category term="msca" /><summary type="html"><![CDATA[We won the MSCA 2020 fellowship with the project PlanetHealth.]]></summary></entry><entry><title type="html">*Code:* Bulk regressions</title><link href="https://eliascis.github.io/code/bulk-regressions" rel="alternate" type="text/html" title="*Code:* Bulk regressions" /><published>2020-12-18T00:00:00+00:00</published><updated>2020-12-18T00:00:00+00:00</updated><id>https://eliascis.github.io/code/bulk-regressions</id><content type="html" xml:base="https://eliascis.github.io/code/bulk-regressions"><![CDATA[<p>See output <a href="https://eliascis.github.io/assets/files/bulk.est.newest.html" target="_blank">here</a>.</p>

<p>Download R script <a href="https://eliascis.github.io/assets/files/bulk-regressions.R" target="_blank">here</a>.</p>

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

</span><span class="c1">#download data</span><span class="w">
</span><span class="n">t</span><span class="o">&lt;-</span><span class="n">tempfile</span><span class="p">()</span><span class="w">
</span><span class="n">tt</span><span class="o">&lt;-</span><span class="n">tempdir</span><span class="p">()</span><span class="w">
</span><span class="n">download.file</span><span class="p">(</span><span class="s2">"https://doi.org/10.1371/journal.pone.0136402.s001"</span><span class="p">,</span><span class="n">destfile</span><span class="o">=</span><span class="n">t</span><span class="p">)</span><span class="w">
</span><span class="n">unzip</span><span class="p">(</span><span class="n">zipfile</span><span class="o">=</span><span class="n">t</span><span class="p">,</span><span class="n">files</span><span class="o">=</span><span class="s2">"blacklist_data_20150623.csv"</span><span class="p">,</span><span class="n">exdir</span><span class="o">=</span><span class="n">tt</span><span class="p">)</span><span class="w">
</span><span class="c1">#read</span><span class="w">
</span><span class="n">d</span><span class="o">&lt;-</span><span class="n">read.csv</span><span class="p">(</span><span class="n">file.path</span><span class="p">(</span><span class="n">tt</span><span class="p">,</span><span class="s2">"blacklist_data_20150623.csv"</span><span class="p">))</span><span class="w">
</span><span class="c1">#new variables</span><span class="w">
</span><span class="n">d</span><span class="o">$</span><span class="n">id</span><span class="o">&lt;-</span><span class="n">d</span><span class="o">$</span><span class="n">municip_geocode_id</span><span class="w">
</span><span class="n">d</span><span class="o">$</span><span class="n">treat</span><span class="o">&lt;-</span><span class="n">I</span><span class="p">(</span><span class="n">d</span><span class="o">$</span><span class="n">emb_cont_share</span><span class="p">)</span><span class="o">*</span><span class="m">1</span><span class="w">
</span><span class="c1">#minimal data set</span><span class="w">
</span><span class="n">vlist</span><span class="o">&lt;-</span><span class="nf">c</span><span class="p">(</span><span class="w">
  </span><span class="s2">"id"</span><span class="p">,</span><span class="s2">"year"</span><span class="p">,</span><span class="s2">"def_area"</span><span class="p">,</span><span class="s2">"treat"</span><span class="p">,</span><span class="s2">"gdppc_l1"</span><span class="p">,</span><span class="s2">"nibamafines_no_l1"</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="n">d</span><span class="o">&lt;-</span><span class="n">d</span><span class="p">[,</span><span class="n">vlist</span><span class="p">]</span><span class="w">
</span><span class="c1">#logarithmic transformations (inv. hyp. sine)</span><span class="w">
</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">v</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="s2">"def_area"</span><span class="p">,</span><span class="s2">"treat"</span><span class="p">,</span><span class="s2">"gdppc_l1"</span><span class="p">,</span><span class="s2">"nibamafines_no_l1"</span><span class="p">)){</span><span class="w">
  </span><span class="n">d</span><span class="p">[,</span><span class="n">paste0</span><span class="p">(</span><span class="s2">"asinh."</span><span class="p">,</span><span class="n">v</span><span class="p">)]</span><span class="o">&lt;-</span><span class="nf">asinh</span><span class="p">(</span><span class="n">d</span><span class="p">[,</span><span class="n">v</span><span class="p">])</span><span class="w">
</span><span class="p">}</span><span class="w">


</span><span class="c1">########################</span><span class="w">
</span><span class="c1">### sample selection ###</span><span class="w">
</span><span class="c1">########################</span><span class="w">
</span><span class="c1">##all</span><span class="w">
</span><span class="n">d.all</span><span class="o">&lt;-</span><span class="n">d</span><span class="w">
</span><span class="c1">##subset</span><span class="w">
</span><span class="n">d</span><span class="o">&lt;-</span><span class="n">d.all</span><span class="w">
</span><span class="n">i</span><span class="o">&lt;-</span><span class="n">which</span><span class="p">(</span><span class="n">d</span><span class="o">$</span><span class="n">year</span><span class="o">&gt;=</span><span class="m">2004</span><span class="p">)</span><span class="w">
</span><span class="n">d</span><span class="o">&lt;-</span><span class="n">d</span><span class="p">[</span><span class="n">i</span><span class="p">,]</span><span class="w">
</span><span class="n">d.base</span><span class="o">&lt;-</span><span class="n">d</span><span class="w">

</span><span class="c1">##########################</span><span class="w">
</span><span class="c1">### estimation formula ###</span><span class="w">
</span><span class="c1">##########################</span><span class="w">
</span><span class="n">f.estimation</span><span class="o">&lt;-</span><span class="k">function</span><span class="p">(</span><span class="n">m</span><span class="p">){</span><span class="w">
    </span><span class="c1"># m&lt;-modela</span><span class="w">
    </span><span class="c1">##FE normal</span><span class="w">
    </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">m</span><span class="o">$</span><span class="n">model</span><span class="o">==</span><span class="s2">"fe"</span><span class="p">){</span><span class="w">
      </span><span class="n">f</span><span class="o">&lt;-</span><span class="n">as.formula</span><span class="p">(</span><span class="n">paste</span><span class="p">(</span><span class="n">m</span><span class="o">$</span><span class="n">dep</span><span class="p">,</span><span class="s2">"~"</span><span class="p">,</span><span class="n">paste</span><span class="p">(</span><span class="n">get</span><span class="p">(</span><span class="n">m</span><span class="o">$</span><span class="n">cov</span><span class="p">),</span><span class="n">collapse</span><span class="o">=</span><span class="s2">"+"</span><span class="p">),</span><span class="s2">"| "</span><span class="p">,</span><span class="n">m</span><span class="o">$</span><span class="n">fe</span><span class="p">,</span><span class="s2">" | "</span><span class="p">,</span><span class="n">m</span><span class="o">$</span><span class="n">ivs</span><span class="p">,</span><span class="s2">" | "</span><span class="p">,</span><span class="n">m</span><span class="o">$</span><span class="n">cluster</span><span class="p">))</span><span class="w">
      </span><span class="n">dd</span><span class="o">&lt;-</span><span class="n">get</span><span class="p">(</span><span class="n">m</span><span class="o">$</span><span class="n">sample</span><span class="p">)</span><span class="w">
      </span><span class="n">e</span><span class="o">&lt;-</span><span class="n">felm</span><span class="p">(</span><span class="n">f</span><span class="p">,</span><span class="n">data</span><span class="o">=</span><span class="n">dd</span><span class="p">)</span><span class="w">
      </span><span class="c1"># s&lt;-summary(e)</span><span class="w">
    </span><span class="p">}</span><span class="w">
    </span><span class="c1">##FE weighted by deforestation probablity</span><span class="w">
    </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">m</span><span class="o">$</span><span class="n">model</span><span class="o">==</span><span class="s2">"fe.wp"</span><span class="p">){</span><span class="w">
      </span><span class="c1"># print("fe weighted by pre-def-prob")</span><span class="w">
      </span><span class="c1"># wtsin&lt;-x$data$weight * x$data$predefprob</span><span class="w">
      </span><span class="c1"># e&lt;-felm(x$formula,data=x$data,weights=wtsin)</span><span class="w">
      </span><span class="c1"># s&lt;-summary(e)</span><span class="w">
    </span><span class="p">}</span><span class="w">
    </span><span class="c1">##RE normal</span><span class="w">
    </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">m</span><span class="o">$</span><span class="n">model</span><span class="o">==</span><span class="s2">"re"</span><span class="p">){</span><span class="w">
      </span><span class="c1"># print("re")</span><span class="w">
      </span><span class="c1"># e&lt;-plm::plm(x$formula,data=x$data,model="random")</span><span class="w">
      </span><span class="c1"># e&lt;-plm::plm(f,data=x$data,model="random")</span><span class="w">
      </span><span class="c1"># s&lt;-summary(e)</span><span class="w">
    </span><span class="p">}</span><span class="w">

    </span><span class="nf">return</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="w">
</span><span class="p">}</span><span class="w">


</span><span class="c1">######################################</span><span class="w">
</span><span class="c1">##### first step single regression ###</span><span class="w">
</span><span class="c1">######################################</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="c1">#covariate list</span><span class="w">
</span><span class="n">cov.01</span><span class="o">&lt;-</span><span class="nf">c</span><span class="p">(</span><span class="s2">"treat"</span><span class="p">,</span><span class="s2">"asinh.gdppc_l1"</span><span class="p">,</span><span class="s2">"asinh.nibamafines_no_l1"</span><span class="p">)</span><span class="w">
</span><span class="c1">##set parameters</span><span class="w">
</span><span class="n">m</span><span class="o">&lt;-</span><span class="nf">list</span><span class="p">(</span><span class="w">
  </span><span class="c1">#dependent</span><span class="w">
  </span><span class="s2">"asinh.def_area"</span><span class="p">,</span><span class="w">
  </span><span class="c1">#covariates</span><span class="w">
  </span><span class="s2">"cov.01"</span><span class="p">,</span><span class="w">
  </span><span class="c1">#sample</span><span class="w">
  </span><span class="s2">"d.all"</span><span class="p">,</span><span class="w">
  </span><span class="c1">#model</span><span class="w">
  </span><span class="s2">"fe"</span><span class="p">,</span><span class="w">
  </span><span class="c1">#fixed effects</span><span class="w">
  </span><span class="s2">"id + year"</span><span class="p">,</span><span class="w">
  </span><span class="c1">#ivs</span><span class="w">
  </span><span class="s2">"0"</span><span class="p">,</span><span class="w">
  </span><span class="c1">#cluster variables</span><span class="w">
  </span><span class="s2">"id"</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="nf">names</span><span class="p">(</span><span class="n">m</span><span class="p">)</span><span class="o">&lt;-</span><span class="nf">c</span><span class="p">(</span><span class="s2">"dep"</span><span class="p">,</span><span class="s2">"cov"</span><span class="p">,</span><span class="s2">"sample"</span><span class="p">,</span><span class="s2">"model"</span><span class="p">,</span><span class="s2">"fe"</span><span class="p">,</span><span class="s2">"ivs"</span><span class="p">,</span><span class="s2">"cluster"</span><span class="p">)</span><span class="w">
</span><span class="n">m</span><span class="w">
</span><span class="c1">#model specification</span><span class="w">
</span><span class="n">model.first</span><span class="o">&lt;-</span><span class="n">m</span><span class="w">

</span><span class="c1">#estimate</span><span class="w">
</span><span class="n">e</span><span class="o">&lt;-</span><span class="n">f.estimation</span><span class="p">(</span><span class="n">model.first</span><span class="p">)</span><span class="w">
</span><span class="n">summary</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="w">
</span><span class="p">}</span><span class="w">

</span><span class="c1">######################################################</span><span class="w">
</span><span class="c1">#### looping over covariate and dependent list #######</span><span class="w">
</span><span class="c1">######################################################</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="c1">##set of covariates</span><span class="w">
</span><span class="c1">#delete previous covariates</span><span class="w">
</span><span class="n">ls</span><span class="p">()[</span><span class="n">grep</span><span class="p">(</span><span class="s2">"cov.[0-9][0-9]"</span><span class="p">,</span><span class="n">ls</span><span class="p">())]</span><span class="w">
</span><span class="n">rm</span><span class="p">(</span><span class="n">list</span><span class="o">=</span><span class="n">ls</span><span class="p">()[</span><span class="n">grep</span><span class="p">(</span><span class="s2">"cov.[0-9][0-9]"</span><span class="p">,</span><span class="n">ls</span><span class="p">())])</span><span class="w">
</span><span class="c1">#set covariates</span><span class="w">
</span><span class="n">cov.01</span><span class="o">&lt;-</span><span class="nf">c</span><span class="p">(</span><span class="s2">"treat"</span><span class="p">,</span><span class="s2">"asinh.gdppc_l1"</span><span class="p">)</span><span class="w">
</span><span class="n">cov.02</span><span class="o">&lt;-</span><span class="nf">c</span><span class="p">(</span><span class="s2">"treat"</span><span class="p">,</span><span class="s2">"asinh.gdppc_l1"</span><span class="p">,</span><span class="s2">"asinh.nibamafines_no_l1"</span><span class="p">)</span><span class="w">

</span><span class="c1">##models</span><span class="w">
</span><span class="n">g</span><span class="o">&lt;-</span><span class="nf">list</span><span class="p">(</span><span class="w">
  </span><span class="nf">list</span><span class="p">(</span><span class="s2">"asinh.def_area"</span><span class="p">,</span><span class="s2">"cov.01"</span><span class="p">,</span><span class="s2">"d.all"</span><span class="p">,</span><span class="s2">"fe"</span><span class="p">,</span><span class="s2">"id + year"</span><span class="p">,</span><span class="s2">"0"</span><span class="p">,</span><span class="s2">"id"</span><span class="p">),</span><span class="w">
  </span><span class="nf">list</span><span class="p">(</span><span class="s2">"asinh.def_area"</span><span class="p">,</span><span class="s2">"cov.02"</span><span class="p">,</span><span class="s2">"d.all"</span><span class="p">,</span><span class="s2">"fe"</span><span class="p">,</span><span class="s2">"id + year"</span><span class="p">,</span><span class="s2">"0"</span><span class="p">,</span><span class="s2">"id"</span><span class="p">),</span><span class="w">
  </span><span class="nf">list</span><span class="p">(</span><span class="s2">"log(def_area+1)"</span><span class="p">,</span><span class="s2">"cov.01"</span><span class="p">,</span><span class="s2">"d.all"</span><span class="p">,</span><span class="s2">"fe"</span><span class="p">,</span><span class="s2">"id + year"</span><span class="p">,</span><span class="s2">"0"</span><span class="p">,</span><span class="s2">"id"</span><span class="p">),</span><span class="w">
  </span><span class="nf">list</span><span class="p">(</span><span class="s2">"log(def_area+1)"</span><span class="p">,</span><span class="s2">"cov.02"</span><span class="p">,</span><span class="s2">"d.all"</span><span class="p">,</span><span class="s2">"fe"</span><span class="p">,</span><span class="s2">"id + year"</span><span class="p">,</span><span class="s2">"0"</span><span class="p">,</span><span class="s2">"id"</span><span class="p">)</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="c1">#naming parameters</span><span class="w">
</span><span class="n">g</span><span class="o">&lt;-</span><span class="n">lapply</span><span class="p">(</span><span class="n">g</span><span class="p">,</span><span class="k">function</span><span class="p">(</span><span class="n">m</span><span class="p">){</span><span class="nf">names</span><span class="p">(</span><span class="n">m</span><span class="p">)</span><span class="o">&lt;-</span><span class="nf">c</span><span class="p">(</span><span class="s2">"dep"</span><span class="p">,</span><span class="s2">"cov"</span><span class="p">,</span><span class="s2">"sample"</span><span class="p">,</span><span class="s2">"model"</span><span class="p">,</span><span class="s2">"fe"</span><span class="p">,</span><span class="s2">"ivs"</span><span class="p">,</span><span class="s2">"cluster"</span><span class="p">);</span><span class="nf">return</span><span class="p">(</span><span class="n">m</span><span class="p">)})</span><span class="w">
</span><span class="c1">#naming models (could be put in a function)</span><span class="w">
</span><span class="n">n</span><span class="o">&lt;-</span><span class="n">unlist</span><span class="p">(</span><span class="n">lapply</span><span class="p">(</span><span class="n">g</span><span class="p">,</span><span class="k">function</span><span class="p">(</span><span class="n">x</span><span class="p">){</span><span class="n">x</span><span class="p">[[</span><span class="s2">"dep"</span><span class="p">]]}))</span><span class="w">
</span><span class="n">n</span><span class="o">&lt;-</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"\\("</span><span class="p">,</span><span class="s2">"."</span><span class="p">,</span><span class="n">n</span><span class="p">)</span><span class="w">
</span><span class="n">n</span><span class="o">&lt;-</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"\\)"</span><span class="p">,</span><span class="s2">"."</span><span class="p">,</span><span class="n">n</span><span class="p">)</span><span class="w">
</span><span class="n">n</span><span class="o">&lt;-</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"\\.$"</span><span class="p">,</span><span class="s2">""</span><span class="p">,</span><span class="n">n</span><span class="p">)</span><span class="w">
</span><span class="n">n</span><span class="o">&lt;-</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"\\+"</span><span class="p">,</span><span class="s2">""</span><span class="p">,</span><span class="n">n</span><span class="p">)</span><span class="w">
</span><span class="n">n1</span><span class="o">&lt;-</span><span class="n">n</span><span class="w">
</span><span class="n">n</span><span class="o">&lt;-</span><span class="n">unlist</span><span class="p">(</span><span class="n">lapply</span><span class="p">(</span><span class="n">g</span><span class="p">,</span><span class="k">function</span><span class="p">(</span><span class="n">x</span><span class="p">){</span><span class="n">x</span><span class="p">[[</span><span class="s2">"sample"</span><span class="p">]]}))</span><span class="w">
</span><span class="n">n2</span><span class="o">&lt;-</span><span class="n">n</span><span class="w">
</span><span class="n">n</span><span class="o">&lt;-</span><span class="n">unlist</span><span class="p">(</span><span class="n">lapply</span><span class="p">(</span><span class="n">g</span><span class="p">,</span><span class="k">function</span><span class="p">(</span><span class="n">x</span><span class="p">){</span><span class="n">x</span><span class="p">[[</span><span class="s2">"cov"</span><span class="p">]]}))</span><span class="w">
</span><span class="n">n3</span><span class="o">&lt;-</span><span class="n">n</span><span class="w">
</span><span class="n">n</span><span class="o">&lt;-</span><span class="n">cbind</span><span class="p">(</span><span class="n">n1</span><span class="p">,</span><span class="n">n2</span><span class="p">,</span><span class="n">n3</span><span class="p">)</span><span class="w">
</span><span class="n">n</span><span class="o">&lt;-</span><span class="n">paste</span><span class="p">(</span><span class="n">n</span><span class="p">[,</span><span class="m">1</span><span class="p">],</span><span class="n">n</span><span class="p">[,</span><span class="m">2</span><span class="p">],</span><span class="n">n</span><span class="p">[,</span><span class="m">3</span><span class="p">],</span><span class="n">sep</span><span class="o">=</span><span class="s2">"-"</span><span class="p">)</span><span class="w">
</span><span class="nf">names</span><span class="p">(</span><span class="n">g</span><span class="p">)</span><span class="o">&lt;-</span><span class="n">n</span><span class="w">
</span><span class="n">modelgroup</span><span class="o">&lt;-</span><span class="n">g</span><span class="w">

</span><span class="c1">##estimating</span><span class="w">
</span><span class="n">elist</span><span class="o">&lt;-</span><span class="n">lapply</span><span class="p">(</span><span class="w">
  </span><span class="n">modelgroup</span><span class="p">,</span><span class="w">
  </span><span class="n">f.estimation</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="n">lapply</span><span class="p">(</span><span class="n">elist</span><span class="p">,</span><span class="n">summary</span><span class="p">)</span><span class="w">

</span><span class="p">}</span><span class="w">



</span><span class="c1">################################</span><span class="w">
</span><span class="c1">### html output in one table ###</span><span class="w">
</span><span class="c1">################################</span><span class="w">
</span><span class="c1">#create table</span><span class="w">
</span><span class="n">a</span><span class="o">&lt;-</span><span class="n">htmlreg</span><span class="p">(</span><span class="w">
  </span><span class="n">elist</span><span class="p">,</span><span class="w">
  </span><span class="n">stars</span><span class="o">=</span><span class="nf">c</span><span class="p">(</span><span class="m">0.01</span><span class="p">,</span><span class="m">0.05</span><span class="p">,</span><span class="m">0.1</span><span class="p">),</span><span class="w">
  </span><span class="n">digits</span><span class="o">=</span><span class="m">3</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="n">html.link</span><span class="o">&lt;-</span><span class="n">tempfile</span><span class="p">(</span><span class="n">fileext</span><span class="o">=</span><span class="s2">".html"</span><span class="p">)</span><span class="w">
</span><span class="n">cat</span><span class="p">(</span><span class="w">
  </span><span class="n">file</span><span class="o">=</span><span class="n">html.link</span><span class="p">,</span><span class="w">
  </span><span class="n">a</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="n">clipr</span><span class="o">::</span><span class="n">write_clip</span><span class="p">(</span><span class="n">html.link</span><span class="p">)</span><span class="w">
</span><span class="n">file.copy</span><span class="p">(</span><span class="n">html.link</span><span class="p">,</span><span class="s2">"bulk.est.newest.html"</span><span class="p">,</span><span class="n">overwrite</span><span class="o">=</span><span class="nb">T</span><span class="p">)</span><span class="w">
</span><span class="n">file.copy</span><span class="p">(</span><span class="n">html.link</span><span class="p">,</span><span class="s2">"bulk.est.onetable.html"</span><span class="p">,</span><span class="n">overwrite</span><span class="o">=</span><span class="nb">T</span><span class="p">)</span><span class="w">


</span><span class="c1">##################################################</span><span class="w">
</span><span class="c1">### html output in stacked tables by dependent ###</span><span class="w">
</span><span class="c1">##################################################</span><span class="w">
</span><span class="c1">##group models by dependent</span><span class="w">
</span><span class="n">g</span><span class="o">&lt;-</span><span class="nf">names</span><span class="p">(</span><span class="n">elist</span><span class="p">)</span><span class="w">
</span><span class="n">g</span><span class="o">&lt;-</span><span class="n">stringr</span><span class="o">::</span><span class="n">str_split</span><span class="p">(</span><span class="n">g</span><span class="p">,</span><span class="s2">"-"</span><span class="p">)</span><span class="w">
</span><span class="n">g</span><span class="o">&lt;-</span><span class="n">unlist</span><span class="p">(</span><span class="n">lapply</span><span class="p">(</span><span class="n">g</span><span class="p">,</span><span class="k">function</span><span class="p">(</span><span class="n">s</span><span class="p">){</span><span class="n">s</span><span class="p">[[</span><span class="m">1</span><span class="p">]]}))</span><span class="w">
</span><span class="n">gi</span><span class="o">&lt;-</span><span class="nf">as.integer</span><span class="p">(</span><span class="n">factor</span><span class="p">(</span><span class="n">g</span><span class="p">))</span><span class="w">
</span><span class="n">gelist</span><span class="o">&lt;-</span><span class="n">split</span><span class="p">(</span><span class="n">elist</span><span class="p">,</span><span class="n">gi</span><span class="p">)</span><span class="w">

</span><span class="c1">##rename models</span><span class="w">
</span><span class="nf">names</span><span class="p">(</span><span class="n">gelist</span><span class="p">)</span><span class="o">&lt;-</span><span class="n">unique</span><span class="p">(</span><span class="n">g</span><span class="p">)</span><span class="w">
</span><span class="n">gelist</span><span class="o">&lt;-</span><span class="n">lapply</span><span class="p">(</span><span class="w">
  </span><span class="nf">names</span><span class="p">(</span><span class="n">gelist</span><span class="p">),</span><span class="w">
  </span><span class="k">function</span><span class="p">(</span><span class="n">x</span><span class="p">){</span><span class="w">
    </span><span class="c1"># x&lt;-names(gelist)[1]</span><span class="w">
    </span><span class="n">mg</span><span class="o">&lt;-</span><span class="n">gelist</span><span class="p">[[</span><span class="n">x</span><span class="p">]]</span><span class="w">
    </span><span class="n">n</span><span class="o">&lt;-</span><span class="n">gsub</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="s2">""</span><span class="p">,</span><span class="nf">names</span><span class="p">(</span><span class="n">mg</span><span class="p">))</span><span class="w">
    </span><span class="n">n</span><span class="o">&lt;-</span><span class="n">gsub</span><span class="p">(</span><span class="s2">"^-"</span><span class="p">,</span><span class="s2">""</span><span class="p">,</span><span class="n">n</span><span class="p">)</span><span class="w">
    </span><span class="nf">names</span><span class="p">(</span><span class="n">mg</span><span class="p">)</span><span class="o">&lt;-</span><span class="n">n</span><span class="w">
    </span><span class="nf">return</span><span class="p">(</span><span class="n">mg</span><span class="p">)</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="nf">names</span><span class="p">(</span><span class="n">gelist</span><span class="p">)</span><span class="o">&lt;-</span><span class="n">unique</span><span class="p">(</span><span class="n">g</span><span class="p">)</span><span class="w">

</span><span class="c1">#create stacked tables</span><span class="w">
</span><span class="n">a</span><span class="o">&lt;-</span><span class="n">lapply</span><span class="p">(</span><span class="w">
  </span><span class="nf">names</span><span class="p">(</span><span class="n">gelist</span><span class="p">),</span><span class="w">
  </span><span class="k">function</span><span class="p">(</span><span class="n">x</span><span class="p">){</span><span class="w">
    </span><span class="c1"># x&lt;-names(gelist)[1]</span><span class="w">
    </span><span class="n">mg</span><span class="o">&lt;-</span><span class="n">gelist</span><span class="p">[[</span><span class="n">x</span><span class="p">]]</span><span class="w">
    </span><span class="n">html.group</span><span class="o">&lt;-</span><span class="nf">c</span><span class="p">(</span><span class="w">
      </span><span class="n">x</span><span class="p">,</span><span class="w">
      </span><span class="n">htmlreg</span><span class="p">(</span><span class="w">
        </span><span class="n">mg</span><span class="p">,</span><span class="w">
        </span><span class="n">stars</span><span class="o">=</span><span class="nf">c</span><span class="p">(</span><span class="m">0.01</span><span class="p">,</span><span class="m">0.05</span><span class="p">,</span><span class="m">0.1</span><span class="p">),</span><span class="w">
        </span><span class="n">digits</span><span class="o">=</span><span class="m">3</span><span class="w">
      </span><span class="p">)</span><span class="w">
    </span><span class="p">)</span><span class="w">
    </span><span class="nf">return</span><span class="p">(</span><span class="n">html.group</span><span class="p">)</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="n">a</span><span class="o">&lt;-</span><span class="n">unlist</span><span class="p">(</span><span class="n">a</span><span class="p">)</span><span class="w">
</span><span class="n">html.link</span><span class="o">&lt;-</span><span class="n">tempfile</span><span class="p">(</span><span class="n">fileext</span><span class="o">=</span><span class="s2">".html"</span><span class="p">)</span><span class="w">
</span><span class="n">cat</span><span class="p">(</span><span class="w">
  </span><span class="n">file</span><span class="o">=</span><span class="n">html.link</span><span class="p">,</span><span class="w">
  </span><span class="n">a</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="n">clipr</span><span class="o">::</span><span class="n">write_clip</span><span class="p">(</span><span class="n">html.link</span><span class="p">)</span><span class="w">
</span><span class="n">file.copy</span><span class="p">(</span><span class="n">html.link</span><span class="p">,</span><span class="s2">"bulk.est.newest.html"</span><span class="p">,</span><span class="n">overwrite</span><span class="o">=</span><span class="nb">T</span><span class="p">)</span><span class="w">
</span><span class="n">file.copy</span><span class="p">(</span><span class="n">html.link</span><span class="p">,</span><span class="s2">"bulk.est.onetable.html"</span><span class="p">,</span><span class="n">overwrite</span><span class="o">=</span><span class="nb">T</span><span class="p">)</span><span class="w">



</span></code></pre></div></div>]]></content><author><name>Elías Cisneros</name></author><category term="code" /><category term="regressions" /><category term="R" /><summary type="html"><![CDATA[Looping regressions and displaying results in a comprehensive html file.]]></summary></entry><entry><title type="html">*Publication:* Evaluating REDD+ at subnational level: Amazon fund impacts in Alta Floresta, Brazil</title><link href="https://eliascis.github.io/research/evaluating-redd/" rel="alternate" type="text/html" title="*Publication:* Evaluating REDD+ at subnational level: Amazon fund impacts in Alta Floresta, Brazil" /><published>2020-07-25T00:00:00+00:00</published><updated>2020-07-25T00:00:00+00:00</updated><id>https://eliascis.github.io/research/evaluating-redd</id><content type="html" xml:base="https://eliascis.github.io/research/evaluating-redd/"><![CDATA[<p>Correa, J., <strong>E. Cisneros</strong>, J. Börner, A. Pfaff, M. Costa, and R. Rajão (2020): <a href="https://doi.org/10.1016/j.forpol.2020.102178">Evaluating REDD+ at subnational level: Amazon Fund impacts in Alta Floresta, Brazil</a>. <em>Forest Policy and Economics</em> 116: 102,178.</p>

<h2 id="abstract">Abstract</h2>
<p class="text-justify">The Amazon Fund is the world’s largest program to reduce emissions from deforestation and forest degradation (REDD+), funded with over US $1b donated by Norway and Germany between 2008 and 2017 to reward Brazil for prior deforestation reductions. Olhos D’Água da Amazônia is cited as a leading project success − with over one thousand small-to-medium-sized crop and livestock producers in the municipality of Alta Floresta, Mato Grosso State receiving more from the Amazon Fund than all but two other municipalities. To secure property rights, aid environmental planning, and raise farmers’ productivity and output diversity, the project helped farmers register in Brazil’s environmental cadaster and receive property certificates. Furthermore, Olhos D’Água supported milk and honey production and paid farmers to conserve riverine forest sites. We estimate causal effects of Olhos D’Água, versus a counterfactual estimate of what would have happened without the project, using a synthetic-control method. We build from the pool of blacklisted municipalities weighted averages (synthetic controls) that best match pre-treatment outcomes for Alta Floresta. Project effects are estimated as post-treatment differences between Alta Floresta and the synthetic controls. We find that the project increased new CAR registrations, and INCRA certifications, and may have moderately increased honey and milk production. Alta Floresta’s annual forest losses remained historically low but we find no clear causal effect of the project on deforestation rates. Our results support that rigorous impact evaluation can motivate and guide project improvements.</p>]]></content><author><name>Elías Cisneros</name></author><category term="research" /><summary type="html"><![CDATA[The Amazon Fund is the world's largest program to reduce emissions from deforestation and forest degradation (REDD+)]]></summary></entry><entry><title type="html">*Code:* Nightlight (DMSP-OLS) download and preparation</title><link href="https://eliascis.github.io/code/nightlight-dmsp-download" rel="alternate" type="text/html" title="*Code:* Nightlight (DMSP-OLS) download and preparation" /><published>2020-03-23T00:00:00+00:00</published><updated>2020-03-23T00:00:00+00:00</updated><id>https://eliascis.github.io/code/nightlight-dmsp-download</id><content type="html" xml:base="https://eliascis.github.io/code/nightlight-dmsp-download"><![CDATA[<!-- ![](/assets/images/nightlight-dmsp-download_cropped.jpg) -->

<p>Download and pre-processing of nightlight data DMSP-OLS versions
(1992-2013).</p>

<h3 id="setup">Setup</h3>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">library</span><span class="p">(</span><span class="n">here</span><span class="p">)</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">raster</span><span class="p">)</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">clipr</span><span class="p">)</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">ggplot2</span><span class="p">)</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">rgeos</span><span class="p">)</span><span class="w">
</span><span class="n">system</span><span class="p">(</span><span class="s2">"mkdir dload"</span><span class="p">)</span><span class="w">
</span><span class="n">system</span><span class="p">(</span><span class="s2">"mkdir data"</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<h3 id="download">Download</h3>

<p>This will download the nightlight data in the background and show the
progress on your R console. I do prefer to copy the curl commands
(stored as <code class="language-plaintext highlighter-rouge">a</code>) and paste them in the terminal, where it is more
convenient to observe the download process. Alternativly you can also
just download the files manually on the United States National Oceanic
and Atmospheric Administration (NOAA) webpage:
<a href="https://ngdc.noaa.gov/eog/data/web_data/v4composites">https://ngdc.noaa.gov/eog/data/web_data/v4composites</a>. <em>Note:</em> The
download takes some time, therefore the code checks for already existing
files.</p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#available nightlight versions</span><span class="w">
</span><span class="n">l</span><span class="o">&lt;-</span><span class="nf">c</span><span class="p">(</span><span class="w">
  </span><span class="n">paste0</span><span class="p">(</span><span class="s2">"F10"</span><span class="p">,</span><span class="m">1992</span><span class="o">:</span><span class="m">1994</span><span class="p">),</span><span class="w">
  </span><span class="n">paste0</span><span class="p">(</span><span class="s2">"F12"</span><span class="p">,</span><span class="m">1994</span><span class="o">:</span><span class="m">1999</span><span class="p">),</span><span class="w">
  </span><span class="n">paste0</span><span class="p">(</span><span class="s2">"F14"</span><span class="p">,</span><span class="m">1997</span><span class="o">:</span><span class="m">2003</span><span class="p">),</span><span class="w">
  </span><span class="n">paste0</span><span class="p">(</span><span class="s2">"F15"</span><span class="p">,</span><span class="m">2000</span><span class="o">:</span><span class="m">2007</span><span class="p">),</span><span class="w"> </span><span class="c1">#    paste0("F15",2008), # a hidden 2008 file exists</span><span class="w">
  </span><span class="n">paste0</span><span class="p">(</span><span class="s2">"F16"</span><span class="p">,</span><span class="m">2004</span><span class="o">:</span><span class="m">2009</span><span class="p">),</span><span class="w">
  </span><span class="n">paste0</span><span class="p">(</span><span class="s2">"F18"</span><span class="p">,</span><span class="m">2010</span><span class="o">:</span><span class="m">2013</span><span class="p">)</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="c1">#choose nightlight versions</span><span class="w">
</span><span class="n">l</span><span class="o">&lt;-</span><span class="n">l</span><span class="p">[</span><span class="n">grep</span><span class="p">(</span><span class="s2">"2007|2008"</span><span class="p">,</span><span class="n">l</span><span class="p">)]</span><span class="w">
</span><span class="c1">#exlude already existing files</span><span class="w">
</span><span class="n">f</span><span class="o">&lt;-</span><span class="n">list.files</span><span class="p">(</span><span class="s2">"dload"</span><span class="p">,</span><span class="s2">".tif|.tar"</span><span class="p">)</span><span class="w">
</span><span class="n">f</span><span class="o">&lt;-</span><span class="n">sub</span><span class="p">(</span><span class="s2">"\\.v4\\.tar"</span><span class="p">,</span><span class="s2">""</span><span class="p">,</span><span class="n">f</span><span class="p">)</span><span class="w">
</span><span class="n">f</span><span class="o">&lt;-</span><span class="n">sub</span><span class="p">(</span><span class="s2">".v4[b|d|c]_web.stable_lights.avg_vis.tif"</span><span class="p">,</span><span class="s2">""</span><span class="p">,</span><span class="n">f</span><span class="p">)</span><span class="w">
</span><span class="n">f</span><span class="o">&lt;-</span><span class="n">unique</span><span class="p">(</span><span class="n">f</span><span class="p">)</span><span class="w">
</span><span class="c1">#download list</span><span class="w">
</span><span class="n">l</span><span class="o">&lt;-</span><span class="n">l</span><span class="p">[</span><span class="o">!</span><span class="p">(</span><span class="n">l</span><span class="w"> </span><span class="o">%in%</span><span class="w"> </span><span class="n">f</span><span class="p">)]</span><span class="w">
</span><span class="n">dlist</span><span class="o">&lt;-</span><span class="n">paste0</span><span class="p">(</span><span class="s2">"https://ngdc.noaa.gov/eog/data/web_data/v4composites/"</span><span class="p">,</span><span class="n">l</span><span class="p">,</span><span class="s2">".v4.tar"</span><span class="p">)</span><span class="w">
</span><span class="c1">##download with curl - available also for Windows</span><span class="w">
</span><span class="n">a</span><span class="o">&lt;-</span><span class="n">lapply</span><span class="p">(</span><span class="w">
  </span><span class="n">dlist</span><span class="p">,</span><span class="w">
  </span><span class="k">function</span><span class="p">(</span><span class="n">h</span><span class="p">){</span><span class="w">
    </span><span class="c1"># h&lt;-dlist[2]</span><span class="w">
    </span><span class="n">fname</span><span class="o">&lt;-</span><span class="n">substring</span><span class="p">(</span><span class="n">h</span><span class="p">,</span><span class="nf">max</span><span class="p">(</span><span class="nf">c</span><span class="p">(</span><span class="n">gregexpr</span><span class="p">(</span><span class="s2">"/"</span><span class="p">,</span><span class="n">h</span><span class="p">)[[</span><span class="m">1</span><span class="p">]]))</span><span class="m">+1</span><span class="p">)</span><span class="w">
    </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">file.exists</span><span class="p">(</span><span class="n">fname</span><span class="p">)</span><span class="o">!=</span><span class="nb">T</span><span class="p">){</span><span class="w">
      </span><span class="n">cmd</span><span class="o">&lt;-</span><span class="n">paste0</span><span class="p">(</span><span class="s2">"curl "</span><span class="p">,</span><span class="n">h</span><span class="p">,</span><span class="s2">" --output "</span><span class="p">,</span><span class="n">here</span><span class="p">(</span><span class="s2">"dload"</span><span class="p">,</span><span class="n">fname</span><span class="p">))</span><span class="w">
    </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">(</span><span class="w">
      </span><span class="n">cmd</span><span class="o">&lt;-</span><span class="s1">''</span><span class="w">
    </span><span class="p">)</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="n">a</span><span class="w">
</span><span class="n">write_clip</span><span class="p">(</span><span class="n">unlist</span><span class="p">(</span><span class="n">a</span><span class="p">),</span><span class="n">allow_non_interactive</span><span class="o">=</span><span class="nb">T</span><span class="p">)</span><span class="w"> </span><span class="c1">#and paste it to the terminal or run:</span><span class="w">
</span><span class="c1"># system(unlist(a),wait=F)</span><span class="w">
</span></code></pre></div></div>

<h3 id="unzip-nightlight-data">Unzip nightlight data</h3>

<p>The downloaded tar files contain several nightlight composits with
different corrections. Which you can see when you unzip the
F1?YYY.v4.tar file. The tar file contains several differetn gunziped
files such as: F1?YYYY_v4?_stable_lights.avg_vis.tif.gz. which is
one version of the nightlight products, which already corrected for
clouds and fires (for more detail read the README_V?.txt of your
downloads). This file has to be unziped again with gunzip (also
available for Windows).</p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">list.files</span><span class="p">(</span><span class="s2">"dload"</span><span class="p">,</span><span class="s2">"F.*\\.tar"</span><span class="p">)</span><span class="w">
</span><span class="n">flist</span><span class="o">&lt;-</span><span class="n">list.files</span><span class="p">(</span><span class="n">here</span><span class="p">(</span><span class="s2">"dload"</span><span class="p">),</span><span class="s2">".v4.tar$"</span><span class="p">,</span><span class="n">full.names</span><span class="o">=</span><span class="nb">T</span><span class="p">)</span><span class="w">
</span><span class="c1"># flist</span><span class="w">

</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">f</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">flist</span><span class="p">){</span><span class="w">
  </span><span class="c1"># f&lt;-flist[1]</span><span class="w">
  </span><span class="n">print</span><span class="p">(</span><span class="n">f</span><span class="p">)</span><span class="w">
  </span><span class="c1">#list files in tar file</span><span class="w">
  </span><span class="n">x</span><span class="o">&lt;-</span><span class="n">system</span><span class="p">(</span><span class="n">paste0</span><span class="p">(</span><span class="s2">"tar -tf "</span><span class="p">,</span><span class="n">f</span><span class="p">),</span><span class="n">intern</span><span class="o">=</span><span class="nb">T</span><span class="p">)</span><span class="w">
  </span><span class="c1">#choose file to unzip</span><span class="w">
  </span><span class="n">s</span><span class="o">&lt;-</span><span class="n">x</span><span class="p">[</span><span class="n">grep</span><span class="p">(</span><span class="s2">"_web.stable_lights.avg_vis.tif"</span><span class="p">,</span><span class="n">x</span><span class="p">)]</span><span class="w">
  </span><span class="c1">#unzip tar file</span><span class="w">
  </span><span class="n">untar</span><span class="p">(</span><span class="n">tarfile</span><span class="o">=</span><span class="n">f</span><span class="p">,</span><span class="n">exdir</span><span class="o">=</span><span class="n">here</span><span class="p">(</span><span class="s2">"dload"</span><span class="p">),</span><span class="n">files</span><span class="o">=</span><span class="n">s</span><span class="p">)</span><span class="w">
  </span><span class="c1">#unzip gz</span><span class="w">
  </span><span class="n">system</span><span class="p">(</span><span class="n">paste0</span><span class="p">(</span><span class="s2">"gunzip -d -f "</span><span class="p">,</span><span class="n">file.path</span><span class="p">(</span><span class="s2">"dload"</span><span class="p">,</span><span class="n">s</span><span class="p">)))</span><span class="w">
  </span><span class="c1">#remove unziped gz file</span><span class="w">
  </span><span class="c1"># not necessary as gunzip authomatically removes the original file, otherwise uncomment the following line:</span><span class="w">
  </span><span class="c1"># file.remove(file.path("dload",s))</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<h3 id="compress-file-size">Compress file size</h3>

<p>The raster tif files are already in Byte format with an average file
size of about 700 MB. Using the python based GDAL libraries, the file
size can be further reduced to only 23 MB (with an LZW compression) or
even 5 MP (with an JPEG compression). JPEG compression formats are
usally only used for rasters with a <em>Byte</em> data type (values 0-255),
which works in this case. This smoothes a bit the raster values,
marginally but noticable. I therefore prefer the LZW compression method.
To install GDAL, visit the hompage <a href="https://gdal.org/">here</a>.</p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">flist</span><span class="o">&lt;-</span><span class="n">list.files</span><span class="p">(</span><span class="s2">"dload"</span><span class="p">,</span><span class="s2">"avg_vis\\.tif$"</span><span class="p">)</span><span class="w">
</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">f</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">flist</span><span class="p">){</span><span class="w">
  </span><span class="c1"># f&lt;-flist[1]</span><span class="w">
  </span><span class="n">print</span><span class="p">(</span><span class="n">f</span><span class="p">)</span><span class="w">
  </span><span class="n">cmd</span><span class="o">&lt;-</span><span class="n">paste0</span><span class="p">(</span><span class="w">
    </span><span class="nf">c</span><span class="p">(</span><span class="w">
      </span><span class="s2">"gdalwarp"</span><span class="p">,</span><span class="w">
      </span><span class="s2">"-co COMPRESS=LZW"</span><span class="p">,</span><span class="w">
      </span><span class="n">here</span><span class="p">(</span><span class="s2">"dload"</span><span class="p">,</span><span class="n">f</span><span class="p">),</span><span class="w">
      </span><span class="n">here</span><span class="p">(</span><span class="s2">"data"</span><span class="p">,</span><span class="n">sub</span><span class="p">(</span><span class="s2">".v4b_web.stable_lights.avg_vis.tif"</span><span class="p">,</span><span class="s2">".tif"</span><span class="p">,</span><span class="n">f</span><span class="p">))</span><span class="w">
    </span><span class="p">),</span><span class="w">
    </span><span class="n">collapse</span><span class="o">=</span><span class="s2">" "</span><span class="w">
  </span><span class="p">)</span><span class="w">
  </span><span class="n">cmd</span><span class="w">
  </span><span class="n">system</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span><span class="w"> </span><span class="c1">##run the command from within R - it does not take too much time</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<h3 id="remove-downloads-and-intermediary-products">Remove downloads and intermediary products</h3>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># file.remove(here("dload"))</span><span class="w">
</span></code></pre></div></div>

<h3 id="plot-output">Plot output</h3>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#nightlight raster</span><span class="w">
</span><span class="n">r</span><span class="o">&lt;-</span><span class="n">raster</span><span class="p">(</span><span class="s2">"data/F152007.tif"</span><span class="p">)</span><span class="w">
</span><span class="c1"># plot(r)</span><span class="w">

</span><span class="c1">#lower resolution raster</span><span class="w">
</span><span class="n">ncell</span><span class="p">(</span><span class="n">r</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>## [1] 725820001
</code></pre></div></div>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># plot(r)</span><span class="w">
</span><span class="n">size.sample</span><span class="o">&lt;</span><span class="m">-2</span><span class="o">*</span><span class="m">10</span><span class="o">^</span><span class="m">5</span><span class="w">
</span><span class="n">rd</span><span class="o">&lt;-</span><span class="n">sampleRegular</span><span class="p">(</span><span class="n">r</span><span class="p">,</span><span class="n">size</span><span class="o">=</span><span class="n">size.sample</span><span class="p">,</span><span class="w"> </span><span class="n">asRaster</span><span class="o">=</span><span class="nb">T</span><span class="p">,</span><span class="w"> </span><span class="n">useGDAL</span><span class="o">=</span><span class="nb">T</span><span class="p">)</span><span class="w">
</span><span class="c1"># table(rd[])</span><span class="w">
</span><span class="c1"># plot(rd,col="red")</span><span class="w">

</span><span class="c1">#plot theme</span><span class="w">
</span><span class="n">theme.nightlight</span><span class="o">&lt;-</span><span class="w">
      </span><span class="n">ggplot</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w">
      </span><span class="n">theme_bw</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w">
      </span><span class="n">theme</span><span class="p">(</span><span class="w">
        </span><span class="n">legend.title</span><span class="o">=</span><span class="n">element_blank</span><span class="p">(),</span><span class="w">
        </span><span class="n">legend.position</span><span class="o">=</span><span class="s2">"right"</span><span class="p">,</span><span class="w">
        </span><span class="n">axis.title</span><span class="o">=</span><span class="n">element_blank</span><span class="p">(),</span><span class="w">
        </span><span class="n">axis.text</span><span class="o">=</span><span class="n">element_blank</span><span class="p">()</span><span class="w">
      </span><span class="p">)</span><span class="w"> </span><span class="c1">#+</span><span class="w">

</span><span class="c1">#plot</span><span class="w">
</span><span class="n">p</span><span class="o">&lt;-</span><span class="w">
  </span><span class="n">theme.nightlight</span><span class="w"> </span><span class="o">+</span><span class="w">
  </span><span class="n">geom_tile</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">data.frame</span><span class="p">(</span><span class="n">rasterToPoints</span><span class="p">(</span><span class="n">rd</span><span class="p">)),</span><span class="n">aes</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="o">=</span><span class="n">y</span><span class="p">,</span><span class="n">fill</span><span class="o">=</span><span class="n">F152007</span><span class="p">),</span><span class="n">color</span><span class="o">=</span><span class="s2">"black"</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w">
  </span><span class="n">coord_fixed</span><span class="p">(</span><span class="w">
    </span><span class="c1"># xlim = c(96, 140),</span><span class="w">
    </span><span class="c1"># ylim = c(-10.5, 5.8),</span><span class="w">
    </span><span class="n">ratio</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="m">1.3</span><span class="w">
  </span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w">
  </span><span class="n">scale_fill_gradient</span><span class="p">(</span><span class="n">low</span><span class="o">=</span><span class="s2">"black"</span><span class="p">,</span><span class="w"> </span><span class="n">high</span><span class="o">=</span><span class="s1">'white'</span><span class="p">,</span><span class="n">trans</span><span class="o">=</span><span class="s2">"sqrt"</span><span class="p">)</span><span class="w">
</span><span class="n">p</span><span class="w">
</span></code></pre></div></div>

<p><img src="nightlight-dmsp-download_files/figure-gfm/plot%20structure-1.png" alt="" /><!-- --></p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">ggsave</span><span class="p">(</span><span class="s2">"nightlight-dmsp-download.jpg"</span><span class="p">,</span><span class="n">device</span><span class="o">=</span><span class="s2">"jpg"</span><span class="p">,</span><span class="n">height</span><span class="o">=</span><span class="m">15</span><span class="p">,</span><span class="n">width</span><span class="o">=</span><span class="m">30.8</span><span class="p">,</span><span class="n">units</span><span class="o">=</span><span class="s2">"cm"</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>]]></content><author><name>Elías Cisneros</name></author><category term="code" /><category term="Nightlight" /><category term="R" /><summary type="html"><![CDATA[Download and pre-processing of nightlight data DMSP-OLS versions (1992-2013).]]></summary></entry><entry><title type="html">*Code:* Nightlight statistics for spatial units</title><link href="https://eliascis.github.io/code/nightlight-dmsp-statistics" rel="alternate" type="text/html" title="*Code:* Nightlight statistics for spatial units" /><published>2020-03-23T00:00:00+00:00</published><updated>2020-03-23T00:00:00+00:00</updated><id>https://eliascis.github.io/code/nightlight-dmsp-statistics</id><content type="html" xml:base="https://eliascis.github.io/code/nightlight-dmsp-statistics"><![CDATA[<p><img src="/assets/images/nightlight-dmsp-statistics.png" alt="" /></p>

<p>This is an easy and fast way to process DMSP-OLS nightlight data and to
build your statistics, such as mean, min, max, or other. The script uses
the GDAL python-based libraries. To install GDAL, visit the homepage
<a href="https://gdal.org/">here</a>. See <a href="https://rpubs.com/eliascis/nightlight-dmsp-download">this
guide</a> on how to
download and prepare the DSMP-OLS nightlight data. Here I build yearly
nightlight statistics for all Chinese cities (Admin 2 level) using the
spatial boundaries from <a href="https://www.diva-gis.org/datadown">DIVA-GIS</a>.</p>

<h2 id="setup">Setup</h2>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">library</span><span class="p">(</span><span class="n">raster</span><span class="p">)</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">clipr</span><span class="p">)</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">rgdal</span><span class="p">)</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">rgeos</span><span class="p">)</span><span class="w">
</span><span class="n">library</span><span class="p">(</span><span class="n">dplyr</span><span class="p">)</span><span class="w">
</span><span class="n">t</span><span class="o">&lt;-</span><span class="n">tempfile</span><span class="p">()</span><span class="w">
</span></code></pre></div></div>

<h2 id="download-administrative-boundaries">Download administrative boundaries</h2>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">file.exists</span><span class="p">(</span><span class="n">file.path</span><span class="p">(</span><span class="s2">"data"</span><span class="p">,</span><span class="s2">"CHN_adm2.shp"</span><span class="p">))){</span><span class="w">
  </span><span class="n">download.file</span><span class="p">(</span><span class="s2">"http://biogeo.ucdavis.edu/data/diva/adm/CHN_adm.zip"</span><span class="p">,</span><span class="n">t</span><span class="p">)</span><span class="w">
  </span><span class="c1"># unzip(t,list=T)</span><span class="w">
  </span><span class="n">x</span><span class="o">&lt;-</span><span class="n">unzip</span><span class="p">(</span><span class="n">t</span><span class="p">,</span><span class="n">list</span><span class="o">=</span><span class="nb">T</span><span class="p">)</span><span class="o">$</span><span class="n">Name</span><span class="w">
  </span><span class="n">x</span><span class="o">&lt;-</span><span class="n">x</span><span class="p">[</span><span class="n">grep</span><span class="p">(</span><span class="s2">"CHN_adm2"</span><span class="p">,</span><span class="n">x</span><span class="p">)]</span><span class="w">
  </span><span class="n">unzip</span><span class="p">(</span><span class="n">t</span><span class="p">,</span><span class="n">files</span><span class="o">=</span><span class="n">x</span><span class="p">,</span><span class="n">exdir</span><span class="o">=</span><span class="s2">"data"</span><span class="p">,</span><span class="n">overwrite</span><span class="o">=</span><span class="nb">T</span><span class="p">)</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="c1"># list.files("data")</span><span class="w">
</span></code></pre></div></div>

<h2 id="rasterize-shapefile">Rasterize shapefile</h2>

<p>The nightlight DMSP-OLS version has a resolution of 0.00833 degrees (~1
km at the equator). That means for the extent of china the raster has
“only” xxx cells, which can still be coerced into a data frame without
crossing the vector size limit of your computer. Therefore, I would
always rasterize the administrative units (with the raster definition of
the nightlight) and then combine the data. The <code class="language-plaintext highlighter-rouge">rasterize</code> function of
the <code class="language-plaintext highlighter-rouge">rgdal</code> packages is slow and prone to errors, I, therefore,
recommend using <a href="https://gdal.org/">gdal</a>, which is a very fast way to
process raster data. This means that the R script “merely” produces
command lines that are sent to the system or pasted manually to the
terminal.</p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#loading Chinese boundaries</span><span class="w">
</span><span class="n">d</span><span class="o">&lt;-</span><span class="n">readOGR</span><span class="p">(</span><span class="s2">"data"</span><span class="p">,</span><span class="s1">'CHN_adm2'</span><span class="p">,</span><span class="n">stringsAsFactors</span><span class="o">=</span><span class="nb">F</span><span class="p">,</span><span class="n">verbose</span><span class="o">=</span><span class="nb">F</span><span class="p">)</span><span class="w">
</span><span class="n">d</span><span class="o">$</span><span class="n">ID_2</span><span class="o">&lt;-</span><span class="nf">as.integer</span><span class="p">(</span><span class="n">d</span><span class="o">$</span><span class="n">ID_2</span><span class="p">)</span><span class="w">
</span><span class="n">d.china</span><span class="o">&lt;-</span><span class="n">d</span><span class="w">
</span><span class="c1">#load one nightlight raster</span><span class="w">
</span><span class="n">r</span><span class="o">&lt;-</span><span class="n">raster</span><span class="p">(</span><span class="s2">"data/F152007.tif"</span><span class="p">)</span><span class="w">
</span><span class="c1">#check if the layer and the raster have the same CRS</span><span class="w">
</span><span class="n">crs</span><span class="p">(</span><span class="n">d.china</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>## CRS arguments: +proj=longlat +datum=WGS84 +no_defs
</code></pre></div></div>

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

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>## CRS arguments: +proj=longlat +datum=WGS84 +no_defs
</code></pre></div></div>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#crop nightlight raster to china's extent</span><span class="w">
</span><span class="n">r</span><span class="o">&lt;-</span><span class="n">crop</span><span class="p">(</span><span class="n">r</span><span class="p">,</span><span class="w"> </span><span class="n">d.china</span><span class="p">)</span><span class="w">
</span><span class="c1">#slow rastarization with the raster package - and often encounters some error</span><span class="w">
</span><span class="c1"># rr&lt;-rasterize(d.china,r,field="ID_2",filename=file.path("r.china.cities.tif"))</span><span class="w">
</span><span class="c1">#quick rasterization wiht gdal</span><span class="w">
</span><span class="n">cmd</span><span class="o">&lt;-</span><span class="n">paste0</span><span class="p">(</span><span class="w">
  </span><span class="nf">c</span><span class="p">(</span><span class="w">
    </span><span class="s2">"gdal_rasterize"</span><span class="p">,</span><span class="w">
    </span><span class="s2">"-a ID_2"</span><span class="p">,</span><span class="w">
    </span><span class="n">paste</span><span class="p">(</span><span class="nf">c</span><span class="p">(</span><span class="s2">"-te"</span><span class="p">,</span><span class="n">extent</span><span class="p">(</span><span class="n">r</span><span class="p">)[</span><span class="nf">c</span><span class="p">(</span><span class="m">1</span><span class="p">,</span><span class="m">3</span><span class="p">,</span><span class="m">2</span><span class="p">,</span><span class="m">4</span><span class="p">)]),</span><span class="n">collapse</span><span class="o">=</span><span class="s2">" "</span><span class="p">),</span><span class="w">
    </span><span class="n">paste</span><span class="p">(</span><span class="nf">c</span><span class="p">(</span><span class="s2">"-tr"</span><span class="p">,</span><span class="n">res</span><span class="p">(</span><span class="n">r</span><span class="p">)),</span><span class="n">collapse</span><span class="o">=</span><span class="s2">" "</span><span class="p">),</span><span class="w">
    </span><span class="n">file.path</span><span class="p">(</span><span class="s2">"data"</span><span class="p">,</span><span class="s1">'CHN_adm2.shp'</span><span class="p">),</span><span class="w">
    </span><span class="n">file.path</span><span class="p">(</span><span class="s2">"data"</span><span class="p">,</span><span class="s2">"r.china.cities.tif"</span><span class="p">)</span><span class="w">
  </span><span class="p">),</span><span class="w">
  </span><span class="n">collapse</span><span class="o">=</span><span class="s2">" "</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="n">cmd</span><span class="w">
</span></code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>## [1] "gdal_rasterize -a ID_2 -te 73.5541656518887 18.1625002268218 134.770832073638 53.5625000851459 -tr 0.0083333332999931 0.00833333329998213 data/CHN_adm2.shp data/r.china.cities.tif"
</code></pre></div></div>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">system.time</span><span class="p">(</span><span class="w">
  </span><span class="n">system</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span><span class="w"> </span><span class="c1">##run the command from within R</span><span class="w">
</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>##    user  system elapsed
##    0.00    0.00    2.08
</code></pre></div></div>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#laod new raster</span><span class="w">
</span><span class="n">r</span><span class="o">&lt;-</span><span class="n">raster</span><span class="p">(</span><span class="s2">"data/r.china.cities.tif"</span><span class="p">)</span><span class="w">
</span><span class="c1">#test number of id values</span><span class="w">
</span><span class="nf">length</span><span class="p">(</span><span class="n">unique</span><span class="p">(</span><span class="n">r</span><span class="p">[]))</span><span class="m">-1</span><span class="w"> </span><span class="c1"># not counting zero values</span><span class="w">
</span></code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>## [1] 344
</code></pre></div></div>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nf">length</span><span class="p">(</span><span class="n">unique</span><span class="p">(</span><span class="n">d.china</span><span class="o">$</span><span class="n">ID_2</span><span class="p">))</span><span class="w">
</span></code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>## [1] 344
</code></pre></div></div>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">##save</span><span class="w">
</span><span class="n">r.china</span><span class="o">&lt;-</span><span class="n">r</span><span class="w">
</span></code></pre></div></div>

<p><em>Note:</em> It could be that your spatial units are too small to be captured
by a nightlight pixel. The rasterization process intersects cell
centroids with the spatial layer. Some small units might not touch any
centroid and are lost while rasterizing. If you need those units in your
analysis, I recommend building nightlight values from cells that touch
the small polygon. I do not include the coded solution here, but you can
write me an email if you encounter this problem.</p>

<p><em>Also note</em> that you should avoid setting ‘255’ as the null value in the
GDAL rasterization. Although this might ease the visualization in QGIS
it conflicts with the data - ‘255’ is the ID_2 value of a city. Without
setting the null value explicly, the raster uses zeros for cells outside
the Chinese layer.</p>

<h2 id="crop-nightlight-raster-to-the-china-extent">Crop nightlight raster to the china extent</h2>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">flist</span><span class="o">&lt;-</span><span class="n">list.files</span><span class="p">(</span><span class="s2">"data"</span><span class="p">,</span><span class="s2">"F.*\\.tif$"</span><span class="p">)</span><span class="w">
</span><span class="n">a</span><span class="o">&lt;-</span><span class="n">lapply</span><span class="p">(</span><span class="w">
  </span><span class="n">flist</span><span class="p">,</span><span class="w">
  </span><span class="k">function</span><span class="p">(</span><span class="n">f</span><span class="p">){</span><span class="w">
    </span><span class="c1"># print(f)</span><span class="w">
    </span><span class="n">r</span><span class="o">&lt;-</span><span class="n">raster</span><span class="p">(</span><span class="n">file.path</span><span class="p">(</span><span class="s2">"data"</span><span class="p">,</span><span class="n">f</span><span class="p">))</span><span class="w">
    </span><span class="n">r</span><span class="o">&lt;-</span><span class="n">raster</span><span class="o">::</span><span class="n">crop</span><span class="p">(</span><span class="n">r</span><span class="p">,</span><span class="n">r.china</span><span class="p">)</span><span class="w">
    </span><span class="nf">return</span><span class="p">(</span><span class="n">r</span><span class="p">)</span><span class="w">
  </span><span class="p">}</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="nf">names</span><span class="p">(</span><span class="n">a</span><span class="p">)</span><span class="o">&lt;-</span><span class="n">sub</span><span class="p">(</span><span class="s2">"\\.tif"</span><span class="p">,</span><span class="s2">""</span><span class="p">,</span><span class="n">flist</span><span class="p">)</span><span class="w">
</span><span class="n">r.nl.stack</span><span class="o">&lt;-</span><span class="n">a</span><span class="w">
</span></code></pre></div></div>

<h2 id="combine-raster-cell-data">Combine raster cell data</h2>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#china ids</span><span class="w">
</span><span class="n">d</span><span class="o">&lt;-</span><span class="n">data.frame</span><span class="p">(</span><span class="w">
  </span><span class="n">ID_2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">r.china</span><span class="p">[]</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="c1">#nightlight values</span><span class="w">
</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nf">names</span><span class="p">(</span><span class="n">r.nl.stack</span><span class="p">)){</span><span class="w">
  </span><span class="c1"># print(x)</span><span class="w">
  </span><span class="n">d</span><span class="p">[,</span><span class="n">x</span><span class="p">]</span><span class="o">&lt;-</span><span class="n">values</span><span class="p">(</span><span class="n">r.nl.stack</span><span class="p">[[</span><span class="n">x</span><span class="p">]])</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="c1">#exclude non-china areas</span><span class="w">
</span><span class="n">i</span><span class="o">&lt;-</span><span class="n">which</span><span class="p">(</span><span class="n">d</span><span class="o">$</span><span class="n">ID_2</span><span class="o">==</span><span class="m">0</span><span class="p">)</span><span class="w">
</span><span class="n">d</span><span class="o">&lt;-</span><span class="n">d</span><span class="p">[</span><span class="o">-</span><span class="n">i</span><span class="p">,]</span><span class="w">
</span><span class="c1">#save</span><span class="w">
</span><span class="n">d.pixel</span><span class="o">&lt;-</span><span class="n">d</span><span class="w">
</span></code></pre></div></div>

<h2 id="model-dmsp-data-versions">Model DMSP data versions</h2>

<p>Due to a change in the use of satellites over time, the nightlight data
sometimes has several versions for one year, for example, F152007.tif
and F162007.tif. You can either choose the most appropriate version for
your analysis or pool both sources. The code here uses the average if
there are two versions in one year.</p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">d</span><span class="o">&lt;-</span><span class="n">d.pixel</span><span class="w">
</span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">y</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="m">2007</span><span class="o">:</span><span class="m">2008</span><span class="p">){</span><span class="w">
  </span><span class="c1"># y&lt;-2007</span><span class="w">
  </span><span class="n">i</span><span class="o">&lt;-</span><span class="n">grep</span><span class="p">(</span><span class="n">y</span><span class="p">,</span><span class="nf">names</span><span class="p">(</span><span class="n">d</span><span class="p">))</span><span class="w">
  </span><span class="c1"># print(names(d)[i])</span><span class="w">
  </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nf">length</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="o">&gt;</span><span class="m">1</span><span class="p">){</span><span class="w">
    </span><span class="n">d</span><span class="p">[,</span><span class="n">paste0</span><span class="p">(</span><span class="s2">"dmsp."</span><span class="p">,</span><span class="n">y</span><span class="p">)]</span><span class="o">&lt;-</span><span class="n">rowMeans</span><span class="p">(</span><span class="n">d</span><span class="p">[,</span><span class="n">i</span><span class="p">])</span><span class="w">
  </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">d</span><span class="p">[,</span><span class="n">paste0</span><span class="p">(</span><span class="s2">"dmsp."</span><span class="p">,</span><span class="n">y</span><span class="p">)]</span><span class="o">&lt;-</span><span class="n">d</span><span class="p">[,</span><span class="n">i</span><span class="p">]</span><span class="w">
  </span><span class="p">}</span><span class="w">

</span><span class="p">}</span><span class="w">
</span><span class="n">d.dmsp.modeled</span><span class="o">&lt;-</span><span class="n">d</span><span class="w">
</span><span class="nf">names</span><span class="p">(</span><span class="n">d</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>## [1] "ID_2"      "F152007"   "F162007"   "F162008"   "dmsp.2007" "dmsp.2008"
</code></pre></div></div>

<h2 id="collapse-to-spatial-unit-level">Collapse to spatial unit level</h2>

<p>Depending on your study area and research question, you can create your
statistics. Here I only calculate the mean, median and sum of yearly
nightlight within each Chinese city.</p>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">d</span><span class="o">&lt;-</span><span class="n">d.dmsp.modeled</span><span class="w">
</span><span class="n">d</span><span class="o">&lt;-</span><span class="w"> </span><span class="n">data.frame</span><span class="p">(</span><span class="w">
  </span><span class="n">d</span><span class="w"> </span><span class="o">%&gt;%</span><span class="w">
    </span><span class="n">group_by</span><span class="p">(</span><span class="n">ID_2</span><span class="p">)</span><span class="w"> </span><span class="o">%&gt;%</span><span class="w">
    </span><span class="n">summarise_at</span><span class="p">(</span><span class="w">
      </span><span class="n">.vars</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">paste0</span><span class="p">(</span><span class="s2">"dmsp."</span><span class="p">,</span><span class="m">2007</span><span class="o">:</span><span class="m">2008</span><span class="p">),</span><span class="w">
      </span><span class="n">.funs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">c</span><span class="p">(</span><span class="w">
        </span><span class="n">mean</span><span class="o">=</span><span class="s2">"mean"</span><span class="p">,</span><span class="w">
        </span><span class="n">median</span><span class="o">=</span><span class="s2">"median"</span><span class="p">,</span><span class="w">
        </span><span class="n">sum</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"sum"</span><span class="w">
      </span><span class="p">)</span><span class="w">
    </span><span class="p">)</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="c1">#save</span><span class="w">
</span><span class="n">d</span><span class="o">&lt;-</span><span class="n">d</span><span class="p">[</span><span class="n">order</span><span class="p">(</span><span class="n">d</span><span class="o">$</span><span class="n">ID_2</span><span class="p">),]</span><span class="w">
</span><span class="n">d.collapse</span><span class="o">&lt;-</span><span class="n">d</span><span class="w">
</span><span class="n">write.csv</span><span class="p">(</span><span class="n">d</span><span class="p">,</span><span class="s2">"chinese.nightlight.csv"</span><span class="p">,</span><span class="n">row.names</span><span class="o">=</span><span class="nb">F</span><span class="p">)</span><span class="w">
</span><span class="nf">names</span><span class="p">(</span><span class="n">d</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>## [1] "ID_2"             "dmsp.2007_mean"   "dmsp.2008_mean"   "dmsp.2007_median"
## [5] "dmsp.2008_median" "dmsp.2007_sum"    "dmsp.2008_sum"
</code></pre></div></div>

<h2 id="plot-chinese-nightlight-data">Plot Chinese nightlight data</h2>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">#read nightlight data</span><span class="w">
</span><span class="n">d</span><span class="o">&lt;-</span><span class="n">read.csv</span><span class="p">(</span><span class="s2">"data/nightlight-dmsp-statistics.csv"</span><span class="p">)</span><span class="w">
</span><span class="c1">#read shapefile</span><span class="w">
</span><span class="n">ch</span><span class="o">&lt;-</span><span class="n">readOGR</span><span class="p">(</span><span class="s1">'data'</span><span class="p">,</span><span class="s1">'CHN_adm2'</span><span class="p">,</span><span class="n">verbose</span><span class="o">=</span><span class="nb">F</span><span class="p">)</span><span class="w">
</span><span class="c1">#simplify geometry</span><span class="w">
</span><span class="n">ch2</span><span class="o">&lt;-</span><span class="n">gSimplify</span><span class="p">(</span><span class="n">ch</span><span class="p">,</span><span class="m">0.05</span><span class="p">)</span><span class="w">
</span><span class="n">ch</span><span class="o">&lt;-</span><span class="n">SpatialPolygonsDataFrame</span><span class="p">(</span><span class="n">ch2</span><span class="p">,</span><span class="w"> </span><span class="n">data</span><span class="o">=</span><span class="n">ch</span><span class="o">@</span><span class="n">data</span><span class="p">)</span><span class="w">
</span><span class="c1">##merge with nightlight data</span><span class="w">
</span><span class="n">ch</span><span class="o">&lt;-</span><span class="n">merge</span><span class="p">(</span><span class="n">ch</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">by</span><span class="o">=</span><span class="s2">"ID_2"</span><span class="p">,</span><span class="n">all.x</span><span class="o">=</span><span class="nb">T</span><span class="p">)</span><span class="w">
</span><span class="c1">#plot</span><span class="w">
</span><span class="n">jpeg</span><span class="p">(</span><span class="s2">"nightlight-dmsp-statistics.jpeg"</span><span class="p">)</span><span class="w">
</span><span class="n">spplot</span><span class="p">(</span><span class="n">ch</span><span class="p">,</span><span class="n">zcol</span><span class="o">=</span><span class="s2">"dmsp.2008_mean"</span><span class="p">)</span><span class="w">
</span><span class="n">dev.off</span><span class="p">()</span><span class="w">
</span></code></pre></div></div>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>## png
##   2
</code></pre></div></div>

<div class="language-r highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">spplot</span><span class="p">(</span><span class="n">ch</span><span class="p">,</span><span class="n">zcol</span><span class="o">=</span><span class="s2">"dmsp.2008_mean"</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>

<p><img src="/assets/images/nightlight-dmsp-statistics.png" alt="" /></p>]]></content><author><name>Elías Cisneros</name></author><category term="code" /><category term="Nightlight" /><category term="R" /><summary type="html"><![CDATA[This is an easy and fast way to process DMSP-OLS nightlight data and to build your statistics, such as mean, min, max, or other.]]></summary></entry></feed>