The effect of legislation on sex ratio at birth

This is an example of using EventStudies on long-form data from social sciences. Specifically, we're going to be using data which

# Load the packages:
using TSFrames         # time series package - EventStudies only accepts this, since it has a defined index type
using EventStudies     # event study package
using DataFrames       # data manipulation
using CairoMakie       # plotting

Load the data.

data = EventStudies.load_data("bigdata.csv")
<div><div style = "float: left;"><span>16992×11 DataFrame</span></div><div style = "float: right;"><span style = "font-style: italic;">16982 rows omitted</span></div><div style = "clear: both;"></div></div><div class = "data-frame" style = "overflow-x: scroll;"><table class = "data-frame" style = "margin-bottom: 6px;"><thead><tr class = "header"><th class = "rowNumber" style = "font-weight: bold; text-align: right;">Row</th><th style = "text-align: left;">country</th><th style = "text-align: left;">iso_code</th><th style = "text-align: left;">year</th><th style = "text-align: left;">totpop</th><th style = "text-align: left;">sex_rat</th><th style = "text-align: left;">birthrate</th><th style = "text-align: left;">intyear</th><th style = "text-align: left;">year_es</th><th style = "text-align: left;">intyear_es</th><th style = "text-align: left;">agrigdp_rat</th><th style = "text-align: left;">gender_inequality_index</th></tr><tr class = "subheader headerLastRow"><th class = "rowNumber" style = "font-weight: bold; text-align: right;"></th><th title = "String" style = "text-align: left;">String</th><th title = "InlineStrings.String3" style = "text-align: left;">String3</th><th title = "Dates.Date" style = "text-align: left;">Date</th><th title = "Float64" style = "text-align: left;">Float64</th><th title = "Float64" style = "text-align: left;">Float64</th><th title = "Float64" style = "text-align: left;">Float64</th><th title = "Union{Missing, Dates.Date}" style = "text-align: left;">Date</th><th title = "Int64" style = "text-align: left;">Int64</th><th title = "Union{Missing, Int64}" style = "text-align: left;">Int64?</th><th title = "Union{Missing, Float64}" style = "text-align: left;">Float64?</th><th title = "Union{Missing, Float64}" style = "text-align: left;">Float64?</th></tr></thead><tbody><tr><td class = "rowNumber" style = "font-weight: bold; text-align: right;">1</td><td style = "text-align: left;">Burundi</td><td style = "text-align: left;">BDI</td><td style = "text-align: left;">1950-01-01</td><td style = "text-align: right;">2229.32</td><td style = "text-align: right;">102.5</td><td style = "text-align: right;">51.334</td><td style = "font-style: italic; text-align: left;">missing</td><td style = "text-align: right;">1950</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td></tr><tr><td class = "rowNumber" style = "font-weight: bold; text-align: right;">2</td><td style = "text-align: left;">Burundi</td><td style = "text-align: left;">BDI</td><td style = "text-align: left;">1951-01-01</td><td style = "text-align: right;">2278.9</td><td style = "text-align: right;">102.5</td><td style = "text-align: right;">50.678</td><td style = "font-style: italic; text-align: left;">missing</td><td style = "text-align: right;">1951</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td></tr><tr><td class = "rowNumber" style = "font-weight: bold; text-align: right;">3</td><td style = "text-align: left;">Burundi</td><td style = "text-align: left;">BDI</td><td style = "text-align: left;">1952-01-01</td><td style = "text-align: right;">2327.59</td><td style = "text-align: right;">102.5</td><td style = "text-align: right;">49.933</td><td style = "font-style: italic; text-align: left;">missing</td><td style = "text-align: right;">1952</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td></tr><tr><td class = "rowNumber" style = "font-weight: bold; text-align: right;">4</td><td style = "text-align: left;">Burundi</td><td style = "text-align: left;">BDI</td><td style = "text-align: left;">1953-01-01</td><td style = "text-align: right;">2375.48</td><td style = "text-align: right;">102.5</td><td style = "text-align: right;">49.448</td><td style = "font-style: italic; text-align: left;">missing</td><td style = "text-align: right;">1953</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td></tr><tr><td class = "rowNumber" style = "font-weight: bold; text-align: right;">5</td><td style = "text-align: left;">Burundi</td><td style = "text-align: left;">BDI</td><td style = "text-align: left;">1954-01-01</td><td style = "text-align: right;">2422.72</td><td style = "text-align: right;">102.5</td><td style = "text-align: right;">48.883</td><td style = "font-style: italic; text-align: left;">missing</td><td style = "text-align: right;">1954</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td></tr><tr><td style = "text-align: right;">&vellip;</td><td style = "text-align: right;">&vellip;</td><td style = "text-align: right;">&vellip;</td><td style = "text-align: right;">&vellip;</td><td style = "text-align: right;">&vellip;</td><td style = "text-align: right;">&vellip;</td><td style = "text-align: right;">&vellip;</td><td style = "text-align: right;">&vellip;</td><td style = "text-align: right;">&vellip;</td><td style = "text-align: right;">&vellip;</td><td style = "text-align: right;">&vellip;</td><td style = "text-align: right;">&vellip;</td></tr><tr><td class = "rowNumber" style = "font-weight: bold; text-align: right;">16988</td><td style = "text-align: left;">Wallis and Futuna Islands</td><td style = "text-align: left;">WLF</td><td style = "text-align: left;">2017-01-01</td><td style = "text-align: right;">12.002</td><td style = "text-align: right;">104.8</td><td style = "text-align: right;">12.713</td><td style = "font-style: italic; text-align: left;">missing</td><td style = "text-align: right;">2017</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td></tr><tr><td class = "rowNumber" style = "font-weight: bold; text-align: right;">16989</td><td style = "text-align: left;">Wallis and Futuna Islands</td><td style = "text-align: left;">WLF</td><td style = "text-align: left;">2018-01-01</td><td style = "text-align: right;">11.87</td><td style = "text-align: right;">104.8</td><td style = "text-align: right;">12.381</td><td style = "font-style: italic; text-align: left;">missing</td><td style = "text-align: right;">2018</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td></tr><tr><td class = "rowNumber" style = "font-weight: bold; text-align: right;">16990</td><td style = "text-align: left;">Wallis and Futuna Islands</td><td style = "text-align: left;">WLF</td><td style = "text-align: left;">2019-01-01</td><td style = "text-align: right;">11.761</td><td style = "text-align: right;">104.8</td><td style = "text-align: right;">12.189</td><td style = "font-style: italic; text-align: left;">missing</td><td style = "text-align: right;">2019</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td></tr><tr><td class = "rowNumber" style = "font-weight: bold; text-align: right;">16991</td><td style = "text-align: left;">Wallis and Futuna Islands</td><td style = "text-align: left;">WLF</td><td style = "text-align: left;">2020-01-01</td><td style = "text-align: right;">11.667</td><td style = "text-align: right;">104.8</td><td style = "text-align: right;">11.997</td><td style = "font-style: italic; text-align: left;">missing</td><td style = "text-align: right;">2020</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td></tr><tr><td class = "rowNumber" style = "font-weight: bold; text-align: right;">16992</td><td style = "text-align: left;">Wallis and Futuna Islands</td><td style = "text-align: left;">WLF</td><td style = "text-align: left;">2021-01-01</td><td style = "text-align: right;">11.642</td><td style = "text-align: right;">104.8</td><td style = "text-align: right;">11.816</td><td style = "font-style: italic; text-align: left;">missing</td><td style = "text-align: right;">2021</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td><td style = "font-style: italic; text-align: right;">missing</td></tr></tbody></table></div>

