import%20marimo%0A%0A__generated_with%20%3D%20%220.11.20%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_()%3A%0A%20%20%20%20%23%20Relevant%20Imports%0A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20seaborn%20as%20sns%0A%20%20%20%20import%20matplotlib.pyplot%20as%20plt%0A%20%20%20%20from%20scipy.stats%20import%20skewnorm%0A%20%20%20%20import%20statsmodels.formula.api%20as%20sm%0A%20%20%20%20from%20stargazer.stargazer%20import%20Stargazer%20%20%23%20noqa%3A%20F401%0A%20%20%20%20from%20IPython.display%20import%20display%2C%20HTML%0A%20%20%20%20import%20os%0A%0A%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20os.chdir(%22assets%2Farticles%2Fnotebooks%22)%0A%20%20%20%20except%3A%0A%20%20%20%20%20%20%20%20pass%0A%0A%20%20%20%20sns.set_theme(style%3D%22darkgrid%22)%0A%20%20%20%20return%20HTML%2C%20Stargazer%2C%20display%2C%20mo%2C%20np%2C%20os%2C%20pd%2C%20plt%2C%20skewnorm%2C%20sm%2C%20sns%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%23%20Controlling%20for%20%22X%22%3A%20%0A%20%20%20%20%20%20%20%20%3Ccenter%3E%20**Understanding%20linear%20regression%20mechanics%20via%20the%20Frisch-Waugh-Lovell%20Theorem**%20%3C%2Fcenter%3E%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%20Introduction%0A%0A%20%20%20%20%20%20%20%20Applied%20econometrics%20is%20generally%20interested%20in%20establishing%20causality.%20That%20is%2C%20what%20is%20the%20%E2%80%9Ctreatment%E2%80%9D%20effect%20of%20%24T%24%20on%20some%20outcome%20%24y%24.%20In%20a%20simple%20bivariate%20case%2C%20we%20can%20imagine%20randomly%20assigning%20treatment%20%24T%3D1%24%20to%20some%20individuals%20and%20%24T%3D0%24%20to%20others.%20This%20can%20be%20represented%20by%20the%20following%20linear%20regression%20model%3A%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20y_i%20%3D%20%5Cbeta_0%20%2B%20%5Cbeta_1T_i%2B%5Cepsilon_i%20%0A%20%20%20%20%20%20%20%20%5Ctag%7B1%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20If%20we%20assume%20the%20treatment%20is%20truly%20randomly%20assigned%2C%20then%20%24T%24%20is%20independent%20to%20the%20error%20term%20or%2C%20in%20the%20economists%20jargon%2C%20exogenous.%20Therefore%2C%20we%20can%20estimate%20eq.%20(1)%20using%20ordinary%20least%20squares%20(OLS)%20and%20interpret%20the%20coefficient%20estimate%20on%20%24T%24%20with%20a%20causal%20interpretation%E2%80%8A-%E2%80%8Athe%20average%20treatment%20effect%20(ATE)%3A%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20%5Ctext%7BATE%7D%3D%5Cmathbb%7BE_n%7D%5By(T%3D1)-y(T%3D0)%5D%3D%5Cmathbb%7BE%7D%5B(%5Cbeta_0%2B%5Cbeta_1)-%5Cbeta_0%5D%3D%5Cbeta_1%20%0A%20%20%20%20%20%20%20%20%5Ctag%7B2%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20However%2C%20when%20we%20are%20dealing%20with%20non-experimental%20data%2C%20it%20is%20almost%20always%20the%20case%20that%20the%20treatment%20of%20interest%20is%20not%20independent%20to%20the%20error%20term%20or%2C%20again%20in%20the%20economists%20jargon%2C%20endogenous.%20For%20example%2C%20suppose%20we%20were%20interested%20in%20identifying%20the%20treatment%20effect%20of%20time%20spent%20reading%20books%20as%20a%20child%20on%20an%20individuals%20future%20educational%20attainment.%20Without%20any%20random%20assignment%20of%20time%20spent%20reading%20as%20a%20child%2C%20estimating%20a%20na%C3%AFve%20linear%20regression%2C%20as%20in%20eq.%20(1)%2C%20will%20fail%20to%20capture%20a%20large%20set%20of%20additional%20factors%20that%20may%20drive%20individual%20time%20spent%20reading%20books%20and%20educational%20attainment%20(i.e.%2C%20socioeconomic%20status%2C%20parents%20education%2C%20underlying%20ability%2C%20other%20hobbies%2C%20etc.).%20Thus%2C%20when%20dealing%20with%20non-experimental%20data%2C%20we%20must%20rely%20on%20controlling%20for%20additional%20covariates%20and%20then%20make%20an%20argument%20that%20treatment%20is%20now%20%22as%20good%20as%20randomly%20assigned%22%20to%20establish%20causality.%20This%20is%20known%20as%20the%20conditional%20independence%20assumption%20(CIA).%20In%20our%20educational%20example%20above%2C%20we%20can%20reframe%20eq.%20(1)%20as%3A%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20%5Ctext%7BEducation%7D_i%3D%5Cbeta_0%2B%5Cbeta_1%5Ctext%7BRead%7D_i%2B%5Cmathbf%7BX%7D_i%20%5CPhi%20%2B%20%5Cepsilon_i%0A%20%20%20%20%20%20%20%20%5Ctag%7B3%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20where%20we%20now%20control%20for%20a%20set%20of%20observed%20covariates%20%24X%24.%20The%20key%20estimate%20of%20interest%20on%20Read%20takes%20on%20a%20causal%20interpretation%20if%20and%20only%20if%20the%20CIA%20holds.%20That%20is%2C%20time%20spent%20reading%20is%20exogenous%20(i.e.%2C%20no%20uncontrolled%20confounders)%20conditional%20on%20%24X%24.%20Equivalently%2C%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20%5Ctext%7Bcov%7D(%5Ctext%7BRead%7D_i%2C%5Cepsilon_i%7C%5Cmathbf%7BX%7D_i)%3D0%0A%20%20%20%20%20%20%20%20%5Ctag%7B4%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20Without%20the%20CIA%2C%20our%20coefficient%20estimates%20are%20biased%20and%20we%20are%20limited%20in%20what%20we%20can%20say%20in%20terms%20of%20causality.%20Realistically%2C%20it%20is%20often%20quite%20difficult%20to%20make%20the%20argument%20for%20the%20CIA%20and%2C%20unfortunately%2C%20this%20assumption%20is%20not%20directly%20testable.%20In%20fact%2C%20what%20I%20have%20discussed%20above%20is%20a%20fundamental%20motivator%20for%20an%20entire%20field%20of%20econometrics%20that%20is%20devoted%20to%20establishing%2C%20developing%2C%20and%20implementing%20quasi-experimental%20research%20designs%20to%20establish%20causality%20including%2C%20but%20most%20definitely%20not%20limited%20to%2C%20difference-in-differences%2C%20synthetic%20control%2C%20and%20instrumental%20variable%20designs.%20These%20quasi-experimental%20designs%20seek%20to%20exploit%20exogenous%20(%22as%20good%20as%20random%22)%20sources%20of%20variation%20in%20a%20treatment%20of%20interest%20%24T%24%20to%20study%20the%20causal%20effect%20of%20%24T%24%20on%20some%20outcome(s)%20%24y%24.%20There%20are%20some%20excellent%20econometric%20texts%20that%20are%20accessible%20to%20those%20with%20little%20to%20no%20background%20in%20econometrics%2C%20including%20%22The%20Effect%22%20by%20Nick%20Huntington-Klein%2C%20%22Causal%20Inference%3A%20The%20Mixtape%22%20by%20Scott%20Cunningham%2C%20or%20%22Causal%20Inference%20for%20the%20Brave%20and%20True%22%20by%20Matheus%20Facure%20Alves.%5B1%5D%5B2%5D%5B3%5D%20Joshua%20Angrist%20and%20J%C3%B6rn-Steffen%20Pischke%20provide%20a%20deeper%20dive%20in%20%22Mostly%20Harmless%20Econometrics%22%20for%20those%20interested.%5B4%5D%0A%0A%20%20%20%20%20%20%20%20Despite%20the%20fact%20that%20establishing%20the%20CIA%20is%20particularly%20difficult%20through%20controlling%20for%20covariates%20alone%2C%20there%20is%20a%20substantial%20theorem%20in%20econometrics%20that%20provides%20some%20very%20powerful%20intuition%20into%20what%20it%20really%20means%20to%20%22control%22%20for%20additional%20covariates.%20Ultimately%2C%20this%20not%20only%20provides%20a%20deeper%20understanding%20to%20the%20underlying%20mechanisms%20of%20a%20linear%20regression%2C%20but%20also%20how%20to%20conceptualize%20key%20relationships%20of%20interest%20(i.e.%2C%20the%20effect%20of%20%24T%24%20on%20%24Y%24).%0A%0A%20%20%20%20%20%20%20%20%3E%20Note%20that%20I%20have%20(intentionally)%20glossed%20over%20some%20additional%20causal%20inference%2Feconometric%20assumptions%2C%20such%20as%20Positivity%2FCommon%20Support%20%26%20SUTVA%2FCounterfactual%20Consistency.%20In%20general%2C%20the%20CIA%2FIgnorability%20assumption%20is%20the%20most%20common%20assumption%20that%20needs%20to%20be%20defended.%20However%2C%20it%20is%20recommended%20that%20the%20interested%20reader%20familiarize%20themselves%20with%20the%20additional%20assumptuons.%20In%20brief%2C%20Positivity%20ensures%20we%20have%20non-treated%20households%20that%20are%0A%20%20%20%20%20%20%20%20similar%20%26%20comparable%20to%20treated%20households%20to%20enable%20counterfactual%20estimation%20%26%20SUTVA%20ensures%20there%20is%20no%0A%20%20%20%20%20%20%20%20spillover%2Fnetwork%20type%20effects%20(treatment%20of%20one%20individual%20impacts%20another).%0A%0A%20%20%20%20%20%20%20%20%23%23%20Frisch-Waugh-Lovell%20Theorem%0A%0A%20%20%20%20%20%20%20%20In%20the%2019th%20century%2C%20econometricians%20Ragnar%20Frisch%20and%20Frederick%20V.%20Waugh%20developed%2C%20which%20was%20later%20generalized%20by%20Michael%20C.%20Lovell%2C%20a%20~super%20cool~%20theorem%20(the%20FWL%20Theorem)%20that%20allows%20for%20the%20estimation%20of%20any%20key%20parameter(s)%20in%20a%20linear%20regression%20where%20one%20first%20%22partials%20out%22%20the%20effects%20of%20the%20additional%20covariates.%5B5%5D%5B6%5D%20First%2C%20a%20quick%20refresher%20on%20linear%20regression%20will%20be%20helpful.%0A%0A%20%20%20%20%20%20%20%20A%20linear%20regression%20solves%20for%20the%20best%20linear%20predictors%20for%20an%20outcome%20%24y%24%20given%20a%20set%20of%20variables%20%24X%24%2C%20where%20the%20fitted%20values%20of%20%24y%24%20are%20projected%20onto%20the%20space%20spanned%20by%20%24X%24.%20In%20matrix%20notation%2C%20the%20linear%20regression%20model%20we%20are%20interested%20in%20is%20characterized%20by%3A%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20y%3D%5Cmathbf%7BX%7D%20%5Cbeta%20%2B%20%5Cepsilon%0A%20%20%20%20%20%20%20%20%5Ctag%7B5%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20The%20objective%20of%20a%20linear%20regression%20is%20to%20minimize%20the%20residual%20sum%20of%20squares%20(RSS)%2C%20thus%20can%20be%20solved%20via%20the%20following%20optimization%20problem%3A%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20%5Cmin_%7B%5Cbeta%7D(y-%5Cmathbf%7BX%7D%5Cbeta)'(y-%5Cmathbf%7BX%7D%5Cbeta)%0A%20%20%20%20%20%20%20%20%5Ctag%7B6%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20Taking%20the%20derivative%20and%20setting%20equal%20to%20zero%2C%20the%20optimal%20solution%20to%20(6)%20is%3A%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20%5Cbeta%5E*%20%3D%20(%5Cmathbf%7BX%7D'%5Cmathbf%7BX%7D)%5E%7B-1%7D%5Cmathbf%7BX%7D'y%0A%20%20%20%20%20%20%20%20%5Ctag%7B7%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20This%20is%20the%20ordinary%20least%20squares%20(OLS)%20estimator%20that%20is%20the%20workhorse%20behind%20the%20scenes%20when%20we%20run%20a%20linear%20regression%20to%20obtain%20the%20parameter%20estimates.%20Now%20with%20that%20refresher%20out%20of%20the%20way%2C%20let's%20get%20to%20what%20makes%20the%20FWL%20so%20great.%0A%0A%20%20%20%20%20%20%20%20Let's%20return%20to%20our%20example%20of%20estimating%20the%20educational%20returns%20to%20reading%20as%20a%20child.%20Suppose%20we%20only%20want%20to%20obtain%20the%20key%20parameter%20of%20interest%20in%20eq.%20(3)%3B%20that%20is%2C%20the%20effect%20of%20days%20per%20month%20spent%20reading%20as%20a%20child%20on%20educational%20attainment.%20Recall%20that%20in%20order%20to%20make%20a%20causal%20statement%20about%20our%20estimate%2C%20we%20must%20satisfy%20the%20CIA.%20Thus%2C%20we%20can%20control%20for%20a%20set%20of%20additional%20covariates%20X%20and%20then%20estimate%20(3)%20directly%20using%20the%20OLS%20estimator%20derived%20in%20(7).%20However%2C%20the%20FWL%20Theorem%20allows%20us%20to%20obtain%20the%20exact%20same%20key%20parameter%20estimate%20on%20Read%20under%20the%20following%203-step%20procedure%3A%0A%0A%20%20%20%20%20%20%20%201.%20Regress%20Read%20onto%20the%20set%20of%20covariates%20%24X%24%20only%20and%2C%20similarly%2C%20regress%20Education%20onto%20the%20set%20of%20covariates%20%24X%24%20only%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20%5Ctext%7BRead%7D_i%3D%5Cpsi_0%2B%5Cmathbf%7BX%7D_i%5Cmathbf%7B%5CPsi%20%7D%2B%5Cxi_i%0A%20%20%20%20%20%20%20%20%5Ctag%7B8%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20%5Ctext%7BEducation%7D_i%3D%5Comega_0%2B%5Cmathbf%7BX%7D_i%5Cmathbf%7B%5COmega%20%7D%2B%5Cnu_i%0A%20%20%20%20%20%20%20%20%5Ctag%7B9%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%202.%20Store%20the%20residuals%20after%20estimating%20(8)%2B(9)%20denoted%20%24%5Ctext%7BRead%7D_i%5E*%24%20and%20%24%5Ctext%7BEducation%7D_i%5E*%24%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20%5Ctext%7BRead%7D_i%5E*%3D%5Ctext%7BRead%7D_i%20-%20%5Cwidehat%7B%5Ctext%7BRead%7D_i%7D%0A%20%20%20%20%20%20%20%20%5Ctag%7B10%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20%5Ctext%7BEducation%7D_i%5E*%3D%5Ctext%7BEducation%7D_i%20-%20%5Cwidehat%7B%5Ctext%7BEducation%7D_i%7D%0A%20%20%20%20%20%20%20%20%5Ctag%7B11%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%203.%20Regress%20%24%5Ctext%7BEducation%7D_i%5E*%24%20onto%20%24%5Ctext%7BRead%7D_i%5E*%24%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20%5Ctext%7BEducation%7D_i%5E*%3D%5Cbeta_0%2B%5Cbeta%5E*%5Ctext%7BRead%7D_i%5E*%2B%5Cepsilon%0A%20%20%20%20%20%20%20%20%5Ctag%7B12%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20And%20that's%20it!%0A%0A%20%20%20%20%20%20%20%20Intuitively%2C%20the%20FWL%20theorem%20partials%20out%20the%20variation%20in%20Read%20(the%20treatment%2Fvariable%20of%20interest)%20and%20Education%20(the%20outcome%20of%20interest)%20that%20is%20explained%20by%20the%20additional%20covariates%2C%20and%20then%20uses%20the%20remaining%20variation%20to%20explain%20the%20key%20relationship%20of%20interest.%20This%20procedure%20can%20be%20generalized%20for%20any%20number%20of%20key%20variables%20of%20interest.%20For%20a%20more%20formal%20proof%20of%20this%20theorem%2C%20refer%20to%20%5B7%5D.%20The%20FWL%20theorem%20has%20been%20in%20the%20spotlight%20recently%20as%20the%20theoretical%20underpinning%20for%20debiased%2Forthogonal%20machine%20learning%20where%20steps%201%20and%202%20are%20conducted%20using%20machine%20learning%20algorithms%20rather%20than%20OLS.%20There%20are%20very%20cool%20developments%20occurring%20that%20are%20bridging%20the%20gaps%20between%20econometrics%20and%20machine%20learning%2C%20and%20I%20hope%20to%20have%20future%20posts%20with%20some%20cool%20applications%20with%20respect%20to%20some%20of%20these%20new%20methods.%20However%2C%20part%202%20of%20Matheus%20Facure%20Alves'%20%22Causal%20Inference%20for%20the%20Brave%20and%20True%22%20is%20a%20great%20place%20to%20start.%0A%0A%20%20%20%20%20%20%20%20Now%20you%20may%20wonder%20why%20in%20the%20world%20would%20you%20ever%20go%20through%20this%20process%20to%20obtain%20the%20exact%20same%20key%20estimate.%20Well%20for%20one%2C%20it%20provides%20an%20immense%20amount%20of%20intuition%20behind%20the%20mechanisms%20in%20a%20linear%20regression.%20Secondly%2C%20it%20allows%20you%20to%20visualize%20the%20remaining%20variation%20in%20your%20treatment%20(Read)%20that%20is%20being%20used%20to%20explain%20the%20remaining%20variation%20in%20your%20outcome%20(Education).%20Let%20us%20look%20at%20this%20in%20action!%0A%0A%20%20%20%20%20%20%20%20%23%23%20FWL%20Theorem%20Application%0A%0A%20%20%20%20%20%20%20%20In%20this%20section%2C%20we%20are%20going%20to%20simulate%20a%20highly%20stylized%20dataset%20to%20provide%20a%20simplified%20numerical%20example%20of%20applying%20the%20FWL%20theorem%20in%20answering%20our%20empirical%20question%20of%20the%20educational%20returns%20to%20childhood%20reading.%0A%20%20%20%20%20%20%20%20Suppose%20we%20hypothesize%20a%20set%20of%20demographic%20variables%20that%20we%20determine%20to%20be%20the%20relevant%20confounders%20necessary%20to%20satisfy%20the%20CIA%20in%20eq.%20(3)%2C%20and%20thus%20allowing%20us%20to%20obtain%20a%20causal%20interpretation%20for%20the%20education%20returns%20to%20childhood%20reading.%20Namely%2C%20suppose%20we%20identify%20the%20key%20confounders%20to%20be%20the%20average%20education%20level%20of%20both%20parents%20in%20years%20(%24%5Ctext%7Bpareduc%7D%24)%2C%20household%20income%20as%20a%20child%20in%20tens%20of%20thousands%20of%20dollars%20(%24%5Ctext%7BHHinc%7D%24)%2C%20and%20IQ%20score%20(%24%5Ctext%7BIQ%7D%24).%20We%20will%20artificially%20generate%20our%20dataset%20and%20the%20following%20data%20generating%20process%20(DGP)%20for%20the%20confounders%20as%20follows%3A%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Ctext%7Bpareduc%7D_i%20%5Csim%20%5Cmathcal%7BN%7D(14%2C%203)%20%5Cnewline%0A%20%20%20%20%20%20%20%20%5Ctext%7BHHinc%7D_i%20%5Csim%20%5Cmathcal%7BSN%7D(3%2C4%2C5)%20%5Cnewline%0A%20%20%20%20%20%20%20%20%5Ctext%7BIQ%7D_i%20%5Csim%20%5Cmathcal%7BSN%7D(100%2C%2010)%20%5Cnewline%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20Furthermore%2C%20to%20estimate%20eq.%20(3)%20we%20must%20have%20measures%20for%20the%20key%20treatment%2C%20average%20number%20of%20days%20in%20a%20month%20they%20read%20as%20a%20child%20(%24%5Ctext%7Bread%7D%24)%2C%20and%20the%20main%20outcome%2C%20their%20total%20educational%20attainment%20in%20years%20(%24%5Ctext%7Beduc%7D%24).%20We%20artificially%20generate%20these%20key%20variables%20with%20gaussian%20error%20terms%20and%20heteroskedasticity%20in%20the%20education%20error%20term%20as%20follows%3A%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20%5Ctext%7Bread%7D_i%20%3D%20-25%20%2B%200.3%5Ctimes%5Ctext%7Bpareduc%7D_i%2B2%5Ctimes%5Ctext%7BHHinc%7D_i%2B0.2%5Ctimes%5Ctext%7BIQ%7D_i%2B%5Cepsilon_i%5Er%0A%20%20%20%20%20%20%20%20%5Ctag%7B13%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20%24%24%0A%20%20%20%20%20%20%20%20%5Cbegin%7Bequation%7D%0A%20%20%20%20%20%20%20%20%5Ctext%7Beduc%7D_i%20%3D%20-15%20%2B%200.2%20%5Ctimes%20%5Ctext%7Bread%7D_i%20%2B%200.1%5Ctimes%5Ctext%7Bpareduc%7D_i%2B1%5Ctimes%5Ctext%7BHHinc%7D_i%2B0.2%5Ctimes%5Ctext%7BIQ%7D_i%2B%5Cfrac%7B%5Ctext%7Bread%7D_i%7D%7B15%7D%5Cepsilon_i%5Ee%0A%20%20%20%20%20%20%20%20%5Ctag%7B14%7D%0A%20%20%20%20%20%20%20%20%5Cend%7Bequation%7D%0A%20%20%20%20%20%20%20%20%24%24%0A%0A%20%20%20%20%20%20%20%20Because%20we%20know%20the%20true%20DGP%2C%20the%20true%20value%20for%20the%20parameter%20of%20interest%20is%200.2.%20Let's%20take%20this%20DGP%20to%20Python%20and%20simulate%20the%20data%3A%0A%0A%20%20%20%20%20%20%20%20%3E%20Note%20that%20all%20values%20in%20the%20DGP%20were%2C%20in%20general%2C%20chosen%20arbitrarily%20such%20that%20the%20data%20works%20nicely%20for%20demonstration%20purposes.%20However%2C%20within%20the%20realm%20of%20this%20simulation%20we%20can%20interpret%20the%20coefficient%20on%20%22read%22%20as%20follows%3A%20On%20average%2C%20for%20each%20additional%20day%20a%20month%20that%20an%20individual%20read%20as%20child%2C%20their%20educational%20attainment%20increased%20by%200.2%20years.%0A%0A%20%20%20%20%20%20%20%20First%2C%20let's%20generate%20the%20data%3A%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(np%2C%20pd%2C%20skewnorm)%3A%0A%20%20%20%20df%20%3D%20pd.DataFrame()%0A%20%20%20%20n%20%3D%2010000%0A%0A%20%20%20%20%23%20Covariates%0A%20%20%20%20df%5B%22pareduc%22%5D%20%3D%20np.random.normal(loc%3D14%2C%20scale%3D3%2C%20size%3Dn).round()%0A%20%20%20%20df%5B%22HHinc%22%5D%20%3D%20skewnorm.rvs(5%2C%20loc%3D3%2C%20scale%3D4%2C%20size%3Dn).round()%0A%20%20%20%20df%5B%22IQ%22%5D%20%3D%20np.random.normal(100%2C%2010%2C%20size%3Dn).round()%0A%0A%20%20%20%20%23%20Childhood%20Monthly%20Reading%0A%20%20%20%20df%5B%22read%22%5D%20%3D%20(%0A%20%20%20%20%20%20%20%20-25%0A%20%20%20%20%20%20%20%20%2B%200.3%20*%20df%5B%22pareduc%22%5D%0A%20%20%20%20%20%20%20%20%2B%202%20*%20df%5B%22HHinc%22%5D%0A%20%20%20%20%20%20%20%20%2B%200.2%20*%20df%5B%22IQ%22%5D%0A%20%20%20%20%20%20%20%20%2B%20np.random.normal(0%2C%202%2C%20size%3Dn)%0A%20%20%20%20).round()%0A%0A%20%20%20%20df%20%3D%20df%5B(df%5B%22read%22%5D%20%3E%3D%200)%20%26%20(df%5B%22read%22%5D%20%3C%3D%2030)%5D%0A%0A%20%20%20%20%23%20Education%20Attainment%0A%20%20%20%20df%5B%22educ%22%5D%20%3D%20(%0A%20%20%20%20%20%20%20%20-15%0A%20%20%20%20%20%20%20%20%2B%200.2%20*%20df%5B%22read%22%5D%0A%20%20%20%20%20%20%20%20%2B%200.1%20*%20df%5B%22pareduc%22%5D%0A%20%20%20%20%20%20%20%20%2B%201%20*%20df%5B%22HHinc%22%5D%0A%20%20%20%20%20%20%20%20%2B%200.2%20*%20df%5B%22IQ%22%5D%0A%20%20%20%20%20%20%20%20%2B%20df%5B%22read%22%5D%20%2F%2015%20*%20np.random.normal(0%2C%202%2C%20size%3Dlen(df)).round()%0A%20%20%20%20)%0A%20%20%20%20return%20df%2C%20n%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22The%20data%20will%20look%20a%20little%20something%20like%3A%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(df%2C%20mo%2C%20plt%2C%20sns)%3A%0A%20%20%20%20def%20data_hists()%3A%0A%20%20%20%20%20%20%20%20fig%2C%20ax%20%3D%20plt.subplots(3%2C%202%2C%20figsize%3D(15%2C%2015)%2C%20dpi%3D300)%0A%20%20%20%20%20%20%20%20sns.histplot(%0A%20%20%20%20%20%20%20%20%20%20%20%20df.HHinc%2C%20color%3D%22b%22%2C%20ax%3Dax%5B0%2C%200%5D%2C%20bins%3D15%2C%20stat%3D%22proportion%22%2C%20kde%3DTrue%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20sns.histplot(%0A%20%20%20%20%20%20%20%20%20%20%20%20df.IQ%2C%20color%3D%22m%22%2C%20ax%3Dax%5B0%2C%201%5D%2C%20bins%3D20%2C%20stat%3D%22proportion%22%2C%20kde%3DTrue%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20sns.histplot(%0A%20%20%20%20%20%20%20%20%20%20%20%20df.pareduc%2C%20color%3D%22black%22%2C%20ax%3Dax%5B1%2C%200%5D%2C%20bins%3D20%2C%20stat%3D%22proportion%22%2C%20kde%3DTrue%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20sns.histplot(%0A%20%20%20%20%20%20%20%20%20%20%20%20df.read%2C%20color%3D%22r%22%2C%20ax%3Dax%5B1%2C%201%5D%2C%20bins%3D30%2C%20stat%3D%22proportion%22%2C%20kde%3DTrue%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20sns.histplot(%0A%20%20%20%20%20%20%20%20%20%20%20%20df.educ%2C%20color%3D%22g%22%2C%20ax%3Dax%5B2%2C%200%5D%2C%20bins%3D30%2C%20stat%3D%22proportion%22%2C%20kde%3DTrue%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20sns.regplot(data%3Ddf%2C%20x%3D%22read%22%2C%20y%3D%22educ%22%2C%20color%3D%22y%22%2C%20truncate%3DFalse%2C%20ax%3Dax%5B2%2C%201%5D)%0A%20%20%20%20%20%20%20%20plt.savefig(%22data%2Fdata_hists.webp%22%2C%20format%3D%22webp%22%2C%20dpi%3D300%2C%20bbox_inches%3D'tight')%0A%0A%20%20%20%20data_hists()%0A%20%20%20%20mo.image(%22data%2Fdata_hists.webp%22).center()%0A%20%20%20%20return%20(data_hists%2C)%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22The%20graph%20in%20the%20bottom%20right%20provides%20the%20scatter%20plot%20and%20na%C3%AFve%20regression%20line%20of%20educ%20on%20read.%20This%20relationship%2C%20on%20the%20surface%2C%20shows%20a%20very%20strong%20positive%20relationship%20between%20days%20read%20a%20month%20as%20a%20child%20and%20educational%20attainment.%20However%2C%20we%20know%20that%20by%20construction%20this%20is%20not%20the%20true%20relationship%20between%20educ%20and%20read%20because%20of%20the%20common%20confounding%20covariates.%20We%20can%20quantify%20this%20result%20and%20the%20bias%20more%20formally%20via%20regression%20analysis.%20Let's%20now%20go%20ahead%20and%20estimate%20the%20na%C3%AFve%20regression%20(i.e.%2C%20eq.%20(3)%20less%20%24X%24)%2C%20the%20multiple%20regression%20with%20all%20relevant%20covariates%20(i.e.%2C%20eq.%20(3))%2C%20and%20the%20FWL%203%20step%20process%20(i.e.%2C%20eqs.%20(8)-(12))%3A%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(df%2C%20sm)%3A%0A%20%20%20%20%23%23%20Regression%20Analysis%0A%0A%20%20%20%20%23%20Naive%20Regression%0A%20%20%20%20naive%20%3D%20sm.ols(%22educ~read%22%2C%20data%3Ddf).fit(cov_type%3D%22HC3%22)%0A%0A%20%20%20%20%23%20Multiple%20Regression%0A%20%20%20%20multiple%20%3D%20sm.ols(%22educ~read%2Bpareduc%2BHHinc%2BIQ%22%2C%20data%3Ddf).fit(cov_type%3D%22HC3%22)%0A%0A%20%20%20%20%23%20FWL%20Theorem%0A%20%20%20%20read%20%3D%20sm.ols(%22read~pareduc%2BHHinc%2BIQ%22%2C%20data%3Ddf).fit(cov_type%3D%22HC3%22)%0A%20%20%20%20df%5B%22read_star%22%5D%20%3D%20read.resid%0A%0A%20%20%20%20educ%20%3D%20sm.ols(%22educ~pareduc%2BHHinc%2BIQ%22%2C%20data%3Ddf).fit(cov_type%3D%22HC3%22)%0A%20%20%20%20df%5B%22educ_star%22%5D%20%3D%20educ.resid%0A%0A%20%20%20%20FWL%20%3D%20sm.ols(%22educ_star%20~%20read_star%22%2C%20data%3Ddf).fit(cov_type%3D%22HC3%22)%0A%20%20%20%20return%20FWL%2C%20educ%2C%20multiple%2C%20naive%2C%20read%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22The%20regression%20results%20are%3A%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(FWL%2C%20HTML%2C%20Stargazer%2C%20multiple%2C%20naive)%3A%0A%20%20%20%20def%20prettify_ols_results()%3A%0A%20%20%20%20%20%20%20%20order%20%3D%20%5B%22read%22%2C%20%22read_star%22%2C%20%22HHinc%22%2C%20%22pareduc%22%2C%20%22IQ%22%2C%20%22Intercept%22%5D%0A%20%20%20%20%20%20%20%20columns%20%3D%20%5B%22Naive%20OLS%22%2C%20%22Multiple%20OLS%22%2C%20%22FWL%22%5D%0A%20%20%20%20%20%20%20%20rename%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22read%22%3A%20%22Read%20(Days%2FMonth)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22read_star%22%3A%20%22Read*%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22hhincome%22%3A%20%22HH%20Income%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22pareduc%22%3A%20%22Avg.%20Parents%20Education%20(Yrs)%22%2C%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20regtable%20%3D%20Stargazer(%5Bnaive%2C%20multiple%2C%20FWL%5D)%0A%20%20%20%20%20%20%20%20regtable.covariate_order(order)%0A%20%20%20%20%20%20%20%20regtable.custom_columns(columns%2C%20%5B1%2C%201%2C%201%5D)%0A%20%20%20%20%20%20%20%20regtable.rename_covariates(rename)%0A%20%20%20%20%20%20%20%20regtable.show_degrees_of_freedom(False)%0A%20%20%20%20%20%20%20%20regtable.title(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Table%201%3A%20The%20Effect%20of%20Childhood%20Reading%20on%20Educational%20Attainment%22%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20return%20regtable%0A%0A%20%20%20%20regtable%20%3D%20prettify_ols_results()%0A%20%20%20%20HTML(f%22%3Ccenter%3E%7Bregtable.render_html()%7D%3C%2Fcenter%3E%22)%0A%20%20%20%20return%20prettify_ols_results%2C%20regtable%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20Table%201%20above%20presents%20the%20regression%20output%20results.%20Immediately%2C%20we%20can%20observe%20that%20the%20na%C3%AFve%20regression%20estimate%20on%20read%20is%20biased%20upwards%20due%20to%20the%20confounding%20variables%20that%20are%20both%20positively%20related%20with%20educational%20attainment%20and%20childhood%20reading.%20When%20we%20include%20the%20additional%20covariates%20in%20column%20(2)%2C%20we%20get%20an%20estimate%20near%20the%20true%20value%20of%200.2%20as%20constructed%20in%20the%20DGP.%20The%20FWL%203-step%20process%20yields%20the%20exact%20same%20estimate%2C%20as%20expected!%0A%0A%20%20%20%20%20%20%20%20%3E%20A%20general%20rule%20of%20thumb%20for%20signing%20bias%20in%20a%20regression%20is%20the%20sign%20of%20cov(outcome%2CX)%20multiplied%20by%20the%20sign%20of%20cov(treatment%2CX).%20By%20construction%2C%20we%20have%20the%20cov(educ%2CX)%3E0%20and%20cov(read%2CX)%3E0%20and%2C%20hence%2C%20positive%20bias.%0A%0A%20%20%20%20%20%20%20%20So%2C%20we%20have%20now%20shown%20the%20FWL%20being%20used%20to%20obtain%20the%20same%20estimate%2C%20but%20the%20real%20power%20in%20FWL%20lies%20in%20the%20ability%20to%20plot%20the%20true%20relationship.%20Figure%202%20below%20shows%20the%20initial%20relationship%20of%20the%20na%C3%AFve%20regression%20without%20factoring%20in%20the%20covariates%20and%20then%20the%20relationship%20of%20the%20residuals%20from%20the%20FWL%20process%2C%20where%20the%20noise%20is%20from%20the%20stochastic%20error%20term%20in%20DGP.%20In%20this%20case%2C%20the%20FWL%20slope%20is%20the%20true%20relationship!%20We%20can%20see%20how%20vastly%20different%20the%20slope%20estimates%20are.%20This%20is%20where%20the%20true%20power%20of%20the%20FWL%20theorem%20lies!%20It%20allows%20us%20to%20visualize%20the%20relationship%20between%20a%20treatment%20and%20outcome%20after%20we%20partial%20out%20the%20variation%20that%20is%20already%20explained%20by%20the%20additional%20covariates.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(df%2C%20mo%2C%20plt%2C%20sns)%3A%0A%20%20%20%20def%20fwl_residual_plot()%3A%0A%20%20%20%20%20%20%20%20fig%2C%20ax%20%3D%20plt.subplots(1%2C%202%2C%20figsize%3D(15%2C%205))%0A%20%20%20%20%20%20%20%20ax%5B0%5D.set_title(%22Naive%20Regression%22%2C%20fontsize%3D17)%0A%20%20%20%20%20%20%20%20ax%5B1%5D.set_title(%22FWL%20Regression%22%2C%20fontsize%3D17)%0A%20%20%20%20%20%20%20%20sns.regplot(data%3Ddf%2C%20x%3D%22read%22%2C%20y%3D%22educ%22%2C%20color%3D%22y%22%2C%20truncate%3DFalse%2C%20ax%3Dax%5B0%5D)%0A%20%20%20%20%20%20%20%20sns.regplot(%0A%20%20%20%20%20%20%20%20%20%20%20%20data%3Ddf%2C%20x%3D%22read_star%22%2C%20y%3D%22educ_star%22%2C%20color%3D%22y%22%2C%20truncate%3DFalse%2C%20ax%3Dax%5B1%5D%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20ax%5B1%5D.set_xlabel(%22%24read%5E*%24%22)%0A%20%20%20%20%20%20%20%20ax%5B1%5D.set_ylabel(%22%24educ%5E*%24%22)%0A%20%20%20%20%20%20%20%20plt.savefig(%22data%2Ffwl_residual_plot.webp%22%2C%20format%3D%22webp%22%2C%20dpi%3D300%2C%20bbox_inches%3D'tight')%0A%0A%20%20%20%20fwl_residual_plot()%0A%20%20%20%20mo.image(%22data%2Ffwl_residual_plot.webp%22).center()%0A%20%20%20%20return%20(fwl_residual_plot%2C)%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20r%22%22%22%0A%20%20%20%20%20%20%20%20%23%23%20Discussion%20%0A%0A%20%20%20%20%20%20%20%20We%20have%20discussed%20the%20Frisch-Waugh-Lovell%20Theorem%20in-depth%20and%20have%20provided%20an%20intuitive%20approach%20to%20understanding%20what%20it%20means%20to%20%22control%22%20for%20covariates%20in%20a%20regression%20model%20when%20one%20is%20interested%20in%20a%20treatment%20parameter.%20It%20is%20a%20powerful%20theorem%20and%20has%20provided%20a%20strong%20underpinning%20for%20many%20econometric%20results%20that%20have%20developed%20over%20the%20years.%0A%0A%20%20%20%20%20%20%20%20FWL%20provides%20a%20powerful%20mechanism%20by%20which%20to%20visualize%20the%20relationship%20between%20an%20outcome%20and%20treatment%20after%20one%20partials%20out%20the%20effects%20from%20additional%20covariates.%20In%20fact%2C%20FWL%20can%20be%20used%20to%20study%20the%20relationship%20between%20any%20two%20variables%20and%20the%20role%20covariates%20play%20in%20explaining%20their%20underlying%20relationship.%20I%20recommend%20trying%20it%20out%20on%20a%20dataset%20where%20you%20are%20interested%20in%20the%20relationship%20between%20two%20variables%2C%20and%20the%20role%20of%20additional%20covariates%20in%20confounding%20that%20relationship!%0A%0A%20%20%20%20%20%20%20%20I%20hope%20you%20have%20gained%20some%20new%20knowledge%20from%20this%20post!%0A%0A%20%20%20%20%20%20%20%20%23%23%20References%0A%20%20%20%20%20%20%20%20%5B1%5D%20N.%20Huntington-Klein%2C%20%5BThe%20Effect%3A%20An%20Introduction%20to%20Research%20Design%20and%20Causality%5D(https%3A%2F%2Fmedium.com%2Fr%2F%3Furl%3Dhttps%253A%252F%252Ftheeffectbook.net%252F)%20(2022).%0A%0A%20%20%20%20%20%20%20%20%5B2%5D%20S.%20Cunningham%2C%20%5BCausal%20Inference%3A%20The%20Mixtape%5D(https%3A%2F%2Fmedium.com%2Fr%2F%3Furl%3Dhttps%253A%252F%252Fmixtape.scunning.com%252F)%20(2021).%0A%0A%20%20%20%20%20%20%20%20%5B3%5D%20M.%20F.%20Alves%2C%20%5BCausal%20Inference%20for%20the%20Brave%20and%20True%5D(https%3A%2F%2Fmedium.com%2Fr%2F%3Furl%3Dhttps%253A%252F%252Fmatheusfacure.github.io%252Fpython-causality-handbook%252Flanding-page.html)%20(2021).%0A%0A%20%20%20%20%20%20%20%20%5B4%5D%20J.%20Angrist%20%26%20J.S.%20Pischke%2C%20%5BMostly%20Harmless%20Econometrics%3A%20An%20Empiricist's%20Companion%5D(https%3A%2F%2Fmedium.com%2Fr%2F%3Furl%3Dhttps%253A%252F%252Fwww.mostlyharmlesseconometrics.com%252F)%20(2009).%20Princeton%20University%20Press.%0A%0A%20%20%20%20%20%20%20%20%5B5%5D%20Frisch%2C%20Ragnar%2C%20and%20Waugh.%20Partial%20Time%20Regressions%20as%20Compared%20with%20Individual%20Trends%20(1933).%20Econometrica%3A%20Journal%20of%20the%20Econometric%20Society%2C%20387%E2%80%93401.%0A%0A%20%20%20%20%20%20%20%20%5B6%5D%20Lovell.%20Seasonal%20Adjustment%20of%20Economic%20Time%20Series%20and%20Multiple%20Regression%20Analysis%20(1963).%20Journal%20of%20the%20American%20Statistical%20Association%2058%20(304)%3A%20993%E2%80%931010.%0A%0A%20%20%20%20%20%20%20%20%5B7%5D%20Lovell.%20A%20Simple%20Proof%20of%20the%20FWL%20Theorem%20(2008).%20Journal%20of%20Economic%20Education.%2039%20(1)%3A%2088%E2%80%9391.%0A%0A%20%20%20%20%20%20%20%20%3Cdiv%20style%3D%22text-align%3A%20center%3B%20font-size%3A%2024px%3B%22%3E%E2%9D%96%E2%9D%96%E2%9D%96%3C%2Fdiv%3E%0A%0A%20%20%20%20%20%20%20%20%3Ccenter%3E%0A%20%20%20%20%20%20%20%20Access%20all%20the%20code%20via%20this%20Marimo%20Notebook%20or%20my%20%5BGitHub%20Repo%5D(https%3A%2F%2Fgithub.com%2Fjakepenzak%2Fblog-posts)%0A%0A%20%20%20%20%20%20%20%20I%20appreciate%20you%20reading%20my%20post!%20My%20posts%20primarily%20explore%20real-world%20and%20theoretical%20applications%20of%20econometric%20and%20statistical%2Fmachine%20learning%20techniques%2C%20but%20also%20whatever%20I%20am%20currently%20interested%20in%20or%20learning%20%F0%9F%98%81.%20At%20the%20end%20of%20the%20day%2C%20I%20write%20to%20learn!%20I%20hope%20to%20make%20complex%20topics%20slightly%20more%20accessible%20to%20all.%0A%20%20%20%20%20%20%20%20%3C%2Fcenter%3E%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
c6533942e11063be9a9219851b48fff7ef4eb92483cace441fcdc7253b8a0dec