class: center, middle, inverse, title-slide .title[ # ScPoEconometrics: Advanced ] .subtitle[ ## Instrumental Variables - Applications ] .author[ ### Bluebery Planterose ] .date[ ### SciencesPo Paris 2023-03-07 ] --- layout: true <div class="my-footer"><img src="data:image/png;base64,#../../img/logo/ScPo-shield.png" style="height: 60px;"/></div> --- # Status .pull-left[ ## What Did we Do Last Time? * We learned about John Snow's grand experiment in London 1850. * We used his story to motivate the IV estimator. * You took a quiz about some IV aspects. ] -- .pull-right[ ## Today * We'll look at further IV applications. * We introduce an extension called *Two Stage Least Squares*. * We will use `R` to compute the estimates. * Finally we'll talk about *weak* instruments. ] --- layout: false class: separator, middle # Back to school! --- layout: true <div class="my-footer"><img src="data:image/png;base64,#../../img/logo/ScPo-shield.png" style="height: 60px;"/></div> --- # Returns To Schooling .pull-left[ * What's the causal impact of schooling on earnings? * [Jacob Mincer](https://en.wikipedia.org/wiki/Jacob_Mincer) was interested in this important question. * Here's his model: $$ \log Y_i = \alpha + \rho S_i + \beta_1 X_i + \beta_2 X_i^2 + e_i $$ ] .pull-right[ <img src="data:image/png;base64,#05-IV2_files/figure-html/mincer-1.svg" style="display: block; margin: auto;" /> ] --- # Returns To Schooling .pull-left[ $$ \log Y_i = \alpha + \rho S_i + \beta_1 X_i + \beta_2 X_i^2 + e_i $$ * He found an estimate for `\(\rho\)` of about 0.11, * 11% earnings advantage for each additional year of education * Look at the DAG. Is that a good model? Well, why would it not be? ] .pull-right[ <img src="data:image/png;base64,#05-IV2_files/figure-html/mincer2-1.svg" style="display: block; margin: auto;" /> ] --- # Ability Bias .pull-left[ * We compare earnings of men with certain schooling and work experience * Is all else equal, after controlling for those? * Given `\(X\)`, * Can we find differently diligent workers out there? * Can we find differently able workers? * Do family connections of workers vary? ] -- .pull-right[ * Yes, of course. So, *all else* is not equal at all. * That's an issue, because for OLS consistency we require the orthogonality assumption `$$E[e_i | S_i, X_i] \neq 0$$` * Let's introduce **ability** `\(A_i\)` explicitly. ] --- # Mincer with Unobserved Ability .pull-left[ * In fact we have *two* unobservables: `\(e\)` and `\(A\)`. * Of course we can't tell them apart. * So we defined a new unobservable factor `$$u_i = e_i + A_i$$` ] -- .pull-right[ <img src="data:image/png;base64,#05-IV2_files/figure-html/mincer3-1.svg" style="display: block; margin: auto;" /> ] --- # Mincer with Unobserved Ability .pull-left[ * In terms of an equation: `$$\log Y_i = \alpha + \rho S_i + \beta_1 X_i + \beta_2 X_i^2 + \underbrace{u_i}_{A_i + e_i}$$` * Sometimes, this does not matter, and the OLS bias is small. * But sometimes it does and we get it totally wrong! Example. ] .pull-right[ <img src="data:image/png;base64,#05-IV2_files/figure-html/mincer4-1.svg" style="display: block; margin: auto;" /> ] --- # Angrist and Krueger (1991): Birthdate is as good as Random .pull-left[ * Angrist and Krueger (AK91) is an influental study addressing ability bias. * Idea: 1. construct an IV that encodes *birth date of student*. 1. Child born just after cutoff date will start school later! * Suppose all children who reach the age of 6 by 31st of december 2021 are required to enroll in the first grade of school in september 2021. ] -- .pull-right[ * If born in September 2015 (i.e. 6 years prior), will be 5 years and 3/4 by the time they start school. * If born on the 1st of January 2016 will be 6 and 3/4 years when *they* enter school in september 2022. * However, people can drop out of school legally on their 16-th birthday! * So, out of people who drop out, some got more schooling than others. * AK91 construct IV *quarter of birth* dummy: affects schooling, but not related to `\(A\)`! ] --- # AK91 IV setup .pull-left[ * *quarter of birth* dummy `\(z\)`: affects schooling, but not related to `\(A\)`! * In particular: whether born in 4-th quarter or not. ] .pull-right[ <img src="data:image/png;base64,#05-IV2_files/figure-html/ak-mod-1.svg" style="display: block; margin: auto;" /> ] --- # AK91 Estimation: Two Stage Least Squares (2SLS) AK91 allow us to introduce a widely used variation of our simple IV estimator: **2SLS** 1. We estimate a **first stage model** which uses only exogenous variables (like `\(z\)`) to explain our endgenous regressor `\(s\)`. 2. We then use the first stage model to *predict* values of `\(s\)` in what is called the **second stage** or the **reduced form** model. Performing this procedure is supposed to take out any impact of `\(A\)` in the correlation we observe in our data between `\(s\)` and `\(y\)`. `\begin{align} \text{1. Stage: }s_i &= \alpha_0 + \alpha_1 z_i + \eta_i \\ \text{2. Stage: }y_i &= \beta_0 + \beta_1 \hat{s}_i + u_i \end{align}` **Conditions:** 1. Relevance of the IV: `\(\alpha_1 \neq 0\)` 1. Independence (IV assignment as good as random): `\(E[\eta | z] = 0\)` 1. Exogeneity (our exclusion restriction): `\(E[u | z] = 0\)` --- layout: false class: separator, middle # Let's do Angrist and Krueger (1991)! --- layout: true <div class="my-footer"><img src="data:image/png;base64,#../../img/logo/ScPo-shield.png" style="height: 60px;"/></div> --- # Data on birth quarter and wages Let's load the data and look at a quick summary ```r data("ak91", package = "masteringmetrics") # from the modelsummary package datasummary_skim(data.frame(ak91),histogram = TRUE) ``` <table class="table" style="width: auto !important; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;"> </th> <th style="text-align:right;"> Unique (#) </th> <th style="text-align:right;"> Missing (%) </th> <th style="text-align:right;"> Mean </th> <th style="text-align:right;"> SD </th> <th style="text-align:right;"> Min </th> <th style="text-align:right;"> Median </th> <th style="text-align:right;"> Max </th> <th style="text-align:right;"> </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> lnw </td> <td style="text-align:right;"> 26732 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 5.9 </td> <td style="text-align:right;"> 0.7 </td> <td style="text-align:right;"> −2.3 </td> <td style="text-align:right;"> 6.0 </td> <td style="text-align:right;"> 10.5 </td> <td style="text-align:right;"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="svglite" width="48.00pt" height="12.00pt" viewBox="0 0 48.00 12.00"><defs><style type="text/css"> .svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle { fill: none; stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-miterlimit: 10.00; } .svglite text { white-space: pre; } </style></defs><rect width="100%" height="100%" style="stroke: none; fill: none;"></rect><defs><clipPath id="cpMC4wMHw0OC4wMHwwLjAwfDEyLjAw"><rect x="0.00" y="0.00" width="48.00" height="12.00"></rect></clipPath></defs><g clip-path="url(#cpMC4wMHw0OC4wMHwwLjAwfDEyLjAw)"> </g><defs><clipPath id="cpMC4wMHw0OC4wMHwyLjg4fDEyLjAw"><rect x="0.00" y="2.88" width="48.00" height="9.12"></rect></clipPath></defs><g clip-path="url(#cpMC4wMHw0OC4wMHwyLjg4fDEyLjAw)"><rect x="1.23" y="11.66" width="1.73" height="0.0024" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="2.96" y="11.66" width="1.73" height="0.00014" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="4.68" y="11.66" width="1.73" height="0.0038" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="6.41" y="11.66" width="1.73" height="0.0045" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="8.14" y="11.66" width="1.73" height="0.0035" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="9.86" y="11.66" width="1.73" height="0.0035" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="11.59" y="11.66" width="1.73" height="0.0072" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="13.31" y="11.65" width="1.73" height="0.014" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="15.04" y="11.64" width="1.73" height="0.019" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="16.77" y="11.64" width="1.73" height="0.023" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="18.49" y="11.63" width="1.73" height="0.037" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="20.22" y="11.52" width="1.73" height="0.14" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="21.95" y="11.46" width="1.73" height="0.20" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="23.67" y="11.42" width="1.73" height="0.25" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="25.40" y="10.87" width="1.73" height="0.79" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="27.12" y="8.64" width="1.73" height="3.02" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="28.85" y="3.69" width="1.73" height="7.97" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="30.58" y="3.22" width="1.73" height="8.44" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="32.30" y="9.41" width="1.73" height="2.25" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="34.03" y="11.02" width="1.73" height="0.64" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="35.75" y="11.64" width="1.73" height="0.025" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="37.48" y="11.65" width="1.73" height="0.010" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="39.21" y="11.66" width="1.73" height="0.0063" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="40.93" y="11.66" width="1.73" height="0.0043" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="42.66" y="11.66" width="1.73" height="0.0013" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="44.39" y="11.66" width="1.73" height="0.00043" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="46.11" y="11.66" width="1.73" height="0.00022" style="stroke-width: 0.38; fill: #000000;"></rect></g></svg> </td> </tr> <tr> <td style="text-align:left;"> s </td> <td style="text-align:right;"> 21 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 12.8 </td> <td style="text-align:right;"> 3.3 </td> <td style="text-align:right;"> 0.0 </td> <td style="text-align:right;"> 12.0 </td> <td style="text-align:right;"> 20.0 </td> <td style="text-align:right;"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="svglite" width="48.00pt" height="12.00pt" viewBox="0 0 48.00 12.00"><defs><style type="text/css"> .svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle { fill: none; stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-miterlimit: 10.00; } .svglite text { white-space: pre; } </style></defs><rect width="100%" height="100%" style="stroke: none; fill: none;"></rect><defs><clipPath id="cpMC4wMHw0OC4wMHwwLjAwfDEyLjAw"><rect x="0.00" y="0.00" width="48.00" height="12.00"></rect></clipPath></defs><g clip-path="url(#cpMC4wMHw0OC4wMHwwLjAwfDEyLjAw)"> </g><defs><clipPath id="cpMC4wMHw0OC4wMHwyLjg4fDEyLjAw"><rect x="0.00" y="2.88" width="48.00" height="9.12"></rect></clipPath></defs><g clip-path="url(#cpMC4wMHw0OC4wMHwyLjg4fDEyLjAw)"><rect x="1.78" y="11.61" width="2.22" height="0.056" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="4.00" y="11.62" width="2.22" height="0.042" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="6.22" y="11.59" width="2.22" height="0.075" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="8.44" y="11.57" width="2.22" height="0.092" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="10.67" y="11.52" width="2.22" height="0.14" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="12.89" y="11.40" width="2.22" height="0.27" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="15.11" y="11.24" width="2.22" height="0.42" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="17.33" y="10.56" width="2.22" height="1.11" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="19.56" y="10.76" width="2.22" height="0.91" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="21.78" y="10.53" width="2.22" height="1.14" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="24.00" y="10.72" width="2.22" height="0.94" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="26.22" y="3.22" width="2.22" height="8.44" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="28.44" y="10.41" width="2.22" height="1.25" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="30.67" y="9.90" width="2.22" height="1.76" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="32.89" y="10.98" width="2.22" height="0.69" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="35.11" y="9.21" width="2.22" height="2.46" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="37.33" y="10.83" width="2.22" height="0.83" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="39.56" y="10.86" width="2.22" height="0.80" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="41.78" y="11.23" width="2.22" height="0.43" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="44.00" y="10.87" width="2.22" height="0.79" style="stroke-width: 0.38; fill: #000000;"></rect></g></svg> </td> </tr> <tr> <td style="text-align:left;"> yob </td> <td style="text-align:right;"> 10 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 1934.6 </td> <td style="text-align:right;"> 2.9 </td> <td style="text-align:right;"> 1930.0 </td> <td style="text-align:right;"> 1935.0 </td> <td style="text-align:right;"> 1939.0 </td> <td style="text-align:right;"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="svglite" width="48.00pt" height="12.00pt" viewBox="0 0 48.00 12.00"><defs><style type="text/css"> .svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle { fill: none; stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-miterlimit: 10.00; } .svglite text { white-space: pre; } </style></defs><rect width="100%" height="100%" style="stroke: none; fill: none;"></rect><defs><clipPath id="cpMC4wMHw0OC4wMHwwLjAwfDEyLjAw"><rect x="0.00" y="0.00" width="48.00" height="12.00"></rect></clipPath></defs><g clip-path="url(#cpMC4wMHw0OC4wMHwwLjAwfDEyLjAw)"> </g><defs><clipPath id="cpMC4wMHw0OC4wMHwyLjg4fDEyLjAw"><rect x="0.00" y="2.88" width="48.00" height="9.12"></rect></clipPath></defs><g clip-path="url(#cpMC4wMHw0OC4wMHwyLjg4fDEyLjAw)"><rect x="1.78" y="3.74" width="2.47" height="7.92" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="4.25" y="4.45" width="2.47" height="7.21" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="6.72" y="11.66" width="2.47" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="9.19" y="4.07" width="2.47" height="7.60" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="11.65" y="11.66" width="2.47" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="14.12" y="4.41" width="2.47" height="7.25" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="16.59" y="11.66" width="2.47" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="19.06" y="4.13" width="2.47" height="7.53" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="21.53" y="11.66" width="2.47" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="24.00" y="3.93" width="2.47" height="7.73" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="26.47" y="11.66" width="2.47" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="28.94" y="3.96" width="2.47" height="7.71" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="31.41" y="11.66" width="2.47" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="33.88" y="3.65" width="2.47" height="8.01" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="36.35" y="11.66" width="2.47" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="38.81" y="3.36" width="2.47" height="8.31" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="41.28" y="11.66" width="2.47" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="43.75" y="3.22" width="2.47" height="8.44" style="stroke-width: 0.38; fill: #000000;"></rect></g></svg> </td> </tr> <tr> <td style="text-align:left;"> qob </td> <td style="text-align:right;"> 4 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 2.5 </td> <td style="text-align:right;"> 1.1 </td> <td style="text-align:right;"> 1.0 </td> <td style="text-align:right;"> 3.0 </td> <td style="text-align:right;"> 4.0 </td> <td style="text-align:right;"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="svglite" width="48.00pt" height="12.00pt" viewBox="0 0 48.00 12.00"><defs><style type="text/css"> .svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle { fill: none; stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-miterlimit: 10.00; } .svglite text { white-space: pre; } </style></defs><rect width="100%" height="100%" style="stroke: none; fill: none;"></rect><defs><clipPath id="cpMC4wMHw0OC4wMHwwLjAwfDEyLjAw"><rect x="0.00" y="0.00" width="48.00" height="12.00"></rect></clipPath></defs><g clip-path="url(#cpMC4wMHw0OC4wMHwwLjAwfDEyLjAw)"> </g><defs><clipPath id="cpMC4wMHw0OC4wMHwyLjg4fDEyLjAw"><rect x="0.00" y="2.88" width="48.00" height="9.12"></rect></clipPath></defs><g clip-path="url(#cpMC4wMHw0OC4wMHwyLjg4fDEyLjAw)"><rect x="1.78" y="3.72" width="2.96" height="7.94" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="4.74" y="11.66" width="2.96" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="7.70" y="11.66" width="2.96" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="10.67" y="11.66" width="2.96" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="13.63" y="3.87" width="2.96" height="7.79" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="16.59" y="11.66" width="2.96" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="19.56" y="11.66" width="2.96" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="22.52" y="11.66" width="2.96" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="25.48" y="11.66" width="2.96" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="28.44" y="3.22" width="2.96" height="8.44" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="31.41" y="11.66" width="2.96" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="34.37" y="11.66" width="2.96" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="37.33" y="11.66" width="2.96" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="40.30" y="11.66" width="2.96" height="0.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="43.26" y="3.80" width="2.96" height="7.86" style="stroke-width: 0.38; fill: #000000;"></rect></g></svg> </td> </tr> <tr> <td style="text-align:left;"> sob </td> <td style="text-align:right;"> 51 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 30.7 </td> <td style="text-align:right;"> 14.2 </td> <td style="text-align:right;"> 1.0 </td> <td style="text-align:right;"> 34.0 </td> <td style="text-align:right;"> 56.0 </td> <td style="text-align:right;"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="svglite" width="48.00pt" height="12.00pt" viewBox="0 0 48.00 12.00"><defs><style type="text/css"> .svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle { fill: none; stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-miterlimit: 10.00; } .svglite text { white-space: pre; } </style></defs><rect width="100%" height="100%" style="stroke: none; fill: none;"></rect><defs><clipPath id="cpMC4wMHw0OC4wMHwwLjAwfDEyLjAw"><rect x="0.00" y="0.00" width="48.00" height="12.00"></rect></clipPath></defs><g clip-path="url(#cpMC4wMHw0OC4wMHwwLjAwfDEyLjAw)"> </g><defs><clipPath id="cpMC4wMHw0OC4wMHwyLjg4fDEyLjAw"><rect x="0.00" y="2.88" width="48.00" height="9.12"></rect></clipPath></defs><g clip-path="url(#cpMC4wMHw0OC4wMHwyLjg4fDEyLjAw)"><rect x="0.97" y="9.26" width="1.62" height="2.40" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="2.59" y="11.37" width="1.62" height="0.30" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="4.20" y="6.97" width="1.62" height="4.70" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="5.82" y="10.88" width="1.62" height="0.78" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="7.43" y="10.43" width="1.62" height="1.24" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="9.05" y="10.23" width="1.62" height="1.43" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="10.67" y="9.32" width="1.62" height="2.34" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="12.28" y="11.15" width="1.62" height="0.51" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="13.90" y="4.07" width="1.62" height="7.60" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="15.52" y="8.46" width="1.62" height="3.20" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="17.13" y="7.51" width="1.62" height="4.15" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="18.75" y="9.84" width="1.62" height="1.83" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="20.36" y="4.97" width="1.62" height="6.69" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="21.98" y="8.03" width="1.62" height="3.63" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="23.60" y="8.69" width="1.62" height="2.97" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="25.21" y="10.61" width="1.62" height="1.06" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="26.83" y="8.83" width="1.62" height="2.83" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="28.44" y="3.22" width="1.62" height="8.44" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="30.06" y="8.09" width="1.62" height="3.57" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="31.68" y="4.98" width="1.62" height="6.69" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="33.29" y="3.73" width="1.62" height="7.94" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="34.91" y="11.19" width="1.62" height="0.47" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="36.53" y="9.71" width="1.62" height="1.95" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="38.14" y="4.91" width="1.62" height="6.75" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="39.76" y="10.83" width="1.62" height="0.83" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="41.37" y="9.63" width="1.62" height="2.04" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="42.99" y="8.87" width="1.62" height="2.79" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="44.61" y="9.07" width="1.62" height="2.59" style="stroke-width: 0.38; fill: #000000;"></rect></g></svg> </td> </tr> <tr> <td style="text-align:left;"> age </td> <td style="text-align:right;"> 40 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 45.0 </td> <td style="text-align:right;"> 2.9 </td> <td style="text-align:right;"> 40.2 </td> <td style="text-align:right;"> 45.0 </td> <td style="text-align:right;"> 50.0 </td> <td style="text-align:right;"> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="svglite" width="48.00pt" height="12.00pt" viewBox="0 0 48.00 12.00"><defs><style type="text/css"> .svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle { fill: none; stroke: #000000; stroke-linecap: round; stroke-linejoin: round; stroke-miterlimit: 10.00; } .svglite text { white-space: pre; } </style></defs><rect width="100%" height="100%" style="stroke: none; fill: none;"></rect><defs><clipPath id="cpMC4wMHw0OC4wMHwwLjAwfDEyLjAw"><rect x="0.00" y="0.00" width="48.00" height="12.00"></rect></clipPath></defs><g clip-path="url(#cpMC4wMHw0OC4wMHwwLjAwfDEyLjAw)"> </g><defs><clipPath id="cpMC4wMHw0OC4wMHwyLjg4fDEyLjAw"><rect x="0.00" y="2.88" width="48.00" height="9.12"></rect></clipPath></defs><g clip-path="url(#cpMC4wMHw0OC4wMHwyLjg4fDEyLjAw)"><rect x="0.64" y="3.22" width="2.28" height="8.44" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="2.92" y="3.78" width="2.28" height="7.88" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="5.20" y="3.44" width="2.28" height="8.22" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="7.48" y="3.83" width="2.28" height="7.84" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="9.75" y="3.64" width="2.28" height="8.02" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="12.03" y="4.20" width="2.28" height="7.46" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="14.31" y="4.12" width="2.28" height="7.54" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="16.59" y="4.31" width="2.28" height="7.36" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="18.87" y="4.01" width="2.28" height="7.65" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="21.15" y="4.37" width="2.28" height="7.29" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="23.43" y="4.12" width="2.28" height="7.54" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="25.71" y="4.65" width="2.28" height="7.01" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="27.99" y="4.66" width="2.28" height="7.00" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="30.27" y="4.65" width="2.28" height="7.02" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="32.55" y="4.27" width="2.28" height="7.39" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="34.83" y="4.37" width="2.28" height="7.30" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="37.11" y="4.68" width="2.28" height="6.98" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="39.38" y="4.70" width="2.28" height="6.96" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="41.66" y="4.00" width="2.28" height="7.66" style="stroke-width: 0.38; fill: #000000;"></rect><rect x="43.94" y="4.01" width="2.28" height="7.66" style="stroke-width: 0.38; fill: #000000;"></rect></g></svg> </td> </tr> </tbody> </table> --- # AK91 Data Transformations * We want to create the `q4` dummy which is `TRUE` if you are born in the 4th quarter. * create `factor` versions of quarter and year of birth. ```r ak91 <- mutate(ak91, qob_fct = factor(qob), q4 = as.integer(qob == "4"), yob_fct = factor(yob)) # get mean wage by year/quarter ak91_age <- ak91 %>% group_by(qob, yob) %>% summarise(lnw = mean(lnw), s = mean(s)) %>% mutate(q4 = (qob == 4)) ``` --- # AK91 Figure 1: First Stage! Let's reproduce AK91's first figure now on education as a function of quarter of birth! ```r ggplot(ak91_age, aes(x = yob + (qob - 1) / 4, y = s )) + geom_line() + geom_label(mapping = aes(label = qob, color = q4)) + guides(label = FALSE, color = FALSE) + scale_x_continuous("Year of birth", breaks = 1930:1940) + scale_y_continuous("Years of Education", breaks = seq(12.2, 13.2, by = 0.2), limits = c(12.2, 13.2)) + theme_bw() ``` --- # AK91 Figure 1: First Stage! .left-thin[ <br> <br> 1. The numbers label mean education *by* quarter of birth groups. 1. The 4-th quarters **did** get more education in most years! 1. There is a general trend. ] .right-wide[ <img src="data:image/png;base64,#05-IV2_files/figure-html/ak91-dummy-1.svg" style="display: block; margin: auto;" /> ] --- # AK91 Figure 2: Impact of IV on outcome What about earnings for those groups? ```r ggplot(ak91_age, aes(x = yob + (qob - 1) / 4, y = lnw)) + geom_line() + geom_label(mapping = aes(label = qob, color = q4)) + scale_x_continuous("Year of birth", breaks = 1930:1940) + scale_y_continuous("Log weekly wages") + guides(label = FALSE, color = FALSE) + theme_bw() ``` --- # AK91 Figure 2: Impact of IV on outcome .left-thin[ <br> <br> <br> 1. The 4-th quarters are among the high-earners by birth year. 1. In general, weekly wages seem to decline somewhat over time. ] .right-wide[ <img src="data:image/png;base64,#05-IV2_files/figure-html/ak91-wage-1.svg" style="display: block; margin: auto;" /> ] --- # Running IV estimation in `R` <br> <br> .pull-left[ * Several options (like always with `R`! 😉) * Will use the [`iv_robust`](https://declaredesign.org/r/estimatr/reference/iv_robust.html) function from the `estimatr` package. * *Robust*? Computes standard errors which are correcting for heteroskedasticity. [Details here.](https://declaredesign.org/r/estimatr/articles/mathematical-notes.html) ] .pull-right[ ```r library(estimatr) # create a list of models mod <- list() # standard (biased!) OLS mod$ols <- lm(lnw ~ s, data = ak91) # IV: born in q4 is TRUE? # doing IV manually in 2 stages. mod[["1. stage"]] <- lm(s ~ q4, data = ak91) ak91$shat <- predict(mod[["1. stage"]]) mod[["2. stage"]] <- lm(lnw ~ shat, data = ak91) # run 2SLS # doing IV all in one go # notice the formula! # formula = y ~ x | z mod$`2SLS` <- iv_robust(lnw ~ s | q4, data = ak91, diagnostics = TRUE) ``` ] --- count: false # Running IV estimation in `R` <br> <br> .pull-left[ * Several options (like always with `R`! 😉) * Will use the [`iv_robust`](https://declaredesign.org/r/estimatr/reference/iv_robust.html) function from the `estimatr` package. * *Robust*? Computes standard errors which are correcting for heteroskedasticity. [Details here.](https://declaredesign.org/r/estimatr/articles/mathematical-notes.html) * Notice the `predict` to get `\(\hat{s}\)`. ] .pull-right[ ```r library(estimatr) # create a list of models mod <- list() # standard (biased!) OLS mod$ols <- lm(lnw ~ s, data = ak91) # IV: born in q4 is TRUE? # doing IV manually in 2 stages. mod[["1. stage"]] <- lm(s ~ q4, data = ak91) *ak91$shat <- predict(mod[["1. stage"]]) mod[["2. stage"]] <- lm(lnw ~ shat, data = ak91) # run 2SLS # doing IV all in one go # notice the formula! # formula = y ~ x | z mod$`2SLS` <- iv_robust(lnw ~ s | q4, data = ak91, diagnostics = TRUE) ``` ] --- # AK91 Results Table .left-wide[
ols
1. stage
2. stage
2SLS
(Intercept)
4.995***
12.747***
4.955***
4.955***
(0.004)
(0.007)
(0.381)
(0.358)
s
0.071***
0.074**
(0.000)
(0.028)
q4
0.092***
(0.013)
shat
0.074*
(0.030)
R2
0.117
0.000
0.000
0.117
RMSE
0.64
3.28
0.68
0.64
1. Stage F:
48.990
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001
] .right-thin[ 1. OLS likely downward biased (measurement error in schooling) 1. First Stage: IV `q4` is statistically significant, but small effect: born in q4 has 0.092 years of educ. `\(R^2\)` is 0%! But F-stat is large. 😅 1. Second stage has same point estimate as `2SLS` but different std error (2. stage one is wrong) ] --- # Remember the F-Statistic? * We encountered this before: it's useful to test restricted vs unrestricted models against each other. -- * Here, we are interested whether our instruments are *jointly* significant. Of course, with only one IV, that's not more informative than the t-stat of that IV. -- * This F-Stat compares the predictive power of the first stage with and without the IVs. If they have very similar predictive power, the F-stat will be low, and we will not be able to reject the H0 that our IVs are **jointly insignificant** in the first stage model. 😞 --- # Additional Control Variables * We saw a clear time trend in education earlier. * There are also business-cycle fluctuations in earnings * We should somehow control for different time periods. * Also, we can use more than one IV! Here is how: --- # Additional Control Variables ```r # we keep adding to our `mod` list: mod$ols_yr <- update(mod$ols, . ~ . + yob_fct) # previous OLS model # add exogenous vars on both sides of the `|` ! mod[["2SLS_yr"]] <- estimatr::iv_robust(lnw ~ s + yob_fct | q4 + yob_fct, data = ak91, diagnostics = TRUE ) # use all quarters as IVs mod[["2SLS_all"]] <- estimatr::iv_robust(lnw ~ s + yob_fct | qob_fct + yob_fct, data = ak91, diagnostics = TRUE ) ```
ols
2SLS
ols_yr
2SLS_yr
2SLS_all
(Intercept)
4.995
4.955
5.017
4.966
4.592
(0.004)
(0.358)
(0.005)
(0.354)
(0.251)
s
0.071
0.074
0.071
0.075
0.105
(0.000)
(0.028)
(0.000)
(0.028)
(0.020)
R2
0.117
0.117
0.118
0.117
0.091
RMSE
0.64
0.64
0.64
0.64
0.65
1. Stage F:
48.990
47.731
32.323
Instruments
none
Q4
none
Q4
All Quarters
Year of birth
no
no
yes
yes
yes
--- # Additional Control Variables .left-wide[
ols
2SLS
ols_yr
2SLS_yr
2SLS_all
(Intercept)
4.995
4.955
5.017
4.966
4.592
(0.004)
(0.358)
(0.005)
(0.354)
(0.251)
s
0.071
0.074
0.071
0.075
0.105
(0.000)
(0.028)
(0.000)
(0.028)
(0.020)
R2
0.117
0.117
0.118
0.117
0.091
RMSE
0.64
0.64
0.64
0.64
0.65
1. Stage F:
48.990
47.731
32.323
Instruments
none
Q4
none
Q4
All Quarters
Year of birth
no
no
yes
yes
yes
] .right-thin[ **Adding year controls**... * leaves OLS mostly unchanged * slight increase in 2SLS estimate **Using all quarters as IV**... * Increases precision of 2SLS estimate a lot! * Point estimate is 10.5% now! ] --- # AK91: Taking Stock - The Quarter of Birth (QOB) IV .pull-left[ * This will produce consistent estimates if 1. The IV predicts the endogenous regressor well. 2. The IV is as good as random / independent of OVs. 3. Can only impact outcome through schooling. * How does the QOB perform along those lines? ] -- .pull-right[ 1. Plot of first stage and high F-stat offer compelling evidence for **relevance**. ✅ 2. Is QOB **independent** of, say, *maternal characteristics*? Birthdays are not really random - there are birth seasons for certain socioeconomic backgrounds. highest maternal schooling give birth in second quarter. (not in 4th! ✅) 3. Exclusion: What if the youngest kids (born in Q4!) are the disadvantaged ones early on, which has long-term negative impacts? That would mean `\(E[u|z] \neq 0\)`! Well, with QOB the youngest ones actually do better (more schooling and higher wage)! ✅ ] --- layout: false class: separator, middle # Mechanics of IV ## Identification and Inference --- # IV Identification Let's go back to our simple linear model: $$ y = \beta_0 + \beta_1 x + u $$ where we fear that `\(Cov(x,u) \neq 0\)`, `\(x\)` is *endogenous*. ## Conditions for IV 1. **first stage** or **relevance**: `\(Cov(z,x) \neq 0\)` 2. **IV exogeneity**: `\(Cov(z,u) = 0\)`: the IV is exogenous in the outcome equation. --- # Valid Model (A) vs Invalid Model (B) for IV `z` <img src="data:image/png;base64,#05-IV2_files/figure-html/IV-dag2-1.svg" style="display: block; margin: auto;" /> --- # IV Identification .pull-left[ >## Conditions for IV >1. **first stage** or **relevance**: `\(Cov(z,x) \neq 0\)` >2. **IV exogeneity**: `\(Cov(z,u) = 0\)`: the IV is exogenous in the outcome equation. ] .pull-right[ * How does this *identify* `\(\beta_1\)`? * (How can we express `\(\beta_1\)` in terms of population moments to pin it's value down?) ] --- # IV Identification `\begin{align} Cov(z,y) &= Cov(z, \beta_0 + \beta_1 x + u) \\ &= \beta_1 Cov(z,x) + Cov(z,u) \end{align}` .pull-left[ Under condition 2. above (**IV exogeneity**), we have `\(Cov(z,u)=0\)`, hence $$ Cov(z,y) = \beta_1 Cov(z,x) $$ ] -- .pull-right[ and under condition 1. (**relevance**), we have `\(Cov(z,x)\neq0\)`, so that we can divide the equation through to obtain $$ \beta_1 = \frac{Cov(z,y)}{Cov(z,x)}. $$ * `\(\beta_1\)` is *identified* via population moments `\(Cov(z,y)\)` and `\(Cov(z,x)\)`. * We can *estimate* those moments via their *sample analogs* ] --- # IV Estimator Just plugging in for the population moments: `$$\hat{\beta}_1 = \frac{\sum_{i=1}^n (z_i - \bar{z})(y_i - \bar{y})}{\sum_{i=1}^n (z_i - \bar{z})(x_i - \bar{x})}$$` * The intercept estimate is `\(\hat{\beta}_0 = \bar{y} - \hat{\beta}_1 \bar{x}\)` -- * Given both assumptions 1. and 2. are satisfied, we say that *the IV estimator is consistent for `\(\beta_1\)`*. We write $$ \text{plim}(\hat{\beta}_1) = \beta_1 $$ in words: the *probability limit* of `\(\hat{\beta}_1\)` is the true `\(\beta_1\)`. * If this is true, we say that this estimator is **consistent**. --- # IV Inference Assuming `\(E(u^2|z) = \sigma^2\)` the variance of the IV slope estimator is `$$Var(\hat{\beta}_{1,IV}) = \frac{\sigma^2}{n \sigma_x^2 \rho_{x,z}^2}$$` * `\(\sigma_x^2\)` is the population variance of `\(x\)`, * `\(\sigma^2\)` the one of `\(u\)`, and * `\(\rho_{x,z}\)` is the population correlation between `\(x\)` and `\(z\)`. -- You can see 2 important things here: 1. Without the term `\(\rho_{x,z}^2\)`, this is **like OLS variance**. 2. As sample size `\(n\)` increases, the **variance decreases**. --- # IV Variance is Always Larger than OLS Variance * Replace `\(\rho_{x,z}^2\)` with `\(R_{x,z}^2\)`, i.e. the R-squared of a regression of `\(x\)` on `\(z\)`: `$$Var(\hat{\beta}_{1,IV}) = \frac{\sigma^2}{n \sigma_x^2 R_{x,z}^2}$$` 1. Given `\(R_{x,z}^2 < 1\)` in most real life situations, we have that `\(Var(\hat{\beta}_{1,IV}) > Var(\hat{\beta}_{1,OLS})\)` almost certainly. -- 1. The higher the correlation between `\(z\)` and `\(x\)`, the closer their `\(R_{x,z}^2\)` is to 1. With `\(R_{x,z}^2 = 1\)` we get back to the OLS variance. This is no surprise, because that implies that in fact `\(z = x\)`. So, if you have a valid, exogenous regressor `\(x\)`, you should *not* perform IV estimation using `\(z\)` to obtain `\(\hat{\beta}\)`, since your variance will be unnecessarily large. --- # Returns to Education for Married Women Consider the following model for married women's wages: $$ \log wage = \beta_0 + \beta_1 educ + u $$ Let's run an OLS on this, and then compare it to an IV estimate using *father's education*. Keep in mind that this is a valid IV `\(z\)` if 1. *fatheduc* and *educ* are correlated 2. *fatheduc* and `\(u\)` are not correlated. --- # Returns to Education for Married Women ```r data(mroz,package = "wooldridge") mods = list() mods$OLS <- lm(lwage ~ educ, data = mroz) mods[['First Stage']] <- lm(educ ~ fatheduc, data = subset(mroz, inlf == 1)) mods$IV <- estimatr::iv_robust(lwage ~ educ | fatheduc, data = mroz) ```
OLS
First Stage
IV
(Intercept)
-0.185
10.237
0.441
(0.185)
(0.276)
(0.467)
educ
0.109
0.059
(0.014)
(0.037)
fatheduc
0.269
(0.029)
Num.Obs.
428
428
428
R2
0.118
0.173
0.093
--- # IV Standard Errors <img src="data:image/png;base64,#05-IV2_files/figure-html/se-plot-1.svg" style="display: block; margin: auto;" /> --- # IV with a Weak Instrument * IV is consistent under given assumptions. * However, *even if* we have only very small `\(Cor(z,u)\)`, we can get wrong-footed * Small corrleation between `\(x\)` and `\(z\)` can produce **inconsistent** estimates. .pull-left[ <br> <br> $$ \text{plim}(\hat{\beta}_{1,IV}) = \beta_1 + \frac{Cor(z,u)}{Cor(z,x)} \cdot \frac{\sigma_u}{\sigma_x} $$ ] -- .pull-right[ * Take `\(Cor(z,u)\)` is very small, * A **weak instrument** is one with only a small absolute value for `\(Cor(z,x)\)` * This will blow up this second term in the probability limit. * Even with a very big sample size `\(n\)`, our estimator would *not* converge to the true population parameter `\(\beta_1\)`, because we are using a weak instrument. ] --- # Weak Stuff To illustrate this point, let's assume we want to look at the impact of number of packs of cigarettes smoked per day by pregnant women (*packs*) on the birthweight of their child (*bwght*): $$ \log(bwght) = \beta_0 + \beta_1 packs + u $$ We are worried that smoking behavior is correlated with a range of other health-related variables which are in `\(u\)` and which could impact the birthweight of the child. So we look for an IV. Suppose we use the price of cigarettes (*cigprice*), assuming that the price of cigarettes is uncorrelated with factors in `\(u\)`. Let's run the first stage of *cigprice* on *packs* and then let's show the 2SLS estimates: --- # Weak Stuff ```r data(bwght, package = "wooldridge") mods <- list() mods[["First Stage"]] <- lm(packs ~ cigprice, data = bwght) mods[["IV"]] <- estimatr::iv_robust(log(bwght) ~ packs | cigprice, data = bwght, diagnostics = TRUE) ```
First Stage
IV
(Intercept)
0.067
4.448
(0.103)
(0.940)
cigprice
0.000
(0.001)
packs
2.989
(8.996)
R2
0.000
-23.230
RMSE
0.30
1. Stage F:
0.121
--- # Weak Stuff .pull-left[ * The first columns shows: very weak first stage. *cigprice* has zero impact on packs it seems! * `\(R^2\)` is zero. * What is we use this IV nevertheless? ] -- .pull-right[ * in the second column: very large, positive(!) impact of packs smoked on birthweight. 🤔 * Huge Standard Error though. * An `\(R^2\)` of -23?! * F-stat of first stage: 0.121. Corresponds to a p-value of 0.728 : we **cannot** reject the H0 of an insignificant first stage here *at all*. * So: **invalid** approach. ❌ ] --- class: title-slide-final, middle background-image: url(data:image/png;base64,#../../img/logo/ScPo-econ.png) background-size: 250px background-position: 9% 19% # END | | | | :--------------------------------------------------------------------------------------------------------- | :-------------------------------- | | <a href="mailto:bluebery.planterose@sciencespo.fr">.ScPored[<i class="fa fa-paper-plane fa-fw"></i>] | bluebery.planterose@sciencespo.fr | | <a href="https://github.com/ScPoEcon/ScPoEconometrics-Slides">.ScPored[<i class="fa fa-link fa-fw"></i>] | Original Slides from Florian Oswald | | <a href="https://scpoecon.github.io/ScPoEconometrics">.ScPored[<i class="fa fa-link fa-fw"></i>] | Book | | <a href="http://twitter.com/ScPoEcon">.ScPored[<i class="fa fa-twitter fa-fw"></i>] | @ScPoEcon | | <a href="http://github.com/ScPoEcon">.ScPored[<i class="fa fa-github fa-fw"></i>] | @ScPoEcon |