This data is in "long" format, so we need to convert it to "wide" format.

We do this by grouping by country,

country_data = groupby(data, :country)

GroupedDataFrame with 236 groups based on key: country

First Group (72 rows): country = "Burundi"
Rowcountryiso_codeyeartotpopsex_ratbirthrateintyearyear_esintyear_esagrigdp_ratgender_inequality_index
StringString3DateFloat64Float64Float64DateInt64Int64?Float64?Float64?
1BurundiBDI1950-01-012229.32102.551.334missing1950missingmissingmissing
2BurundiBDI1951-01-012278.9102.550.678missing1951missingmissingmissing
3BurundiBDI1952-01-012327.59102.549.933missing1952missingmissingmissing
4BurundiBDI1953-01-012375.48102.549.448missing1953missingmissingmissing
5BurundiBDI1954-01-012422.72102.548.883missing1954missingmissingmissing
6BurundiBDI1955-01-012470.79102.548.399missing1955missingmissingmissing
7BurundiBDI1956-01-012519.59102.547.885missing1956missingmissingmissing
8BurundiBDI1957-01-012568.92102.547.398missing1957missingmissingmissing
9BurundiBDI1958-01-012618.76102.547.013missing1958missingmissingmissing
10BurundiBDI1959-01-012667.55102.546.736missing1959missingmissingmissing
11BurundiBDI1960-01-012719.73102.546.501missing1960missingmissingmissing
12BurundiBDI1961-01-012773.52102.546.265missing1961missingmissingmissing
13BurundiBDI1962-01-012858.42102.546.522missing1962missingmissingmissing
14BurundiBDI1963-01-012916.37102.546.368missing1963missingmissingmissing
15BurundiBDI1964-01-012979.89102.546.25missing1964missingmissingmissing
16BurundiBDI1965-01-013086.55102.546.896missing1965missingmissingmissing
17BurundiBDI1966-01-013149.72102.546.85missing1966missingmissingmissing
18BurundiBDI1967-01-013237.04102.547.124missing1967missingmissingmissing
19BurundiBDI1968-01-013311.95102.447.192missing1968missingmissingmissing
20BurundiBDI1969-01-013392.85102.447.45missing1969missingmissingmissing
21BurundiBDI1970-01-013456.01102.447.339missing1970missing65.3314missing
22BurundiBDI1971-01-013539.66102.447.455missing1971missing64.7618missing
23BurundiBDI1972-01-013624.48102.447.633missing1972missing60.7731missing
24BurundiBDI1973-01-013533.91102.446.325missing1973missing63.3136missing
25BurundiBDI1974-01-013608.99102.446.718missing1974missing61.0342missing
26BurundiBDI1975-01-013711.07102.447.371missing1975missing61.3036missing
27BurundiBDI1976-01-013787.39102.447.499missing1976missing59.4755missing
28BurundiBDI1977-01-013874.39102.447.728missing1977missing55.5802missing
29BurundiBDI1978-01-013980.47102.548.16missing1978missing53.964missing
30BurundiBDI1979-01-014098.35102.448.865missing1979missing53.8322missing
31BurundiBDI1980-01-014176.53102.548.896missing1980missing57.5719missing
32BurundiBDI1981-01-014449.14102.550.47missing1981missing58.1426missing
33BurundiBDI1982-01-014532.34102.449.673missing1982missing52.6127missing
34BurundiBDI1983-01-014672.2102.449.495missing1983missing53.4822missing
35BurundiBDI1984-01-014780.81102.448.763missing1984missing54.6599missing
36BurundiBDI1985-01-014903.72102.548.338missing1985missing55.952missing
37BurundiBDI1986-01-014992.32102.547.762missing1986missing52.5196missing
38BurundiBDI1987-01-015091.09102.547.474missing1987missing50.5564missing
39BurundiBDI1988-01-015224.45102.547.248missing1988missing48.2156missing
40BurundiBDI1989-01-015319.23102.446.912missing1989missing47.1221missing
41BurundiBDI1990-01-015428.16102.446.545missing1990missing51.0569missing
42BurundiBDI1991-01-015539.42102.446.128missing1991missing48.5979missing
43BurundiBDI1992-01-015650.23102.445.702missing1992missing48.0045missing
44BurundiBDI1993-01-015835.94102.346.026missing1993missing47.1698missing
45BurundiBDI1994-01-015274.51102.339.132missing1994missing40.7323missing
46BurundiBDI1995-01-015898.31102.344.504missing1995missing42.0227missing
47BurundiBDI1996-01-015967.25102.343.858missing1996missing53.3809missing
48BurundiBDI1997-01-015893.76102.241.867missing1997missing42.4219missing
49BurundiBDI1998-01-015953.97102.341.346missing1998missing44.53870.623
50BurundiBDI1999-01-016116.72102.342.005missing1999missing47.63530.655
51BurundiBDI2000-01-016243.65102.342.473missing2000missing44.1070.616
52BurundiBDI2001-01-016371.67102.342.882missing2001missing43.84310.612
53BurundiBDI2002-01-016559.78102.243.807missing2002missing43.33360.611
54BurundiBDI2003-01-016738.09102.244.485missing2003missing42.84130.597
55BurundiBDI2004-01-016983.6102.145.297missing2004missing41.90260.593
56BurundiBDI2005-01-017257.39102.146.03missing2005missing40.84810.562
57BurundiBDI2006-01-017520.36102.146.38missing2006missing40.63770.557
58BurundiBDI2007-01-017796.02102.246.525missing2007missing34.93420.552
59BurundiBDI2008-01-018093.2102.146.562missing2008missing38.00480.547
60BurundiBDI2009-01-018463.02102.246.681missing2009missing36.72140.548
61BurundiBDI2010-01-018955.71102.246.691missing2010missing38.43050.54
62BurundiBDI2011-01-019297.5102.245.583missing2011missing36.70460.537
63BurundiBDI2012-01-019613.97102.244.413missing2012missing35.420.533
64BurundiBDI2013-01-019976.99102.243.402missing2013missing38.36740.528
65BurundiBDI2014-01-0110322.2102.342.356missing2014missing34.95820.525
66BurundiBDI2015-01-0110667.7102.341.321missing2015missing30.68470.517
67BurundiBDI2016-01-0110786.6102.439.479missing2016missing31.54430.514
68BurundiBDI2017-01-0111020.0102.438.124missing2017missing28.54660.51
69BurundiBDI2018-01-0111291.2102.437.011missing2018missing29.01190.508
70BurundiBDI2019-01-0111695.8102.436.323missing2019missing28.84440.507
71BurundiBDI2020-01-0112053.9102.435.603missing2020missing28.6250.506
72BurundiBDI2021-01-0112386.6102.534.842missing2021missing28.66020.505

