<?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://mnwright.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://mnwright.github.io/" rel="alternate" type="text/html" /><updated>2026-02-19T08:05:36+00:00</updated><id>https://mnwright.github.io/feed.xml</id><title type="html">Marvin N. Wright</title><subtitle>An amazing website.</subtitle><author><name>Marvin N. Wright</name><email>web@wrig.de</email></author><entry><title type="html">Full text links in publication list</title><link href="https://mnwright.github.io/publications/full-text-links/" rel="alternate" type="text/html" title="Full text links in publication list" /><published>2018-05-15T00:00:00+00:00</published><updated>2018-05-15T00:00:00+00:00</updated><id>https://mnwright.github.io/publications/full-text-links</id><content type="html" xml:base="https://mnwright.github.io/publications/full-text-links/"><![CDATA[<p>The <a href="/publications">publication list</a> now includes a full text link for most papers (<i class="fa fa-file-pdf-o"></i>PDF links). For open access papers, this is just the link to the publisher’s version and some others are available on arXiv. A few papers are not freely available but for most of them I am allowed to share them privately (e.g. via <a href="mailto:web@wrig.de">email</a>).</p>]]></content><author><name>Marvin N. Wright</name><email>web@wrig.de</email></author><category term="publications" /><summary type="html"><![CDATA[The publication list now includes a full text link for most papers (PDF links). For open access papers, this is just the link to the publisher’s version and some others are available on arXiv. A few papers are not freely available but for most of them I am allowed to share them privately (e.g. via email).]]></summary></entry><entry><title type="html">ranger out-of-bag proximity matrix</title><link href="https://mnwright.github.io/ranger/r/oob-proximity-matrix/" rel="alternate" type="text/html" title="ranger out-of-bag proximity matrix" /><published>2017-12-14T00:00:00+00:00</published><updated>2017-12-14T00:00:00+00:00</updated><id>https://mnwright.github.io/ranger/r/oob-proximity-matrix</id><content type="html" xml:base="https://mnwright.github.io/ranger/r/oob-proximity-matrix/"><![CDATA[<p>I’ve created a function to compute an out-of-bag proximity matrix of a ranger object, based on <code class="language-plaintext highlighter-rouge">edarf::extract_proximity</code>:</p>

<div class="language-R highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">extract_proximity_oob</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">function</span><span class="p">(</span><span class="n">fit</span><span class="p">,</span><span class="w"> </span><span class="n">olddata</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
  </span><span class="n">pred</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">predict</span><span class="p">(</span><span class="n">fit</span><span class="p">,</span><span class="w"> </span><span class="n">olddata</span><span class="p">,</span><span class="w"> </span><span class="n">type</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"terminalNodes"</span><span class="p">)</span><span class="o">$</span><span class="n">predictions</span><span class="w">
  </span><span class="n">prox</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">matrix</span><span class="p">(</span><span class="kc">NA</span><span class="p">,</span><span class="w"> </span><span class="n">nrow</span><span class="p">(</span><span class="n">pred</span><span class="p">),</span><span class="w"> </span><span class="n">nrow</span><span class="p">(</span><span class="n">pred</span><span class="p">))</span><span class="w">
  </span><span class="n">ntree</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ncol</span><span class="p">(</span><span class="n">pred</span><span class="p">)</span><span class="w">
  </span><span class="n">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">nrow</span><span class="p">(</span><span class="n">prox</span><span class="p">)</span><span class="w">
  
  </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nf">is.null</span><span class="p">(</span><span class="n">fit</span><span class="o">$</span><span class="n">inbag.counts</span><span class="p">))</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="n">stop</span><span class="p">(</span><span class="s2">"call ranger with keep.inbag = TRUE"</span><span class="p">)</span><span class="w">
  </span><span class="p">}</span><span class="w">
  
  </span><span class="c1"># Get inbag counts</span><span class="w">
  </span><span class="n">inbag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">simplify2array</span><span class="p">(</span><span class="n">fit</span><span class="o">$</span><span class="n">inbag.counts</span><span class="p">)</span><span class="w">
  
  </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="m">1</span><span class="o">:</span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="m">1</span><span class="o">:</span><span class="n">n</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
      </span><span class="c1"># Use only trees where both obs are OOB</span><span class="w">
      </span><span class="n">tree_idx</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">inbag</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="o">==</span><span class="w"> </span><span class="m">0</span><span class="w"> </span><span class="o">&amp;</span><span class="w"> </span><span class="n">inbag</span><span class="p">[</span><span class="n">j</span><span class="p">,</span><span class="w"> </span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="m">0</span><span class="w">
      </span><span class="n">prox</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">sum</span><span class="p">(</span><span class="n">pred</span><span class="p">[</span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">tree_idx</span><span class="p">]</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">pred</span><span class="p">[</span><span class="n">j</span><span class="p">,</span><span class="w"> </span><span class="n">tree_idx</span><span class="p">])</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nf">sum</span><span class="p">(</span><span class="n">tree_idx</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">prox</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>(taken from https://github.com/imbs-hl/ranger/issues/234)</p>]]></content><author><name>Marvin N. Wright</name><email>web@wrig.de</email></author><category term="ranger" /><category term="R" /><summary type="html"><![CDATA[I’ve created a function to compute an out-of-bag proximity matrix of a ranger object, based on edarf::extract_proximity:]]></summary></entry><entry><title type="html">How are trees saved in ranger?</title><link href="https://mnwright.github.io/ranger/r/ranger-forest-object/" rel="alternate" type="text/html" title="How are trees saved in ranger?" /><published>2017-12-14T00:00:00+00:00</published><updated>2017-12-14T00:00:00+00:00</updated><id>https://mnwright.github.io/ranger/r/ranger-forest-object</id><content type="html" xml:base="https://mnwright.github.io/ranger/r/ranger-forest-object/"><![CDATA[<p>A frequently asked question is: “How are trees saved in ranger objects?”</p>

<p>Answer (taken from https://github.com/imbs-hl/ranger/issues/147):</p>

<p><code class="language-plaintext highlighter-rouge">child.nodeIDs</code> is a list containing two vectors for each tree. These are the child node IDs for each node in the tree. The left children in the first vector, the right children in the second vector. The nodeIDs are 0-indexed. However, since the root of a tree (ID 0) cannot be a child, the 0 is used for terminal nodes.</p>

<p>In <code class="language-plaintext highlighter-rouge">split.varIDs</code> there is a vector for each tree with the splitting variables for each node in the tree. These IDs are 0-indexed, too. If you use the formula interface, the 0-variable should be the outcome. Terminal nodes also have a 0 here.</p>

<p>In <code class="language-plaintext highlighter-rouge">split.values</code> the splitting values for all nodes are saved. In terminal nodes, the outcome for this node is saved in <code class="language-plaintext highlighter-rouge">split.values</code>.</p>

<p>Note: A 0 in <code class="language-plaintext highlighter-rouge">split.varIDs</code> is no sufficient condition for a terminal node. Check <code class="language-plaintext highlighter-rouge">child.nodeIDs</code> to be sure.</p>]]></content><author><name>Marvin N. Wright</name><email>web@wrig.de</email></author><category term="ranger" /><category term="R" /><summary type="html"><![CDATA[A frequently asked question is: “How are trees saved in ranger objects?”]]></summary></entry></feed>