<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dosage | FLH Website</title><link>https://francish.net/tags/dosage/</link><atom:link href="https://francish.net/tags/dosage/index.xml" rel="self" type="application/rss+xml"/><description>Dosage</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>en-us</language><lastBuildDate>Tue, 28 Jul 2026 00:00:00 +0000</lastBuildDate><image><url>https://francish.net/media/icon_hu8315282870087596650.png</url><title>Dosage</title><link>https://francish.net/tags/dosage/</link></image><item><title>🧪Analyzing dosage effects using an instrumental variable approach to handle noncompliance in RCTs💉</title><link>https://francish.net/post/2026_dosage/</link><pubDate>Tue, 28 Jul 2026 00:00:00 +0000</pubDate><guid>https://francish.net/post/2026_dosage/</guid><description>&lt;p>&lt;em>A plain-language guide, with a worked R example&lt;/em>&lt;/p>
&lt;p>Posted: 2026-07-29&lt;/p>
&lt;p>This is based on:&lt;/p>
&lt;blockquote>
&lt;p>Huang, F. L. (2026). Using fidelity of implementation data in randomized controlled trials: A primer on using instrumental variables in educational research. &lt;em>The Journal of Experimental Education.&lt;/em>
&lt;a href="https://www.tandfonline.com/doi/full/10.1080/00220973.2026.2672864" target="_blank" rel="noopener">https://www.tandfonline.com/doi/full/10.1080/00220973.2026.2672864&lt;/a>&lt;/p>
&lt;/blockquote>
&lt;p>If you’ve ever run (or read about) a randomized controlled trial in
education, you’ve probably run into this problem: not everyone assigned
to the treatment group actually &lt;em>does&lt;/em> (or takes) the treatment, and sometimes
people in the control group get a bit of it too. This is called
&lt;strong>noncompliance&lt;/strong>, and it’s the norm rather than the exception.&lt;/p>
&lt;p>The usual (and usually incorrect) way researchers handle this is to just
compare the outcomes of people who &lt;em>actually did&lt;/em> (or took) the program against
everyone else, treatment or control. The problem is that people who show
up and fully participate are probably different in other ways too — more
motivated, more organized, whatever — and those same traits could
independently improve their outcomes. So the comparison is contaminated
by a hidden confound.&lt;/p>
&lt;p>&lt;strong>Instrumental variable (IV) estimation&lt;/strong> offers a clean way around
this, and — conveniently — an RCT hands you the instrument for free: the
random assignment itself.&lt;/p>
&lt;p>&lt;strong>NOTE&lt;/strong>: IV estimation is “standard fare” in econometrics classes. In
econometerics books, usually a chapter or two is dedicated to the topic.
However, in education and psychology methods books, IVs are almost never
mentioned (not unless written by someone with an econometrics background
or a book on estimating causal effects). NOTE: &lt;u>I use IV to refer to
instrumental variables&lt;/u>– not independent variables.&lt;/p>
&lt;h2 id="the-core-idea">The core idea&lt;/h2>
&lt;p>Picture three variables:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Z&lt;/strong> — treatment &lt;em>assignment&lt;/em> (randomized: 1 = assigned to treatment,
0 = assigned to control)&lt;/li>
&lt;li>&lt;strong>T&lt;/strong> — treatment &lt;em>take-up&lt;/em> (did they actually participate? 1 = yes, 0
= no)&lt;/li>
&lt;li>&lt;strong>Y&lt;/strong> — the outcome of interest&lt;/li>
&lt;/ul>
&lt;p>If everyone complied perfectly, Z and T would be identical, and you
could just compare outcomes directly. With noncompliance, Z and T
diverge, and some unmeasured factor (call it U) may be driving both
take-up and the outcome.&lt;/p>
&lt;p>The trick: because Z was randomly assigned, it’s guaranteed to be
unrelated to that confound U. So instead of asking “what’s the effect of
T on Y,” we ask “how much does Z move T, and how much does Z move Y” —
then take the ratio. That ratio is called the &lt;strong>Wald estimator&lt;/strong>, and it
isolates the causal effect of treatment take-up for the people whose
behavior was actually changed by their assignment (the “compliers”).&lt;/p>
&lt;h2 id="the-iv-pathway">The IV pathway&lt;/h2>
&lt;img src="image/figure1-causal-diagrams.png" alt="Causal diagrams showing intervention effects" width="500">
&lt;p>The causal story breaks into three pieces:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Z → T&lt;/strong> (the “compliance rate”): does being assigned to treatment
actually make someone take it? In an RCT this is almost guaranteed —
you can’t get 0% take-up after actively assigning people to a program
(not unless you’ve done something really wrong).&lt;/li>
&lt;li>&lt;strong>T → Y&lt;/strong> (the effect you actually want): does &lt;em>taking&lt;/em> the treatment
change the outcome?&lt;/li>
&lt;li>&lt;strong>U → T and U → Y&lt;/strong>: an unmeasured confounder — like motivation — that
influences both whether someone participates and how well they do.
This is what makes a naive “compare participants to everyone else”
comparison biased.&lt;/li>
&lt;/ul>
&lt;p>Because Z was randomly assigned, it’s mathematically guaranteed to be
unrelated to U. That’s what makes Z a valid instrument: it moves T, but
has no back-door connection to Y other than through T. This last
condition — that assignment affects the outcome &lt;em>only&lt;/em> through
participation, with no direct shortcut — is called the &lt;strong>exclusion
restriction&lt;/strong>, and in most RCTs it holds by design (assignment alone
shouldn’t improve test scores; actually attending the program should).&lt;/p>
&lt;p>With that in place, you don’t need to observe U at all. You can recover
the causal effect using just the ratio of two observable quantities: the
intention-to-treat effect (Z’s effect on Y) divided by the compliance
rate (Z’s effect on T). That ratio is exactly what two-stage least
squares regression computes for you.&lt;/p>
&lt;h2 id="two-effects-worth-knowing">Two effects worth knowing&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>ITT (intention-to-treat):&lt;/strong> the effect of being &lt;em>assigned&lt;/em> to
treatment, regardless of whether people actually participated. This is
just Y regressed on Z. It’s a valid causal effect — just a diluted
one, since it includes people who never engaged. We report this and
this of general interest (it is a practical effect).&lt;/li>
&lt;li>&lt;strong>CACE (complier average causal effect)&lt;/strong>, also called LATE (the local
average treatment effect): the effect of the treatment specifically
for the “compliers” — people who took the treatment because they were
assigned to it (and wouldn’t have otherwise). This is what IV
estimation recovers, and it’s almost always larger than the ITT.&lt;/li>
&lt;/ul>
&lt;p>The relationship is simple: &lt;strong>ITT = compliance rate × CACE&lt;/strong>, so &lt;strong>CACE
= ITT ÷ compliance rate&lt;/strong>.&lt;/p>
&lt;h2 id="the-four-compliance-types">The four compliance types&lt;/h2>
&lt;p>Every participant in a trial falls into one of four types, based on what
they’d do &lt;em>if&lt;/em> assigned to treatment versus &lt;em>if&lt;/em> assigned to control:&lt;/p>
&lt;img src="image/figure2-compliance-types.png" alt="Causal diagrams showing intervention effects" width="400">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Type&lt;/th>
&lt;th>If assigned to treatment&lt;/th>
&lt;th>If assigned to control&lt;/th>
&lt;th>Can we identify them?&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;strong>Complier&lt;/strong>&lt;/td>
&lt;td>Takes it&lt;/td>
&lt;td>Skips it&lt;/td>
&lt;td>Only in aggregate (%)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Never-taker&lt;/strong>&lt;/td>
&lt;td>Skips it anyway&lt;/td>
&lt;td>Skips it anyway&lt;/td>
&lt;td>Yes — directly observable in the treatment group&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Always-taker&lt;/strong>&lt;/td>
&lt;td>Takes it anyway&lt;/td>
&lt;td>Takes it anyway&lt;/td>
&lt;td>Yes — directly observable in the control group&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;strong>Defier&lt;/strong>&lt;/td>
&lt;td>Skips it (does opposite)&lt;/td>
&lt;td>Takes it (does opposite)&lt;/td>
&lt;td>Assumed not to exist&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Two of these types are visible directly in your data:&lt;/p>
&lt;ul>
&lt;li>Anyone &lt;strong>assigned to treatment but who never showed up&lt;/strong> is a
never-taker.&lt;/li>
&lt;li>Anyone &lt;strong>assigned to control who got the treatment anyway&lt;/strong> (a
crossover) is an always-taker.&lt;/li>
&lt;/ul>
&lt;p>The tricky part is that among the people who &lt;em>did&lt;/em> what their assignment
predicted (Z=1,T=1 or Z=0,T=0), you can’t tell compliers apart from
always-takers or never-takers just by looking at one person. The fix is
to lean on randomization itself: since assignment was random, the
&lt;em>proportion&lt;/em> of never-takers and always-takers should be roughly equal
across both arms of the trial. That lets you back out the complier
percentage using simple arithmetic, even though you can’t tag each
individual.&lt;/p>
&lt;p>IV analysis also assumes there are &lt;strong>no defiers&lt;/strong> — nobody who takes the
opposite of what they’re told. This is called the &lt;em>monotonicity
assumption&lt;/em>, and it’s usually reasonable: it just says assignment can
only push participation up, never down.&lt;/p>
&lt;p>In many school-based interventions, control-group students literally
can’t access the program, so there are no always-takers either — this is
called &lt;strong>one-sided noncompliance&lt;/strong>, and it’s the simplest case to work
with.&lt;/p>
&lt;p>When we refer to dosage (or fidelity of implementation), we are talking about the &lt;em>actual amount&lt;/em> of
treatment received by the participants, as opposed to their assigned
dose. Above a certain threshold, we may classify an individual based on a certain compliance type.&lt;/p>
&lt;h2 id="worked-example-in-r">Worked example in R&lt;/h2>
&lt;p>This example is based on an RCT (here using synthetic data) which
trained fifth-graders on self-monitoring and self-regulation skills
through school counselor–led sessions: 310 students across 14 schools
were randomized (158 treatment, 152 control). Randomization was at the
student level. The outcome is the “Teachers Who Care” scale score.&lt;/p>
&lt;p>Fidelity data showed that 33% of students assigned to treatment never
showed up to a single session (never-takers), and since the program
wasn’t available to the control group, always-takers can be ruled out —
this is a one-sided noncompliance case. In this case, we can use number
of sessions as the dosage variable and if a student attended at least
one session, we can consider them a complier (note: you can perform
sensitivity analyses based on the number of sessions attended; see the
paper).&lt;/p>
&lt;p>&lt;strong>Step 1: Estimate the intention-to-treat (ITT) effect&lt;/strong>&lt;/p>
&lt;p>Regress the outcome on assignment, with covariates, clustering standard
errors by school:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-r" data-lang="r">&lt;span class="line">&lt;span class="cl">&lt;span class="nf">library&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">estimatr&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ex&lt;/span> &lt;span class="o">&amp;lt;-&lt;/span> &lt;span class="n">rio&lt;/span>&lt;span class="o">::&lt;/span>&lt;span class="nf">import&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;https://github.com/flh3/pubdata/raw/refs/heads/main/JXE_IV/exiv.rds&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">itt&lt;/span> &lt;span class="o">&amp;lt;-&lt;/span> &lt;span class="nf">lm_robust&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">teachcare_post&lt;/span> &lt;span class="o">~&lt;/span> &lt;span class="n">int&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">teachcare_pre&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">fem&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">frpl&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">black&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">other&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ex&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">cluster&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">school_id&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">fixed_effects&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">school_id&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">summary&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">itt&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>Call:
lm_robust(formula = teachcare_post ~ int + teachcare_pre + fem +
frpl + black + other, data = ex, clusters = school_id, fixed_effects = school_id)
Standard error type: CR2
Coefficients:
Estimate Std. Error t value Pr(&amp;gt;|t|) CI Lower CI Upper DF
int 0.18328 0.07975 2.2982 0.0462083 0.003797 0.36277 9.315
teachcare_pre 0.58589 0.09143 6.4084 0.0002158 0.374718 0.79707 7.925
fem 0.17876 0.04742 3.7699 0.0049753 0.070370 0.28716 8.425
frpl 0.14516 0.07720 1.8803 0.0927318 -0.029453 0.31976 9.010
black -0.06814 0.07332 -0.9294 0.3780712 -0.235231 0.09894 8.586
other 0.15943 0.08445 1.8879 0.0940230 -0.033743 0.35260 8.389
Multiple R-squared: 0.4595 , Adjusted R-squared: 0.4241
Multiple R-squared (proj. model): 0.4152 , Adjusted R-squared (proj. model): 0.3769
F-statistic (proj. model): 53.97 on 6 and 13 DF, p-value: 1.934e-08
&lt;/code>&lt;/pre>
&lt;p>This gives an ITT effect of about &lt;strong>0.18&lt;/strong> (statistically significant; in SD units).&lt;/p>
&lt;p>&lt;strong>Step 2: Estimate the compliance rate&lt;/strong>&lt;/p>
&lt;p>Regress actual participation (&lt;code>takeup&lt;/code>) on assignment (&lt;code>int&lt;/code>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-r" data-lang="r">&lt;span class="line">&lt;span class="cl">&lt;span class="n">first.stage&lt;/span> &lt;span class="o">&amp;lt;-&lt;/span> &lt;span class="nf">lm_robust&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">takeup&lt;/span> &lt;span class="o">~&lt;/span> &lt;span class="n">int&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">teachcare_pre&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">fem&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">frpl&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">black&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">other&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ex&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">cluster&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">school_id&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">fixed_effects&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">school_id&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">summary&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">first.stage&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>Call:
lm_robust(formula = takeup ~ int + teachcare_pre + fem + frpl +
black + other, data = ex, clusters = school_id, fixed_effects = school_id)
Standard error type: CR2
Coefficients:
Estimate Std. Error t value Pr(&amp;gt;|t|) CI Lower CI Upper DF
int 0.66529 0.02604 25.5506 6.080e-10 0.60669 0.72389 9.315
teachcare_pre -0.08186 0.01815 -4.5099 2.024e-03 -0.12379 -0.03993 7.925
fem -0.02517 0.03510 -0.7172 4.927e-01 -0.10541 0.05506 8.425
frpl 0.07971 0.04134 1.9280 8.592e-02 -0.01380 0.17322 9.010
black -0.06270 0.03651 -1.7176 1.216e-01 -0.14590 0.02049 8.586
other 0.06827 0.04928 1.3854 2.016e-01 -0.04445 0.18099 8.389
Multiple R-squared: 0.5375 , Adjusted R-squared: 0.5072
Multiple R-squared (proj. model): 0.5323 , Adjusted R-squared (proj. model): 0.5017
F-statistic (proj. model): 602.5 on 6 and 13 DF, p-value: 4.013e-15
&lt;/code>&lt;/pre>
&lt;p>The coefficient on &lt;code>int&lt;/code> here is the compliance rate — about &lt;strong>0.67&lt;/strong>,
meaning 67% of students assigned to treatment actually participated.&lt;/p>
&lt;p>&lt;strong>Step 3: Estimate the CACE with two-stage least squares&lt;/strong>&lt;/p>
&lt;p>Rather than doing the two steps manually, just use &lt;code>iv_robust&lt;/code>, which
handles standard errors correctly. The formula has two parts separated
by &lt;code>|&lt;/code>: the outcome model first, then the instrument model (same
covariates in both):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-r" data-lang="r">&lt;span class="line">&lt;span class="cl">&lt;span class="n">iv1&lt;/span> &lt;span class="o">&amp;lt;-&lt;/span> &lt;span class="nf">iv_robust&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">teachcare_post&lt;/span> &lt;span class="o">~&lt;/span> &lt;span class="n">takeup&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">teachcare_pre&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">fem&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">frpl&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">black&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">other&lt;/span> &lt;span class="o">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">int&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">teachcare_pre&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">fem&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">frpl&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">black&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">other&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ex&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">cluster&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">school_id&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">fixed_effects&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">school_id&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nf">summary&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">iv1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;pre>&lt;code>Call:
iv_robust(formula = teachcare_post ~ takeup + teachcare_pre +
fem + frpl + black + other | int + teachcare_pre + fem +
frpl + black + other, data = ex, clusters = school_id, fixed_effects = school_id)
Standard error type: CR2
Coefficients:
Estimate Std. Error t value Pr(&amp;gt;|t|) CI Lower CI Upper DF
takeup 0.27549 0.11852 2.3245 0.0442356 0.008761 0.5422 9.315
teachcare_pre 0.60845 0.09235 6.5882 0.0001831 0.394924 0.8220 7.883
fem 0.18570 0.04901 3.7893 0.0049220 0.073495 0.2979 8.344
frpl 0.12320 0.07507 1.6412 0.1357943 -0.047087 0.2935 8.839
black -0.05087 0.07127 -0.7137 0.4942873 -0.213226 0.1115 8.607
other 0.14062 0.09303 1.5116 0.1671220 -0.071957 0.3532 8.443
Multiple R-squared: 0.4552 , Adjusted R-squared: 0.4195
Multiple R-squared (proj. model): 0.4105 , Adjusted R-squared (proj. model): 0.3719
F-statistic (proj. model): 54.15 on 6 and 13 DF, p-value: 1.895e-08
&lt;/code>&lt;/pre>
&lt;p>This gives a &lt;strong>CACE of about 0.28&lt;/strong> — roughly 55% larger than the ITT of
0.18. That matches the arithmetic: 0.18 ÷ 0.67 ≈ 0.28.&lt;/p>
&lt;p>In plain terms: being &lt;em>assigned&lt;/em> to the program raised scores by 0.18
points on average across everyone. But among students who actually
attended at least one session, the effect of &lt;em>participating&lt;/em> was closer
to 0.28 points.&lt;/p>
&lt;h2 id="a-note-on-reporting">A note on reporting&lt;/h2>
&lt;p>When you write this up, it’s good practice to report both effects
together, plus the compliance rate:&lt;/p>
&lt;blockquote>
&lt;p>The intention-to-treat (ITT) effect was 0.18 (p &amp;lt; .05). Two-stage
least squares regression, using random assignment as an instrument for
actual participation, produced a complier average causal effect (CACE)
of 0.28 (p &amp;lt; .05) — about 55% larger than the ITT, reflecting the
effect among the 67% of students who attended at least one session.&lt;/p>
&lt;/blockquote>
&lt;h2 id="things-to-keep-in-mind">Things to keep in mind&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>IVs can’t rescue a program that didn’t work.&lt;/strong> If the ITT isn’t
statistically significant, the CACE usually won’t be either — even though it’s
numerically larger.&lt;/li>
&lt;li>&lt;strong>Clustered data (e.g., students within schools) needs cluster-robust
standard errors&lt;/strong> — and with fewer than ~40 clusters (common in
school-based RCTs), use the CR2 correction rather than the default,
which &lt;code>iv_robust&lt;/code>’s &lt;code>cluster&lt;/code> argument handles for you.&lt;/li>
&lt;li>&lt;strong>One instrument can only predict one endogenous variable.&lt;/strong> If you
have two different “doses” of noncompliance, one instrument won’t be able to estimate the causal effect.&lt;/li>
&lt;/ul>
&lt;p>See the paper for more details and how to estimate the effect using a structural equation modeling or with a Bayesian approach.&lt;/p></description></item></channel></rss>