Last Group (72 rows): country = "Wallis and Futuna Islands"
Rowcountryiso_codeyeartotpopsex_ratbirthrateintyearyear_esintyear_esagrigdp_ratgender_inequality_index
StringString3DateFloat64Float64Float64DateInt64Int64?Float64?Float64?
1Wallis and Futuna IslandsWLF1950-01-018.452104.944.994missing1950missingmissingmissing
2Wallis and Futuna IslandsWLF1951-01-018.618104.945.027missing1951missingmissingmissing
3Wallis and Futuna IslandsWLF1952-01-019.002104.945.306missing1952missingmissingmissing
4Wallis and Futuna IslandsWLF1953-01-019.337104.945.805missing1953missingmissingmissing
5Wallis and Futuna IslandsWLF1954-01-019.719104.946.266missing1954missingmissingmissing
6Wallis and Futuna IslandsWLF1955-01-019.667104.945.574missing1955missingmissingmissing
7Wallis and Futuna IslandsWLF1956-01-019.564104.944.696missing1956missingmissingmissing
8Wallis and Futuna IslandsWLF1957-01-019.444104.943.569missing1957missingmissingmissing
9Wallis and Futuna IslandsWLF1958-01-019.278104.942.416missing1958missingmissingmissing
10Wallis and Futuna IslandsWLF1959-01-019.092104.941.178missing1959missingmissingmissing
11Wallis and Futuna IslandsWLF1960-01-018.899104.939.751missing1960missingmissingmissing
12Wallis and Futuna IslandsWLF1961-01-018.661104.938.06missing1961missingmissingmissing
13Wallis and Futuna IslandsWLF1962-01-018.405104.936.198missing1962missingmissingmissing
14Wallis and Futuna IslandsWLF1963-01-018.54104.936.085missing1963missingmissingmissing
15Wallis and Futuna IslandsWLF1964-01-018.703104.936.127missing1964missingmissingmissing
16Wallis and Futuna IslandsWLF1965-01-018.867104.935.856missing1965missingmissingmissing
17Wallis and Futuna IslandsWLF1966-01-018.907104.938.185missing1966missingmissingmissing
18Wallis and Futuna IslandsWLF1967-01-018.98104.940.471missing1967missingmissingmissing
19Wallis and Futuna IslandsWLF1968-01-019.084104.942.714missing1968missingmissingmissing
20Wallis and Futuna IslandsWLF1969-01-019.211104.944.824missing1969missingmissingmissing
21Wallis and Futuna IslandsWLF1970-01-019.335104.944.94missing1970missingmissingmissing
22Wallis and Futuna IslandsWLF1971-01-019.42104.944.622missing1971missingmissingmissing
23Wallis and Futuna IslandsWLF1972-01-019.5104.944.432missing1972missingmissingmissing
24Wallis and Futuna IslandsWLF1973-01-019.572104.943.989missing1973missingmissingmissing
25Wallis and Futuna IslandsWLF1974-01-019.647104.941.113missing1974missingmissingmissing
26Wallis and Futuna IslandsWLF1975-01-019.705104.937.874missing1975missingmissingmissing
27Wallis and Futuna IslandsWLF1976-01-019.742104.935.417missing1976missingmissingmissing
28Wallis and Futuna IslandsWLF1977-01-019.995104.936.792missing1977missingmissingmissing
29Wallis and Futuna IslandsWLF1978-01-0110.343104.938.381missing1978missingmissingmissing
30Wallis and Futuna IslandsWLF1979-01-0110.714104.937.623missing1979missingmissingmissing
31Wallis and Futuna IslandsWLF1980-01-0111.104104.934.685missing1980missingmissingmissing
32Wallis and Futuna IslandsWLF1981-01-0111.525104.937.219missing1981missingmissingmissing
33Wallis and Futuna IslandsWLF1982-01-0111.961104.934.142missing1982missingmissingmissing
34Wallis and Futuna IslandsWLF1983-01-0112.426104.931.956missing1983missingmissingmissing
35Wallis and Futuna IslandsWLF1984-01-0112.596104.933.335missing1984missingmissingmissing
36Wallis and Futuna IslandsWLF1985-01-0112.733104.933.091missing1985missingmissingmissing
37Wallis and Futuna IslandsWLF1986-01-0112.855104.934.734missing1986missingmissingmissing
38Wallis and Futuna IslandsWLF1987-01-0112.983104.935.778missing1987missingmissingmissing
39Wallis and Futuna IslandsWLF1988-01-0113.11104.931.309missing1988missingmissingmissing
40Wallis and Futuna IslandsWLF1989-01-0113.241104.929.841missing1989missingmissingmissing
41Wallis and Futuna IslandsWLF1990-01-0113.383105.030.867missing1990missingmissingmissing
42Wallis and Futuna IslandsWLF1991-01-0113.526105.029.676missing1991missingmissingmissing
43Wallis and Futuna IslandsWLF1992-01-0113.671105.028.113missing1992missingmissingmissing
44Wallis and Futuna IslandsWLF1993-01-0113.825105.026.373missing1993missingmissingmissing
45Wallis and Futuna IslandsWLF1994-01-0113.976105.024.44missing1994missingmissingmissing
46Wallis and Futuna IslandsWLF1995-01-0114.117105.022.106missing1995missingmissingmissing
47Wallis and Futuna IslandsWLF1996-01-0114.242104.920.419missing1996missingmissingmissing
48Wallis and Futuna IslandsWLF1997-01-0114.341104.922.778missing1997missingmissingmissing
49Wallis and Futuna IslandsWLF1998-01-0114.439104.919.423missing1998missingmissingmissing
50Wallis and Futuna IslandsWLF1999-01-0114.541104.818.943missing1999missingmissingmissing
51Wallis and Futuna IslandsWLF2000-01-0114.66104.818.862missing2000missingmissingmissing
52Wallis and Futuna IslandsWLF2001-01-0114.786104.818.862missing2001missingmissingmissing
53Wallis and Futuna IslandsWLF2002-01-0114.919104.817.228missing2002missingmissingmissing
54Wallis and Futuna IslandsWLF2003-01-0115.057104.916.192missing2003missingmissingmissing
55Wallis and Futuna IslandsWLF2004-01-0115.006104.915.477missing2004missingmissingmissing
56Wallis and Futuna IslandsWLF2005-01-0114.7105.014.966missing2005missingmissingmissing
57Wallis and Futuna IslandsWLF2006-01-0114.405105.113.926missing2006missingmissingmissing
58Wallis and Futuna IslandsWLF2007-01-0114.115105.113.678missing2007missingmissingmissing
59Wallis and Futuna IslandsWLF2008-01-0113.813105.112.243missing2008missingmissingmissing
60Wallis and Futuna IslandsWLF2009-01-0113.518105.113.087missing2009missingmissingmissing
61Wallis and Futuna IslandsWLF2010-01-0113.265105.114.372missing2010missingmissingmissing
62Wallis and Futuna IslandsWLF2011-01-0113.018105.014.443missing2011missingmissingmissing
63Wallis and Futuna IslandsWLF2012-01-0112.782105.014.098missing2012missingmissingmissing
64Wallis and Futuna IslandsWLF2013-01-0112.56104.913.539missing2013missingmissingmissing
65Wallis and Futuna IslandsWLF2014-01-0112.369104.913.133missing2014missingmissingmissing
66Wallis and Futuna IslandsWLF2015-01-0112.246104.813.012missing2015missingmissingmissing
67Wallis and Futuna IslandsWLF2016-01-0112.119104.812.932missing2016missingmissingmissing
68Wallis and Futuna IslandsWLF2017-01-0112.002104.812.713missing2017missingmissingmissing
69Wallis and Futuna IslandsWLF2018-01-0111.87104.812.381missing2018missingmissingmissing
70Wallis and Futuna IslandsWLF2019-01-0111.761104.812.189missing2019missingmissingmissing
71Wallis and Futuna IslandsWLF2020-01-0111.667104.811.997missing2020missingmissingmissing
72Wallis and Futuna IslandsWLF2021-01-0111.642104.811.816missing2021missingmissingmissing

filtering to only include countries with events defined,

countries_with_events = filter(sdf -> !(all(ismissing.(sdf.intyear_es))), country_data)

GroupedDataFrame with 15 groups based on key: country

First Group (72 rows): country = "Libya"
Rowcountryiso_codeyeartotpopsex_ratbirthrateintyearyear_esintyear_esagrigdp_ratgender_inequality_index
StringString3DateFloat64Float64Float64DateInt64Int64?Float64?Float64?
1LibyaLBY1950-01-011125.23105.746.9721986-01-0119501986missingmissing
2LibyaLBY1951-01-011136.12105.747.1041986-01-0119511986missingmissing
3LibyaLBY1952-01-011149.58105.747.2981986-01-0119521986missingmissing
4LibyaLBY1953-01-011165.82105.747.9381986-01-0119531986missingmissing
5LibyaLBY1954-01-011185.9105.648.4071986-01-0119541986missingmissing
6LibyaLBY1955-01-011209.79105.648.9341986-01-0119551986missingmissing
7LibyaLBY1956-01-011241.58105.649.4391986-01-0119561986missingmissing
8LibyaLBY1957-01-011276.48105.649.8781986-01-0119571986missingmissing
9LibyaLBY1958-01-011314.72105.650.2111986-01-0119581986missingmissing
10LibyaLBY1959-01-011356.6105.650.3061986-01-0119591986missingmissing
11LibyaLBY1960-01-011402.21105.650.4631986-01-0119601986missingmissing
12LibyaLBY1961-01-011451.76105.550.7331986-01-0119611986missingmissing
13LibyaLBY1962-01-011505.76105.551.1251986-01-0119621986missingmissing
14LibyaLBY1963-01-011564.55105.551.6911986-01-0119631986missingmissing
15LibyaLBY1964-01-011624.96105.451.9621986-01-0119641986missingmissing
16LibyaLBY1965-01-011679.24105.451.9221986-01-0119651986missingmissing
17LibyaLBY1966-01-011720.9105.351.1941986-01-0119661986missingmissing
18LibyaLBY1967-01-011758.76105.249.9181986-01-0119671986missingmissing
19LibyaLBY1968-01-011798.4105.248.6431986-01-0119681986missingmissing
20LibyaLBY1969-01-011840.39105.147.5031986-01-0119691986missingmissing
21LibyaLBY1970-01-011885.26105.046.4041986-01-0119701986missingmissing
22LibyaLBY1971-01-011933.1104.945.4791986-01-0119711986missingmissing
23LibyaLBY1972-01-011983.54104.844.2631986-01-0119721986missingmissing
24LibyaLBY1973-01-012042.05104.843.3921986-01-0119731986missingmissing
25LibyaLBY1974-01-012126.46104.943.3491986-01-0119741986missingmissing
26LibyaLBY1975-01-012232.43104.642.5811986-01-0119751986missingmissing
27LibyaLBY1976-01-012351.25104.341.891986-01-0119761986missingmissing
28LibyaLBY1977-01-012476.27104.041.2541986-01-0119771986missingmissing
29LibyaLBY1978-01-012607.34103.940.6981986-01-0119781986missingmissing
30LibyaLBY1979-01-012744.89104.240.1421986-01-0119791986missingmissing
31LibyaLBY1980-01-012888.94104.738.5451986-01-0119801986missingmissing
32LibyaLBY1981-01-013036.5105.037.1281986-01-0119811986missingmissing
33LibyaLBY1982-01-013187.53105.136.3381986-01-0119821986missingmissing
34LibyaLBY1983-01-013343.38105.235.5511986-01-0119831986missingmissing
35LibyaLBY1984-01-013503.8105.334.7921986-01-0119841986missingmissing
36LibyaLBY1985-01-013625.29105.634.3571986-01-0119851986missingmissing
37LibyaLBY1986-01-013743.34105.833.6811986-01-0119861986missingmissing
38LibyaLBY1987-01-013856.88106.132.8521986-01-0119871986missingmissing
39LibyaLBY1988-01-013967.0106.231.8511986-01-0119881986missingmissing
40LibyaLBY1989-01-014076.13106.230.6951986-01-0119891986missingmissing
41LibyaLBY1990-01-014183.95106.129.4791986-01-0119901986missingmissing
42LibyaLBY1991-01-014290.02106.328.2531986-01-0119911986missingmissing
43LibyaLBY1992-01-014393.93106.727.1111986-01-0119921986missingmissing
44LibyaLBY1993-01-014495.71107.325.9331986-01-0119931986missingmissing
45LibyaLBY1994-01-014594.23107.624.9441986-01-0119941986missingmissing
46LibyaLBY1995-01-014688.37107.424.1481986-01-0119951986missingmissing
47LibyaLBY1996-01-014777.76107.323.4781986-01-0119961986missingmissing
48LibyaLBY1997-01-014862.37107.222.8131986-01-0119971986missingmissing
49LibyaLBY1998-01-014942.32107.122.1881986-01-0119981986missingmissing
50LibyaLBY1999-01-015019.61107.021.6491986-01-0119991986missingmissing
51LibyaLBY2000-01-015096.39107.021.1951986-01-0120001986missingmissing
52LibyaLBY2001-01-015213.19107.122.6111986-01-0120011986missingmissing
53LibyaLBY2002-01-015338.64107.222.8111986-01-01200219865.1853missing
54LibyaLBY2003-01-015472.01107.223.0521986-01-01200319864.09221missing
55LibyaLBY2004-01-015613.27107.323.3381986-01-01200419863.34262missing
56LibyaLBY2005-01-015761.85107.423.6481986-01-01200519862.510010.325
57LibyaLBY2006-01-015914.12107.423.7711986-01-01200619861.517640.286
58LibyaLBY2007-01-016032.62106.623.6231986-01-01200719861.541420.28
59LibyaLBY2008-01-016161.73106.023.3911986-01-01200819861.383650.276
60LibyaLBY2009-01-016295.01105.723.1261986-01-01200919862.158070.275
61LibyaLBY2010-01-016425.38105.723.5621986-01-01201019861.799530.28
62LibyaLBY2011-01-016558.6105.723.8851986-01-01201119863.057670.289
63LibyaLBY2012-01-015817.66105.721.9531986-01-01201219861.815590.243
64LibyaLBY2013-01-015922.08105.721.8861986-01-01201319862.415490.252
65LibyaLBY2014-01-016048.36105.721.9081986-01-01201419863.516680.26
66LibyaLBY2015-01-016147.16105.721.2141986-01-01201519864.38630.267
67LibyaLBY2016-01-016237.31105.720.5761986-01-01201619864.611780.268
68LibyaLBY2017-01-016327.09105.719.8981986-01-01201719863.874780.264
69LibyaLBY2018-01-016429.44105.719.2821986-01-01201819863.660130.262
70LibyaLBY2019-01-016526.15105.718.7321986-01-01201919864.088790.26
71LibyaLBY2020-01-016612.03105.718.3021986-01-0120201986missing0.259
72LibyaLBY2021-01-016695.86105.717.8281986-01-0120211986missing0.259

Last Group (72 rows): country = "Cuba"
Rowcountryiso_codeyeartotpopsex_ratbirthrateintyearyear_esintyear_esagrigdp_ratgender_inequality_index
StringString3DateFloat64Float64Float64DateInt64Int64?Float64?Float64?
1CubaCUB1950-01-015865.9106.531.9751990-01-0119501990missingmissing
2CubaCUB1951-01-015987.39106.531.3131990-01-0119511990missingmissing
3CubaCUB1952-01-016108.43106.531.2021990-01-0119521990missingmissing
4CubaCUB1953-01-016232.76106.431.1661990-01-0119531990missingmissing
5CubaCUB1954-01-016360.72106.431.1511990-01-0119541990missingmissing
6CubaCUB1955-01-016492.32106.431.0771990-01-0119551990missingmissing
7CubaCUB1956-01-016626.85106.331.0391990-01-0119561990missingmissing
8CubaCUB1957-01-016763.9106.331.0031990-01-0119571990missingmissing
9CubaCUB1958-01-016903.61106.331.0911990-01-0119581990missingmissing
10CubaCUB1959-01-017046.13106.231.7931990-01-0119591990missingmissing
11CubaCUB1960-01-017192.57106.132.6641990-01-0119601990missingmissing
12CubaCUB1961-01-017342.22106.033.521990-01-0119611990missingmissing
13CubaCUB1962-01-017494.82105.934.4431990-01-0119621990missingmissing
14CubaCUB1963-01-017653.71105.835.1891990-01-0119631990missingmissing
15CubaCUB1964-01-017818.99105.834.691990-01-0119641990missingmissing
16CubaCUB1965-01-017985.58105.733.9331990-01-0119651990missingmissing
17CubaCUB1966-01-018149.72105.833.1291990-01-0119661990missingmissing
18CubaCUB1967-01-018311.17105.832.3621990-01-0119671990missingmissing
19CubaCUB1968-01-018470.75105.831.6441990-01-0119681990missingmissing
20CubaCUB1969-01-018629.82105.930.861990-01-0119691990missingmissing
21CubaCUB1970-01-018789.49105.929.9661990-01-011970199012.1214missing
22CubaCUB1971-01-018949.78105.929.0081990-01-011971199012.119missing
23CubaCUB1972-01-019101.63105.927.961990-01-011972199012.1189missing
24CubaCUB1973-01-019236.94105.926.3511990-01-011973199012.1232missing
25CubaCUB1974-01-019358.9105.824.311990-01-011974199012.1326missing
26CubaCUB1975-01-019467.31105.821.891990-01-011975199012.113missing
27CubaCUB1976-01-019561.3106.019.5291990-01-011976199012.1075missing
28CubaCUB1977-01-019640.42106.117.3641990-01-011977199012.1183missing
29CubaCUB1978-01-019704.67106.215.0781990-01-011978199012.1449missing
30CubaCUB1979-01-019755.3106.214.4471990-01-011979199012.1794missing
31CubaCUB1980-01-019794.12106.313.7061990-01-011980199012.015missing
32CubaCUB1981-01-019824.1106.313.6491990-01-011981199012.0798missing
33CubaCUB1982-01-019873.02106.415.7341990-01-011982199012.1723missing
34CubaCUB1983-01-019944.72106.516.3551990-01-011983199012.2779missing
35CubaCUB1984-01-0110024.5106.516.4321990-01-011984199012.3518missing
36CubaCUB1985-01-0110106.6106.616.5591990-01-011985199011.193missing
37CubaCUB1986-01-0110191.5106.916.7491990-01-011986199012.4041missing
38CubaCUB1987-01-0110279.5107.517.3051990-01-011987199012.6348missing
39CubaCUB1988-01-0110374.3108.017.9151990-01-011988199012.8059missing
40CubaCUB1989-01-0110476.5108.317.7441990-01-011989199012.721missing
41CubaCUB1990-01-0110577.8108.517.481990-01-011990199013.04050.439
42CubaCUB1991-01-0110675.5108.816.0331990-01-011991199012.77590.432
43CubaCUB1992-01-0110752.1109.214.9771990-01-011992199012.42660.434
44CubaCUB1993-01-0110815.4109.514.1471990-01-01199319909.571150.43
45CubaCUB1994-01-0110866.5110.013.5721990-01-01199419907.899810.427
46CubaCUB1995-01-0110907.9110.913.3741990-01-01199519906.88330.421
47CubaCUB1996-01-0110945.5111.112.7991990-01-01199619907.133440.408
48CubaCUB1997-01-0110980.6110.213.5781990-01-01199719907.186810.403
49CubaCUB1998-01-0111015.7109.313.4441990-01-01199819906.117420.386
50CubaCUB1999-01-0111051.9108.513.2871990-01-01199919906.124180.378
51CubaCUB2000-01-0111088.3107.912.6281990-01-01200019906.601260.369
52CubaCUB2001-01-0111123.2107.212.1711990-01-01200119906.379570.363
53CubaCUB2002-01-0111155.0106.912.2621990-01-01200219905.945730.358
54CubaCUB2003-01-0111185.1106.811.8291990-01-01200319905.745210.338
55CubaCUB2004-01-0111213.3106.711.0311990-01-01200419905.474440.332
56CubaCUB2005-01-0111237.3106.710.4461990-01-01200519904.363650.328
57CubaCUB2006-01-0111255.0106.79.7521990-01-01200619903.405010.315
58CubaCUB2007-01-0111266.3106.79.9211990-01-01200719903.90810.321
59CubaCUB2008-01-0111273.5106.710.831990-01-01200819903.817040.325
60CubaCUB2009-01-0111279.7106.711.4871990-01-01200919903.930410.33
61CubaCUB2010-01-0111286.6106.611.4171990-01-01201019903.614290.333
62CubaCUB2011-01-0111294.2106.711.761990-01-01201119903.604870.329
63CubaCUB2012-01-0111303.2106.911.1911990-01-01201219903.85010.323
64CubaCUB2013-01-0111315.4107.211.1221990-01-01201319903.924920.318
65CubaCUB2014-01-0111327.8107.310.861990-01-01201419903.937710.313
66CubaCUB2015-01-0111336.2107.510.9721990-01-01201519903.835520.312
67CubaCUB2016-01-0111343.5107.710.3511990-01-01201619903.938930.309
68CubaCUB2017-01-0111340.5107.710.1821990-01-01201719903.800680.31
69CubaCUB2018-01-0111332.3107.610.3481990-01-01201819903.783110.309
70CubaCUB2019-01-0111324.2107.59.7521990-01-01201919903.56770.307
71CubaCUB2020-01-0111309.2107.39.3441990-01-01202019902.761940.307
72CubaCUB2021-01-0111292.2107.38.9221990-01-01202119900.8819410.303

and finally, creating a TSFrame with the sex_rat variable for each country.

relevant_country_ts = TSFrames.join((TSFrame(DataFrame([:Index => sdf.year_es, Symbol(sdf.country[1]) => sdf.sex_rat])) for sdf in countries_with_events)...; jointype = :JoinInner)
72×15 TSFrame with Int64 Index
 Index  Libya    China    China, Hong Kong SAR  China, Taiwan Province of Chin ⋯
 Int64  Float64  Float64  Float64               Float64                        ⋯
────────────────────────────────────────────────────────────────────────────────
  1950    105.7    106.1                 109.8                            105. ⋯
  1951    105.7    106.1                 109.7                            105.
  1952    105.7    106.1                 109.4                            105.
  1953    105.7    106.1                 109.2                            105.
  1954    105.6    106.1                 108.9                            105. ⋯
  1955    105.6    106.1                 108.9                            105.
  1956    105.6    106.1                 108.3                            105.
  1957    105.6    106.1                 109.0                            105.
   ⋮       ⋮        ⋮              ⋮                           ⋮               ⋱
  2015    105.7    115.0                 107.6                            107. ⋯
  2016    105.7    114.5                 107.6                            107.
  2017    105.7    114.0                 107.6                            107.
  2018    105.7    113.4                 107.7                            107.
  2019    105.7    112.9                 107.7                            107. ⋯
  2020    105.7    112.3                 107.7                            107.
  2021    105.7    111.8                 107.7                            107.
                                                  12 columns and 57 rows omitted

Create a mapping from country to event time, for each event.

Note that this can have multiple events per country.

event_times = [Symbol(sdf.country[1]) => sdf.intyear_es[findfirst(!ismissing, sdf.intyear_es)] for sdf in countries_with_events]
15-element Vector{Pair{Symbol, Int64}}:
                                    :Libya => 1986
                                    :China => 1983
            Symbol("China, Hong Kong SAR") => 1998
 Symbol("China, Taiwan Province of China") => 1974
               Symbol("Republic of Korea") => 1974
                                    :India => 1972
                                 :Pakistan => 1973
                        Symbol("Viet Nam") => 1999
                                  :Armenia => 1991
                               :Azerbaijan => 1991
                                  :Georgia => 1991
              Symbol("Russian Federation") => 1985
                                  :Albania => 1991
                                    :Spain => 1975
                                     :Cuba => 1990

Convert to event time using EventStudies.jl (perform the event study).

eventtime_ts, retcodes = EventStudies.eventstudy(levels_to_returns(relevant_country_ts), event_times, 4)
(9×15 TSFrame with Int64 Index
 Index  Libya       China      China, Hong Kong SAR  China, Taiwan Province of ⋯
 Int64  Float64     Float64    Float64               Float64                   ⋯
────────────────────────────────────────────────────────────────────────────────
    -4   0.0951928  0.0935016             0.371402                        -0.1 ⋯
    -3   0.0951022  0.0934143            -0.0927214                       -0.0
    -2   0.0950119  0.186567              0.0                             -0.0
    -1   0.284495   0.18622               0.46275                          0.3
     0   0.189215   0.278681              0.276625                         0.0 ⋯
     1   0.283153   0.277907              0.0                             -0.2
     2   0.0942063  0.461468              0.0920387                        0.0
     3   0.0        0.459349             -0.276371                         0.1
     4  -0.0942063  0.548447             -0.277136                         0.4 ⋯
                                                              12 columns omitted, EventStudies.EventStatus[EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success()])

Perform bootstrap inference with a 95% confidence interval

t0, lower, upper = inference(BootstrapInference(), eventtime_ts, 0.95)
([0.08750559901358794, 0.05639795220573044, 0.037076052234521484, 0.14915962548207298, 0.2053603997918548, 0.08716474148950344, 0.30419233442415816, 0.27634298013774483, 0.3610686693636171], [0.012666142999793852, -0.04002900293414792, -0.03142136506890333, 0.04800203081096841, 0.09961761892883336, -0.08669979665881751, 0.13652946052636983, 0.06262873187748971, 0.15695636073234576], [0.16239711651013033, 0.1561040473290407, 0.1361553928509711, 0.25479841834865685, 0.3555889811206953, 0.24829626602792015, 0.5212877911822056, 0.5702681228666144, 0.5940640931676833])

we're technically done with the event study here!

now, it's time to plot plot each variable in the event study

fig, ax, plt = series(
    index(eventtime_ts), Matrix(remap_cumsum(eventtime_ts))';
    labels = names(eventtime_ts),
    color = Makie.resample_cmap(:rainbow_bgyrm_35_85_c71_n256, 15),
    linewidth = 3,
    axis = (
        xlabel = "Years relative to event",
        xticks = WilkinsonTicks(8, k_min = 8, k_max = 8),
        ylabel = "Cumulative change\nin sex ratio (%)",
        title = "Variable: sex ratio at birth",
        subtitle = "Event: some legislation",
        titlealign = :left,
    ),
    figure = (resolution = (1000, 1000),)
)
leg = Legend(fig[2, 1], ax; nbanks = 3, tellwidth = false, tellheight = true)
fig

plot inference

fig, ax, mean_plt = lines(
    index(eventtime_ts), t0;
    label = "Mean",
    linewidth = 3,
    axis = (
        xlabel = "Years relative to event",
        xticks = WilkinsonTicks(8, k_min = 8, k_max = 8),
        ylabel = "Cumulative change\nin sex ratio (%)",
        title = "Variable: sex ratio at birth",
        subtitle = "Event: some legislation",
        titlealign = :left,
    ),
)

band_plt = band!(ax,
    index(eventtime_ts), lower, upper;
    label = "95% CI",
    linewidth = 3,
    color = Makie.wong_colors(0.5)[2],
)

leg = axislegend(ax, position = :lt)

fig

plot inference using errorbars

fig, ax, plt = rangebars(
    index(eventtime_ts),
    lower, upper;
    whiskerwidth = 16,
    label = "95% CI",
    axis = (
        xlabel = "Years relative to event",
        xticks = WilkinsonTicks(8, k_min = 8, k_max = 8),
        ylabel = "Cumulative change\nin sex ratio (%)",
        title = "Variable: sex ratio at birth",
        subtitle = "Event: some legislation",
        titlealign = :left,
    ),
)

scatter!(ax, index(eventtime_ts), t0; label = "Mean value")
Scatter{Tuple{Vector{Point{2, Float32}}}}

small hack for a feature which we should add into Makie

function Makie.legendelements(plot::Rangebars, legend)
    line_points = lift(plot.whiskerwidth) do ww
        if ww ≤ 3
            Point2f[(0.5, 1), (0.5, 0)]
        else
            Point2f[(0.25, 1), (0.75, 1), (NaN, NaN), (0.5, 1), (0.5, 0), (NaN, NaN), (0.25, 0), (0.75, 0)]
        end
    end
    return Makie.LegendElement[
        LineElement(
            points = line_points,
            color = Makie.scalar_lift(plot.color, legend.linecolor),
            linewidth = Makie.scalar_lift(plot.linewidth, legend.linewidth)
        ),
    ]
end

axislegend(ax, position = :lt)

fig

replicate eventstudies.R results

convert to event time

eventtime_ts, retcodes = EventStudies.eventstudy(levels_to_returns(relevant_country_ts), event_times, -2:3)
(6×15 TSFrame with Int64 Index
 Index  Libya      China     China, Hong Kong SAR  China, Taiwan Province of C ⋯
 Int64  Float64    Float64   Float64               Float64                     ⋯
────────────────────────────────────────────────────────────────────────────────
    -2  0.0950119  0.186567             0.0                             -0.094 ⋯
    -1  0.284495   0.18622              0.46275                          0.375
     0  0.189215   0.278681             0.276625                         0.0
     1  0.283153   0.277907             0.0                             -0.281
     2  0.0942063  0.461468             0.0920387                        0.094 ⋯
     3  0.0        0.459349            -0.276371                         0.187
                                                              12 columns omitted, EventStudies.EventStatus[EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success(), EventStudies.Success()])

perform inference with a 95% confidence interval

t0, lower, upper = inference(BootstrapInference(), eventtime_ts, 0.95)
([0.037076052234521484, 0.14915962548207298, 0.2053603997918548, 0.08716474148950344, 0.30419233442415816, 0.27634298013774483], [-0.0315635911707958, 0.03701683035704321, 0.09358506164096725, -0.0749783996219527, 0.13618171162839152, 0.04323068287054096], [0.12989470094049999, 0.2497554490344732, 0.34647341283161553, 0.24032409540363, 0.5209548982132289, 0.5761557157510687])

we're technically done with the event study here!

plot inference

fig, ax, mean_plt = lines(
    index(eventtime_ts), t0;
    label = "Mean",
    linewidth = 3,
    axis = (
        xlabel = "Years relative to event",
        xticks = WilkinsonTicks(8, k_min = 8, k_max = 8),
        ylabel = "Cumulative change\nin sex ratio (%)",
        title = "Variable: sex ratio at birth",
        subtitle = "Event: some legislation",
        titlealign = :left,
    ),
)

band_plt = band!(ax,
    index(eventtime_ts), lower, upper;
    label = "95% CI",
    linewidth = 3,
    color = Makie.wong_colors(0.5)[2],
)

leg = axislegend(ax, position = :lt)

ylims!(ax, -0.75, 0.75) # match R
ylims!(ax, -0.5, 0.5) # match R
fig

This page was generated using Literate.jl.