Showing preview only (870K chars total). Download the full file or copy to clipboard to get everything.
Repository: OscarEngelbrektson/SyntheticControlMethods
Branch: master
Commit: 3f496b36ed46
Files: 22
Total size: 845.8 KB
Directory structure:
gitextract_g7y1whbn/
├── LICENSE
├── README.md
├── SyntheticControlMethods/
│ ├── __init__.py
│ ├── __version__.py
│ ├── main.py
│ ├── optimize.py
│ ├── plot.py
│ ├── tables.py
│ └── validity_tests.py
├── examples/
│ ├── basque.py
│ ├── datasets/
│ │ ├── basque_data.csv
│ │ ├── german_reunification.csv
│ │ └── smoking_data.csv
│ ├── german_reunification.py
│ ├── proposal_99.py
│ ├── test_dataset.py
│ └── user_guide.ipynb
├── setup.cfg
├── setup.py
└── tests/
├── test_inferences.py
├── test_main.py
└── test_plot.py
================================================
FILE CONTENTS
================================================
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
================================================
FILE: README.md
================================================
# Synthetic Control Methods
## A Python package for causal inference using synthetic controls
This Python package implements a class of approaches to estimating the causal effect of an intervention on panel data or a time-series. For example, how was West Germany's economy affected by the German Reunification in 1990? Answering a question like this can be difficult when a randomized experiment is not available. This package aims to address this difficulty by providing a systematic way to choose comparison units to estimate how the outcome of interest would have evolved after the intervention if the intervention had not occurred.
As with all approaches to causal inference on non-experimental data, valid conclusions require strong assumptions. This method assumes that the outcome of the treated unit can be explained in terms of a set of control units that were themselves not affected by the intervention. Furthermore, the relationship between the treated and control units is assumed to remain stable during the post-intervention period. Including only control units in your dataset that meet these assumptions is critical to the reliability of causal estimates.
## Installation
pip install SyntheticControlMethods
## Usage
In this simple example, we replicate [Abadie, Diamond and Hainmueller (2015)](http://github.com) which estimates the economic impact of the 1990 German reunification on West Germany using the synthetic control method. Here is a [complete example with explanations](https://github.com/OscarEngelbrektson/SyntheticControlMethods/blob/master/examples/user_guide.ipynb) (if you have trouble loading the notebook: [use this](https://nbviewer.jupyter.org/github/OscarEngelbrektson/SyntheticControlMethods/blob/master/examples/user_guide.ipynb)).
```python
#Import packages
import pandas as pd
from SyntheticControlMethods import Synth
#Import data
data = pd.read_csv("examples/german_reunification.csv")
data = data.drop(columns="code", axis=1)
#Fit classic Synthetic Control
sc = Synth(data, "gdp", "country", "year", 1990, "West Germany", pen=0)
#Visualize synthetic control
sc.plot(["original", "pointwise", "cumulative"], treated_label="West Germany",
synth_label="Synthetic West Germany", treatment_label="German Reunification"))
```

The plot contains three panels. The first panel shows the data and a counterfactual prediction for the post-treatment period. The second panel shows the difference between observed data and counterfactual predictions. This is the pointwise causal effect, as estimated by the model. The third panel adds up the pointwise contributions from the second panel, resulting in a plot of the cumulative effect of the intervention.
# More background on the theory that underlies the Synthetic Control
## 1. The fundamental problem of Causal Inference
In this context, we define the impact or, equivalently, causal effect of some treatment on some outcome for some unit(s), as the difference in potential outcomes. For example, the effect of taking an aspirin on my headache is defined to be the difference in how much my head aches if I take the pill as compared to how much my head would have ached had I not taken it. Of course, it is not possible for me to both take and not take the aspirin. I have to choose one alternative, and will only observe the outcome associated with that alternative. This logic applies to any treatment on any unit: only one of two potential outcomes can ever be observed. This is often referred to as the fundamental problem of causal inference (Rubin, 1974). The objective of models in this package is to estimate this unobserved quantity–what the outcome of the treated unit would have been if it had not received the treatment.
## 2. The data format
In keeping with the notational conventions introduced in Abadie et al. (2010), consider J+1 units observed in time periods T = {1,2,...,T}. Unit at index 1 is the only treated unit, the remaining J units {2,..,J} are untreated. We define T0 to represent the number of pre-treatment periods and T<sub>1</sub> the number post-treatment periods, such that T = T<sub>0</sub>+ T<sub>1</sub>. That is, Unit 1 is exposed to the treatment in every post-treatment period, T<sub>0</sub>+1,...,T<sub>1</sub>, and unaffected by the treatment in all preceding periods, 1,...,T<sub>0</sub>. Lastly, we require that a set of covariates–characteristics of the units relevant in explaining the value of the outcome–are observed along with the outcome at each time period. An example dataset might, in terms of structure, look like this:

In this example dataset, each row represents an observation. The unit associated with the observation is indicated by the ID column, the time period of the observation by the Time column. Column y represents the outcome of interest and column x0,...,x3 are covariates. There can be an arbitrary, positive number of control units, time periods and covariates.
## 3. Synthetic Control Model
Conceptually, the objective of the SCM is to create a synthetic copy of the treated unit that never received the treatment by combining control units. More specifically, we want to select a weighted average of the control unit that most closely resembles the pre-treatment characteristics of the treated unit. If we find such a weighted average that behaves the same as the treated unit for a large number of pre-treatment periods, we make the inductive leap that this similarity would have persisted in the absence of treatment.
Any weighted average of the control units is a synthetic control and can be represented by a (J x 1) vector of weights **W** = (w<sub>2</sub>,...,w<sub>J+1</sub>), with w<sub>j</sub> ∈ (0,1) and w<sub>2</sub> + … + w<sub>J+1</sub> = 1. The objective is this to find the **W** for which the characteristics of the treated unit are most closely approximated by those of the synthetic control. Let **X<sub>1</sub>** be a (k x 1) vector consisting of the pre-intervention characteristics of the treated unit which we seek to match in the synthetic control. Operationally, each value in **X<sub>1</sub>** is the pre-treatment average of each covariate for the treated unit, thus k is equal to the number of covariates in the dataset. Similarly, let **X<sub>0</sub>** be a (k x J) containing the pre-treatment characteristics for each of the J control units. The difference between the pre-treatment characteristics of the treated unit and a synthetic control can thus be expressed as **X<sub>1</sub>** - **X<sub>0</sub>W**. We select **W*** to minimize this difference.
In practice, however, this approach is flawed because it assigns equal weight to all covariates. This means that the difference is dominated by the scale of the units in which covariates are expressed, rather than the relative importance of the covariates. For example, mismatching a binary covariate can at most contribute one to the difference, whereas getting a covariate which takes values on the order of billions, like GDP, off by 1% may contribute hundreds of thousands to the difference. This is problematic because it is not necessarily true that a difference of one has the same implications on the quality of the approximation of pre-treatment characteristics provided by the synthetic control. To overcome this limitation we introduce a (k x k) diagonal, semidefinite matrix **V** that signifies the relative importance of each covariate. Lastly, let **Z<sub>1</sub>** be a (1 x T<sub>0</sub>) matrix containing every observation of the outcome for the treated unit in the pre-treatment period. Similarly, let **Z<sub>0</sub>** be a (k x T<sub>0</sub>) matrix containing the outcome for each control unit in the pre-treatment period.
The procedure for finding the optimal synthetic control is expressed as follows:
<a href="url"><img src="https://github.com/OscarEngelbrektson/SyntheticControlMethods/blob/master/examples/images/equation1.png?raw=true" text-align="center" width="400" ></a>
That is, **W*(V)** is the vector of weights **W** that minimizes the difference between the pre-treatment characteristics of the treated unit and the synthetic control, given **V**. That is, **W*** depends on the choice of **V**–hence the notation **W*(V)**. We choose **V*** to be the **V** that results in **W*(V)** that minimizes the following expression:
<a href="url"><img src="https://github.com/OscarEngelbrektson/SyntheticControlMethods/blob/master/examples/images/equation2.png?raw=true" text-align="center" width="400" ></a>
That is the minimum difference between the outcome of the treated unit and the synthetic control in the pre-treatment period.
In code, I solve for **W*(V)** using a convex optimizer from the cvxpy package, as the optimization problem is convex. I define the loss function total_loss(**V**) to be the value of Eq.2 with **W*(V)** derived using the convex optimizer. However, finding **V** that minimizes total_loss(**V**) is not a convex problem. Consequently, I use a solver, minimize(method=’L-BFGS-B’) from the scipy.optimize module, that does not require convexity but in return cannot guarantee that the global minimum of the function is found. To decrease the probability that the solution provided is only a local minimum, I initialize the function for several different starting values of **V**. I randomly generate valid (k x k) **V** matrices as Diag(**K**) with **K** ~ Dirichlet({1<sub>1</sub>,...,1<sub>k</sub>}).
Input on how to improve the package is welcome, just submit a pull request along with an explanation and I will review it.
================================================
FILE: SyntheticControlMethods/__init__.py
================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from SyntheticControlMethods.__version__ import __version__
from SyntheticControlMethods.main import Synth, DiffSynth
================================================
FILE: SyntheticControlMethods/__version__.py
================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
VERSION = (1, 1, 17)
__version__ = '.'.join([str(e) for e in VERSION])
================================================
FILE: SyntheticControlMethods/main.py
================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from __future__ import absolute_import, division, print_function
import pandas as pd
import numpy as np
import copy
from SyntheticControlMethods.optimize import Optimize
from SyntheticControlMethods.plot import Plot
from SyntheticControlMethods.tables import Tables
from SyntheticControlMethods.validity_tests import ValidityTests
class SynthBase(object):
'''Class that stores all variables and results'''
def __init__(self, dataset, outcome_var, id_var, time_var, treatment_period, treated_unit, control_units,
covariates, periods_all, periods_pre_treatment, n_controls, n_covariates,
treated_outcome, control_outcome, treated_covariates, control_covariates,
unscaled_treated_covariates, unscaled_control_covariates,
treated_outcome_all, control_outcome_all, pairwise_difference, pen, random_seed=0,
w=None, v=None, **kwargs):
'''
INPUT VARIABLES:
dataset: the dataset for the synthetic control procedure.
Should have the the following column structure:
ID, Time, outcome_var, x0, x1,..., xn
Each row in dataset represents one observation.
The dataset should be sorted on ID then Time.
That is, all observations for one unit in order of Time,
followed by all observations by the next unit also sorted on time
ID: a string containing a unique identifier for the unit associated with the observation.
E.g. in the simulated datasets provided, the ID of the treated unit is "A".
Time: an integer indicating the time period to which the observation corresponds.
treated_unit: ID of the treated unit
'''
self.dataset = dataset
self.outcome_var = outcome_var
self.id = id_var
self.time = time_var
self.treatment_period = treatment_period
self.treated_unit = treated_unit
self.control_units = control_units
self.covariates = covariates
self.periods_all = periods_all
self.periods_pre_treatment = periods_pre_treatment
self.n_controls = n_controls
self.n_covariates = n_covariates
self.pen = pen
self.rng = np.random.default_rng(random_seed)
'''
PROCESSED VARIABLES:
treated_outcome: a (1 x treatment_period) matrix containing the
outcome of the treated unit for each observation in the pre-treatment period.
Referred to as Z1 in Abadie, Diamond, Hainmueller.
control_outcome: a ((len(unit_list)-1) x treatment_period) matrix containing the
outcome of every control unit for each observation in the pre-treatment period
Referred to as Z0 in Abadie, Diamond, Hainmueller.
treated_outcome_all: a (1 x len(time)) matrix
same as treated_outcome but includes all observations, including post-treatment
control_outcome_all: a (n_controls x len(time)) matrix
same as control_outcome but includes all observations, including post-treatment
treated_covariates: a (1 x len(covariates)) matrix containing the
average value for each predictor of the treated unit in the pre-treatment period
Referred to as X1 in Abadie, Diamond, Hainmueller.
control_covariates: a (n_controls x len(covariates)) matrix containing the
average value for each predictor of every control unit in the pre-treatment period
Referred to as X0 in Abadie, Diamond, Hainmueller.
W: a (1 x n_controls) matrix containing the weights assigned to each
control unit in the synthetic control. W is contstrained to be convex,
that is sum(W)==1 and ∀w∈W, w≥0, each weight is non-negative and all weights sum to one.
Referred to as W in Abadie, Diamond, Hainmueller.
V: a (len(covariates) x len(covariates)) matrix representing the relative importance
of each covariate. V is contrained to be diagonal, positive semi-definite.
Pracitcally, this means that the product V.control_covariates and V.treated_covariates
will always be non-negative. Further, we constrain sum(V)==1, otherwise there will an infinite
number of solutions V*c, where c is a scalar, that assign equal relative importance to each covariate
Referred to as V in Abadie, Diamond, Hainmueller.
'''
###Post processing quantities
self.treated_outcome = treated_outcome
self.control_outcome = control_outcome
self.treated_covariates = treated_covariates
self.control_covariates = control_covariates
self.unscaled_treated_covariates = unscaled_treated_covariates
self.unscaled_control_covariates = unscaled_control_covariates
self.treated_outcome_all = treated_outcome_all
self.control_outcome_all = control_outcome_all
self.pairwise_difference = pairwise_difference
###Post inference quantities
self.w = w #Can be provided
self.v = v #Can be provided
self.weight_df = None
self.comparison_df = None
self.synth_outcome = None
self.synth_constant = None
self.synth_covariates = None
self.rmspe_df = None
#used in optimization
self.min_loss = float("inf")
self.fail_count = 0 #Used to limit number of optimization attempts
###Validity tests
self.in_space_placebos = None
self.in_space_placebo_w = None
self.pre_post_rmspe_ratio = None
self.in_time_placebo_outcome = None
self.in_time_placebo_treated_outcome = None
self.in_time_placebo_w = None
self.placebo_treatment_period = None
self.placebo_periods_pre_treatment = None
class DataProcessor(object):
'''Class that processes input data into variables and matrices needed for optimization'''
def _process_input_data(self, dataset,
outcome_var, id_var, time_var,
treatment_period, treated_unit,
pen, exclude_columns, random_seed,
**kwargs):
'''
Extracts processed variables, excluding v and w, from input variables.
These are all the data matrices.
'''
#All columns not y, id or time must be predictors
covariates = [col for col in dataset.columns if col not in [id_var, time_var] and col not in exclude_columns]
#Extract quantities needed for pre-processing matrices
#Get number of periods in pre-treatment and total
periods_all = dataset[time_var].nunique()
periods_pre_treatment = dataset.loc[dataset[time_var]<treatment_period][time_var].nunique()
#Number of control units, -1 to remove treated unit
n_controls = dataset[id_var].nunique() - 1
n_covariates = len(covariates)
#All units that are not the treated unit are controls
control_units = dataset.loc[dataset[id_var] != treated_unit][id_var].unique()
###Get treated unit matrices first###
treated_outcome_all, treated_outcome, unscaled_treated_covariates = self._process_treated_data(
dataset, outcome_var, id_var, time_var,
treatment_period, treated_unit, periods_all,
periods_pre_treatment, covariates, n_covariates
)
### Now for control unit matrices ###
control_outcome_all, control_outcome, unscaled_control_covariates = self._process_control_data(
dataset, outcome_var, id_var, time_var,
treatment_period, treated_unit, n_controls,
periods_all, periods_pre_treatment, covariates
)
#Rescale covariates to be unit variance (helps with optimization)
treated_covariates, control_covariates = self._rescale_covariate_variance(unscaled_treated_covariates,
unscaled_control_covariates,
n_covariates)
#Get matrix of unitwise differences between control units to treated unit
pairwise_difference = self._get_pairwise_difference_matrix(treated_covariates,
control_covariates)
return {
'dataset': dataset,
'outcome_var':outcome_var,
'id_var':id_var,
'time_var':time_var,
'treatment_period':treatment_period,
'treated_unit':treated_unit,
'control_units':control_units,
'covariates':covariates,
'periods_all':periods_all,
'periods_pre_treatment':periods_pre_treatment,
'n_controls': n_controls,
'n_covariates':n_covariates,
'treated_outcome_all': treated_outcome_all,
'treated_outcome': treated_outcome,
'treated_covariates': treated_covariates,
'unscaled_treated_covariates':unscaled_treated_covariates,
'control_outcome_all': control_outcome_all,
'control_outcome': control_outcome,
'control_covariates': control_covariates,
'unscaled_control_covariates': unscaled_control_covariates,
'pairwise_difference':pairwise_difference,
'pen':pen,
'random_seed':random_seed,
}
def _process_treated_data(self, dataset, outcome_var, id_var, time_var, treatment_period, treated_unit,
periods_all, periods_pre_treatment, covariates, n_covariates):
'''
Extracts and formats outcome and covariate matrices for the treated unit
'''
treated_data_all = dataset.loc[dataset[id_var] == treated_unit]
treated_outcome_all = np.array(treated_data_all[outcome_var]).reshape(periods_all,1) #All outcomes
#Only pre-treatment
treated_data = treated_data_all.loc[dataset[time_var] < treatment_period]
#Extract outcome and shape as matrix
treated_outcome = np.array(treated_data[outcome_var]).reshape(periods_pre_treatment, 1)
#Columnwise mean of each covariate in pre-treatment period for treated unit, shape as matrix
treated_covariates = np.array(treated_data[covariates].mean(axis=0)).reshape(n_covariates, 1)
return treated_outcome_all, treated_outcome, treated_covariates
def _process_control_data(self, dataset, outcome_var, id_var, time_var, treatment_period, treated_unit, n_controls,
periods_all, periods_pre_treatment, covariates):
'''
Extracts and formats outcome and covariate matrices for the control group
'''
#Every unit that is not the treated unit is control
control_data_all = dataset.loc[dataset[id_var] != treated_unit]
control_outcome_all = np.array(control_data_all[outcome_var]).reshape(n_controls, periods_all).T #All outcomes
#Only pre-treatment
control_data = control_data_all.loc[dataset[time_var] < treatment_period]
#Extract outcome, then shape as matrix
control_outcome = np.array(control_data[outcome_var]).reshape(n_controls, periods_pre_treatment).T
#Extract the covariates for all the control units
#Identify which rows correspond to which control unit by setting index,
#then take the unitwise mean of each covariate
#This results in the desired (n_control x n_covariates) matrix
control_covariates = np.array(control_data[covariates].\
set_index(np.arange(len(control_data[covariates])) // periods_pre_treatment).groupby(level=-1).mean()).T
return control_outcome_all, control_outcome, control_covariates
def _rescale_covariate_variance(self, treated_covariates, control_covariates, n_covariates):
'''Rescale covariates to be unit variance'''
#Combine control and treated into one big dataframe, over which we will compute variance for each covariate
big_dataframe = np.concatenate((treated_covariates, control_covariates), axis=1)
#Rescale each covariate to have unit variance
big_dataframe /= np.apply_along_axis(np.std, 0, big_dataframe)
#Re-seperate treated and control from big dataframe
treated_covariates = big_dataframe[:,0].reshape(n_covariates, 1) #First column is treated unit
control_covariates = big_dataframe[:,1:] #All other columns are control units
#Return covariate matices with unit variance
return treated_covariates, control_covariates
def _get_pairwise_difference_matrix(self, treated_covariates, control_covariates):
'''
Computes matrix of same shape as control_covariates, but with unit-wise difference from treated unit
Used in optimization objective for both SC and DSC
'''
return treated_covariates - control_covariates
class Synth(DataProcessor, Optimize, Plot, Tables, ValidityTests):
'''Class implementing the Synthetic Control Method'''
def __init__(self, dataset,
outcome_var, id_var, time_var,
treatment_period, treated_unit,
n_optim=10, pen=0, exclude_columns=[], random_seed=0,
**kwargs):
'''
data:
Type: Pandas dataframe.
A pandas dataframe containing the dataset. Each row should contain one observation for a unit at a time,
including the outcome and covariates. Dataset should be ordered by unit then time.
outcome_var:
Type: str.
Name of outcome column in data, e.g. "gdp"
id_var:
Type: str.
Name of unit indicator column in data, e.g. "country"
time_var:
Type: str.
Name of time column in data, e.g. "year"
treatment_period:
Type: int.
Time of first observation after the treatment took place, i.e. first observation affected by the treatment effect.
E.g. 1990 for german reunification.
treated_unit:
Type: str.
Name of the unit that recieved treatment, e.g. "West Germany"
data["id_var"] == treated_unit
n_optim:
Type: int. Default: 10.
Number of different initialization values for which the optimization is run.
Higher number means longer runtime, but a higher chance of a globally optimal solution.
pen:
Type: float. Default: 0.
Penalization coefficient which determines the relative importance of minimizing the sum of the pairwise difference of each individual
control unit in the synthetic control and the treated unit, vis-a-vis the difference between the synthetic control and the treated unit.
Higher number means pairwise difference matters more.
'''
self.method = "SC"
original_checked_input = self._process_input_data(
dataset, outcome_var, id_var, time_var, treatment_period, treated_unit, pen,
exclude_columns, random_seed, **kwargs
)
self.original_data = SynthBase(**original_checked_input)
#Get synthetic Control
self.optimize(self.original_data.treated_outcome, self.original_data.treated_covariates,
self.original_data.control_outcome, self.original_data.control_covariates,
self.original_data.pairwise_difference,
self.original_data, False, pen, n_optim)
#Compute rmspe_df
self._pre_post_rmspe_ratios(None, False)
#Prepare weight_df with unit weights
self.original_data.weight_df = self._get_weight_df(self.original_data)
self.original_data.comparison_df = self._get_comparison_df(self.original_data)
class DiffSynth(DataProcessor, Optimize, Plot, Tables, ValidityTests):
'''Class implementing the Differenced Synthetic Control Method'''
def __init__(self, dataset,
outcome_var, id_var, time_var,
treatment_period, treated_unit,
n_optim=10, pen=0,
exclude_columns=[], random_seed=0,
not_diff_cols=None,
**kwargs):
'''
data:
Type: Pandas dataframe.
A pandas dataframe containing the dataset. Each row should contain one observation for a unit at a time,
including the outcome and covariates. Dataset should be ordered by unit then time.
outcome_var:
Type: str.
Name of outcome column in data, e.g. "gdp"
id_var:
Type: str.
Name of unit indicator column in data, e.g. "country"
time_var:
Type: str.
Name of time column in data, e.g. "year"
treatment_period:
Type: int.
Time of first observation after the treatment took place, i.e. first observation affected by the treatment effect.
E.g. 1990 for german reunification.
treated_unit:
Type: str.
Name of the unit that recieved treatment, e.g. "West Germany"
data["id_var"] == treated_unit
n_optim:
Type: int. Default: 10.
Number of different initialization values for which the optimization is run.
Higher number means longer runtime, but a higher chance of a globally optimal solution.
not_diff_cols:
Type: list. Default: [].
List of column names to omit from pre-processing, e.g. compute the first difference for.
Typically, columns should be included if the proportion of missing values is high.
This is because the first difference is only defined for two consecutive values.
pen:
Type: float. Default: 0.
Penalization coefficient which determines the relative importance of minimizing the sum of the pairwise difference of each individual
control unit in the synthetic control and the treated unit, vis-a-vis the difference between the synthetic control and the treated unit.
Higher number means pairwise difference matters more.
'''
self.method = "DSC"
#Process original data - will be used in plotting and summary
original_checked_input = self._process_input_data(
dataset, outcome_var, id_var, time_var, treatment_period, treated_unit, pen,
exclude_columns, random_seed, **kwargs
)
self.original_data = SynthBase(**original_checked_input)
#Process differenced data - will be used in inference and optimization
modified_dataset = self.difference_data(dataset, not_diff_cols)
modified_checked_input = self._process_input_data(
modified_dataset, outcome_var, id_var, time_var, treatment_period, treated_unit, pen,
exclude_columns, random_seed, **kwargs
)
self.modified_data = SynthBase(**modified_checked_input)
self.modified_data.pairwise_difference = self.original_data.pairwise_difference
#Get synthetic Control
self.optimize(self.modified_data.treated_outcome, self.modified_data.treated_covariates,
self.modified_data.control_outcome, self.modified_data.control_covariates,
self.modified_data.pairwise_difference,
self.modified_data, False, pen, n_optim)
#Compute rmspe_df for treated unit Synthetic Control
self._pre_post_rmspe_ratios(None, False)
#Prepare summary tables
self.original_data.weight_df = self._get_weight_df(self.original_data)
self.original_data.comparison_df = self._get_comparison_df(self.original_data)
def difference_data(self, dataset, not_diff_cols):
'''
Takes an appropriately formatted, unprocessed dataset
returns dataset with first-difference values (change from previous time period)
computed unitwise for the outcome and all covariates
Ready to fit a Differenced Synthetic Control
Transformation method - First Differencing:
Additional processing:
1. Imputes missing values using linear interpolation.
An important step because the first difference is undefined if two consecutive periods are not present.
'''
#Make deepcopy of original data as base
modified_dataset = copy.deepcopy(dataset)
data = self.original_data
#Binary flag for whether there are columns to ignore
ignore_all_cols = not_diff_cols == None
#Compute difference of outcome variable
modified_dataset[data.outcome_var] = modified_dataset.groupby(data.id)[data.outcome_var].apply(
lambda unit: unit.interpolate(method='linear', limit_direction="both")).diff()
#For covariates
for col in data.covariates:
#Fill in missing values using unitwise linear interpolation
modified_dataset[col] = modified_dataset.groupby(data.id)[col].apply(
lambda unit: unit.interpolate(method='linear', limit_direction="both"))
#Compute change from previous period
if not ignore_all_cols:
if col not in not_diff_cols:
modified_dataset[col].diff()
#Drop first time period for every unit as the change from the previous period is undefined
modified_dataset.drop(modified_dataset.loc[modified_dataset[data.time]==modified_dataset[data.time].min()].index, inplace=True)
#Return resulting dataframe
return modified_dataset
def demean_data(self):
'''
Takes an appropriately formatted, unprocessed dataset
returns dataset with demeaned values computed unitwise for the outcome and all covariates
Ready to fit a Differenced Synthetic Control
Transformation method - MeanSubtraction:
Subtracting the mean of the corresponding variable and unit from every observation
'''
raise NotImplementedError
mean_subtract_cols = self.dataset.groupby(self.id).apply(lambda x: x - np.mean(x)).drop(columns=[self.time], axis=1)
return pd.concat([data[["ID", "Time"]], mean_subtract_cols], axis=1)
================================================
FILE: SyntheticControlMethods/optimize.py
================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from __future__ import absolute_import, division, print_function
import numpy as np
import pandas as pd
import cvxpy as cvx
from scipy.optimize import minimize, differential_evolution
class Optimize(object):
'''
This class is where the Synthetic Controls weights are solved for,
More precisely, it contains all methods for parameter estimation, such as:
W: a (1 x n_controls) matrix
containing the weights assigned to each
control unit in the synthetic control. W is contstrained to be convex,
that is sum(W)==1 and ∀w∈W, w≥0, each weight is non-negative and all weights sum to one.
Referred to as W in Abadie, Diamond, Hainmueller.
V: a (len(covariates) x len(covariates)) matrix
representing the relative importance of each covariate. V is constrained to be diagonal, positive semi-definite.
Practcally, this means that the product V.control_covariates and V.treated_covariates
will always be non-negative. Further, we constrain sum(V)==1, otherwise there will an infinite
number of solutions V*c, where c is a scalar, that assign equal relative importance to each covariate
Referred to as V in Abadie, Diamond, Hainmueller.
pen: float
Coefficient representing the relative importance of minimizing differences between control units and treated unit
BEFORE weighting them (i.e. pairwise difference between control units and treated unit) as compared to
AFTER weighting them (synthetic control vs. treated unit).
A higher value means that pairwise differences are more important.
If pen==0, then pairwise differences do not matter. Thus, if pen==0 optimize will solve for a normal synthetic control.
constant: float
Differenced synthetic controls allow for a constant offset (difference) between the treated unit and the synthetic control
this constant is solved for here.
'''
def optimize(self,
treated_outcome, treated_covariates,
control_outcome, control_covariates,
pairwise_difference,
data,
placebo,
pen, steps=8,
verbose=False):
'''
Solves the nested optimization function of finding the optimal synthetic control
placebo: bool
indicates whether the optimization is ran for finding the real synthetic control
or as part of a placebo-style validity test. If True, only placebo class attributes are affected.
steps: int
The number of different initializations of v_0 the gradient descent optimization is ran for
Higher values mean longer running time but higher chances of finding a globally optimal solution
verbose: bool, default=False
If true, prints additional detail regarding the state of the optimization
'''
args = (treated_outcome, treated_covariates,
control_outcome, control_covariates,
pairwise_difference,
pen, placebo, data)
for step in range(steps):
#Approach for selecting initial v matrix:
#First time, try a uniform v matrix, assigning equal weight to all covariates
#Subsequent times, sample a random pmf using the dirichlet distribution
if step == 0:
v_0 = np.full(data.n_covariates, 1/data.n_covariates)
if pen == "auto":
#if pen =="auto", we have an additional parameter to optimize over, so we append it
v_0 = np.append(v_0, 0)
else:
#Dirichlet distribution returns a valid pmf over n_covariates states
v_0 = self.original_data.rng.dirichlet(np.ones(data.n_covariates), size=1)
if pen == "auto":
#if pen =="auto", we have an additional parameter to optimize over, so we append it
v_0 = np.append(v_0, self.original_data.rng.lognormal(1.5, 1, size=1)) #Still experimenting with what distribution is appropriate
#Required to have non negative values
if pen != "auto":
bnds = tuple((0,1) for _ in range(data.n_covariates))
else:
#if pen =="auto", we have an additional parameter to optimize over, and we need to bound it to be non-negative
bnds = tuple((0,20) if ((pen=="auto") and (x==data.n_covariates)) else (0,1) for x in range(data.n_covariates + 1))
#Optimze
res = minimize(self.total_loss, v_0, args=(args),
method='L-BFGS-B', bounds=bnds,
options={'gtol': 1e-8,'disp':3, 'iprint':3})
if verbose:
print("Successful:", res.success)
print(res.message)
#If sampler did not converge, try again up to times before admitting defeat
try:
res.x
except:
data.fail_count += 1
if data.fail_count <= 1:
data.optimize(*args)
if self.method == "DSC":
self._update_original_data(placebo)
return
def total_loss(self, v_0,
treated_outcome, treated_covariates,
control_outcome, control_covariates,
pairwise_difference,
pen, placebo, data):
'''
Solves for w*(v) that minimizes loss function 1 given v,
Returns loss from loss function 2 with w=w*(v)
placebo: bool
indicates whether the optimization is ran for finding the real synthetic control
or as part of a placebo-style validity test. If True, only placebo class attributes are affected.
'''
assert placebo in [False, "in-time", "in-space"], "TypeError: Placebo must False, 'in-time' or 'in-space'"
n_controls = control_outcome.shape[1]
if pen == "auto":
V = np.diag(v_0[:-1])
pen_coef = v_0[-1]
else:
V = np.diag(v_0)
pen_coef = pen
# Construct the problem - constrain weights to be non-negative
w = cvx.Variable((n_controls, 1), nonneg=True)
#Define the objective
#PROBLEM: treated_synth_difference = cvx.sum(V @ cvx.square(treated_covariates.T - control_covariates @ w)) runs better for normal sc,
#but it doesnt work at all for in-time placebos, this probably means I am messing up the dimensionality somewhere in the processing
#This is a work-around that works, but it ain't pretty
if placebo == 'in-time':
treated_synth_difference = cvx.sum(V @ cvx.square(treated_covariates - control_covariates @ w))
else:
treated_synth_difference = cvx.sum(V @ cvx.square(treated_covariates.T - control_covariates @ w))
pairwise_difference = cvx.sum(V @ (cvx.square(pairwise_difference) @ w))
objective = cvx.Minimize(treated_synth_difference + pen_coef*pairwise_difference)
#Add constraint sum of weights must equal one
constraints = [cvx.sum(w) == 1]
#Solve problem
problem = cvx.Problem(objective, constraints)
try: #Try solving using current value of V, if it doesn't work return infinite loss
result = problem.solve(verbose=False)
loss = (treated_outcome - control_outcome @ w.value).T @ (treated_outcome - control_outcome @ w.value)
except:
return float(np.inf)
#If loss is smaller than previous minimum, update loss, w and v
if not placebo:
if loss < data.min_loss:
data.min_loss = loss
data.w = w.value
data.v = np.diagonal(V) / np.sum(np.diagonal(V)) #Make sure its normailzed (sometimes the optimizers diverge from bounds)
data.pen = pen_coef
data.synth_outcome = data.w.T @ data.control_outcome_all.T #Transpose to make it (n_periods x 1)
data.synth_covariates = data.control_covariates @ data.w
elif placebo == "in-space":
data.in_space_placebo_w = w.value
elif placebo == "in-time":
data.in_time_placebo_w = w.value
#Return loss
return loss
def _get_dsc_outcome(self, w, control_outcome, periods_pre_treatment, treated_pretreatment_outcome):
'''Method used only by DiffSynth (DSC)
Arguments:
w: np.array
Weight matrix (n_controls x 1)
control_outcome: np.array
Outcome matrix for all control units for all time periods (n_controls x n_periods_all)
periods_pre_treatment: int
Integer representing the number of periods before treatment
treated_pretreatment_outcome: np.array
Outcome matrix for treated unit (1 x n_periods_pre_treatment)
Approach:
1. Solve for the differenced synthetic control, less the constant
2. Solve for the constant by computing the average difference, in the pre-treatment period,
between the treated unit and (1.)
3. Add the constant to all time periods in (1). This is the outcome of the differenced synthtic control.
'''
#1. Compute synthetic control outcome, less constant
synth_outcome = w.T @ control_outcome.T
synth_outcome_pre_treatment = w.T @ control_outcome[:periods_pre_treatment].T
#2. Constant defined to be average difference between synth and treated unit in the pre-treatment period
constant = np.mean(treated_pretreatment_outcome - synth_outcome_pre_treatment)
#3. Add constant to synthetic control outcome
synth_outcome += constant
return constant, synth_outcome
def _update_original_data(self, placebo):
'''
Used only in DiffSynth / DSC:
Called at the end of optimization procedure:
Transcribes relevant results from ModifiedData to OriginalData
'''
if not placebo:
self.original_data.w = self.modified_data.w
self.original_data.v = self.modified_data.v
self.original_data.pen = self.modified_data.pen
self.original_data.synth_constant, self.original_data.synth_outcome = self._get_dsc_outcome(self.original_data.w,
self.original_data.control_outcome_all,
self.original_data.periods_pre_treatment,
self.original_data.treated_outcome)
elif placebo == 'in-space':
self.original_data.in_space_placebo_w = self.modified_data.in_space_placebo_w
self.original_data.pre_post_rmspe_ratio = self.modified_data.pre_post_rmspe_ratio
self.original_data.in_space_placebos = self.modified_data.in_space_placebos
else: #Update in-time placebo
self.original_data.placebo_treatment_period = self.modified_data.placebo_treatment_period
self.original_data.placebo_periods_pre_treatment = self.modified_data.placebo_periods_pre_treatment
self.original_data.in_time_placebo_w = self.modified_data.in_time_placebo_w
_, self.original_data.in_time_placebo_outcome = self._get_dsc_outcome(self.original_data.in_time_placebo_w,
self.original_data.control_outcome_all,
self.original_data.placebo_periods_pre_treatment,
self.original_data.treated_outcome[:self.original_data.placebo_periods_pre_treatment])
return
##########################################################
## ALTERNATE OPTIMIZATION METHODS -- NOT CURRENTLY USED ##
##########################################################
def diffevo_optimize(self):
'''Uses the differential evolution optimizer from scipy to solve for synthetic control'''
bounds = [(0,1) for _ in range(self.n_covariates)]
result = differential_evolution(self.total_loss, bounds)
self.v = result.x
self.w, loss = self.total_loss(self.v, False)
return self.w, loss
def random_optimize(self, steps=10**4):
'''
"When intelligent approaches fail, throw spaghetti at the wall and see what sticks" - Benito Mussolini
The below random samples valid v matrices from a dirichlet distribution,
then computes the resulting w*(v) and the total loss associated with it
Returns the w*(v) that minimizes total loss, and the total loss
'''
#Initalize variable to track best w*(v)
best_w, min_loss = None, float(np.inf)
for i in range(steps):
#Generate sample v
#Dirichlet distribution returns a valid pmf over n_covariates states
v = np.random.dirichlet(np.ones(self.n_covariates), size=1)
#Print progress
if (i+1)%steps/10 == 0:
print('{}%'.format((i+1)%steps/10))
#Compute w*(v) and loss for v
w, loss = self.total_loss(v, False)
#See if w*(v) results in lower loss, if so update best
if loss < min_loss:
best_w, min_loss = w, loss
#Store, print, return best solutions
self.w = best_w
return best_w, min_loss
================================================
FILE: SyntheticControlMethods/plot.py
================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from __future__ import absolute_import, division, print_function
import numpy as np
#import warning
#class PlotWarning(UserWarning):
# '''Custom warning class for warnings related to plotting'''
# pass
class Plot(object):
'''This class is responsible for all plotting functionality'''
def plot(self,
panels,
figsize=(15, 12),
treated_label="Treated Unit",
synth_label="Synthetic Treated Unit",
treatment_label="Treatment",
in_space_exclusion_multiple=5):
'''
Supported plots:
original:
Outcome of the treated unit and the synthetic control unit for all time periods
pointwise:
Difference between the outcome of the treated and synthetic control unit
I.e. same as original but normalized wrt. the treated unit
cumulative:
Sum of pointwise differences in the post treatment period
I.e. the cumulative treatment effect
in-space placebo:
Pointwise plot of synthetic control and in-space placebos
Procedure:
Fits a synthetic control to every control unit.
These synthetic controls are referred to "in-space placebos"
pre/post rmspe:
Histogram showing
(post-treatment rmspe) / (pre-treatment rmspe)
for real synthetic control and all placebos
Extreme values indicates small difference in pre-period with
large difference (estimated treatment effect) in the post-period
Treated unit should be more extreme than placebos to indicate significance
Arguments:
panels : list of strings
list of the plots to be generated
figsize : tuple (int, int)
argument to plt.figure
First value indicated desired width of plot, second the height
The height height is divided evenly between each subplot, whereas each subplot has full width
E.g. three plots: each subplot will have figure size (width, height/3)
treated_label : str
Label for treated unit in plot title and legend
synth_label : str
Label for synthetic control unit in plot title and legend
in_space_exclusion_multiple : float
default: 5
used only in 'in-space placebo' plot.
excludes all placebos with PRE-treatment rmspe greater than
the real synthetic control*in_space_exclusion_multiple
Returns:
'''
data = self.original_data
#Extract Synthetic Control
synth = data.synth_outcome
time = data.dataset[data.time].unique()
plt = self._get_plotter()
fig = plt.figure(figsize=figsize)
valid_panels = ['original', 'pointwise', 'cumulative',
'in-space placebo', 'rmspe ratio', 'in-time placebo']
solo_panels = ['rmspe ratio'] #plots with different axes
for panel in panels:
if panel not in valid_panels:
raise ValueError(
'"{}" is not a valid panel. Valid panels are: {}.'.format(
panel, ', '.join(['"{}"'.format(e) for e in valid_panels])
)
)
if panel in solo_panels and len(panels) > 1:
print("{} is meant to have a different x-axis, plotting it together with other plots may hide that").format(panel)
#warning.warn('Validity plots should be plotted alone', PlotWarning)
n_panels = len(panels)
ax = plt.subplot(n_panels, 1, 1)
idx = 1
if 'original' in panels:
#Determine appropriate limits for y-axis
max_value = max(np.max(data.treated_outcome_all),
np.max(data.synth_outcome))
min_value = min(np.min(data.treated_outcome_all),
np.min(data.synth_outcome))
#Make plot
ax.set_title("{} vs. {}".format(treated_label, synth_label))
ax.plot(time, synth.T, 'r--', label=synth_label)
ax.plot(time ,data.treated_outcome_all, 'b-', label=treated_label)
ax.axvline(data.treatment_period-1, linestyle=':', color="gray")
ax.set_ylim(-1.2*abs(min_value), 1.2*abs(max_value)) #Do abs() in case min is positive, or max is negative
ax.annotate(treatment_label,
#Put label below outcome if pre-treatment trajectory is decreasing, else above
xy=(data.treatment_period-1, data.treated_outcome[-1]*(1 + 0.2*np.sign(data.treated_outcome[-1] - data.treated_outcome[0]))),
xytext=(-160, -4),
xycoords='data',
textcoords='offset points',
arrowprops=dict(arrowstyle="->"))
ax.set_ylabel(data.outcome_var)
ax.set_xlabel(data.time)
ax.legend()
if idx != n_panels:
plt.setp(ax.get_xticklabels(), visible=False)
idx += 1
if 'pointwise' in panels:
ax = plt.subplot(n_panels, 1, idx, sharex=ax)
#Subtract outcome of synth from both synth and treated outcome
normalized_treated_outcome = data.treated_outcome_all - synth.T
normalized_synth = np.zeros(data.periods_all)
most_extreme_value = np.max(np.absolute(normalized_treated_outcome))
ax.set_title("Pointwise Effects")
ax.plot(time, normalized_synth, 'r--', label=synth_label)
ax.plot(time ,normalized_treated_outcome, 'b-', label=treated_label)
ax.axvline(data.treatment_period-1, linestyle=':', color="gray")
ax.set_ylim(-1.2*most_extreme_value, 1.2*most_extreme_value)
ax.annotate(treatment_label,
xy=(data.treatment_period-1, 0.5*most_extreme_value),
xycoords='data',
xytext=(-160, -4),
textcoords='offset points',
arrowprops=dict(arrowstyle="->"))
ax.set_ylabel(data.outcome_var)
ax.set_xlabel(data.time)
ax.legend()
if idx != n_panels:
plt.setp(ax.get_xticklabels(), visible=False)
idx += 1
if 'cumulative' in panels:
ax = plt.subplot(n_panels, 1, idx, sharex=ax)
#Compute cumulative treatment effect as cumulative sum of pointwise effects
cumulative_effect = np.cumsum(normalized_treated_outcome[data.periods_pre_treatment:])
cummulative_treated_outcome = np.concatenate((np.zeros(data.periods_pre_treatment), cumulative_effect), axis=None)
normalized_synth = np.zeros(data.periods_all)
ax.set_title("Cumulative Effects")
ax.plot(time, normalized_synth, 'r--', label=synth_label)
ax.plot(time ,cummulative_treated_outcome, 'b-', label=treated_label)
ax.axvline(data.treatment_period-1, linestyle=':', color="gray")
#ax.set_ylim(-1.1*most_extreme_value, 1.1*most_extreme_value)
ax.annotate(treatment_label,
xy=(data.treatment_period-1, cummulative_treated_outcome[-1]*0.3),
xycoords='data',
xytext=(-160, -4),
textcoords='offset points',
arrowprops=dict(arrowstyle="->"))
ax.set_ylabel(data.outcome_var)
ax.set_xlabel(data.time)
ax.legend()
if idx != n_panels:
plt.setp(ax.get_xticklabels(), visible=False)
idx += 1
if 'in-space placebo' in panels:
#assert self.in_space_placebos != None, "Must run in_space_placebo() before you can plot!"
ax = plt.subplot(n_panels, 1, idx)
zero_line = np.zeros(data.periods_all)
normalized_treated_outcome = data.treated_outcome_all - synth.T
ax.set_title("In-space placebo's")
ax.plot(time, zero_line, 'k--')
#Plot each placebo
ax.plot(time, data.in_space_placebos[0], ('0.7'), label="Placebos")
for i in range(1, data.n_controls):
#If the pre rmspe is not more than
#in_space_exclusion_multiple times larger than synth pre rmspe
if in_space_exclusion_multiple is not None:
if data.rmspe_df["pre_rmspe"].iloc[i] < in_space_exclusion_multiple*data.rmspe_df["pre_rmspe"].iloc[0]:
ax.plot(time, data.in_space_placebos[i], ('0.7'))
else:
ax.plot(time, data.in_space_placebos[i], ('0.7'))
ax.axvline(data.treatment_period-1, linestyle=':', color="gray")
ax.plot(time, normalized_treated_outcome, 'b-', label=treated_label)
ax.set_ylabel(data.outcome_var)
ax.set_xlabel(data.time)
ax.legend()
if idx != n_panels:
plt.setp(ax.get_xticklabels(), visible=False)
idx += 1
if 'rmspe ratio' in panels:
assert data.rmspe_df.shape[0] != 1, "Must run in_space_placebo() before you can plot 'rmspe ratio'!"
#Sort by post/pre rmspe ratio, high
sorted_rmspe_df = data.rmspe_df.sort_values(by=["post/pre"], axis=0, ascending=True)
ax = plt.subplot(n_panels, 1, idx)
ax.set_title("Postperiod RMSPE / Preperiod RMSPE")
#Create horizontal barplot, one bar per unit
y_pos = np.arange(data.n_controls+1) #Number of units
ax.barh(y_pos, sorted_rmspe_df["post/pre"],
color="#3F5D7D", ec="black")
#Label bars with unit names
ax.set_yticks(y_pos)
ax.set_yticklabels(sorted_rmspe_df["unit"])
#Label x-axis
ax.set_xlabel("Postperiod RMSPE / Preperiod RMSPE")
if idx != n_panels:
plt.setp(ax.get_xticklabels(), visible=False)
idx += 1
if 'in-time placebo' in panels:
ax = plt.subplot(n_panels, 1, idx)
ax.set_title("In-time placebo: {} vs. {}".format(treated_label, synth_label))
ax.plot(time, data.in_time_placebo_outcome.T, 'r--', label=synth_label)
ax.plot(time, data.treated_outcome_all, 'b-', label=treated_label)
ax.axvline(data.placebo_treatment_period, linestyle=':', color="gray")
ax.annotate('Placebo Treatment',
xy=(data.placebo_treatment_period, data.treated_outcome_all[data.placebo_periods_pre_treatment]*1.2),
xytext=(-160, -4),
xycoords='data',
textcoords='offset points',
arrowprops=dict(arrowstyle="->"))
ax.set_ylabel(data.outcome_var)
ax.set_xlabel(data.time)
ax.legend()
if idx != n_panels:
plt.setp(ax.get_xticklabels(), visible=False)
idx += 1
fig.tight_layout(pad=3.0)
plt.show()
def _get_plotter(self): # pragma: no cover
"""Some environments do not have matplotlib. Importing the library through
this method prevents import exceptions.
Returns:
plotter: `matplotlib.pyplot
"""
import matplotlib.pyplot as plt
return plt
================================================
FILE: SyntheticControlMethods/tables.py
================================================
from __future__ import absolute_import, division, print_function
import numpy as np
import pandas as pd
class Tables(object):
''' This class constructs Pandas DataFrames that summarize important information about Synthetic Controls.'''
def _get_weight_df(self, data):
'''Prepares dataframe with weight assigned to each unit in synthetic control'''
weight_df = pd.DataFrame({"Weight":data.w.T[0]},
index=data.control_units)
#Show only units with non-zero weights
return weight_df.loc[weight_df["Weight"] > 0.01]
def _get_comparison_df(self, data):
'''
Returns dataframe with shape (n_covariates, 5).
The four columns are:
self.original_data.treated_unit:
Unscaled, average covariate values of the treated unit
If method == DSC, then the differenced data is displayed instead
Synthetic Control:
Unscaled, covariate values of the synthetic control unit
If method == DSC, then the differenced data is displayed instead
WMAPE:
Weighted Mean Absolute Pairwise Error. For each covariate, how different is each control
unit inside the synthetic control from the treated unit, weighted by the weight assigned to each unit.
This does not change even if method == DSC, as bias scales with value of difference and not change
Importance:
Leading diagonal of V matrix. How important, relative to other covariates,
is matching on each covariate in the optimization process?
Note that this is computed after rescaling each covariate to be unit variance,
whereas the other columns show the unscaled covariate values.
Control Group Average:
Simple average of all the units in the control group. Not strictly necessary for anything,
but it is often interesting to see how well the synthetic control is doing.
Interpretation:
If the synthetic control has good fit, the following things should be true:
1. Each row of the first two columns should be approximately equal.
This means the synthetic control has reconstructed the treated unit values.
2. The third column should be small, relative to the values in columns 1 and 2.
The closer to zero, the more similar the individual control units inside the syntetic control are to the treated unit.
The smaller the WMAPE, the lower the potential bias, all else equal.
3. There is no fixed way to interpret the importance column. Instead, it should be evaluated using domain knowledge.
Is the relative importance assigned to each covariate reasonable given the context?
'''
data = self.original_data if self.method=='SC' else self.modified_data
#WMAPE
unscaled_treated_covariates = self.original_data.unscaled_treated_covariates
unscaled_control_covariates = self.original_data.unscaled_control_covariates
wmape = (np.abs((unscaled_treated_covariates - unscaled_control_covariates)) @ data.w).reshape(data.n_covariates,)
comparison_df = pd.DataFrame({data.treated_unit: np.round(data.unscaled_treated_covariates.ravel(), 2),
"Synthetic " + data.treated_unit: np.round((data.unscaled_control_covariates @ data.w).ravel(), 2),
"WMAPE": np.round(wmape, 2),
"Importance":np.round(data.v, 2)},
#"Control Group Average": np.round(data.unscaled_control_covariates.mean(axis=1), 2)},
index=data.covariates)
return comparison_df
def _pre_post_rmspe_ratios(self, placebo_outcomes, placebo=True):
'''
Computes the pre-post root mean square prediction error for all
in-place placebos and the treated units
'''
data = self.original_data
#Initialize ratio list with treated unit
post_ratio_list, pre_ratio_list = [], []
#Add treated unit
if not placebo:
#Compute rmspe
treated_post, treated_pre = self._pre_post_rmspe(data.synth_outcome.T, data.treated_outcome_all)
post_ratio_list.append(treated_post)
pre_ratio_list.append(treated_pre)
#Store in dataframe
rmspe_df = pd.DataFrame({"unit": data.treated_unit,
"pre_rmspe": pre_ratio_list,
"post_rmspe": post_ratio_list},
columns=["unit", "pre_rmspe", "post_rmspe"])
#Compute post/pre rmspe ratio and add to rmspe_df
rmspe_df["post/pre"] = rmspe_df["post_rmspe"] / rmspe_df["pre_rmspe"]
#Store it
data.rmspe_df = rmspe_df
return
else: #if placebo
#Add each control unit and respective synthetic control
for i in range(data.n_controls):
post_ratio, pre_ratio = self._pre_post_rmspe(placebo_outcomes[i], data.control_outcome_all[:, i].T, placebo=True)
post_ratio_list.append(post_ratio)
pre_ratio_list.append(pre_ratio)
#Store in dataframe
rmspe_df = pd.DataFrame({"unit": data.control_units,
"pre_rmspe": pre_ratio_list,
"post_rmspe": post_ratio_list},
columns=["unit", "pre_rmspe", "post_rmspe"])
#Compute post/pre rmspe ratio
rmspe_df["post/pre"] = rmspe_df["post_rmspe"] / rmspe_df["pre_rmspe"]
#Extend self.original_data.rmspe_df and return
rmspe_df = pd.concat([data.rmspe_df, rmspe_df], axis=0)
data.rmspe_df = rmspe_df.reset_index(drop=True)
return
def _pre_post_rmspe(self, synth_outcome, treated_outcome, placebo=False):
'''
Input: Takes two outcome time series of the same dimensions
Returns:
post-treatment root mean square prediction error
and
pre-treatment root mean square prediction error
'''
t = self.original_data.periods_pre_treatment
if not placebo:
pre_treatment = np.sqrt(((treated_outcome[:t] - synth_outcome[:t]) ** 2).mean())
post_treatment = np.sqrt(((treated_outcome[t:] - synth_outcome[t:]) ** 2).mean())
else:
pre_treatment = np.sqrt(((treated_outcome[:t] - synth_outcome[0][:t]) ** 2).mean())
post_treatment = np.sqrt(((treated_outcome[t:] - synth_outcome[0][t:]) ** 2).mean())
return post_treatment, pre_treatment
================================================
FILE: SyntheticControlMethods/validity_tests.py
================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from __future__ import absolute_import, division, print_function
import numpy as np
import pandas as pd
class ValidityTests(object):
'''This class is responsible for validity tests for evaluating synthetic controls.'''
def in_space_placebo(self, n_optim=3):
'''
Fits a synthetic control to each of the control units,
using the remaining control units as control group
Returns:
matrix (n_controls x n_periods) with the outcome for each synthetic control
procedure:
1. find way to remove one control unit from control_covariate and control_outcome
2. For loop over all control units, fitting a control to each
3. Store the outcome values for each synthetic control
'''
#See which instance of SynthData to use depending on if we are using DiffSynth or Synth
data = self.original_data if self.method=='SC' else self.modified_data
placebo_outcomes = []
for i in range(data.n_controls):
#Format placebo and control data
treated_placebo_outcome = data.control_outcome_all[:,i].reshape(data.periods_all, 1)
treated_placebo_covariates = data.control_covariates[:,i].reshape(data.n_covariates, 1)
control_placebo_outcome = np.array([data.control_outcome_all[:,j] for j in range(data.n_controls) if j != i]).T
control_placebo_covariates = np.array([[data.control_covariates[x,j] for j in range(data.n_controls) if j != i] for x in range(data.n_covariates)])
#Rescale covariates to be unit variance (helps with optimization)
treated_placebo_covariates, control_placebo_covariates = self._rescale_covariate_variance(treated_placebo_covariates,
control_placebo_covariates,
data.n_covariates)
pairwise_difference = treated_placebo_covariates - control_placebo_covariates
#Solve for best synthetic control weights
self.optimize(treated_placebo_outcome[:data.periods_pre_treatment],
treated_placebo_covariates,
control_placebo_outcome[:data.periods_pre_treatment],
control_placebo_covariates,
pairwise_difference,
data,
"in-space", "auto", n_optim)
#Compute outcome of best synthetic control
if self.method == "SC":
synthetic_placebo_outcome = data.in_space_placebo_w.T @ control_placebo_outcome.T
else: #If method == 'DSC'
_, synthetic_placebo_outcome = self._get_dsc_outcome(data.in_space_placebo_w,
np.array([self.original_data.control_outcome_all[:,j] for j in range(data.n_controls) if j != i]).T,
data.periods_pre_treatment,
self.original_data.control_outcome[:,i].reshape(data.periods_pre_treatment+1, 1))
#Store it
placebo_outcomes.append(synthetic_placebo_outcome)
#Compute pre-post RMSPE Ratio
data.pre_post_rmspe_ratio = self._pre_post_rmspe_ratios(placebo_outcomes)
data.in_space_placebos = self._normalize_placebos(placebo_outcomes)
if self.method == "DSC":
self._update_original_data('in-space')
return
def in_time_placebo(self, placebo_treatment_period, n_optim=5):
'''
Fits a synthetic control to the treated unit,
with a pre-treatment period shorter than the true pre-treatment period,
i.e. telling the algorithm the treatment took place before the true treatment period
Interpretation: we expect the treatment effect to be small in the "post-treatment periods" that pre-date the true treatment
Returns:
(1 x n_periods) matrix with the outcome for in-time placebo
'''
data = self.original_data if self.method=='SC' else self.modified_data
periods_pre_treatment = data.dataset.loc[data.dataset[data.time]<placebo_treatment_period][data.time].nunique()
#Format necessary matrices, but do so with the new, earlier treatment period
###Get treated unit matrices first###
in_time_placebo_treated_outcome_all, in_time_placebo_treated_outcome, in_time_placebo_treated_covariates = self._process_treated_data(
data.dataset, data.outcome_var, data.id, data.time,
placebo_treatment_period, data.treated_unit, data.periods_all,
periods_pre_treatment, data.covariates, data.n_covariates
)
### Now for control unit matrices ###
in_time_placebo_control_outcome_all, in_time_placebo_control_outcome, in_time_placebo_control_covariates = self._process_control_data(
data.dataset, data.outcome_var, data.id, data.time,
placebo_treatment_period, data.treated_unit, data.n_controls,
data.periods_all, periods_pre_treatment, data.covariates
)
pairwise_difference = in_time_placebo_treated_covariates - in_time_placebo_control_covariates
#in_time_placebo_treated_covariates = in_time_placebo_treated_covariates.reshape(1, data.n_covariates)
#Run find synthetic control from shortened pre-treatment period
self.optimize(in_time_placebo_treated_outcome, in_time_placebo_treated_covariates,
in_time_placebo_control_outcome, in_time_placebo_control_covariates,
pairwise_difference,
data,
"in-time", 0, n_optim)
#Compute placebo outcomes using placebo_w vector from optimize
placebo_outcome = data.in_time_placebo_w.T @ in_time_placebo_control_outcome_all.T
#Store relevant results as class attributes, for plotting and retrieval
data.placebo_treatment_period = placebo_treatment_period
data.placebo_periods_pre_treatment = periods_pre_treatment
data.in_time_placebo_outcome = placebo_outcome
#Update original data if DSC
if self.method == "DSC":
self._update_original_data('in-time')
def _normalize_placebos(self, placebo_outcomes):
'''
Takes array of synthetic placebo outcomes
returns array of same dimension where the control unit outcome has been subtracted from
the synthetic placebo
'''
data = self.original_data
#Initialize ratio list with treated unit
normalized_placebo_outcomes = []
#Add each control unit and respective synthetic control
for i in range(data.n_controls):
normalized_outcome = (placebo_outcomes[i] - data.control_outcome_all[:, i].T).T
normalized_placebo_outcomes.append(normalized_outcome)
return normalized_placebo_outcomes
================================================
FILE: examples/basque.py
================================================
#Import packages
import pandas as pd
import numpy as np
from SyntheticControlMethods import Synth, DiffSynth
#Import data
data_dir = "https://raw.githubusercontent.com/OscarEngelbrektson/SyntheticControlMethods/master/examples/datasets/"
data = pd.read_csv(data_dir + "basque_data" + ".csv")
data = data.drop(columns=["regionno", "Unnamed: 0"], axis=1) #Drop superfluous columns
data = data.loc[data["regionname"] != "Spain (Espana)"] #Exclude spain as a valid control unit, as it includes basque, the treated unit.
#Fit Synthetic Control
sc = Synth(data, "gdpcap", "regionname", "year", 1970, "Basque Country (Pais Vasco)", n_optim=5, pen=0)
#Visualize
sc.plot(["original", "pointwise", "cumulative"], treated_label="Basque Country",
synth_label="Synthetic Basque Country", treatment_label="Terrorism")
print(sc.original_data.weight_df)
print(sc.original_data.comparison_df)
print(sc.original_data.pen)
'''
Placeholder: Insert validity tests
'''
### Repeat but with DSC
dsc = DiffSynth(data, "gdp", "country", "year", 1990, "West Germany", not_diff_cols=["schooling", "invest60", "invest70", "invest80"], n_optim=10, pen="auto")
#sc = DiffSynth(data, "gdp", "country", "year", 1990, "West Germany", not_diff_cols=["schooling", "invest60", "invest70", "invest80"], n_optim=1)
print(dsc.original_data.weight_df)
print(dsc.original_data.comparison_df)
print(dsc.original_data.pen)
#Fit
dsc.plot(["original", "pointwise", "cumulative"], treated_label="West Germany",
synth_label="Synthetic West Germany", treatment_label="German Reunification")
'''
Placeholder: Insert validity tests
'''
================================================
FILE: examples/datasets/basque_data.csv
================================================
Unnamed: 0,regionno,regionname,year,gdpcap,sec.agriculture,sec.energy,sec.industry,sec.construction,sec.services.venta,sec.services.nonventa,school.illit,school.prim,school.med,school.high,school.post.high,popdens,invest
1,1,Spain (Espana),1955,2.35454163800577,,,,,,,,,,,,,
2,1,Spain (Espana),1956,2.48014858129262,,,,,,,,,,,,,
3,1,Spain (Espana),1957,2.6036131487543703,,,,,,,,,,,,,
4,1,Spain (Espana),1958,2.63710359749335,,,,,,,,,,,,,
5,1,Spain (Espana),1959,2.6698801388777302,,,,,,,,,,,,,
6,1,Spain (Espana),1960,2.8699657502292903,,,,,,,,,,,,,
7,1,Spain (Espana),1961,3.04748635399651,19.5400009155273,4.71000003814697,26.4200000762939,6.26999998092651,36.6199989318848,6.44000005722046,,,,,,,
8,1,Spain (Espana),1962,3.27327916772663,,,,,,,,,,,,,
9,1,Spain (Espana),1963,3.49350193506375,19.0499992370605,4.30999994277954,26.0499992370605,6.82999992370605,38.0,5.76999998092651,,,,,,,
10,1,Spain (Espana),1964,3.600114279221,,,,,,,2863.2783203125,18679.095703125,1064.24572753906,359.745727539062,212.143417358398,,18.360183715820302
11,1,Spain (Espana),1965,3.7007998412284,16.1599998474121,4.30999994277954,27.010000228881804,7.639999866485599,38.4000015258789,6.48000001907349,2826.32153320312,18805.349609375,1129.03112792969,377.947143554688,218.0,,20.5730609893799
12,1,Spain (Espana),1966,3.82347902343192,,,,,,,2789.84204101562,18959.24609375,1201.23583984375,398.72537231445295,224.335403442383,,22.263000488281197
13,1,Spain (Espana),1967,3.93966025401783,14.119999885559098,4.1399998664856,26.739999771118196,7.67000007629395,39.569999694824205,7.7600002288818395,2753.83325195312,19178.095703125,1285.103515625,422.267883300781,231.975006103516,,22.634765625
14,1,Spain (Espana),1968,4.17373600567249,,,,,,,2718.2890625,19319.001953125,1487.38073730469,447.32107543945295,236.050003051758,,23.112615585327102
15,1,Spain (Espana),1969,4.41052573846089,12.8100004196167,4.13000011444092,26.7700004577637,7.84000015258789,40.060001373291,8.39000034332275,2683.20385742188,19459.55859375,1696.14685058594,474.941162109375,252.25,66.33999633789061,23.8235015869141
16,1,Spain (Espana),1970,4.591688228586481,,,,,,,,,,,,,23.4512672424316
17,1,Spain (Espana),1971,4.7690658765464295,,,,,,,,,,,,,21.700725555419897
18,1,Spain (Espana),1972,5.074264321521981,,,,,,,,,,,,,23.083499908447298
19,1,Spain (Espana),1973,5.3735362022681,,,,,,,,,,,,,24.4110679626465
20,1,Spain (Espana),1974,5.506783654028539,,,,,,,,,,,,,25.054624557495103
21,1,Spain (Espana),1975,5.632604813105849,,,,,,,,,,,,,23.150329589843803
22,1,Spain (Espana),1976,5.69744355267915,,,,,,,,,,,,,22.437141418457
23,1,Spain (Espana),1977,5.75949726905594,,,,,,,,,,,,,21.735496520996104
24,1,Spain (Espana),1978,5.71665236759921,,,,,,,,,,,,,21.0691146850586
25,1,Spain (Espana),1979,5.68723223679953,,,,,,,,,,,,,20.0666217803955
26,1,Spain (Espana),1980,5.710796845432559,,,,,,,,,,,,,19.9076251983643
27,1,Spain (Espana),1981,5.759925700636869,,,,,,,,,,,,,19.1218509674072
28,1,Spain (Espana),1982,5.82526434969473,,,,,,,,,,,,,19.204309463501
29,1,Spain (Espana),1983,5.89353054191548,,,,,,,,,,,,,18.4446907043457
30,1,Spain (Espana),1984,6.00421320401202,,,,,,,,,,,,,16.782161712646502
31,1,Spain (Espana),1985,6.11639515872139,,,,,,,,,,,,,17.4106369018555
32,1,Spain (Espana),1986,6.49650113918345,,,,,,,,,,,,,17.960134506225604
33,1,Spain (Espana),1987,6.87817745432109,,,,,,,,,,,,,19.2979774475098
34,1,Spain (Espana),1988,7.24293050409147,,,,,,,,,,,,,20.8252849578857
35,1,Spain (Espana),1989,7.60854041702371,,,,,,,,,,,,,22.475641250610398
36,1,Spain (Espana),1990,7.79491556402412,,,,,,,,,,,,,23.356416702270497
37,1,Spain (Espana),1991,7.9784350816061504,,,,,,,,,,,,,23.146408081054698
38,1,Spain (Espana),1992,7.83490396438071,,,,,,,,,,,,,22.4360275268555
39,1,Spain (Espana),1993,7.692087626191619,,,,,,,,,,,,,20.3748607635498
40,1,Spain (Espana),1994,7.88988877759256,,,,,,,,,,,,,20.2575531005859
41,1,Spain (Espana),1995,8.0948298742212,,,,,,,,,,,,,21.206729888915998
42,1,Spain (Espana),1996,8.32404992267834,,,,,,,,,,,,,
43,1,Spain (Espana),1997,8.670379542786879,,,,,,,,,,,,,
44,2,Andalucia,1955,1.68873183014256,,,,,,,,,,,,,
45,2,Andalucia,1956,1.75849753289657,,,,,,,,,,,,,
46,2,Andalucia,1957,1.8276206972393998,,,,,,,,,,,,,
47,2,Andalucia,1958,1.85275629430933,,,,,,,,,,,,,
48,2,Andalucia,1959,1.87803484718652,,,,,,,,,,,,,
49,2,Andalucia,1960,2.0101399600114296,,,,,,,,,,,,,
50,2,Andalucia,1961,2.12917747377702,27.719999313354503,2.77999997138977,18.4500007629395,6.96999979019165,36.6300010681152,7.449999809265139,,,,,,,
51,2,Andalucia,1962,2.28034844571473,,,,,,,,,,,,,
52,2,Andalucia,1963,2.43101972608831,27.1299991607666,2.5499999523162797,18.1000003814697,7.73000001907349,37.6699981689453,6.82000017166138,,,,,,,
53,2,Andalucia,1964,2.50885458681727,,,,,,,924.4030151367191,3028.12719726562,129.512100219727,48.9593620300293,24.9379730224609,,17.401494979858402
54,2,Andalucia,1965,2.5846900275284104,24.5200004577637,2.6500000953674303,18.1800003051758,8.550000190734862,38.319999694824205,7.78000020980835,899.348999023438,3036.81640625,136.179748535156,51.777217864990206,25.7527732849121,,18.3089637756348
55,2,Andalucia,1966,2.69444434855945,,,,,,,874.7876586914059,3049.4423828125,143.5947265625,54.983226776123,26.631202697753896,,18.4299926757812
56,2,Andalucia,1967,2.8023422053799396,21.8700008392334,2.6500000953674303,18.2199993133545,8.53999996185303,39.0800018310547,9.64999961853027,850.710571289062,3072.63598632812,152.235733032227,58.610378265380895,27.6725540161133,,19.115657806396502
57,2,Andalucia,1968,2.98736079765435,,,,,,,827.109252929688,3086.955078125,174.595489501953,62.4910278320312,28.295471191406197,,20.608486175537102
58,2,Andalucia,1969,3.17909177525729,19.729999542236303,3.24000000953674,18.4300003051758,8.85999965667725,39.22999954223629,10.520000457763699,803.975463867188,3100.572265625,197.274108886719,66.7777633666992,30.383569717407198,68.5100021362305,22.055589675903303
59,2,Andalucia,1970,3.35432726531259,,,,,,,,,,,,,23.313762664794897
60,2,Andalucia,1971,3.52292206586344,,,,,,,,,,,,,22.317508697509798
61,2,Andalucia,1972,3.75621265018031,,,,,,,,,,,,,22.1272926330566
62,2,Andalucia,1973,3.98771781234937,,,,,,,,,,,,,21.8019485473633
63,2,Andalucia,1974,4.05184220872719,,,,,,,,,,,,,23.646896362304698
64,2,Andalucia,1975,4.11218219878026,,,,,,,,,,,,,22.7574157714844
65,2,Andalucia,1976,4.22179356400403,,,,,,,,,,,,,21.5302619934082
66,2,Andalucia,1977,4.3316908408423505,,,,,,,,,,,,,18.8983554840088
67,2,Andalucia,1978,4.3051986890464295,,,,,,,,,,,,,19.8129272460938
68,2,Andalucia,1979,4.226935178816101,,,,,,,,,,,,,19.6916809082031
69,2,Andalucia,1980,4.21151120606166,,,,,,,,,,,,,20.9232215881348
70,2,Andalucia,1981,4.20701245654143,,,,,,,,,,,,,21.8307266235352
71,2,Andalucia,1982,4.24907153689906,,,,,,,,,,,,,22.185377120971697
72,2,Andalucia,1983,4.29163096258212,,,,,,,,,,,,,21.1268634796143
73,2,Andalucia,1984,4.3586833379637095,,,,,,,,,,,,,19.9248065948486
74,2,Andalucia,1985,4.42659257650716,,,,,,,,,,,,,20.382495880127
75,2,Andalucia,1986,4.66323891764741,,,,,,,,,,,,,19.3726501464844
76,2,Andalucia,1987,4.90067107988677,,,,,,,,,,,,,20.4932041168213
77,2,Andalucia,1988,5.15959717075813,,,,,,,,,,,,,23.358566284179698
78,2,Andalucia,1989,5.41773787637126,,,,,,,,,,,,,25.7622928619385
79,2,Andalucia,1990,5.585261162128901,,,,,,,,,,,,,28.3183250427246
80,2,Andalucia,1991,5.74921447527269,,,,,,,,,,,,,26.49245262146
81,2,Andalucia,1992,5.64124535846901,,,,,,,,,,,,,24.318729400634798
82,2,Andalucia,1993,5.53491849008542,,,,,,,,,,,,,21.183673858642603
83,2,Andalucia,1994,5.638817288949809,,,,,,,,,,,,,20.268390655517603
84,2,Andalucia,1995,5.72072268553851,,,,,,,,,,,,,22.1725749969482
85,2,Andalucia,1996,5.9959296123261705,,,,,,,,,,,,,
86,2,Andalucia,1997,6.300985537335321,,,,,,,,,,,,,
87,3,Aragon,1955,2.28877455736698,,,,,,,,,,,,,
88,3,Aragon,1956,2.44515862202038,,,,,,,,,,,,,
89,3,Aragon,1957,2.60339893296391,,,,,,,,,,,,,
90,3,Aragon,1958,2.63903175752798,,,,,,,,,,,,,
91,3,Aragon,1959,2.67709221577038,,,,,,,,,,,,,
92,3,Aragon,1960,2.8814623608517005,,,,,,,,,,,,,
93,3,Aragon,1961,3.0995429702841606,25.0699996948242,6.90999984741211,21.6599998474121,6.800000190734861,32.8499984741211,6.71000003814697,,,,,,,
94,3,Aragon,1962,3.3591831864305495,,,,,,,,,,,,,
95,3,Aragon,1963,3.61418169724945,25.3400001525879,6.07999992370605,21.7299995422363,7.53000020980835,33.3499984741211,5.96000003814697,,,,,,,
96,3,Aragon,1964,3.68009129785463,,,,,,,77.6694641113281,722.28515625,36.2118072509766,14.2490568161011,8.3411340713501,,21.2724781036377
97,3,Aragon,1965,3.7452869911052202,21.020000457763697,6.26999998092651,23.600000381469698,8.28999996185303,34.2299995422363,6.599999904632571,75.8038024902344,723.77685546875,38.2993583679199,14.8717565536499,8.45247268676758,,22.767896652221697
98,3,Aragon,1966,3.88331910400042,,,,,,,73.9733581542969,726.22314453125,40.6244239807129,15.5857191085815,8.57572555541992,,21.4764251708984
99,3,Aragon,1967,4.01613812417992,18.479999542236303,6.07999992370605,23.3799991607666,8.43000030517578,35.709999084472706,7.92999982833862,72.1775436401367,730.974853515625,43.327762603759794,16.3962135314941,8.74120998382568,,19.729175567627
100,3,Aragon,1968,4.24364488215421,,,,,,,70.41575622558591,733.1019897460941,49.993724822998,17.2527370452881,8.76598262786865,,20.584880828857397
101,3,Aragon,1969,4.47622090535517,18.7199993133545,6.050000190734861,23.530000686645497,8.10999965667725,35.310001373291,8.27999973297119,68.6874313354492,735.111572265625,56.8352546691895,18.1945724487305,9.22996997833252,24.0400009155273,23.6340599060059
102,3,Aragon,1970,4.5962580201694605,,,,,,,,,,,,,24.9269580841064
103,3,Aragon,1971,4.72372186350775,,,,,,,,,,,,,22.161314010620103
104,3,Aragon,1972,5.00128538191097,,,,,,,,,,,,,21.9001197814941
105,3,Aragon,1973,5.28349060564169,,,,,,,,,,,,,22.707145690918
106,3,Aragon,1974,5.44237378187705,,,,,,,,,,,,,25.394905090332
107,3,Aragon,1975,5.600971046497881,,,,,,,,,,,,,25.422359466552702
108,3,Aragon,1976,5.73657508987388,,,,,,,,,,,,,26.061880111694304
109,3,Aragon,1977,5.86639552482773,,,,,,,,,,,,,22.859992980957
110,3,Aragon,1978,5.925021352716191,,,,,,,,,,,,,21.286657333374
111,3,Aragon,1979,5.95279923509578,,,,,,,,,,,,,20.492244720459002
112,3,Aragon,1980,5.9747215953087105,,,,,,,,,,,,,20.729803085327102
113,3,Aragon,1981,6.011139587210571,,,,,,,,,,,,,20.8206253051758
114,3,Aragon,1982,6.1336047715440705,,,,,,,,,,,,,26.4890670776367
115,3,Aragon,1983,6.26085418117145,,,,,,,,,,,,,17.5623760223389
116,3,Aragon,1984,6.372893615914429,,,,,,,,,,,,,18.1013278961182
117,3,Aragon,1985,6.495501320214309,,,,,,,,,,,,,19.533239364624
118,3,Aragon,1986,6.92652092426717,,,,,,,,,,,,,18.325876235961896
119,3,Aragon,1987,7.358611825192799,,,,,,,,,,,,,19.5995044708252
120,3,Aragon,1988,7.80277028828817,,,,,,,,,,,,,20.0823040008545
121,3,Aragon,1989,8.242645307255959,,,,,,,,,,,,,22.157751083374
122,3,Aragon,1990,8.45829762924879,,,,,,,,,,,,,22.210424423217802
123,3,Aragon,1991,8.6682378207231,,,,,,,,,,,,,22.0179557800293
124,3,Aragon,1992,8.46686626086743,,,,,,,,,,,,,22.865404129028303
125,3,Aragon,1993,8.25692694107487,,,,,,,,,,,,,21.5592422485352
126,3,Aragon,1994,8.57397851450925,,,,,,,,,,,,,21.9211864471436
127,3,Aragon,1995,8.84675824345946,,,,,,,,,,,,,20.6667442321777
128,3,Aragon,1996,9.09668683529036,,,,,,,,,,,,,
129,3,Aragon,1997,9.51870894030277,,,,,,,,,,,,,
130,4,Principado De Asturias,1955,2.50292780466742,,,,,,,,,,,,,
131,4,Principado De Asturias,1956,2.61553840887816,,,,,,,,,,,,,
132,4,Principado De Asturias,1957,2.72579263939377,,,,,,,,,,,,,
133,4,Principado De Asturias,1958,2.7518565775291903,,,,,,,,,,,,,
134,4,Principado De Asturias,1959,2.77742082410048,,,,,,,,,,,,,
135,4,Principado De Asturias,1960,2.96729511957242,,,,,,,,,,,,,
136,4,Principado De Asturias,1961,3.1438873822741495,14.119999885559098,21.3600006103516,22.0799999237061,9.02999973297119,28.4599990844727,4.949999809265139,,,,,,,
137,4,Principado De Asturias,1962,3.37353608023266,,,,,,,,,,,,,
138,4,Principado De Asturias,1963,3.59725799604131,15.1700000762939,19.0400009155273,22.3600006103516,8.96000003814697,29.7099990844727,4.769999980926509,,,,,,,
139,4,Principado De Asturias,1964,3.67259352726788,,,,,,,29.012674331665,668.60009765625,37.5539970397949,12.838385581970199,5.938287734985349,,21.048454284668
140,4,Principado De Asturias,1965,3.74335883107059,12.1000003814697,18.4699993133545,24.4099998474121,9.5600004196167,30.030000686645497,5.42999982833862,30.044288635253896,668.96533203125,39.887912750244105,13.502683639526401,6.10620307922363,,22.6595020294189
141,4,Principado De Asturias,1966,3.9093828242154,,,,,,,31.0444412231445,670.01220703125,42.4897613525391,14.2605600357056,6.28775262832642,,22.340934753418
142,4,Principado De Asturias,1967,4.07312213948916,10.5600004196167,18.3099994659424,24.7999992370605,8.68000030517578,31.1700000762939,6.48000001907349,32.013767242431605,672.922668457031,45.5107574462891,15.119030952453599,6.50611162185669,,21.4814567565918
143,4,Principado De Asturias,1968,4.30862614169389,,,,,,,32.9529037475586,672.704772949219,52.7372436523438,16.0334854125977,6.62471008300781,,23.0380535125732
144,4,Principado De Asturias,1969,4.5497001902916105,9.85999965667725,16.0599994659424,26.9799995422363,8.80000019073486,31.3899993896484,6.90999984741211,33.8624610900879,672.251281738281,60.211219787597706,17.0420017242432,7.08396434783936,98.73999786376949,26.0494537353516
145,4,Principado De Asturias,1970,4.631605151039441,,,,,,,,,,,,,23.937179565429698
146,4,Principado De Asturias,1971,4.69965734539016,,,,,,,,,,,,,21.747863769531197
147,4,Principado De Asturias,1972,5.02256487683207,,,,,,,,,,,,,21.0096817016602
148,4,Principado De Asturias,1973,5.34561536408124,,,,,,,,,,,,,22.8314018249512
149,4,Principado De Asturias,1974,5.50249933821921,,,,,,,,,,,,,24.347826004028303
150,4,Principado De Asturias,1975,5.65195658383319,,,,,,,,,,,,,23.0620956420898
151,4,Principado De Asturias,1976,5.59225945907196,,,,,,,,,,,,,20.9734210968018
152,4,Principado De Asturias,1977,5.53870333225105,,,,,,,,,,,,,22.2392463684082
153,4,Principado De Asturias,1978,5.61461025086582,,,,,,,,,,,,,19.3666744232178
154,4,Principado De Asturias,1979,5.704298893814941,,,,,,,,,,,,,18.1282520294189
155,4,Principado De Asturias,1980,5.79698655783058,,,,,,,,,,,,,16.1302757263184
156,4,Principado De Asturias,1981,5.935661100176739,,,,,,,,,,,,,15.483533859252901
157,4,Principado De Asturias,1982,5.84975729939325,,,,,,,,,,,,,17.848123550415
158,4,Principado De Asturias,1983,5.769066155484589,,,,,,,,,,,,,17.3350830078125
159,4,Principado De Asturias,1984,5.887318066071519,,,,,,,,,,,,,15.7501068115234
160,4,Principado De Asturias,1985,6.01128254301784,,,,,,,,,,,,,16.3055534362793
161,4,Principado De Asturias,1986,6.23479002511559,,,,,,,,,,,,,19.2548580169678
162,4,Principado De Asturias,1987,6.4652958041564,,,,,,,,,,,,,21.5103187561035
163,4,Principado De Asturias,1988,6.68816042096231,,,,,,,,,,,,,21.1311721801758
164,4,Principado De Asturias,1989,6.913524585191059,,,,,,,,,,,,,20.3636207580566
165,4,Principado De Asturias,1990,6.98314755005824,,,,,,,,,,,,,22.212276458740202
166,4,Principado De Asturias,1991,7.0406310390111795,,,,,,,,,,,,,23.6604309082031
167,4,Principado De Asturias,1992,6.92280756000518,,,,,,,,,,,,,20.540019989013697
168,4,Principado De Asturias,1993,6.79834317357429,,,,,,,,,,,,,18.5378379821777
169,4,Principado De Asturias,1994,6.95415585083949,,,,,,,,,,,,,18.6073780059814
170,4,Principado De Asturias,1995,7.11646691556319,,,,,,,,,,,,,18.4219799041748
171,4,Principado De Asturias,1996,7.21722373755378,,,,,,,,,,,,,
172,4,Principado De Asturias,1997,7.475721396844209,,,,,,,,,,,,,
173,5,Baleares (Islas),1955,3.1439588601777797,,,,,,,,,,,,,
174,5,Baleares (Islas),1956,3.34775783579134,,,,,,,,,,,,,
175,5,Baleares (Islas),1957,3.5496286513702597,,,,,,,,,,,,,
176,5,Baleares (Islas),1958,3.64267348698363,,,,,,,,,,,,,
177,5,Baleares (Islas),1959,3.7348616773555805,,,,,,,,,,,,,
178,5,Baleares (Islas),1960,4.0588405056702594,,,,,,,,,,,,,
179,5,Baleares (Islas),1961,4.36025410848017,16.3400001525879,2.14000010490417,22.1599998474121,7.05999994277954,45.380001068115206,6.92999982833862,,,,,,,
180,5,Baleares (Islas),1962,4.646172696472879,,,,,,,,,,,,,
181,5,Baleares (Islas),1963,4.91152526105822,15.8000001907349,1.9400000572204599,20.090000152587898,8.14999961853027,48.290000915527294,5.73000001907349,,,,,,,
182,5,Baleares (Islas),1964,5.05069971288895,,,,,,,48.078617095947294,294.38134765625,14.7882413864136,5.30359840393066,3.35199999809265,,14.179034233093299
183,5,Baleares (Islas),1965,5.184661507844861,12.5100002288818,2.14000010490417,18.7900009155273,8.88000011444092,52.0999984741211,5.57999992370605,48.017120361328104,296.678833007812,16.258171081543,5.51208782196045,3.4664685726165803,,19.0025005340576
184,5,Baleares (Islas),1966,5.466795253671941,,,,,,,47.9492034912109,299.291717529297,17.904066085815398,5.75198602676392,3.5897774696350098,,26.2534103393555
185,5,Baleares (Islas),1967,5.73764638674664,11.0100002288818,2.11999988555908,16.5300006866455,8.60000038146973,54.779998779296896,6.96000003814697,47.875038146972706,302.80609130859403,19.802547454834002,6.02474308013916,3.7353618144989,,29.701530456543
186,5,Baleares (Islas),1968,6.16145369598642,,,,,,,47.7947998046875,304.936309814453,23.6700248718262,6.31135892868042,3.8247258663177504,,30.761695861816396
187,5,Baleares (Islas),1969,6.58169103261233,9.98999977111816,2.03999996185303,13.720000267028801,8.77999973297119,58.209999084472706,7.26999998092651,47.708656311035206,306.78741455078097,27.848173141479503,6.62585115432739,4.11259126663208,104.16999816894501,26.752099990844698
188,5,Baleares (Islas),1970,6.8870324333951505,,,,,,,,,,,,,26.4437465667725
189,5,Baleares (Islas),1971,7.16866626973767,,,,,,,,,,,,,23.7412166595459
190,5,Baleares (Islas),1972,7.5706937387309,,,,,,,,,,,,,23.8075218200684
191,5,Baleares (Islas),1973,7.95629785184144,,,,,,,,,,,,,23.1038875579834
192,5,Baleares (Islas),1974,7.97272207940588,,,,,,,,,,,,,23.3105583190918
193,5,Baleares (Islas),1975,7.9741498941150795,,,,,,,,,,,,,22.3685703277588
194,5,Baleares (Islas),1976,8.03484683784544,,,,,,,,,,,,,19.8859233856201
195,5,Baleares (Islas),1977,8.080548240402301,,,,,,,,,,,,,18.087942123413104
196,5,Baleares (Islas),1978,8.041987654754891,,,,,,,,,,,,,17.650239944458
197,5,Baleares (Islas),1979,8.00485575549843,,,,,,,,,,,,,17.838848114013697
198,5,Baleares (Islas),1980,8.25978257049325,,,,,,,,,,,,,18.2605838775635
199,5,Baleares (Islas),1981,8.53113361305252,,,,,,,,,,,,,14.8526191711426
200,5,Baleares (Islas),1982,8.7225078548986,,,,,,,,,,,,,13.5585250854492
201,5,Baleares (Islas),1983,8.92530722946346,,,,,,,,,,,,,11.621108055114698
202,5,Baleares (Islas),1984,9.275921165381321,,,,,,,,,,,,,10.135469436645499
203,5,Baleares (Islas),1985,9.652241867836869,,,,,,,,,,,,,11.3290481567383
204,5,Baleares (Islas),1986,10.2577834904313,,,,,,,,,,,,,16.519567489624
205,5,Baleares (Islas),1987,10.8233358409874,,,,,,,,,,,,,21.2754974365234
206,5,Baleares (Islas),1988,11.1203945217661,,,,,,,,,,,,,25.113958358764602
207,5,Baleares (Islas),1989,11.408168920208098,,,,,,,,,,,,,24.8808898925781
208,5,Baleares (Islas),1990,11.5124246727498,,,,,,,,,,,,,23.360876083374
209,5,Baleares (Islas),1991,11.679519962767301,,,,,,,,,,,,,20.807407379150398
210,5,Baleares (Islas),1992,11.3196226161945,,,,,,,,,,,,,18.028039932251
211,5,Baleares (Islas),1993,10.9697225876312,,,,,,,,,,,,,14.9990978240967
212,5,Baleares (Islas),1994,11.4195940529268,,,,,,,,,,,,,17.089862823486303
213,5,Baleares (Islas),1995,11.7737792689812,,,,,,,,,,,,,17.896915435790998
214,5,Baleares (Islas),1996,11.9265920534981,,,,,,,,,,,,,
215,5,Baleares (Islas),1997,12.3500428449015,,,,,,,,,,,,,
216,6,Canarias,1955,1.9143815791051901,,,,,,,,,,,,,
217,6,Canarias,1956,2.07183672271092,,,,,,,,,,,,,
218,6,Canarias,1957,2.22607819361879,,,,,,,,,,,,,
219,6,Canarias,1958,2.22086553674397,,,,,,,,,,,,,
220,6,Canarias,1959,2.2134390261404104,,,,,,,,,,,,,
221,6,Canarias,1960,2.3576836148795697,,,,,,,,,,,,,
222,6,Canarias,1961,2.4457297914881497,26.2099990844727,9.53999996185303,9.78999996185303,6.17999982833862,40.22999954223629,8.060000419616701,,,,,,,
223,6,Canarias,1962,2.64824325443846,,,,,,,,,,,,,
224,6,Canarias,1963,2.84475867525573,23.9099998474121,8.42000007629395,9.85000038146973,6.80999994277954,43.9900016784668,7.01999998092651,,,,,,,
225,6,Canarias,1964,2.95115680362251,,,,,,,134.97756958007798,505.94259643554705,33.264656066894496,10.270918846130401,5.27583169937134,,17.0259399414062
226,6,Canarias,1965,3.05419873932504,19.4300003051758,8.0,10.0500001907349,8.68000030517578,46.1500015258789,7.699999809265139,132.24661254882798,512.223693847656,36.6822166442871,10.887195587158198,5.4749860763549805,,20.9989643096924
227,6,Canarias,1966,3.2317908209959,,,,,,,129.56369018554702,518.962585449219,40.5098114013672,11.587664604187,5.68915796279907,,26.6728916168213
228,6,Canarias,1967,3.40338464261327,16.1800003051758,6.92000007629395,9.829999923706051,10.3999996185303,47.0900001525879,9.59000015258789,126.92797088623001,527.237548828125,44.923221588134794,12.379798889160199,5.93983459472656,,30.120325088501
229,6,Canarias,1968,3.66031153138724,,,,,,,124.338722229004,532.043151855469,53.8288078308105,13.2286462783813,6.10211324691772,,32.150463104248
230,6,Canarias,1969,3.91288219060737,13.9899997711182,6.21000003814697,9.5600004196167,11.279999732971199,48.9300003051758,10.039999961853,121.79515838623001,536.16015625,63.476222991943395,14.1668691635132,6.5828104019165,148.25,28.756898880004897
231,6,Canarias,1970,4.22493554087783,,,,,,,,,,,,,23.9603977203369
232,6,Canarias,1971,4.49357347398511,,,,,,,,,,,,,23.423873901367198
233,6,Canarias,1972,4.781919259815281,,,,,,,,,,,,,27.6821231842041
234,6,Canarias,1973,5.054912986635519,,,,,,,,,,,,,26.5648536682129
235,6,Canarias,1974,4.967794933172,,,,,,,,,,,,,23.0051422119141
236,6,Canarias,1975,4.88153374287034,,,,,,,,,,,,,20.599346160888697
237,6,Canarias,1976,4.94844316244466,,,,,,,,,,,,,18.8343353271484
238,6,Canarias,1977,5.0079262893358605,,,,,,,,,,,,,20.2992210388184
239,6,Canarias,1978,5.0409168285902695,,,,,,,,,,,,,19.8448696136475
240,6,Canarias,1979,5.23350488727551,,,,,,,,,,,,,18.7241382598877
241,6,Canarias,1980,5.43708921125772,,,,,,,,,,,,,18.553279876709002
242,6,Canarias,1981,5.65824053758078,,,,,,,,,,,,,16.641674041748
243,6,Canarias,1982,5.68730371470317,,,,,,,,,,,,,16.3411331176758
244,6,Canarias,1983,5.71986582237664,,,,,,,,,,,,,14.9887752532959
245,6,Canarias,1984,5.80134235154353,,,,,,,,,,,,,15.761590003967301
246,6,Canarias,1985,5.88560390390692,,,,,,,,,,,,,19.1585693359375
247,6,Canarias,1986,6.25678386323216,,,,,,,,,,,,,19.649713516235398
248,6,Canarias,1987,6.612681933928481,,,,,,,,,,,,,20.7193813323975
249,6,Canarias,1988,6.97700655211792,,,,,,,,,,,,,24.314439773559602
250,6,Canarias,1989,7.33790328181903,,,,,,,,,,,,,25.859371185302702
251,6,Canarias,1990,7.34504409872849,,,,,,,,,,,,,25.5112228393555
252,6,Canarias,1991,7.34718669247403,,,,,,,,,,,,,22.896217346191396
253,6,Canarias,1992,7.22007980281304,,,,,,,,,,,,,20.1320972442627
254,6,Canarias,1993,7.09218796373469,,,,,,,,,,,,,17.6260604858398
255,6,Canarias,1994,7.410740137304519,,,,,,,,,,,,,19.9668464660645
256,6,Canarias,1995,7.61639514128776,,,,,,,,,,,,,19.6725215911865
257,6,Canarias,1996,7.817051922107081,,,,,,,,,,,,,
258,6,Canarias,1997,8.06055447606487,,,,,,,,,,,,,
259,7,Cantabria,1955,2.5594116925716497,,,,,,,,,,,,,
260,7,Cantabria,1956,2.6938731790916903,,,,,,,,,,,,,
261,7,Cantabria,1957,2.8203369855404,,,,,,,,,,,,,
262,7,Cantabria,1958,2.8790345092529397,,,,,,,,,,,,,
263,7,Cantabria,1959,2.9437302930189597,,,,,,,,,,,,,
264,7,Cantabria,1960,3.1370322590588,,,,,,,,,,,,,
265,7,Cantabria,1961,3.32762067980577,16.7099990844727,3.1800000667572004,37.9199981689453,5.619999885559079,31.6800003051758,4.90000009536743,,,,,,,
266,7,Cantabria,1962,3.55534143565008,,,,,,,,,,,,,
267,7,Cantabria,1963,3.7714226250647096,18.2399997711182,2.9400000572204603,36.180000305175795,5.75,32.5999984741211,4.28999996185303,,,,,,,
268,7,Cantabria,1964,3.83940290567092,,,,,,,9.68474006652832,284.568359375,20.741380691528303,6.54473781585693,2.7377266883850098,,25.9189758300781
269,7,Cantabria,1965,3.90609832737521,16.2099990844727,2.77999997138977,36.75,6.28999996185303,33.240001678466804,4.73999977111816,9.56692123413086,286.330200195312,21.5585098266602,6.80100536346436,2.78703331947327,,28.1631698608398
270,7,Cantabria,1966,4.03213348432256,,,,,,,9.45053100585938,288.415008544922,22.4632587432861,7.09592056274414,2.84099197387695,,29.719242095947298
271,7,Cantabria,1967,4.15595544130248,14.970000267028801,2.6900000572204603,35.8699989318848,6.17999982833862,34.580001831054695,5.71999979019165,9.335551261901859,291.33538818359403,23.524522781372102,7.431251049041751,2.90978312492371,,28.967601776123
272,7,Cantabria,1968,4.37589251494551,,,,,,,9.221964836120609,292.683197021484,26.6404342651367,7.78354120254517,2.9324495792388903,,29.9379234313965
273,7,Cantabria,1969,4.61082556560291,13.479999542236301,2.8800001144409197,35.930000305175795,6.03999996185303,35.319999694824205,6.34000015258789,9.10975551605225,294.098236083984,29.710376739502,8.17006301879883,3.1033015251159703,87.3899993896484,31.7203559875488
274,7,Cantabria,1970,4.7914166683402994,,,,,,,,,,,,,27.297681808471697
275,7,Cantabria,1971,4.96965161530299,,,,,,,,,,,,,24.146263122558604
276,7,Cantabria,1972,5.1553843328524405,,,,,,,,,,,,,26.6463279724121
277,7,Cantabria,1973,5.33876045878633,,,,,,,,,,,,,25.9357929229736
278,7,Cantabria,1974,5.50835486038587,,,,,,,,,,,,,27.2517414093018
279,7,Cantabria,1975,5.6752357166925504,,,,,,,,,,,,,25.4183330535889
280,7,Cantabria,1976,5.796058216765079,,,,,,,,,,,,,23.322269439697298
281,7,Cantabria,1977,5.902956472536861,,,,,,,,,,,,,21.7218837738037
282,7,Cantabria,1978,5.91659524106394,,,,,,,,,,,,,20.854923248290998
283,7,Cantabria,1979,5.906455403087961,,,,,,,,,,,,,19.3349609375
284,7,Cantabria,1980,5.8991001524676,,,,,,,,,,,,,19.4796085357666
285,7,Cantabria,1981,5.91488151474021,,,,,,,,,,,,,23.029748916626
286,7,Cantabria,1982,5.916880716837599,,,,,,,,,,,,,20.2042331695557
287,7,Cantabria,1983,5.941659578150659,,,,,,,,,,,,,18.771089553833
288,7,Cantabria,1984,6.02884910951782,,,,,,,,,,,,,18.2284927368164
289,7,Cantabria,1985,6.13831751893432,,,,,,,,,,,,,19.6516265869141
290,7,Cantabria,1986,6.42045126476141,,,,,,,,,,,,,17.644136428833
291,7,Cantabria,1987,6.71322475804904,,,,,,,,,,,,,20.1474628448486
292,7,Cantabria,1988,7.023421862029379,,,,,,,,,,,,,20.374563217163104
293,7,Cantabria,1989,7.33361896600971,,,,,,,,,,,,,22.8378524780273
294,7,Cantabria,1990,7.45072853766112,,,,,,,,,,,,,22.030084609985398
295,7,Cantabria,1991,7.5964013769503405,,,,,,,,,,,,,20.6100959777832
296,7,Cantabria,1992,7.46215367037989,,,,,,,,,,,,,21.6292610168457
297,7,Cantabria,1993,7.3279059638094495,,,,,,,,,,,,,23.0652160644531
298,7,Cantabria,1994,7.550699974393481,,,,,,,,,,,,,21.568395614624
299,7,Cantabria,1995,7.77706352175048,,,,,,,,,,,,,22.591121673584
300,7,Cantabria,1996,7.9077408198662,,,,,,,,,,,,,
301,7,Cantabria,1997,8.22693498704611,,,,,,,,,,,,,
302,8,Castilla Y Leon,1955,1.72914877104031,,,,,,,,,,,,,
303,8,Castilla Y Leon,1956,1.8383319226035901,,,,,,,,,,,,,
304,8,Castilla Y Leon,1957,1.9476578120537,,,,,,,,,,,,,
305,8,Castilla Y Leon,1958,1.97136537649399,,,,,,,,,,,,,
306,8,Castilla Y Leon,1959,1.99514420091748,,,,,,,,,,,,,
307,8,Castilla Y Leon,1960,2.13881740226844,,,,,,,,,,,,,
308,8,Castilla Y Leon,1961,2.23950296427583,32.5499992370605,9.01000022888184,16.0499992370605,6.17000007629395,29.1399993896484,7.07999992370605,,,,,,,
309,8,Castilla Y Leon,1962,2.45422738104403,,,,,,,,,,,,,
310,8,Castilla Y Leon,1963,2.67223651257286,33.2299995422363,8.17000007629395,15.75,6.639999866485599,29.7099990844727,6.5,,,,,,,
311,8,Castilla Y Leon,1964,2.77777777777778,,,,,,,110.66909790039101,1800.78466796875,90.27098846435551,33.668914794921896,19.031759262085,,18.742832183837898
312,8,Castilla Y Leon,1965,2.88217648612673,30.5200004577637,7.849999904632571,16.3600006103516,7.369999885559079,30.6100006103516,7.28000020980835,108.557182312012,1784.6062011718802,93.0149154663086,35.0594444274902,19.0506000518799,,19.859060287475604
313,8,Castilla Y Leon,1966,2.98807492292939,,,,,,,106.48135375976601,1770.78649902344,96.0362777709961,36.656730651855504,19.082952499389602,,19.3095703125
314,8,Castilla Y Leon,1967,3.0945443112793702,27.0200004577637,7.2399997711181605,16.7600002288818,7.699999809265139,32.1300010681152,9.14999961853027,104.441024780273,1762.45178222656,99.6097412109375,38.4714508056641,19.193773269653303,,18.868968963623
315,8,Castilla Y Leon,1968,3.30227086694538,,,,,,,102.43562316894501,1748.35729980469,111.663963317871,40.38356399536129,18.982435226440398,,19.4028263092041
316,8,Castilla Y Leon,1969,3.5209939058288,25.2700004577637,6.82000017166138,17.4500007629395,7.84000015258789,32.6300010681152,9.98999977111816,100.464584350586,1734.5856933593802,123.20368957519501,42.4837989807129,19.699041366577102,28.7700004577637,21.7317962646484
317,8,Castilla Y Leon,1970,3.67052284726685,,,,,,,,,,,,,22.3235569000244
318,8,Castilla Y Leon,1971,3.8218367750118305,,,,,,,,,,,,,21.873647689819304
319,8,Castilla Y Leon,1972,4.081762249011439,,,,,,,,,,,,,22.7254333496094
320,8,Castilla Y Leon,1973,4.34540152311393,,,,,,,,,,,,,25.286424636840803
321,8,Castilla Y Leon,1974,4.4647242947327594,,,,,,,,,,,,,26.282775878906197
322,8,Castilla Y Leon,1975,4.581119523188691,,,,,,,,,,,,,26.2781448364258
323,8,Castilla Y Leon,1976,4.732719362548201,,,,,,,,,,,,,26.5485191345215
324,8,Castilla Y Leon,1977,4.8846757197441395,,,,,,,,,,,,,25.1691036224365
325,8,Castilla Y Leon,1978,4.94680091402457,,,,,,,,,,,,,24.4022541046143
326,8,Castilla Y Leon,1979,4.920379804291411,,,,,,,,,,,,,23.975700378418
327,8,Castilla Y Leon,1980,4.89374469668822,,,,,,,,,,,,,26.6389312744141
328,8,Castilla Y Leon,1981,4.88103383338577,,,,,,,,,,,,,27.1625480651855
329,8,Castilla Y Leon,1982,4.92309334958427,,,,,,,,,,,,,27.614774703979503
330,8,Castilla Y Leon,1983,4.970722476334889,,,,,,,,,,,,,25.461778640747102
331,8,Castilla Y Leon,1984,5.113467772461219,,,,,,,,,,,,,22.6302833557129
332,8,Castilla Y Leon,1985,5.26199667700969,,,,,,,,,,,,,24.710142135620103
333,8,Castilla Y Leon,1986,5.6473148785057,,,,,,,,,,,,,19.7041282653809
334,8,Castilla Y Leon,1987,6.04463003594955,,,,,,,,,,,,,19.089288711547898
335,8,Castilla Y Leon,1988,6.35439870834895,,,,,,,,,,,,,20.9405784606934
336,8,Castilla Y Leon,1989,6.67402174295067,,,,,,,,,,,,,22.784252166748
337,8,Castilla Y Leon,1990,6.87032273005704,,,,,,,,,,,,,23.4983215332031
338,8,Castilla Y Leon,1991,7.06319626451594,,,,,,,,,,,,,22.53342628479
339,8,Castilla Y Leon,1992,7.04548717804958,,,,,,,,,,,,,24.0742378234863
340,8,Castilla Y Leon,1993,7.027635135775941,,,,,,,,,,,,,21.9429492950439
341,8,Castilla Y Leon,1994,7.07426444355742,,,,,,,,,,,,,22.298885345459
342,8,Castilla Y Leon,1995,7.282919340288941,,,,,,,,,,,,,22.3803024291992
343,8,Castilla Y Leon,1996,7.61139691812384,,,,,,,,,,,,,
344,8,Castilla Y Leon,1997,7.88846009120162,,,,,,,,,,,,,
345,9,Castilla-La Mancha,1955,1.32776351357759,,,,,,,,,,,,,
346,9,Castilla-La Mancha,1956,1.41509567387136,,,,,,,,,,,,,
347,9,Castilla-La Mancha,1957,1.5035703910210902,,,,,,,,,,,,,
348,9,Castilla-La Mancha,1958,1.5314196423441002,,,,,,,,,,,,,
349,9,Castilla-La Mancha,1959,1.5593401536503,,,,,,,,,,,,,
350,9,Castilla-La Mancha,1960,1.66752359520466,,,,,,,,,,,,,
351,9,Castilla-La Mancha,1961,1.75242790389967,42.1300010681152,5.09000015258789,16.129999160766598,4.78999996185303,26.3899993896484,5.46999979019165,,,,,,,
352,9,Castilla-La Mancha,1962,1.9204513170623099,,,,,,,,,,,,,
353,9,Castilla-La Mancha,1963,2.09190240079285,41.540000915527294,4.57999992370605,16.2399997711182,5.1100001335144,27.3700008392334,5.15999984741211,,,,,,,
354,9,Castilla-La Mancha,1964,2.18259064479066,,,,,,,274.36865234375,1067.63903808594,26.89621925354,13.6807374954224,5.95148801803589,,14.950511932372999
355,9,Castilla-La Mancha,1965,2.27470713933854,35.060001373291,5.32000017166138,17.520000457763697,5.96999979019165,30.1299991607666,6.0,266.18316650390597,1052.43518066406,28.610898971557603,14.652714729309098,6.07189273834229,,16.5078983306885
356,9,Castilla-La Mancha,1966,2.3783919403329,,,,,,,258.163299560547,1038.83850097656,30.5229873657227,15.753448486328098,6.20317840576172,,17.8852577209473
357,9,Castilla-La Mancha,1967,2.4823622171009196,31.5799999237061,5.34999990463257,18.2000007629395,6.26999998092651,31.100000381469698,7.5,250.306091308594,1028.95056152344,32.7421226501465,16.996208190918,6.367713451385501,,18.6468353271484
358,9,Castilla-La Mancha,1968,2.7090831539761,,,,,,,242.608703613281,1017.6156005859401,37.9977378845215,18.335750579834002,6.43204116821289,,18.7182598114014
359,9,Castilla-La Mancha,1969,2.94744365728096,30.1200008392334,5.55999994277954,17.7999992370605,6.90999984741211,31.2000007629395,8.39999961853027,235.068328857422,1006.1373291015599,43.447292327880895,19.819503784179698,6.82267570495605,22.3799991607666,21.115375518798803
360,9,Castilla-La Mancha,1970,3.1368895211719603,,,,,,,,,,,,,22.894416809082
361,9,Castilla-La Mancha,1971,3.31962299973445,,,,,,,,,,,,,23.1898212432861
362,9,Castilla-La Mancha,1972,3.6291774563433905,,,,,,,,,,,,,23.915504455566396
363,9,Castilla-La Mancha,1973,3.94608672773181,,,,,,,,,,,,,27.1244258880615
364,9,Castilla-La Mancha,1974,4.0281346442869,,,,,,,,,,,,,26.9158058166504
365,9,Castilla-La Mancha,1975,4.11196820091023,,,,,,,,,,,,,26.213130950927702
366,9,Castilla-La Mancha,1976,4.26071110332874,,,,,,,,,,,,,25.093284606933604
367,9,Castilla-La Mancha,1977,4.412167986880981,,,,,,,,,,,,,25.308496475219698
368,9,Castilla-La Mancha,1978,4.44630086507092,,,,,,,,,,,,,26.2669353485107
369,9,Castilla-La Mancha,1979,4.4087405342335195,,,,,,,,,,,,,25.8906097412109
370,9,Castilla-La Mancha,1980,4.32876329767946,,,,,,,,,,,,,27.101608276367198
371,9,Castilla-La Mancha,1981,4.26128249071694,,,,,,,,,,,,,25.6895370483398
372,9,Castilla-La Mancha,1982,4.34318745146476,,,,,,,,,,,,,28.041284561157198
373,9,Castilla-La Mancha,1983,4.42466441647253,,,,,,,,,,,,,28.022920608520497
374,9,Castilla-La Mancha,1984,4.55005714396891,,,,,,,,,,,,,26.228910446167003
375,9,Castilla-La Mancha,1985,4.67766350727359,,,,,,,,,,,,,21.167423248290998
376,9,Castilla-La Mancha,1986,4.98064831644084,,,,,,,,,,,,,27.072576522827102
377,9,Castilla-La Mancha,1987,5.2955586036522995,,,,,,,,,,,,,27.375286102294897
378,9,Castilla-La Mancha,1988,5.67787778408178,,,,,,,,,,,,,28.907299041748
379,9,Castilla-La Mancha,1989,6.0653385793233205,,,,,,,,,,,,,28.87522315979
380,9,Castilla-La Mancha,1990,6.2794201307996795,,,,,,,,,,,,,27.884569168090803
381,9,Castilla-La Mancha,1991,6.47450730106688,,,,,,,,,,,,,29.4713535308838
382,9,Castilla-La Mancha,1992,6.330691143908661,,,,,,,,,,,,,29.3668060302734
383,9,Castilla-La Mancha,1993,6.188589148915041,,,,,,,,,,,,,28.260452270507802
384,9,Castilla-La Mancha,1994,6.230934140887199,,,,,,,,,,,,,24.7345809936523
385,9,Castilla-La Mancha,1995,6.3287634197149005,,,,,,,,,,,,,25.9419326782227
386,9,Castilla-La Mancha,1996,6.61439609609308,,,,,,,,,,,,,
387,9,Castilla-La Mancha,1997,6.86539554895588,,,,,,,,,,,,,
388,10,Cataluna,1955,3.54662963030373,,,,,,,,,,,,,
389,10,Cataluna,1956,3.6904455695415197,,,,,,,,,,,,,
390,10,Cataluna,1957,3.82683499817574,,,,,,,,,,,,,
391,10,Cataluna,1958,3.8756783776063997,,,,,,,,,,,,,
392,10,Cataluna,1959,3.9217367338405498,,,,,,,,,,,,,
393,10,Cataluna,1960,4.24178820002321,,,,,,,,,,,,,
394,10,Cataluna,1961,4.57533547892566,8.23999977111816,2.89000010490417,41.6100006103516,5.550000190734861,37.2999992370605,4.42000007629395,,,,,,,
395,10,Cataluna,1962,4.83804641196265,,,,,,,,,,,,,
396,10,Cataluna,1963,5.0813340963686695,8.27999973297119,2.72000002861023,39.939998626709,6.42999982833862,38.8300018310547,3.7899999618530296,,,,,,,
397,10,Cataluna,1964,5.15809787814531,,,,,,,262.816864013672,2749.12109375,168.848922729492,55.7905082702637,29.5606575012207,,16.5614433288574
398,10,Cataluna,1965,5.22365052507319,6.76999998092651,2.85999989509583,40.290000915527294,7.28000020980835,38.8499984741211,3.9600000381469704,269.135833740234,2798.28125,181.37644958496102,58.4356880187988,30.5408153533936,,20.0388870239258
399,10,Cataluna,1966,5.33247650503874,,,,,,,275.247894287109,2851.96044921875,195.368789672852,61.460968017578104,31.597230911254897,,23.868471145629897
400,10,Cataluna,1967,5.429448920704581,5.69000005722046,2.9300000667572004,39.47999954223629,7.099999904632571,40.1300010681152,4.67000007629395,281.157318115234,2915.71752929688,211.56886291503898,64.8915252685547,32.8478584289551,,24.7314453125
401,10,Cataluna,1968,5.6743788535306905,,,,,,,286.868377685547,2966.74462890625,247.832916259766,68.53140258789061,33.6025543212891,,25.75998878479
402,10,Cataluna,1969,5.91552394419117,5.699999809265139,3.0,38.959999084472706,7.17000007629395,40.22999954223629,4.94000005722046,292.385131835938,3018.34545898438,285.996917724609,72.539794921875,36.098548889160206,153.11999511718798,24.162046432495103
403,10,Cataluna,1970,6.06683787193614,,,,,,,,,,,,,21.5039901733398
404,10,Cataluna,1971,6.22764920820614,,,,,,,,,,,,,20.951726913452102
405,10,Cataluna,1972,6.539060129025639,,,,,,,,,,,,,23.331222534179698
406,10,Cataluna,1973,6.837975056094461,,,,,,,,,,,,,24.659536361694304
407,10,Cataluna,1974,6.98736082380481,,,,,,,,,,,,,24.100830078125
408,10,Cataluna,1975,7.124893027215441,,,,,,,,,,,,,21.1886425018311
409,10,Cataluna,1976,7.1353898188687195,,,,,,,,,,,,,20.4112911224365
410,10,Cataluna,1977,7.142959067359099,,,,,,,,,,,,,18.507013320922898
411,10,Cataluna,1978,7.01935154409008,,,,,,,,,,,,,18.5064487457275
412,10,Cataluna,1979,7.01099691034147,,,,,,,,,,,,,17.6833438873291
413,10,Cataluna,1980,7.078834670981281,,,,,,,,,,,,,15.899486541747999
414,10,Cataluna,1981,7.182233560361099,,,,,,,,,,,,,13.670280456542999
415,10,Cataluna,1982,7.28720365609826,,,,,,,,,,,,,13.7905778884888
416,10,Cataluna,1983,7.397886318194799,,,,,,,,,,,,,15.848426818847699
417,10,Cataluna,1984,7.4842900284628495,,,,,,,,,,,,,13.6417980194092
418,10,Cataluna,1985,7.5699798313763,,,,,,,,,,,,,13.1108713150024
419,10,Cataluna,1986,8.07769173930216,,,,,,,,,,,,,14.9053049087524
420,10,Cataluna,1987,8.58397583251883,,,,,,,,,,,,,18.182672500610398
421,10,Cataluna,1988,9.057412342288359,,,,,,,,,,,,,17.6598262786865
422,10,Cataluna,1989,9.52584975721223,,,,,,,,,,,,,18.418958663940398
423,10,Cataluna,1990,9.785061759698118,,,,,,,,,,,,,18.870548248290998
424,10,Cataluna,1991,10.0506998000571,,,,,,,,,,,,,19.4772415161133
425,10,Cataluna,1992,9.83790310748268,,,,,,,,,,,,,21.094182968139602
426,10,Cataluna,1993,9.625107286589989,,,,,,,,,,,,,18.3188209533691
427,10,Cataluna,1994,10.006427083891198,,,,,,,,,,,,,17.802997589111303
428,10,Cataluna,1995,10.33990288489,,,,,,,,,,,,,18.380968093872102
429,10,Cataluna,1996,10.576263750256599,,,,,,,,,,,,,
430,10,Cataluna,1997,11.0454159442168,,,,,,,,,,,,,
431,11,Comunidad Valenciana,1955,2.57597822218206,,,,,,,,,,,,,
432,11,Comunidad Valenciana,1956,2.73850328477578,,,,,,,,,,,,,
433,11,Comunidad Valenciana,1957,2.89988579051354,,,,,,,,,,,,,
434,11,Comunidad Valenciana,1958,2.96351049532723,,,,,,,,,,,,,
435,11,Comunidad Valenciana,1959,3.02620685907542,,,,,,,,,,,,,
436,11,Comunidad Valenciana,1960,3.21929439140435,,,,,,,,,,,,,
437,11,Comunidad Valenciana,1961,3.3624679011911804,23.649999618530302,3.0199999809265097,27.6800003051758,4.53000020980835,36.180000305175795,4.96000003814697,,,,,,,
438,11,Comunidad Valenciana,1962,3.5699800231462904,,,,,,,,,,,,,
439,11,Comunidad Valenciana,1963,3.76521014922076,21.780000686645497,2.75,27.2099990844727,5.42000007629395,38.3300018310547,4.5,,,,,,,
440,11,Comunidad Valenciana,1964,3.8236930213019504,,,,,,,265.352386474609,1625.7536621093802,84.9697952270508,29.605535507202102,15.683203697204599,,19.6991195678711
441,11,Comunidad Valenciana,1965,3.8741786491527,18.270000457763697,2.5999999046325697,28.1800003051758,6.67000007629395,39.2400016784668,5.050000190734861,266.08099365234403,1650.5283203125,89.93311309814449,31.188289642334,16.073440551757802,,21.8730087280273
442,11,Comunidad Valenciana,1966,3.97814892592072,,,,,,,266.74658203125,1677.83056640625,95.4620513916016,32.992431640625,16.4965915679932,,24.026781082153303
443,11,Comunidad Valenciana,1967,4.0734076152628305,15.479999542236301,2.4300000667572,28.6399993896484,6.880000114440921,40.5,6.07000017166138,267.350677490234,1711.10729980469,101.888916015625,35.0352592468262,17.0129070281982,,24.6811904907227
444,11,Comunidad Valenciana,1968,4.27977739828241,,,,,,,267.894744873047,1738.71472167969,117.650833129883,37.2143325805664,17.2655029296875,,25.7572746276855
445,11,Comunidad Valenciana,1969,4.48628970126839,13.729999542236301,2.6900000572204603,28.5200004577637,7.349999904632571,41.069999694824205,6.639999866485599,268.380218505859,1766.76818847656,133.849853515625,39.6187858581543,18.4009895324707,128.699996948242,26.178804397582997
446,11,Comunidad Valenciana,1970,4.65474132809153,,,,,,,,,,,,,24.841054916381804
447,11,Comunidad Valenciana,1971,4.817123870718861,,,,,,,,,,,,,23.199651718139602
448,11,Comunidad Valenciana,1972,5.13888906322524,,,,,,,,,,,,,23.701726913452102
449,11,Comunidad Valenciana,1973,5.449371642979241,,,,,,,,,,,,,25.9421882629395
450,11,Comunidad Valenciana,1974,5.55798362507476,,,,,,,,,,,,,26.4274501800537
451,11,Comunidad Valenciana,1975,5.655955423868849,,,,,,,,,,,,,25.305294036865202
452,11,Comunidad Valenciana,1976,5.7613539511869405,,,,,,,,,,,,,24.5974979400635
453,11,Comunidad Valenciana,1977,5.86103991214564,,,,,,,,,,,,,23.189163208007802
454,11,Comunidad Valenciana,1978,5.81091123797219,,,,,,,,,,,,,22.090478897094698
455,11,Comunidad Valenciana,1979,5.77549262919858,,,,,,,,,,,,,20.749769210815398
456,11,Comunidad Valenciana,1980,5.790988079856651,,,,,,,,,,,,,21.211227416992198
457,11,Comunidad Valenciana,1981,5.8996715398558,,,,,,,,,,,,,19.3309440612793
458,11,Comunidad Valenciana,1982,6.0181378841536395,,,,,,,,,,,,,18.845811843872102
459,11,Comunidad Valenciana,1983,6.139817247388019,,,,,,,,,,,,,19.319688796997102
460,11,Comunidad Valenciana,1984,6.23686070511662,,,,,,,,,,,,,17.531343460083
461,11,Comunidad Valenciana,1985,6.336118234494389,,,,,,,,,,,,,17.120782852172898
462,11,Comunidad Valenciana,1986,6.73936039200853,,,,,,,,,,,,,18.4207916259766
463,11,Comunidad Valenciana,1987,7.14438731790917,,,,,,,,,,,,,19.7567386627197
464,11,Comunidad Valenciana,1988,7.560697292403059,,,,,,,,,,,,,22.3779983520508
465,11,Comunidad Valenciana,1989,7.9691516709511605,,,,,,,,,,,,,23.738317489624
466,11,Comunidad Valenciana,1990,8.138388683032531,,,,,,,,,,,,,24.6734676361084
467,11,Comunidad Valenciana,1991,8.30619788040471,,,,,,,,,,,,,22.7543029785156
468,11,Comunidad Valenciana,1992,8.080548240402301,,,,,,,,,,,,,21.461605072021502
469,11,Comunidad Valenciana,1993,7.8570411941454195,,,,,,,,,,,,,20.1841773986816
470,11,Comunidad Valenciana,1994,8.06840920032892,,,,,,,,,,,,,20.615167617797898
471,11,Comunidad Valenciana,1995,8.28906061716742,,,,,,,,,,,,,21.7886962890625
472,11,Comunidad Valenciana,1996,8.429734361610969,,,,,,,,,,,,,
473,11,Comunidad Valenciana,1997,8.72536435599873,,,,,,,,,,,,,
474,12,Extremadura,1955,1.24343048331057,,,,,,,,,,,,,
475,12,Extremadura,1956,1.3325478478317,,,,,,,,,,,,,
476,12,Extremadura,1957,1.4224507065712801,,,,,,,,,,,,,
477,12,Extremadura,1958,1.4402313799015,,,,,,,,,,,,,
478,12,Extremadura,1959,1.4580834221751398,,,,,,,,,,,,,
479,12,Extremadura,1960,1.5358469139606898,,,,,,,,,,,,,
480,12,Extremadura,1961,1.5962581639969502,46.5,1.60000002384186,10.6999998092651,7.9899997711181605,26.6100006103516,6.610000133514401,,,,,,,
481,12,Extremadura,1962,1.7055841624072798,,,,,,,,,,,,,
482,12,Extremadura,1963,1.8176949660936699,42.4500007629395,1.9700000286102302,10.970000267028801,8.18000030517578,30.1299991607666,6.30999994277954,,,,,,,
483,12,Extremadura,1964,1.8828192904008503,,,,,,,198.069030761719,713.5366821289059,20.4298152923584,9.42423725128174,4.34637928009033,,16.0566520690918
484,12,Extremadura,1965,1.9488718468133,37.5800018310547,2.9300000667572004,10.859999656677198,9.39000034332275,32.0,7.2600002288818395,189.69157409668,703.732543945312,21.3291072845459,10.051913261413599,4.4210057258606,,18.0707759857178
485,12,Extremadura,1966,2.0326334896921203,,,,,,,181.497375488281,695.0422973632809,22.3267841339111,10.763679504394501,4.50280570983887,,18.9422512054443
486,12,Extremadura,1967,2.11760916733054,33.0499992370605,3.1300001144409197,11.029999732971199,9.25,34.1100006103516,9.43000030517578,173.483093261719,688.875,23.493629455566396,11.5677585601807,4.60787534713745,,21.0937271118164
487,12,Extremadura,1968,2.24550122432932,,,,,,,165.645462036133,681.676818847656,26.737905502319304,12.432619094848599,4.639700889587401,,23.2899532318115
488,12,Extremadura,1969,2.3819623487876203,30.1599998474121,3.5999999046325697,10.869999885559098,9.03999996185303,35.75,10.5799999237061,157.981262207031,674.467956542969,29.9734573364258,13.3898468017578,4.90563201904297,28.969999313354503,23.983543395996104
489,12,Extremadura,1970,2.51849473322912,,,,,,,,,,,,,21.9763240814209
490,12,Extremadura,1971,2.65402751662192,,,,,,,,,,,,,20.9220218658447
491,12,Extremadura,1972,2.8464009236758194,,,,,,,,,,,,,21.5212917327881
492,12,Extremadura,1973,3.04562988978595,,,,,,,,,,,,,23.5006084442139
493,12,Extremadura,1974,3.10304190083525,,,,,,,,,,,,,22.9990043640137
494,12,Extremadura,1975,3.1567409834634304,,,,,,,,,,,,,23.875181198120103
495,12,Extremadura,1976,3.2625679423624505,,,,,,,,,,,,,25.086936950683604
496,12,Extremadura,1977,3.36539566227451,,,,,,,,,,,,,24.5106010437012
497,12,Extremadura,1978,3.48707502550889,,,,,,,,,,,,,26.264888763427702
498,12,Extremadura,1979,3.51585250893718,,,,,,,,,,,,,25.247013092041
499,12,Extremadura,1980,3.5395600733774706,,,,,,,,,,,,,36.3258094787598
500,12,Extremadura,1981,3.57276482842235,,,,,,,,,,,,,39.4098014831543
501,12,Extremadura,1982,3.61096824247202,,,,,,,,,,,,,36.092437744140604
502,12,Extremadura,1983,3.64895744073122,,,,,,,,,,,,,28.8806972503662
503,12,Extremadura,1984,3.73714635522663,,,,,,,,,,,,,28.9459609985352
504,12,Extremadura,1985,3.82847768243671,,,,,,,,,,,,,24.619384765625
505,12,Extremadura,1986,4.161739485565509,,,,,,,,,,,,,26.492696762085
506,12,Extremadura,1987,4.49857169714903,,,,,,,,,,,,,23.0931091308594
507,12,Extremadura,1988,4.76949430812737,,,,,,,,,,,,,23.0579814910889
508,12,Extremadura,1989,5.05141405608442,,,,,,,,,,,,,25.2050437927246
509,12,Extremadura,1990,5.234075838822839,,,,,,,,,,,,,27.055639266967802
510,12,Extremadura,1991,5.39831462774029,,,,,,,,,,,,,29.653051376342802
511,12,Extremadura,1992,5.36546704429315,,,,,,,,,,,,,28.14089012146
512,12,Extremadura,1993,5.33261946084601,,,,,,,,,,,,,24.5728073120117
513,12,Extremadura,1994,5.439874234454219,,,,,,,,,,,,,21.8011627197266
514,12,Extremadura,1995,5.501356563442809,,,,,,,,,,,,,24.2228889465332
515,12,Extremadura,1996,5.905812537796121,,,,,,,,,,,,,
516,12,Extremadura,1997,6.22457870923598,,,,,,,,,,,,,
517,13,Galicia,1955,1.63467579383708,,,,,,,,,,,,,
518,13,Galicia,1956,1.72557836258558,,,,,,,,,,,,,
519,13,Galicia,1957,1.8164810402942901,,,,,,,,,,,,,
520,13,Galicia,1958,1.84090251208918,,,,,,,,,,,,,
521,13,Galicia,1959,1.86539567970814,,,,,,,,,,,,,
522,13,Galicia,1960,1.9832904186973401,,,,,,,,,,,,,
523,13,Galicia,1961,2.00578416629847,33.25,5.26000022888184,17.4400005340576,5.82999992370605,31.4099998474121,6.80999994277954,,,,,,,
524,13,Galicia,1962,2.18566114376082,,,,,,,,,,,,,
525,13,Galicia,1963,2.3663954202259196,32.3800010681152,5.23999977111816,17.4400005340576,6.44000005722046,32.4300003051758,6.07000017166138,,,,,,,
526,13,Galicia,1964,2.45879739054746,,,,,,,235.295440673828,1684.7021484375,63.60566711425779,25.510450363159197,13.0256786346436,,15.586754798889197
527,13,Galicia,1965,2.5497000682561697,29.1700000762939,5.32999992370605,17.840000152587898,7.400000095367429,33.6300010681152,6.650000095367429,235.123489379883,1674.84020996094,67.2105178833008,26.8081111907959,13.1926946640015,,19.1050872802734
528,13,Galicia,1966,2.66966570516683,,,,,,,234.916793823242,1667.1708984375,71.2246398925781,28.289260864257802,13.377916336059599,,21.5290145874023
529,13,Galicia,1967,2.7878463557705597,26.530000686645497,5.17999982833862,18.229999542236303,7.360000133514401,34.7900009155273,7.92000007629395,234.676239013672,1664.8894042968802,75.8933563232422,29.967351913452102,13.628567695617699,,22.2095241546631
530,13,Galicia,1968,2.9783632986139,,,,,,,234.402770996094,1658.34289550781,87.4872055053711,31.753547668457,13.6594495773315,,22.6949615478516
531,13,Galicia,1969,3.1773778310131298,22.9799995422363,5.630000114440921,18.4599990844727,8.13000011444092,36.310001373291,8.48999977111816,234.097274780273,1651.6369628906198,99.365478515625,33.7229232788086,14.3740549087524,91.0199966430664,22.5122718811035
532,13,Galicia,1970,3.3619679917066096,,,,,,,,,,,,,21.0963020324707
533,13,Galicia,1971,3.53477584808358,,,,,,,,,,,,,21.0592098236084
534,13,Galicia,1972,3.78320471146079,,,,,,,,,,,,,22.6944522857666
535,13,Galicia,1973,4.0299913264179,,,,,,,,,,,,,23.034957885742198
536,13,Galicia,1974,4.1323908326694605,,,,,,,,,,,,,24.3730659484863
537,13,Galicia,1975,4.23100549675539,,,,,,,,,,,,,21.521507263183604
538,13,Galicia,1976,4.359040291641,,,,,,,,,,,,,22.540498733520497
539,13,Galicia,1977,4.48564683597655,,,,,,,,,,,,,22.460054397582997
540,13,Galicia,1978,4.5217078742011205,,,,,,,,,,,,,20.856554031372102
541,13,Galicia,1979,4.5574834366520305,,,,,,,,,,,,,19.8971176147461
542,13,Galicia,1980,4.5816909105768895,,,,,,,,,,,,,21.4147644042969
543,13,Galicia,1981,4.61875176777059,,,,,,,,,,,,,22.260314941406197
544,13,Galicia,1982,4.710797002335269,,,,,,,,,,,,,18.9320793151855
545,13,Galicia,1983,4.80634116745104,,,,,,,,,,,,,17.9381408691406
546,13,Galicia,1984,4.89931430724034,,,,,,,,,,,,,19.6235446929932
547,13,Galicia,1985,4.99778645135988,,,,,,,,,,,,,21.136173248290998
548,13,Galicia,1986,5.2779205592487,,,,,,,,,,,,,17.2311058044434
549,13,Galicia,1987,5.56576687143517,,,,,,,,,,,,,17.396068572998
550,13,Galicia,1988,5.90952590205812,,,,,,,,,,,,,18.439764022827102
551,13,Galicia,1989,6.254498749520231,,,,,,,,,,,,,20.4401321411133
552,13,Galicia,1990,6.453227806145789,,,,,,,,,,,,,21.5044841766357
553,13,Galicia,1991,6.641602591084469,,,,,,,,,,,,,21.5099925994873
554,13,Galicia,1992,6.5444872196113595,,,,,,,,,,,,,21.2633037567139
555,13,Galicia,1993,6.447514803945531,,,,,,,,,,,,,20.2256679534912
556,13,Galicia,1994,6.556483739718339,,,,,,,,,,,,,20.761928558349602
557,13,Galicia,1995,6.68866033044688,,,,,,,,,,,,,22.020811080932603
558,13,Galicia,1996,6.86246800579299,,,,,,,,,,,,,
559,13,Galicia,1997,7.13853179574251,,,,,,,,,,,,,
560,14,Madrid (Comunidad De),1955,4.594472815942099,,,,,,,,,,,,,
561,14,Madrid (Comunidad De),1956,4.78663244304641,,,,,,,,,,,,,
562,14,Madrid (Comunidad De),1957,4.96343913945904,,,,,,,,,,,,,
563,14,Madrid (Comunidad De),1958,4.90616964837613,,,,,,,,,,,,,
564,14,Madrid (Comunidad De),1959,4.84640104571127,,,,,,,,,,,,,
565,14,Madrid (Comunidad De),1960,5.16109689921183,,,,,,,,,,,,,
566,14,Madrid (Comunidad De),1961,5.632604813105849,2.41000008583069,2.4500000476837203,23.0799999237061,8.14000034332275,53.369998931884794,10.5600004196167,,,,,,,
567,14,Madrid (Comunidad De),1962,5.84083127825644,,,,,,,,,,,,,
568,14,Madrid (Comunidad De),1963,6.024492879963981,2.35999989509583,2.19000005722046,23.190000534057603,8.23999977111816,54.7400016784668,9.27999973297119,,,,,,,
569,14,Madrid (Comunidad De),1964,6.09932893754686,,,,,,,122.863471984863,1709.73864746094,220.303680419922,55.36328125,51.79325866699221,,14.728869438171401
570,14,Madrid (Comunidad De),1965,6.15202820120591,1.7699999809265101,2.07999992370605,24.9300003051758,8.67000007629395,51.7000007629395,10.8500003814697,127.15397644043001,1765.89123535156,233.303817749023,57.760772705078104,53.870365142822294,,15.7073917388916
571,14,Madrid (Comunidad De),1966,6.11046859449198,,,,,,,131.31326293945298,1826.0283203125,247.787292480469,60.510440826415994,56.101985931396506,,16.8277263641357
572,14,Madrid (Comunidad De),1967,6.057340899252,1.46000003814697,1.87000000476837,24.280000686645497,8.56999969482422,51.8199996948242,12.0100002288818,135.343994140625,1893.69494628906,264.619781494141,63.632286071777294,58.7012596130371,,16.7447471618652
573,14,Madrid (Comunidad De),1968,6.2531419768738,,,,,,,139.24880981445298,1944.68811035156,305.73028564453097,66.9298782348633,60.433292388915994,,15.958457946777301
574,14,Madrid (Comunidad De),1969,6.43558976174218,1.32000005245209,1.7799999713897698,23.690000534057603,8.17000007629395,51.939998626709006,13.109999656677198,143.030258178711,1996.40441894531,348.025024414062,70.555290222168,65.3297500610352,442.450012207031,17.4400634765625
575,14,Madrid (Comunidad De),1970,6.543344880675829,,,,,,,,,,,,,19.7359714508057
576,14,Madrid (Comunidad De),1971,6.67473565030527,,,,,,,,,,,,,16.3634643554688
577,14,Madrid (Comunidad De),1972,7.08690382895624,,,,,,,,,,,,,17.7570724487305
578,14,Madrid (Comunidad De),1973,7.47500748948961,,,,,,,,,,,,,19.0428199768066
579,14,Madrid (Comunidad De),1974,7.655669634289759,,,,,,,,,,,,,18.3821659088135
580,14,Madrid (Comunidad De),1975,7.816338014752481,,,,,,,,,,,,,16.296066284179698
581,14,Madrid (Comunidad De),1976,7.70708403904688,,,,,,,,,,,,,14.8248138427734
582,14,Madrid (Comunidad De),1977,7.59997178540506,,,,,,,,,,,,,15.1333360671997
583,14,Madrid (Comunidad De),1978,7.3900315939307495,,,,,,,,,,,,,14.932092666626
584,14,Madrid (Comunidad De),1979,7.32147992593634,,,,,,,,,,,,,14.467070579528801
585,14,Madrid (Comunidad De),1980,7.4171661751776305,,,,,,,,,,,,,12.1411733627319
586,14,Madrid (Comunidad De),1981,7.5321340247652495,,,,,,,,,,,,,10.5835418701172
587,14,Madrid (Comunidad De),1982,7.542845250129429,,,,,,,,,,,,,11.082971572876
588,14,Madrid (Comunidad De),1983,7.558554698657531,,,,,,,,,,,,,10.789205551147498
589,14,Madrid (Comunidad De),1984,7.699228443101081,,,,,,,,,,,,,9.3316707611084
590,14,Madrid (Comunidad De),1985,7.83918915187179,,,,,,,,,,,,,10.2985944747925
591,14,Madrid (Comunidad De),1986,8.347614967152241,,,,,,,,,,,,,11.6767740249634
592,14,Madrid (Comunidad De),1987,8.84961474455959,,,,,,,,,,,,,12.7537307739258
593,14,Madrid (Comunidad De),1988,9.25449871465296,,,,,,,,,,,,,13.909849166870101
594,14,Madrid (Comunidad De),1989,9.65795487003713,,,,,,,,,,,,,15.587666511535598
595,14,Madrid (Comunidad De),1990,9.80648421042649,,,,,,,,,,,,,15.4658737182617
596,14,Madrid (Comunidad De),1991,9.96358218243448,,,,,,,,,,,,,16.876277923584002
597,14,Madrid (Comunidad De),1992,9.84004570122822,,,,,,,,,,,,,16.3416538238525
598,14,Madrid (Comunidad De),1993,9.718651813767499,,,,,,,,,,,,,15.583446502685499
599,14,Madrid (Comunidad De),1994,9.88217669533035,,,,,,,,,,,,,17.076150894165
600,14,Madrid (Comunidad De),1995,10.098542924677801,,,,,,,,,,,,,17.134010314941403
601,14,Madrid (Comunidad De),1996,10.322764749971,,,,,,,,,,,,,
602,14,Madrid (Comunidad De),1997,10.73264781491,,,,,,,,,,,,,
603,15,Murcia (Region de),1955,1.67952011531164,,,,,,,,,,,,,
604,15,Murcia (Region de),1956,1.76428168611981,,,,,,,,,,,,,
605,15,Murcia (Region de),1957,1.85032844271056,,,,,,,,,,,,,
606,15,Murcia (Region de),1958,1.8873892999042698,,,,,,,,,,,,,
607,15,Murcia (Region de),1959,1.9240932034206701,,,,,,,,,,,,,
608,15,Murcia (Region de),1960,2.11860898629967,,,,,,,,,,,,,
609,15,Murcia (Region de),1961,2.30548404278465,23.850000381469698,9.85999965667725,19.4699993133545,5.23999977111816,34.7099990844727,6.880000114440921,,,,,,,
610,15,Murcia (Region de),1962,2.5214224943124504,,,,,,,,,,,,,
611,15,Murcia (Region de),1963,2.73907445424354,22.3400001525879,9.40999984741211,19.8899993896484,5.7399997711181605,35.819999694824205,6.78999996185303,,,,,,,
612,15,Murcia (Region de),1964,2.85125684479379,,,,,,,110.02625274658199,429.20654296875,24.416200637817397,8.23727226257324,4.2267751693725595,,16.863357543945302
613,15,Murcia (Region de),1965,2.96593834692599,18.520000457763697,11.1999998092651,19.8099994659424,6.5100002288818395,36.22999954223629,7.7399997711181605,108.333282470703,429.5390625,25.2321701049805,8.52175331115723,4.29338550567627,,18.2309856414795
614,15,Murcia (Region de),1966,3.0991860166068603,,,,,,,106.665687561035,430.465148925781,26.1326198577881,8.85069179534912,4.366624832153319,,24.4878005981445
615,15,Murcia (Region de),1967,3.2272922893961096,17.370000839233402,10.770000457763699,18.8600006103516,6.369999885559079,36.939998626709,9.69999980926514,105.023094177246,432.902587890625,27.1941242218018,9.22547721862793,4.462040424346919,,24.7873210906982
616,15,Murcia (Region de),1968,3.4611540431807404,,,,,,,103.405128479004,433.731048583984,30.591402053832997,9.61625862121582,4.48619937896729,,19.002290725708
617,15,Murcia (Region de),1969,3.7061554539104904,14.6800003051758,9.89999961853027,20.1900005340576,7.59000015258789,37.189998626709,10.4499998092651,101.81143951416,434.63644409179705,33.8780860900879,10.0437860488892,4.736140727996831,73.36000061035159,20.8658714294434
618,15,Murcia (Region de),1970,3.90638380314888,,,,,,,,,,,,,21.767267227172898
619,15,Murcia (Region de),1971,4.08647543224257,,,,,,,,,,,,,21.015216827392603
620,15,Murcia (Region de),1972,4.37946292340023,,,,,,,,,,,,,21.2000560760498
621,15,Murcia (Region de),1973,4.666952281909411,,,,,,,,,,,,,23.023460388183604
622,15,Murcia (Region de),1974,4.69780066325916,,,,,,,,,,,,,24.4522171020508
623,15,Murcia (Region de),1975,4.72272204453861,,,,,,,,,,,,,22.663860321044897
624,15,Murcia (Region de),1976,4.784347329334481,,,,,,,,,,,,,22.599706649780302
625,15,Murcia (Region de),1977,4.84454436358027,,,,,,,,,,,,,22.6332473754883
626,15,Murcia (Region de),1978,4.8646100416622,,,,,,,,,,,,,21.828205108642603
627,15,Murcia (Region de),1979,4.836403727701679,,,,,,,,,,,,,21.691747665405302
628,15,Murcia (Region de),1980,4.763210354379781,,,,,,,,,,,,,21.4614429473877
629,15,Murcia (Region de),1981,4.70808345704241,,,,,,,,,,,,,21.544963836669897
630,15,Murcia (Region de),1982,4.81112539274493,,,,,,,,,,,,,21.812520980835
631,15,Murcia (Region de),1983,4.90688355573073,,,,,,,,,,,,,20.5108871459961
632,15,Murcia (Region de),1984,5.03199080745345,,,,,,,,,,,,,17.9793586730957
633,15,Murcia (Region de),1985,5.15459851175334,,,,,,,,,,,,,18.2883014678955
634,15,Murcia (Region de),1986,5.4715080010622,,,,,,,,,,,,,19.261432647705103
635,15,Murcia (Region de),1987,5.78856044617832,,,,,,,,,,,,,21.543138504028303
636,15,Murcia (Region de),1988,6.12489274827728,,,,,,,,,,,,,23.6007595062256
637,15,Murcia (Region de),1989,6.45044278294929,,,,,,,,,,,,,26.3808155059814
638,15,Murcia (Region de),1990,6.578192102061241,,,,,,,,,,,,,27.4517707824707
639,15,Murcia (Region de),1991,6.71036825694891,,,,,,,,,,,,,25.577903747558604
640,15,Murcia (Region de),1992,6.66288208600556,,,,,,,,,,,,,23.1358852386475
641,15,Murcia (Region de),1993,6.616323820286841,,,,,,,,,,,,,21.1626472473145
642,15,Murcia (Region de),1994,6.7848473608544895,,,,,,,,,,,,,21.1073265075684
643,15,Murcia (Region de),1995,6.88581818071511,,,,,,,,,,,,,23.948043823242198
644,15,Murcia (Region de),1996,7.0454157001459405,,,,,,,,,,,,,
645,15,Murcia (Region de),1997,7.295058380362309,,,,,,,,,,,,,
646,16,Navarra (Comunidad Foral De),1955,2.55512715884189,,,,,,,,,,,,,
647,16,Navarra (Comunidad Foral De),1956,2.6981577128214504,,,,,,,,,,,,,
648,16,Navarra (Comunidad Foral De),1957,2.83983149415457,,,,,,,,,,,,,
649,16,Navarra (Comunidad Foral De),1958,2.88189079243263,,,,,,,,,,,,,
650,16,Navarra (Comunidad Foral De),1959,2.93087690975012,,,,,,,,,,,,,
651,16,Navarra (Comunidad Foral De),1960,3.1635246287751504,,,,,,,,,,,,,
652,16,Navarra (Comunidad Foral De),1961,3.3359040535711904,29.239999771118196,3.45000004768372,24.719999313354503,6.23000001907349,29.9099998474121,6.449999809265139,,,,,,,
653,16,Navarra (Comunidad Foral De),1962,3.6233934120803704,,,,,,,,,,,,,
654,16,Navarra (Comunidad Foral De),1963,3.89481571462283,29.7900009155273,2.79999995231628,26.0400009155273,6.46000003814697,29.5400009155273,5.369999885559079,,,,,,,
655,16,Navarra (Comunidad Foral De),1964,3.98514722286378,,,,,,,13.389813423156701,274.24786376953097,15.849164009094201,5.543560981750491,3.8682854175567596,,19.1858196258545
656,16,Navarra (Comunidad Foral De),1965,4.07297918368189,24.399999618530302,2.6800000667572,28.850000381469698,7.349999904632571,30.5699996948242,6.15999984741211,13.412804603576697,276.363555908203,17.104009628295902,5.885342597961429,3.9796304702758802,,21.209753036499
657,16,Navarra (Comunidad Foral De),1966,4.21001147760796,,,,,,,13.432971954345698,278.747283935547,18.5064468383789,6.273571968078611,4.09997081756592,,19.8447246551514
658,16,Navarra (Comunidad Foral De),1967,4.35239938421612,22.5200004577637,2.35999989509583,29.8199996948242,7.09000015258789,30.760000228881804,7.449999809265139,13.4503841400146,281.893890380859,20.1286563873291,6.71248388290405,4.24443912506104,,17.9839763641357
659,16,Navarra (Comunidad Foral De),1968,4.55698352716746,,,,,,,13.4651098251343,283.630767822266,23.6790332794189,7.183292388916019,4.32393074035645,,18.7410049438477
660,16,Navarra (Comunidad Foral De),1969,4.765709901802611,17.5699996948242,2.41000008583069,32.560001373291,7.78000020980835,31.559999465942397,8.11999988555908,13.4772138595581,285.131011962891,27.4383029937744,7.70386505126953,4.62594985961914,44.16999816894529,22.7656745910645
661,16,Navarra (Comunidad Foral De),1970,4.9794344996016795,,,,,,,,,,,,,22.24440574646
662,16,Navarra (Comunidad Foral De),1971,5.19965704901836,,,,,,,,,,,,,19.590524673461896
663,16,Navarra (Comunidad Foral De),1972,5.466795253671941,,,,,,,,,,,,,20.1721096038818
664,16,Navarra (Comunidad Foral De),1973,5.73050556983719,,,,,,,,,,,,,22.518383026123
665,16,Navarra (Comunidad Foral De),1974,5.98478995538105,,,,,,,,,,,,,25.008567810058604
666,16,Navarra (Comunidad Foral De),1975,6.22293646081588,,,,,,,,,,,,,27.484489440918
667,16,Navarra (Comunidad Foral De),1976,6.29777208255789,,,,,,,,,,,,,27.7473335266113
668,16,Navarra (Comunidad Foral De),1977,6.3844617044404695,,,,,,,,,,,,,24.1056308746338
669,16,Navarra (Comunidad Foral De),1978,6.32419319229104,,,,,,,,,,,,,22.790994644165
670,16,Navarra (Comunidad Foral De),1979,6.23964572831312,,,,,,,,,,,,,22.8123836517334
671,16,Navarra (Comunidad Foral De),1980,6.208440393286071,,,,,,,,,,,,,19.2924785614014
672,16,Navarra (Comunidad Foral De),1981,6.177877923550861,,,,,,,,,,,,,16.8062381744385
673,16,Navarra (Comunidad Foral De),1982,6.36203943474298,,,,,,,,,,,,,15.8658895492554
674,16,Navarra (Comunidad Foral De),1983,6.54470165332227,,,,,,,,,,,,,14.971141815185499
675,16,Navarra (Comunidad Foral De),1984,6.79720083463876,,,,,,,,,,,,,13.395903587341301
676,16,Navarra (Comunidad Foral De),1985,7.0477718559206295,,,,,,,,,,,,,15.864387512207001
677,16,Navarra (Comunidad Foral De),1986,7.44929985127017,,,,,,,,,,,,,17.9428825378418
678,16,Navarra (Comunidad Foral De),1987,7.879177552228381,,,,,,,,,,,,,19.5691547393799
679,16,Navarra (Comunidad Foral De),1988,8.34975756089778,,,,,,,,,,,,,20.5950679779053
680,16,Navarra (Comunidad Foral De),1989,8.80391334200273,,,,,,,,,,,,,22.3473205566406
681,16,Navarra (Comunidad Foral De),1990,9.19737217937732,,,,,,,,,,,,,23.6747093200684
682,16,Navarra (Comunidad Foral De),1991,9.59154492410651,,,,,,,,,,,,,23.568607330322298
683,16,Navarra (Comunidad Foral De),1992,9.34518674073033,,,,,,,,,,,,,25.5794525146484
684,16,Navarra (Comunidad Foral De),1993,9.117395378664131,,,,,,,,,,,,,23.4554958343506
685,16,Navarra (Comunidad Foral De),1994,9.36589528410409,,,,,,,,,,,,,25.159740447998
686,16,Navarra (Comunidad Foral De),1995,9.758640214124089,,,,,,,,,,,,,25.054317474365202
687,16,Navarra (Comunidad Foral De),1996,10.060697118066699,,,,,,,,,,,,,
688,16,Navarra (Comunidad Foral De),1997,10.522707623435698,,,,,,,,,,,,,
689,17,Basque Country (Pais Vasco),1955,3.8531846300052703,,,,,,,,,,,,,
690,17,Basque Country (Pais Vasco),1956,3.9456582961508797,,,,,,,,,,,,,
691,17,Basque Country (Pais Vasco),1957,4.03356173487263,,,,,,,,,,,,,
692,17,Basque Country (Pais Vasco),1958,4.02342189689665,,,,,,,,,,,,,
693,17,Basque Country (Pais Vasco),1959,4.01378196840523,,,,,,,,,,,,,
694,17,Basque Country (Pais Vasco),1960,4.28591839622273,,,,,,,,,,,,,
695,17,Basque Country (Pais Vasco),1961,4.57433609579741,7.96000003814697,4.730000019073491,44.2599983215332,5.53000020980835,33.5900001525879,3.9400000572204603,,,,,,,
696,17,Basque Country (Pais Vasco),1962,4.8989573535630395,,,,,,,,,,,,,
697,17,Basque Country (Pais Vasco),1963,5.197014981629129,8.10999965667725,4.25,44.4300003051758,5.92000007629395,33.8699989318848,3.4300000667572004,,,,,,,
698,17,Basque Country (Pais Vasco),1964,5.33890297875272,,,,,,,36.3632392883301,969.140014648438,67.9733352661133,21.691781997680696,12.2613000869751,,23.819152832031197
699,17,Basque Country (Pais Vasco),1965,5.4651530052518495,6.73000001907349,4.05000019073486,46.220001220703104,6.369999885559079,33.0,3.64000010490417,37.8310432434082,992.827880859375,74.1777114868164,23.062183380127,12.6866369247437,,25.460439682006804
700,17,Basque Country (Pais Vasco),1966,5.54591562706414,,,,,,,39.2548980712891,1018.1431274414099,81.12030029296879,24.617965698242198,13.1446952819824,,25.0173454284668
701,17,Basque Country (Pais Vasco),1967,5.6148957266394905,5.889999866485599,3.75,45.1100006103516,6.48000001907349,34.220001220703104,4.550000190734861,40.6356964111328,1046.98718261719,89.1361541748047,26.376422882080103,13.684739112853999,,23.4360332489014
702,17,Basque Country (Pais Vasco),1968,5.85218493307158,,,,,,,41.974311828613295,1070.11999511719,105.88878631591801,28.264331817627,14.0191659927368,,23.7783908843994
703,17,Basque Country (Pais Vasco),1969,6.08140541736959,5.53000020980835,3.75,45.3899993896484,6.449999809265139,34.0900001525879,4.800000190734861,43.271598815918,1093.23559570312,123.85572052001999,30.352464675903303,15.0817813873291,246.889999389648,26.3729362487793
704,17,Basque Country (Pais Vasco),1970,6.170094241349571,,,,,,,,,,,,,25.4970436096191
705,17,Basque Country (Pais Vasco),1971,6.28363340454625,,,,,,,,,,,,,22.716312408447298
706,17,Basque Country (Pais Vasco),1972,6.55555539865284,,,,,,,,,,,,,24.568805694580103
707,17,Basque Country (Pais Vasco),1973,6.810768561103081,,,,,,,,,,,,,23.0518627166748
708,17,Basque Country (Pais Vasco),1974,7.1051843028108,,,,,,,,,,,,,23.7866611480713
709,17,Basque Country (Pais Vasco),1975,7.377891682175631,,,,,,,,,,,,,19.8656044006348
710,17,Basque Country (Pais Vasco),1976,7.232933621922751,,,,,,,,,,,,,20.365642547607397
711,17,Basque Country (Pais Vasco),1977,7.0898313721191295,,,,,,,,,,,,,20.0888938903809
712,17,Basque Country (Pais Vasco),1978,6.786703607144611,,,,,,,,,,,,,18.5496139526367
713,17,Basque Country (Pais Vasco),1979,6.639817386857099,,,,,,,,,,,,,16.3017597198486
714,17,Basque Country (Pais Vasco),1980,6.56283917136956,,,,,,,,,,,,,16.5340042114258
715,17,Basque Country (Pais Vasco),1981,6.50078545499277,,,,,,,,,,,,,15.795607566833501
716,17,Basque Country (Pais Vasco),1982,6.545058606999559,,,,,,,,,,,,,14.4020538330078
717,17,Basque Country (Pais Vasco),1983,6.59532980113941,,,,,,,,,,,,,15.0416736602783
718,17,Basque Country (Pais Vasco),1984,6.76149675009149,,,,,,,,,,,,,14.7125797271729
719,17,Basque Country (Pais Vasco),1985,6.937160671727719,,,,,,,,,,,,,15.684075355529801
720,17,Basque Country (Pais Vasco),1986,7.33219115130052,,,,,,,,,,,,,16.3246994018555
721,17,Basque Country (Pais Vasco),1987,7.742788123594151,,,,,,,,,,,,,15.5889568328857
722,17,Basque Country (Pais Vasco),1988,8.120536640758889,,,,,,,,,,,,,16.8475723266602
723,17,Basque Country (Pais Vasco),1989,8.50971116232416,,,,,,,,,,,,,19.7838096618652
724,17,Basque Country (Pais Vasco),1990,8.776777889074099,,,,,,,,,,,,,19.934780120849602
725,17,Basque Country (Pais Vasco),1991,9.02527866619582,,,,,,,,,,,,,20.0072422027588
726,17,Basque Country (Pais Vasco),1992,8.87389282470633,,,,,,,,,,,,,19.9394264221191
727,17,Basque Country (Pais Vasco),1993,8.71822353908928,,,,,,,,,,,,,17.9752731323242
728,17,Basque Country (Pais Vasco),1994,9.018137849286369,,,,,,,,,,,,,17.893705368042
729,17,Basque Country (Pais Vasco),1995,9.440873861653369,,,,,,,,,,,,,19.266321182251
730,17,Basque Country (Pais Vasco),1996,9.686518137674948,,,,,,,,,,,,,
731,17,Basque Country (Pais Vasco),1997,10.1706658728087,,,,,,,,,,,,,
732,18,Rioja (La),1955,2.39045993834351,,,,,,,,,,,,,
733,18,Rioja (La),1956,2.5352042186467902,,,,,,,,,,,,,
734,18,Rioja (La),1957,2.6800199768537096,,,,,,,,,,,,,
735,18,Rioja (La),1958,2.72643528676517,,,,,,,,,,,,,
736,18,Rioja (La),1959,2.77285059667662,,,,,,,,,,,,,
737,18,Rioja (La),1960,2.96986570905801,,,,,,,,,,,,,
738,18,Rioja (La),1961,3.1531705750087005,32.720001220703104,3.08999991416931,27.5699996948242,4.34000015258789,26.2299995422363,6.050000190734861,,,,,,,
739,18,Rioja (La),1962,3.4043844615824104,,,,,,,,,,,,,
740,18,Rioja (La),1963,3.66923755252406,34.4300003051758,2.99000000953674,25.3899993896484,4.73999977111816,27.0699996948242,5.380000114440921,,,,,,,
741,18,Rioja (La),1964,3.8039847327381895,,,,,,,10.23792552948,151.320892333984,8.60982704162598,3.06339836120605,1.8116753101348897,,16.6301879882812
742,18,Rioja (La),1965,3.9218082117441897,31.9500007629395,3.0199999809265097,25.9599990844727,5.34999990463257,27.6399993896484,6.07999992370605,9.79054164886475,151.513656616211,8.87244129180908,3.16899657249451,1.77959680557251,,17.728284835815398
743,18,Rioja (La),1966,4.03270487171076,,,,,,,9.35300159454346,151.885833740234,9.16163349151611,3.29110646247864,1.74683582782745,,17.6105575561523
744,18,Rioja (La),1967,4.16031123501544,27.600000381469698,2.7899999618530296,27.030000686645497,5.650000095367429,29.510000228881804,7.42999982833862,8.92512512207031,152.711868286133,9.50362682342529,3.43024039268494,1.71896767616272,,16.5963726043701
745,18,Rioja (La),1968,4.37303644968625,,,,,,,8.50673580169678,152.956436157227,10.655009269714402,3.57529520988464,1.66027390956879,,18.966751098632802
746,18,Rioja (La),1969,4.60354179288618,24.9099998474121,2.5499999523162797,27.1100006103516,6.110000133514401,31.0499992370605,8.27999973297119,8.09766006469727,153.228103637695,11.757670402526902,3.73398232460022,1.67922723293304,46.58000183105471,20.8034381866455
747,18,Rioja (La),1970,4.7934163062785595,,,,,,,,,,,,,21.5658359527588
748,18,Rioja (La),1971,4.9833618617337,,,,,,,,,,,,,19.5932922363281
749,18,Rioja (La),1972,5.23007699878718,,,,,,,,,,,,,20.8908863067627
750,18,Rioja (La),1973,5.47464997793599,,,,,,,,,,,,,20.773138046264602
751,18,Rioja (La),1974,5.5758356673483895,,,,,,,,,,,,,23.3648471832275
752,18,Rioja (La),1975,5.67609257985442,,,,,,,,,,,,,22.532728195190398
753,18,Rioja (La),1976,5.81655232642794,,,,,,,,,,,,,31.175861358642603
754,18,Rioja (La),1977,5.9557982561623,,,,,,,,,,,,,36.6737174987793
755,18,Rioja (La),1978,6.06655239616248,,,,,,,,,,,,,39.0718536376953
756,18,Rioja (La),1979,6.10104266387059,,,,,,,,,,,,,31.2611522674561
757,18,Rioja (La),1980,6.10868339026461,,,,,,,,,,,,,25.491395950317397
758,18,Rioja (La),1981,6.13996020319529,,,,,,,,,,,,,19.747056961059602
759,18,Rioja (La),1982,6.30976860266486,,,,,,,,,,,,,19.5771312713623
760,18,Rioja (La),1983,6.502142227639201,,,,,,,,,,,,,17.3251037597656
761,18,Rioja (La),1984,6.62689252568463,,,,,,,,,,,,,17.8476257324219
762,18,Rioja (La),1985,6.7755639501995,,,,,,,,,,,,,16.5573043823242
763,18,Rioja (La),1986,7.16509586128294,,,,,,,,,,,,,16.6409587860107
764,18,Rioja (La),1987,7.58069105674049,,,,,,,,,,,,,18.5728778839111
765,18,Rioja (La),1988,8.002713161752888,,,,,,,,,,,,,21.577579498291
766,18,Rioja (La),1989,8.45329940608487,,,,,,,,,,,,,22.790969848632802
767,18,Rioja (La),1990,8.85889728353283,,,,,,,,,,,,,21.0927810668945
768,18,Rioja (La),1991,9.229505855469869,,,,,,,,,,,,,18.9119243621826
769,18,Rioja (La),1992,9.18094795181288,,,,,,,,,,,,,21.862037658691396
770,18,Rioja (La),1993,9.13239091983764,,,,,,,,,,,,,16.7657871246338
771,18,Rioja (La),1994,9.498000396929,,,,,,,,,,,,,16.4694519042969
772,18,Rioja (La),1995,9.75221330456923,,,,,,,,,,,,,20.2756500244141
773,18,Rioja (La),1996,10.0564128022574,,,,,,,,,,,,,
774,18,Rioja (La),1997,10.4762923135243,,,,,,,,,,,,,
================================================
FILE: examples/datasets/german_reunification.csv
================================================
code,country,year,gdp,infrate,trade,schooling,invest60,invest70,invest80,industry
1,USA,1960,2879,,9.693181,43.799999,,,,
1,USA,1961,2929,1.075182,9.4446545,,,,,
1,USA,1962,3103,1.116071,9.4293242,,,,,
1,USA,1963,3227,1.214128,9.470706,,,,,
1,USA,1964,3420,1.308615,9.7258787,,,,,
1,USA,1965,3667,1.668461,9.7303467,43.799999,,,,
1,USA,1966,3974,2.9909999,10.097592,,,,,
1,USA,1967,4154,2.775636,10.208102,,,,,
1,USA,1968,4494,4.217721,10.593937,,,,,
1,USA,1969,4805,5.414701,10.635633,,,,,
1,USA,1970,4999,5.8952961,11.388641,44.400002,,,,
1,USA,1971,5362,4.255929,11.367576,,,,,34.508629
1,USA,1972,5838,3.3056149,11.967158,,,,,34.44429
1,USA,1973,6464,6.2200642,13.713565,,,,,34.37521
1,USA,1974,6951,11.03526,17.316135,,,,,34.03606
1,USA,1975,7519,9.1319304,16.37969,42.599998,,,,33.22567
1,USA,1976,8300,5.7370272,16.873659,,,,,33.760849
1,USA,1977,9146,6.4864602,17.220591,,,,,34.264641
1,USA,1978,10229,7.6474638,17.80619,,,,,34.037231
1,USA,1979,11306,11.26604,19.280546,,,,,33.62648
1,USA,1980,12186,13.50937,21.081579,62.900002,0.23884,0.24568,22.375999,33.514389
1,USA,1981,13533,10.31553,20.363241,,,,,34.08828
1,USA,1982,13940,6.1606159,18.471621,,,,,32.909691
1,USA,1983,15008,3.212435,17.624308,,,,,31.497219
1,USA,1984,16549,4.3172688,18.577013,,,,,31.87278
1,USA,1985,17600,3.561116,17.642408,57.400002,,,,30.864519
1,USA,1986,18439,1.858736,17.954124,,,,,29.44326
1,USA,1987,19407,3.740876,19.116186,,,,,29.19973
1,USA,1988,20711,4.009088,20.330818,,,,,29.606489
1,USA,1989,22047,4.827003,20.730293,,,,,28.61904
1,USA,1990,23064,5.3979559,21.18795,44.400002,,,,27.850321
1,USA,1991,23507,4.2349639,21.26635,,,,,26.62006
1,USA,1992,24509,3.02882,21.54221,,,,,25.72843
1,USA,1993,25409,2.9516571,21.55765,,,,,25.61001
1,USA,1994,26670,2.6074419,22.618219,,,,,26.082951
1,USA,1995,27574,2.8054199,24.273979,44.599998,,,,26.29285
1,USA,1996,28814,2.9312041,24.58247,,,,,25.7854
1,USA,1997,30262,2.3376901,25.591539,,,,,25.384291
1,USA,1998,31519,1.552279,24.690569,,,,,25.018841
1,USA,1999,33028,2.1880269,,,,,,24.72505
1,USA,2000,34603,3.376857,,39.599998,,,,24.443489
1,USA,2001,35341,2.8261709,,,,,,23.04858
1,USA,2002,36180,1.586032,,,,,,
1,USA,2003,37548,2.2700951,,,,,,
2,UK,1960,2158,,43.25547,24.5,,,,
2,UK,1961,2216,3.5794179,41.533241,,,,,
2,UK,1962,2276,4.103672,40.404633,,,,,
2,UK,1963,2386,2.0746889,40.406586,,,,,
2,UK,1964,2534,3.2113819,40.518764,,,,,
2,UK,1965,2660,4.8050408,39.225338,26.5,,,,
2,UK,1966,2794,3.9083049,38.964634,,,,,
2,UK,1967,2923,2.423146,39.313187,,,,,
2,UK,1968,3173,4.731638,43.665131,,,,,
2,UK,1969,3391,5.4619021,44.038982,,,,,
2,UK,1970,3615,6.3618932,45.247738,28.9,,,,
2,UK,1971,3854,9.4078751,44.933399,,,,,43.07859
2,UK,1972,4149,7.0879121,43.559044,,,,,42.560081
2,UK,1973,4683,9.2098513,49.803581,,,,,42.135399
2,UK,1974,5036,15.90322,60.96212,,,,,41.623749
2,UK,1975,5481,24.235081,53.562061,31,,,,40.488178
2,UK,1976,5953,16.532551,58.169788,,,,,41.08992
2,UK,1977,6489,15.88198,59.420418,,,,,41.33041
2,UK,1978,7176,8.2159624,55.656792,,,,,41.465809
2,UK,1979,7973,13.46571,55.690353,,,,,41.823872
2,UK,1980,8502,17.970591,52.326874,32.900002,0.2008,0.22601999,17.587999,42.346298
2,UK,1981,9161,11.87983,50.51421,,,,,41.894661
2,UK,1982,9917,8.5905294,50.752407,,,,,41.491692
2,UK,1983,10669,4.607018,52.091301,,,,,40.901451
2,UK,1984,11336,4.9534092,57.00433,,,,,40.382359
2,UK,1985,12068,6.0654211,56.622364,35.700001,,,,39.762779
2,UK,1986,12795,3.4276149,52.056396,,,,,39.134338
2,UK,1987,13717,4.1489182,51.936165,,,,,38.030521
2,UK,1988,14864,4.9079762,49.649181,,,,,37.21299
2,UK,1989,15716,7.7972708,51.64563,,,,,36.629669
2,UK,1990,16397,9.4755878,51.467461,38.5,,,,35.17424
2,UK,1991,16681,5.853981,48.209381,,,,,33.12701
2,UK,1992,17069,3.7326009,49.349758,,,,,31.889669
2,UK,1993,17845,1.564474,52.593632,,,,,31.270929
2,UK,1994,18975,2.47645,54.257759,,,,,31.693331
2,UK,1995,19860,3.410996,57.896839,39.900002,,,,31.996481
2,UK,1996,20923,2.4487059,59.849579,,,,,31.86726
2,UK,1997,22280,3.132333,57.84053,,,,,31.074129
2,UK,1998,23206,3.41817,55.989063,,,,,29.46092
2,UK,1999,23959,1.555385,,,,,,28.59877
2,UK,2000,25583,2.9270999,,39.099998,,,,28.47661
2,UK,2001,27026,1.820852,,,,,,27.475519
2,UK,2002,28969,1.6344579,,,,,,26.990379
2,UK,2003,29609,2.9136319,,,,,,26.59016
3,Austria,1960,1796,,48.126095,48.700001,,,,
3,Austria,1961,1899,3.5422561,46.525959,,,,,
3,Austria,1962,1977,4.3817849,47.171013,,,,,
3,Austria,1963,2074,2.70877,47.977253,,,,,
3,Austria,1964,2224,3.868571,48.415096,,,,,
3,Austria,1965,2336,4.9309111,49.6133,47.599998,,,,
3,Austria,1966,2537,2.2058821,50.31641,,,,,
3,Austria,1967,2668,3.9749999,49.683853,,,,,
3,Austria,1968,2908,2.773103,50.410915,,,,,
3,Austria,1969,3239,3.0804019,54.232513,,,,,
3,Austria,1970,3732,4.3728251,59.711964,46.5,,,,
3,Austria,1971,4100,4.7042618,59.185368,,,,,41.21851
3,Austria,1972,4513,6.3620629,59.090919,,,,,41.525631
3,Austria,1973,4969,7.5240822,59.262428,,,,,42.23682
3,Austria,1974,5622,9.5217915,64.811729,,,,,42.260269
3,Austria,1975,6147,8.4452553,61.598152,45.599998,,,,40.128139
3,Austria,1976,6810,7.3186889,65.170868,,,,,39.3979
3,Austria,1977,7588,5.4749999,65.209686,,,,,39.05883
3,Austria,1978,8117,3.579047,64.740669,,,,,39.235649
3,Austria,1979,9288,3.707094,69.698715,,,,,38.1772
3,Austria,1980,10312,6.3253899,73.995857,61.799999,0.26337999,0.31104001,26.642,38.09647
3,Austria,1981,11242,6.8068619,76.079674,,,,,37.830849
3,Austria,1982,12148,5.440414,71.684555,,,,,36.904591
3,Austria,1983,13048,3.335381,70.534111,,,,,36.410431
3,Austria,1984,13533,5.6648641,75.512695,,,,,35.23595
3,Austria,1985,14296,3.1896939,79.065735,60,,,,35.582439
3,Austria,1986,14921,1.7009211,70.925285,,,,,35.291531
3,Austria,1987,15549,1.4,69.633995,,,,,34.791962
3,Austria,1988,16595,1.931295,74.935471,,,,,34.583389
3,Austria,1989,17768,2.5638959,78.906845,,,,,34.11145
3,Austria,1990,19070,3.2623219,79.029663,57.900002,,,,34.110531
3,Austria,1991,20172,3.334348,78.769096,,,,,33.98061
3,Austria,1992,20960,4.0297632,76.002907,,,,,33.033249
3,Austria,1993,21220,3.6258061,73.35833,,,,,32.18623
3,Austria,1994,22139,2.959065,75.149643,,,,,32.138279
3,Austria,1995,22976,2.2500999,77.784943,55.700001,,,,32.44965
3,Austria,1996,24008,1.843557,80.743919,,,,,32.29562
3,Austria,1997,24472,1.325,85.257927,,,,,32.726978
3,Austria,1998,25314,0.90467972,,,,,,32.84259
3,Austria,1999,26558,0.56239301,,,,,,32.900028
3,Austria,2000,28359,2.350462,,55,,,,32.774849
3,Austria,2001,28855,2.6599619,,,,,,32.168598
3,Austria,2002,29942,1.810212,,,,,,31.984779
3,Austria,2003,30796,1.3634191,,,,,,31.737129
4,Belgium,1960,1782,,77.341782,27.1,,,,
4,Belgium,1961,1883,0.98314607,80.016273,,,,,
4,Belgium,1962,2018,1.404729,82.437759,,,,,
4,Belgium,1963,2122,2.1533401,85.66539,,,,,
4,Belgium,1964,2288,4.1756182,86.620453,,,,,
4,Belgium,1965,2414,4.0598021,85.261909,28.5,,,,
4,Belgium,1966,2559,4.173892,89.370125,,,,,
4,Belgium,1967,2719,2.912852,86.239647,,,,,
4,Belgium,1968,2958,2.7033269,90.623016,,,,,
4,Belgium,1969,3308,3.7457819,97.949638,,,,,
4,Belgium,1970,3797,3.9141281,100.42813,28.700001,,,,
4,Belgium,1971,4129,4.3405681,97.975098,,,,,42.50227
4,Belgium,1972,4512,5.4475002,97.54892,,,,,41.944149
4,Belgium,1973,5039,6.9552779,107.77507,,,,,42.515091
4,Belgium,1974,5707,12.67789,120.51753,,,,,43.293011
4,Belgium,1975,6146,12.7682,104.77955,30.299999,,,,40.01701
4,Belgium,1976,6854,9.1587,110.8381,,,,,40.133949
4,Belgium,1977,7326,7.1108479,109.5376,,,,,39.495281
4,Belgium,1978,8056,4.4705949,105.68562,,,,,38.45702
4,Belgium,1979,8921,4.4690838,116.28985,,,,,38.20924
4,Belgium,1980,10156,6.6509752,117.16876,31.6,0.26864001,0.28246,21.875999,36.84375
4,Belgium,1981,11079,7.628274,126.35263,,,,,34.465172
4,Belgium,1982,11827,8.7258511,134.42366,,,,,34.4062
4,Belgium,1983,12334,7.6633701,137.18913,,,,,34.140591
4,Belgium,1984,13113,6.347517,146.64285,,,,,33.48085
4,Belgium,1985,13735,4.8676758,140.55513,32.599998,,,,34.213501
4,Belgium,1986,14292,1.295501,126.71104,,,,,33.229149
4,Belgium,1987,15013,1.5544831,122.64662,,,,,32.101799
4,Belgium,1988,16209,1.162051,129.20561,,,,,32.88089
4,Belgium,1989,17345,3.1054499,138.38467,,,,,33.229431
4,Belgium,1990,18526,3.4528229,134.00658,32.599998,,,,32.664299
4,Belgium,1991,19453,3.2085519,130.8264,,,,,30.661619
4,Belgium,1992,20123,2.429914,126.43597,,,,,30.110929
4,Belgium,1993,20308,2.753963,120.23799,,,,,28.998671
4,Belgium,1994,21340,2.377799,125.53788,,,,,28.923639
4,Belgium,1995,22248,1.466814,129.36067,30.5,,,,29.53443
4,Belgium,1996,22687,2.058919,131.87495,,,,,29.14131
4,Belgium,1997,23416,1.627459,141.31438,,,,,29.257811
4,Belgium,1998,24164,0.95362258,149.6824,,,,,28.63953
4,Belgium,1999,24792,1.119242,,,,,,27.95392
4,Belgium,2000,26631,2.5462461,,28,,,,28.08952
4,Belgium,2001,28001,2.4712729,,,,,,27.25738
4,Belgium,2002,29330,1.643454,,,,,,27.01092
4,Belgium,2003,30082,1.5913121,,,,,,26.484779
5,Denmark,1960,2329,,65.782196,46.099998,,,,
5,Denmark,1961,2485,3.4516289,61.540672,,,,,
5,Denmark,1962,2665,7.37782,60.337379,,,,,
5,Denmark,1963,2700,6.1050329,60.416042,,,,,
5,Denmark,1964,2980,3.092783,61.678101,,,,,
5,Denmark,1965,3177,5.4499998,61.388741,45.5,,,,
5,Denmark,1966,3377,7.06496,59.872742,,,,,
5,Denmark,1967,3580,8.2078533,57.854729,,,,,
5,Denmark,1968,3892,7.9536152,57.879894,,,,,
5,Denmark,1969,4352,3.487931,58.468327,,,,,
5,Denmark,1970,4541,6.5148368,60.321808,44.5,,,,
5,Denmark,1971,4858,5.8698769,58.494747,,,,,31.78034
5,Denmark,1972,5262,6.5623479,54.942623,,,,,31.531469
5,Denmark,1973,5719,9.3033886,60.465103,,,,,30.284731
5,Denmark,1974,6121,15.2752,68.138985,,,,,29.58704
5,Denmark,1975,6565,9.6056137,62.650646,44.900002,,,,29.250561
5,Denmark,1976,7371,9,63.949295,,,,,28.24987
5,Denmark,1977,7901,11.13914,62.842953,,,,,28.02203
5,Denmark,1978,8585,10.00894,59.208858,,,,,27.56307
5,Denmark,1979,9566,9.6110554,62.885948,,,,,26.88064
5,Denmark,1980,10362,12.30532,68.160645,43.400002,0.29344001,0.33284,22.217999,28.233141
5,Denmark,1981,11106,11.79159,74.18737,,,,,26.577101
5,Denmark,1982,12115,10.08994,74.134293,,,,,26.75725
5,Denmark,1983,12822,6.9073091,72.488731,,,,,26.989759
5,Denmark,1984,13777,6.3220792,73.978584,,,,,27.290581
5,Denmark,1985,14698,4.652379,74.850471,42.5,,,,27.62063
5,Denmark,1986,15608,3.7212789,66.168907,,,,,28.24608
5,Denmark,1987,16024,3.9850709,62.581482,,,,,27.91802
5,Denmark,1988,16766,4.5501909,63.532341,,,,,27.08609
5,Denmark,1989,17418,4.7840528,67.066689,,,,,27.020679
5,Denmark,1990,18237,2.6527159,66.584679,49.900002,,,,26.544291
5,Denmark,1991,19070,2.36796,68.532112,,,,,26.169559
5,Denmark,1992,19829,2.1019809,66.430893,,,,,26.345341
5,Denmark,1993,20199,1.250985,63.976089,,,,,25.190121
5,Denmark,1994,21691,1.994357,65.612671,,,,,25.311541
5,Denmark,1995,22693,2.0984361,66.717857,47,,,,25.757509
5,Denmark,1996,23781,2.1113601,66.073807,,,,,25.95113
5,Denmark,1997,24878,2.195791,68.587067,,,,,26.045151
5,Denmark,1998,25669,1.853178,,,,,,26.000641
5,Denmark,1999,27113,2.4786849,,,,,,26.2223
5,Denmark,2000,28798,2.9247789,,46.5,,,,27.18491
5,Denmark,2001,29837,2.3499999,,,,,,26.28203
5,Denmark,2002,30318,2.4263151,,,,,,26.400669
5,Denmark,2003,30853,2.09062,,,,,,26.40539
6,France,1960,1858,,26.919622,25.700001,,,,
6,France,1961,1959,2.414562,26.21155,,,,,
6,France,1962,2099,5.2472501,24.89856,,,,,
6,France,1963,2205,4.9396901,25.005909,,,,,
6,France,1964,2367,3.2293379,25.622961,,,,,
6,France,1965,2526,2.71474,25.749504,25.799999,,,,
6,France,1966,2728,2.5707209,26.475941,,,,,
6,France,1967,2915,2.8183191,26.188457,,,,,
6,France,1968,3163,4.5521288,26.57132,,,,,
6,France,1969,3531,6.0393262,28.73958,,,,,
6,France,1970,3857,5.8454752,31.085831,26,,,,
6,France,1971,4203,5.3975139,31.760962,,,,,38.649269
6,France,1972,4535,6.063004,32.391918,,,,,38.697899
6,France,1973,5008,7.3805971,34.279339,,,,,37.94067
6,France,1974,5594,13.64932,42.390965,,,,,37.567768
6,France,1975,6077,11.68593,36.927505,26.799999,,,,37.66209
6,France,1976,6673,9.625493,39.892372,,,,,37.490768
6,France,1977,7292,9.4945564,40.849865,,,,,36.88102
6,France,1978,8031,9.2505589,39.488529,,,,,36.230061
6,France,1979,8948,10.64674,41.879051,,,,,35.840729
6,France,1980,9891,13.53911,44.269318,34.5,0.27805999,0.32870001,27.236,36.0303
6,France,1981,10929,13.33333,46.10194,,,,,35.172989
6,France,1982,11869,11.97848,45.501305,,,,,34.09864
6,France,1983,12518,9.459548,45.127838,,,,,33.51458
6,France,1984,13145,7.6738029,47.646427,,,,,33.121159
6,France,1985,13746,5.831099,47.159176,36.299999,,,,32.787128
6,France,1986,14308,2.538527,41.344673,,,,,31.803949
6,France,1987,14940,3.288898,41.144371,,,,,30.94018
6,France,1988,16040,2.7008171,42.526455,,,,,30.74395
6,France,1989,17193,3.498302,45.686443,,,,,30.22196
6,France,1990,18244,3.3800571,45.130569,36.900002,,,,29.69998
6,France,1991,19021,3.2169349,45.04747,,,,,29.520161
6,France,1992,19746,2.3657651,44.026119,,,,,29.157129
6,France,1993,19920,2.10601,41.841209,,,,,27.45125
6,France,1994,20695,1.6608731,43.401379,,,,,27.18095
6,France,1995,21545,1.778116,44.69141,37.299999,,,,27.2759
6,France,1996,22288,2.0083621,45.604462,,,,,26.606609
6,France,1997,23370,1.200322,49.360401,,,,,26.041229
6,France,1998,24412,0.67259711,,,,,,25.945641
6,France,1999,25111,0.5,,,,,,25.49264
6,France,2000,26690,1.691542,,37.299999,,,,25.48119
6,France,2001,28043,1.6634049,,,,,,25.501699
6,France,2002,28829,1.9249279,,,,,,25.308121
6,France,2003,29210,2.1010389,,,,,,24.47357
7,West Germany,1960,2284,,35.459682,61,,,,44.987244
7,West Germany,1961,2388,2.5157232,33.836784,,,,,
7,West Germany,1962,2527,2.7607362,33.466377,,,,,
7,West Germany,1963,2610,2.9850745,34.160629,,,,,
7,West Germany,1964,2806,2.3188405,34.566139,,,,,
7,West Germany,1965,3005,3.3994334,35.816799,58.900002,,,,
7,West Germany,1966,3168,3.5616438,36.628227,,,,,
7,West Germany,1967,3241,1.5873016,37.226662,,,,,
7,West Germany,1968,3571,1.0416666,39.09016,,,,,
7,West Germany,1969,3998,2.0618556,40.571236,,,,,
7,West Germany,1970,4367,3.2828283,40.318378,57,,,,38.217014
7,West Germany,1971,4686,5.1344743,39.739914,,,,,48.001259
7,West Germany,1972,5055,5.3488374,39.230003,,,,,46.946892
7,West Germany,1973,5553,6.843267,40.75988,,,,,46.534359
7,West Germany,1974,6074,6.818182,48.393688,,,,,45.70887
7,West Germany,1975,6603,5.9961314,46.457829,46.799999,,,,43.37009
7,West Germany,1976,7367,4.3795619,49.103081,,,,,43.613609
7,West Germany,1977,8090,3.4965036,48.564785,,,,,43.166019
7,West Germany,1978,8928,2.5337837,47.071793,,,,,42.96508
7,West Germany,1979,10067,3.7891269,49.485752,,,,,43.08099
7,West Germany,1980,11083,5.2380953,53.336185,52.5,0.33737999,0.32563999,27.017998,36.04203
7,West Germany,1981,12115,6.3348417,56.67342,,,,,35.423489
7,West Germany,1982,12761,5.3900709,57.341839,,,,,34.778473
7,West Germany,1983,13519,3.2301481,55.482639,,,,,35.085144
7,West Germany,1984,14481,2.3468058,58.791813,,,,,34.51585
7,West Germany,1985,15291,2.0382166,61.519432,58.5,,,,34.851387
7,West Germany,1986,15998,-0.2496879,55.117413,,,,,34.366795
7,West Germany,1987,16679,0.12515645,52.914875,,,,,34.090187
7,West Germany,1988,17786,1.125,53.910343,,,,,33.772335
7,West Germany,1989,18994,2.8430161,57.664852,,,,,33.96273
7,West Germany,1990,20465,2.7644231,58.3615,56.200001,,,,
7,West Germany,1991,21602,3.7426901,,,,,,
7,West Germany,1992,22154,4.0586247,,,,,,
7,West Germany,1993,21878,3.6836402,,,,,,
7,West Germany,1994,22371,2.8213167,,,,,,
7,West Germany,1995,23035,1.6260163,,,,,,
7,West Germany,1996,23742,1.3,,,,,,
7,West Germany,1997,24156,1.7769003,,,,,,
7,West Germany,1998,24931,0.87293887,,,,,,
7,West Germany,1999,25755,0.67307693,,,,,,
7,West Germany,2000,26943,,,,,,,
7,West Germany,2001,27449,,,,,,,
7,West Germany,2002,28348,,,,,,,
7,West Germany,2003,28855,,,,,,,
8,Italy,1960,1620,,26.573429,13.9,,,,
8,Italy,1961,1763,2.702703,26.883282,,,,,
8,Italy,1962,1900,3.9473679,27.117237,,,,,
8,Italy,1963,2021,7.5949368,27.785471,,,,,
8,Italy,1964,2093,5.8823528,26.755199,,,,,
8,Italy,1965,2205,4.4444451,27.677755,14.1,,,,
8,Italy,1966,2400,3.191489,29.030056,,,,,
8,Italy,1967,2624,3.092783,29.300257,,,,,
8,Italy,1968,2910,2,29.876673,,,,,
8,Italy,1969,3227,1.960784,31.844769,,,,,
8,Italy,1970,3602,4.807693,32.854187,17.5,,,,
8,Italy,1971,3834,5.5045872,33.224659,,,,,40.38538
8,Italy,1972,4101,5.217391,34.73354,,,,,39.51487
8,Italy,1973,4594,10.7438,36.741856,,,,,40.68504
8,Italy,1974,5240,19.402981,44.558479,,,,,42.32259
8,Italy,1975,5601,16.875,41.324772,18.6,,,,41.31369
8,Italy,1976,6288,16.577539,45.425701,,,,,42.21162
8,Italy,1977,6821,17.43119,45.851334,,,,,41.67762
8,Italy,1978,7542,12.10938,45.114742,,,,,41.045071
8,Italy,1979,8594,14.63415,47.706306,,,,,40.675709
8,Italy,1980,9643,21.2766,46.654396,29.200001,0.37278,0.32451999,26.728001,40.379559
8,Italy,1981,10593,17.794491,48.836246,,,,,39.038651
8,Italy,1982,11275,16.38298,47.112198,,,,,38.13298
8,Italy,1983,11812,14.62523,43.484116,,,,,36.95853
8,Italy,1984,12543,10.84529,45.805889,,,,,36.528419
8,Italy,1985,13285,9.2086334,46.108475,30.299999,,,,36.099941
8,Italy,1986,13896,5.797101,38.941029,,,,,34.896999
8,Italy,1987,14688,4.732254,38.368252,,,,,34.578098
8,Italy,1988,15784,5.1129608,37.962685,,,,,34.441071
8,Italy,1989,16875,6.2217188,40.167339,,,,,34.55434
8,Italy,1990,17946,6.496273,40.0452,31.5,,,,33.897999
8,Italy,1991,18845,6.3000002,37.988586,,,,,32.910801
8,Italy,1992,19367,5.0799618,39.345406,,,,,32.388691
8,Italy,1993,19778,4.4762759,42.431316,,,,,31.35425
8,Italy,1994,20577,4.027421,45.074287,,,,,31.301359
8,Italy,1995,21532,5.2443709,51.247398,32.400002,,,,31.501289
8,Italy,1996,22235,3.974524,48.172119,,,,,30.502131
8,Italy,1997,22810,2.0431061,50.315632,,,,,30.06423
8,Italy,1998,23840,1.96294,,,,,,29.91003
8,Italy,1999,24402,1.655629,,,,,,29.311411
8,Italy,2000,25759,2.5376871,,32,,,,29.04274
8,Italy,2001,26586,2.785166,,,,,,28.742929
8,Italy,2002,27320,2.4653201,,,,,,28.28014
8,Italy,2003,27537,2.672559,,,,,,27.804819
9,Netherlands,1960,2113,,90.887093,11.1,,,,
9,Netherlands,1961,2111,1.732093,88.212914,,,,,
9,Netherlands,1962,2275,2.2860379,86.703773,,,,,
9,Netherlands,1963,2360,3.343184,87.91217,,,,,
9,Netherlands,1964,2566,5.790884,86.539818,,,,,
9,Netherlands,1965,2739,5.794898,83.929771,13.6,,,,
9,Netherlands,1966,2874,5.7968702,82.381424,,,,,
9,Netherlands,1967,3078,3.486793,79.591179,,,,,
9,Netherlands,1968,3399,3.6756129,79.654465,,,,,
9,Netherlands,1969,3951,7.4282498,82.784653,,,,,
9,Netherlands,1970,4342,3.6799369,88.73793,45.799999,,,,
9,Netherlands,1971,4705,7.4775801,88.536026,,,,,37.20113
9,Netherlands,1972,4984,7.79175,84.717201,,,,,36.960201
9,Netherlands,1973,5475,8.0135193,88.922119,,,,,36.77002
9,Netherlands,1974,6165,9.6093674,102.14023,,,,,36.934269
9,Netherlands,1975,6699,10.21273,93.638176,44.299999,,,,35.57053
9,Netherlands,1976,7345,9.0574865,95.766205,,,,,35.763512
9,Netherlands,1977,7959,6.474103,91.196617,,,,,35.207821
9,Netherlands,1978,8676,4.0800171,87.713753,,,,,34.131889
9,Netherlands,1979,9504,4.210454,96.286804,,,,,34.084469
9,Netherlands,1980,10458,6.7333202,102.65746,44.099998,0.29368001,0.30778,21.84,34.517979
9,Netherlands,1981,11304,6.748466,109.61195,,,,,34.746471
9,Netherlands,1982,11784,5.8620691,107.3393,,,,,34.068932
9,Netherlands,1983,12419,2.823019,106.94978,,,,,33.90657
9,Netherlands,1984,13234,3.273495,114.40473,,,,,34.551781
9,Netherlands,1985,13938,2.2239261,116.79983,44.700001,,,,34.86816
9,Netherlands,1986,14613,0.100025,97.608826,,,,,32.419331
9,Netherlands,1987,15197,-0.70780247,96.81971,,,,,30.761841
9,Netherlands,1988,16082,0.7463938,101.08154,,,,,30.96866
9,Netherlands,1989,17387,1.0821609,106.49139,,,,,30.665979
9,Netherlands,1990,18665,3.2854691,103.68212,45.400002,,,,30.71949
9,Netherlands,1991,19626,3.133333,103.30096,,,,,30.41988
9,Netherlands,1992,20224,3.1835811,99.637871,,,,,29.345671
9,Netherlands,1993,20679,2.584182,94.706429,,,,,28.654131
9,Netherlands,1994,21588,2.801527,95.985481,,,,,28.54458
9,Netherlands,1995,22585,2.0952821,99.495033,46.299999,,,,28.746229
9,Netherlands,1996,23531,2.0166669,101.01143,,,,,28.43318
9,Netherlands,1997,24692,2.1565101,104.89993,,,,,27.830151
9,Netherlands,1998,25811,1.983048,,,,,,27.106001
9,Netherlands,1999,26654,2.211071,,,,,,26.31304
9,Netherlands,2000,28467,2.5237801,,45.400002,,,,26.798981
9,Netherlands,2001,30359,4.5342312,,,,,,26.62816
9,Netherlands,2002,31284,3.467068,,,,,,25.827681
9,Netherlands,2003,31792,2.11464,,,,,,
10,Norway,1960,1713,,73.680962,21.299999,,,,
10,Norway,1961,1823,2.451108,72.139977,,,,,
10,Norway,1962,1905,5.2685161,69.344788,,,,,
10,Norway,1963,1991,2.5870409,70.439796,,,,,
10,Norway,1964,2112,5.679944,71.781082,,,,,
10,Norway,1965,2268,4.2595901,71.817253,22.4,,,,
10,Norway,1966,2417,3.2513371,72.533798,,,,,
10,Norway,1967,2620,4.4333949,74.773056,,,,,
10,Norway,1968,2784,3.471534,73.59362,,,,,
10,Norway,1969,3035,3.0674851,72.030357,,,,,
10,Norway,1970,3213,10.56548,74.139931,31.1,,,,
10,Norway,1971,3523,6.2584119,73.002907,,,,,31.944679
10,Norway,1972,3814,7.219759,70.428383,,,,,32.230431
10,Norway,1973,4138,7.44241,76.504845,,,,,32.272209
10,Norway,1974,4728,9.4145136,83.27903,,,,,33.086529
10,Norway,1975,5458,11.70707,78.767204,34.799999,,,,34.624119
10,Norway,1976,6116,9.1757565,79.932335,,,,,34.209702
10,Norway,1977,6742,9.0431557,78.699829,,,,,34.076401
10,Norway,1978,7412,8.1515064,72.255005,,,,,35.433521
10,Norway,1979,8354,4.7598252,77.273743,,,,,38.279739
10,Norway,1980,9557,10.89621,80.330162,39.299999,0.33695999,0.37417999,31.594,40.388729
10,Norway,1981,10548,13.63705,79.648895,,,,,40.68092
10,Norway,1982,11205,11.37206,78.188873,,,,,40.848209
10,Norway,1983,12022,8.4110479,76.31546,,,,,42.04797
10,Norway,1984,13220,6.279108,77.480171,,,,,43.46854
10,Norway,1985,14354,5.6658239,78.744705,41,,,,42.852852
10,Norway,1986,15184,7.1867681,72.853569,,,,,36.27047
10,Norway,1987,15823,8.7259321,67.695114,,,,,35.806919
10,Norway,1988,16299,6.6984839,67.400887,,,,,34.0042
10,Norway,1989,17043,4.5554419,73.293633,,,,,35.525398
10,Norway,1990,18004,4.1130328,74.734642,69.599998,,,,35.660439
10,Norway,1991,19212,3.4206829,72.622849,,,,,34.552021
10,Norway,1992,20185,2.3421161,69.547249,,,,,34.170551
10,Norway,1993,21088,2.2714889,70.125801,,,,,33.764042
10,Norway,1994,22534,1.398555,70.586227,,,,,34.258579
10,Norway,1995,23874,2.4564049,70.103203,66.699997,,,,35.352779
10,Norway,1996,26263,1.2586941,72.619583,,,,,37.7201
10,Norway,1997,27776,2.5807409,75.462173,,,,,38.262901
10,Norway,1998,27294,2.255686,74.282089,,,,,33.82029
10,Norway,1999,30011,2.3331389,,,,,,35.71146
10,Norway,2000,36273,3.0860679,,62.5,,,,42.95295
10,Norway,2001,37078,3.0173781,,,,,,40.874199
10,Norway,2002,36617,1.288146,,,,,,37.908371
10,Norway,2003,37245,2.4753971,,,,,,37.516239
12,Switzerland,1960,3387,,53.253502,21.799999,,,,
12,Switzerland,1961,3625,1.845371,54.593182,,,,,
12,Switzerland,1962,3788,4.3156161,54.494743,,,,,
12,Switzerland,1963,3946,3.439719,53.69223,,,,,
12,Switzerland,1964,4158,3.0813141,53.660713,,,,,
12,Switzerland,1965,4360,3.4145169,55.158588,22.299999,,,,
12,Switzerland,1966,4575,4.7761312,55.518734,,,,,
12,Switzerland,1967,4790,4.0214782,54.613895,,,,,
12,Switzerland,1968,5138,2.4123509,56.837097,,,,,
12,Switzerland,1969,5645,2.489007,60.69416,,,,,
12,Switzerland,1970,6382,3.6160271,63.589043,38,,,,36.266361
12,Switzerland,1971,6938,6.5730128,60.333889,,,,,35.986961
12,Switzerland,1972,7406,6.660192,58.819286,,,,,35.707561
12,Switzerland,1973,7998,8.7550411,59.547981,,,,,35.428162
12,Switzerland,1974,8800,9.7667475,63.378422,,,,,35.148766
12,Switzerland,1975,8934,6.6964531,56.723125,36.400002,,,,34.776234
12,Switzerland,1976,9368,1.715862,60.432114,,,,,34.496834
12,Switzerland,1977,10240,1.28527,66.902809,,,,,34.217438
12,Switzerland,1978,11003,1.055814,64.06974,,,,,33.938038
12,Switzerland,1979,12189,3.6476431,67.314102,,,,,33.658638
12,Switzerland,1980,13853,4.0220261,72.832115,54.299999,0.33524001,0.33744001,30.963999,32.869999
12,Switzerland,1981,15338,6.4902191,72.369865,,,,,32.689999
12,Switzerland,1982,15963,5.6552119,67.87426,,,,,32.200001
12,Switzerland,1983,16611,2.9676869,68.349434,,,,,31.9
12,Switzerland,1984,17710,2.9112079,72.168221,,,,,31.92
12,Switzerland,1985,18812,3.429986,74.652412,53.599998,,,,32.009998
12,Switzerland,1986,19458,0.74074072,70.621994,,,,,31.889999
12,Switzerland,1987,20120,1.447964,69.582191,,,,,31.459999
12,Switzerland,1988,21334,1.884478,71.420036,,,,,31.610001
12,Switzerland,1989,22965,3.1629641,75.544891,,,,,31.690001
12,Switzerland,1990,24518,5.3787398,72.00161,53.799999,,,,31.34
12,Switzerland,1991,24840,5.8793921,68.58638,,,,,30.790001
12,Switzerland,1992,25141,4.0410762,67.868607,,,,,29.99
12,Switzerland,1993,25427,3.2717969,66.710213,,,,,29.58
12,Switzerland,1994,26031,0.85840708,66.585632,,,,,30.41
12,Switzerland,1995,26485,1.798719,66.157257,54.799999,,,,29.83
12,Switzerland,1996,26394,0.81882441,67.940277,,,,,28.809999
12,Switzerland,1997,27850,0.52150118,75.340652,,,,,28.190001
12,Switzerland,1998,28835,0.0170097,,,,,,27.43
12,Switzerland,1999,28887,0.82482988,,,,,,27.43
12,Switzerland,2000,30461,1.5433919,,55,,,,26.76
12,Switzerland,2001,30806,0.98837209,,,,,,27.35
12,Switzerland,2002,32751,0.64150012,,,,,,26.780001
12,Switzerland,2003,33516,0.6292392,,,,,,26.450001
14,Japan,1960,1010,,20.954344,30.9,,,,
14,Japan,1961,1143,5.404726,20.123087,,,,,
14,Japan,1962,1262,6.7731929,18.671103,,,,,
14,Japan,1963,1374,7.6613798,18.86199,,,,,
14,Japan,1964,1546,3.8381741,19.13273,,,,,
14,Japan,1965,1647,6.5934072,19.600803,36.700001,,,,
14,Japan,1966,1889,5.0796628,19.557243,,,,,
14,Japan,1967,2133,3.977881,19.05209,,,,,
14,Japan,1968,2496,5.3697028,19.074675,,,,,
14,Japan,1969,2917,5.2425919,19.484798,,,,,
14,Japan,1970,3293,7.6732669,20.330492,33,,,,
14,Japan,1971,3575,6.4169722,20.702047,,,,,45.170719
14,Japan,1972,3988,4.8240218,18.85861,,,,,44.578239
14,Japan,1973,4491,11.64593,20.046917,,,,,45.357731
14,Japan,1974,4778,23.15457,27.945053,,,,,43.6329
14,Japan,1975,5300,11.78279,25.552427,38.099998,,,,41.405479
14,Japan,1976,5768,9.3492212,26.312096,,,,,41.4841
14,Japan,1977,6344,8.1587038,24.552519,,,,,40.436939
14,Japan,1978,7084,4.2107978,20.499784,,,,,40.692162
14,Japan,1979,8027,3.730788,24.038239,,,,,40.600471
14,Japan,1980,8931,7.778707,28.280386,39.900002,0.31988001,0.41958001,34.986,41.000149
14,Japan,1981,9986,4.9113078,28.649031,,,,,40.91642
14,Japan,1982,10813,2.7369759,28.356134,,,,,40.320621
14,Japan,1983,11346,1.882329,26.096989,,,,,39.47266
14,Japan,1984,12064,2.27158,27.261158,,,,,39.834511
14,Japan,1985,12978,2.0236919,25.541183,41.900002,,,,39.59441
14,Japan,1986,13590,0.61925489,18.744871,,,,,39.012459
14,Japan,1987,14425,0.125012,17.556202,,,,,38.94236
14,Japan,1988,15862,0.67230117,17.794943,,,,,39.111771
14,Japan,1989,17269,2.2800989,19.78006,,,,,39.04401
14,Japan,1990,18815,3.0594161,20.64731,44.5,,,,39.36253
14,Japan,1991,20055,3.2401121,18.730829,,,,,39.023548
14,Japan,1992,20648,1.72701,17.882681,,,,,37.858841
14,Japan,1993,21122,1.28404,16.311211,,,,,36.380058
14,Japan,1994,21757,0.70620269,16.44124,,,,,34.927731
14,Japan,1995,22551,-0.12673201,17.31402,46.799999,,,,34.21719
14,Japan,1996,23714,0.1353523,19.33235,,,,,33.91785
14,Japan,1997,24478,1.731858,20.999901,,,,,33.713951
14,Japan,1998,24429,0.65603721,21.144987,,,,,32.704552
14,Japan,1999,24709,-0.33825591,,,,,,32.42955
14,Japan,2000,26015,-0.67052978,,47.900002,,,,32.231159
14,Japan,2001,26619,-0.73339438,,,,,,30.96192
14,Japan,2002,27196,-0.91512048,,,,,,30.39852
14,Japan,2003,28071,-0.2541942,,,,,,
16,Greece,1960,707,,21.312531,7.9000001,,,,
16,Greece,1961,1028,1.934236,21.172319,,,,,
16,Greece,1962,1049,-0.37950659,21.926023,,,,,
16,Greece,1963,1188,2.8571429,23.088087,,,,,
16,Greece,1964,1316,0.92592591,23.294668,,,,,
16,Greece,1965,1492,3.119266,24.24564,9.8000002,,,,
16,Greece,1966,1634,4.9822059,24.71656,,,,,
16,Greece,1967,1754,1.6949151,23.642069,,,,,
16,Greece,1968,1967,0.33333331,23.103203,,,,,
16,Greece,1969,2298,2.491694,23.465282,,,,,
16,Greece,1970,2631,2.9173419,23.462626,10.6,,,,
16,Greece,1971,2988,2.992126,23.728756,,,,,36.11808
16,Greece,1972,3383,4.2813449,26.185028,,,,,36.32357
16,Greece,1973,3844,15.54252,32.533947,,,,,36.534939
16,Greece,1974,3907,26.903549,34.340809,,,,,34.111149
16,Greece,1975,4505,13.36667,35.980827,12.9,,,,33.06773
16,Greece,1976,5024,13.31226,35.668255,,,,,33.04417
16,Greece,1977,5417,12.16996,34.588295,,,,,33.730728
16,Greece,1978,6138,12.53253,34.652,,,,,32.863369
16,Greece,1979,6781,19.04615,35.082428,,,,,34.108978
16,Greece,1980,7374,24.874809,38.590443,19.700001,0.26565999,0.34257999,24.002001,32.9426
16,Greece,1981,7870,24.45896,39.115353,,,,,32.571678
16,Greece,1982,8204,20.91898,38.697323,,,,,30.660641
16,Greece,1983,8388,20.241671,40.974976,,,,,31.3106
16,Greece,1984,8834,18.448959,42.330807,,,,,30.461729
16,Greece,1985,9297,19.302561,44.363792,23.700001,,,,30.45694
16,Greece,1986,9525,23.02109,43.68021,,,,,31.09042
16,Greece,1987,9548,16.384951,46.111313,,,,,29.960991
16,Greece,1988,10277,13.52675,44.246845,,,,,29.374809
16,Greece,1989,11036,13.7,45.670357,,,,,28.5359
16,Greece,1990,11405,20.40457,44.881191,28.700001,,,,28.196739
16,Greece,1991,11971,19.472851,43.14999,,,,,26.528021
16,Greece,1992,12198,15.8659,43.44936,,,,,25.66123
16,Greece,1993,12166,14.41449,41.309959,,,,,25.50778
16,Greece,1994,12566,10.92279,40.28257,,,,,24.36351
16,Greece,1995,12991,8.9370565,40.818081,31.799999,,,,23.086691
16,Greece,1996,13418,8.1962194,40.40134,,,,,23.02569
16,Greece,1997,14127,5.5389729,39.684841,,,,,21.59255
16,Greece,1998,14665,4.7662258,,,,,,22.343321
16,Greece,1999,15213,2.6367829,,,,,,22.295839
16,Greece,2000,16272,3.150125,,33.799999,,,,22.828011
16,Greece,2001,17332,3.3749959,,,,,,23.48645
16,Greece,2002,19119,3.6292281,,,,,,23.21043
16,Greece,2003,20479,3.5305569,,,,,,23.830009
18,Portugal,1960,728,,37.353939,3.5,,,,
18,Portugal,1961,783,1.5490021,39.982895,,,,,
18,Portugal,1962,848,2.662071,38.321789,,,,,
18,Portugal,1963,905,2.0215731,39.377365,,,,,
18,Portugal,1964,979,3.4000001,50.419785,,,,,
18,Portugal,1965,1084,3.4816251,52.902737,3.9000001,,,,
18,Portugal,1966,1170,5.0467291,52.805916,,,,,
18,Portugal,1967,1293,5.5160141,51.549599,,,,,
18,Portugal,1968,1475,6.070827,49.794838,,,,,
18,Portugal,1969,1592,7.4025121,48.176414,,,,,
18,Portugal,1970,1916,4.5333328,50.211582,6.8000002,,,,
18,Portugal,1971,2153,7.4960752,51.907047,,,,,35.13776
18,Portugal,1972,2420,8.94487,53.733257,,,,,35.945591
18,Portugal,1973,2845,10.35523,54.887608,,,,,35.963459
18,Portugal,1974,3048,27.96842,62.633427,,,,,37.544479
18,Portugal,1975,3045,20.408159,48.222168,9.6000004,,,,35.211498
18,Portugal,1976,3407,18.249901,43.775337,,,,,34.72538
18,Portugal,1977,3784,27.191669,47.037315,,,,,34.724171
18,Portugal,1978,4120,22.64299,47.753605,,,,,33.15321
18,Portugal,1979,4663,23.53758,58.929958,,,,,31.947809
18,Portugal,1980,5263,16.691891,62.97908,10.6,0.24082001,0.29798001,26.488001,32.877769
18,Portugal,1981,5812,20.04076,64.510567,,,,,33.93985
18,Portugal,1982,6263,22.730221,64.730942,,,,,33.645222
18,Portugal,1983,6479,25.10564,68.447182,,,,,34.496078
18,Portugal,1984,6570,28.783331,74.853844,,,,,32.841808
18,Portugal,1985,6959,19.645399,71.509995,13.7,,,,32.822578
18,Portugal,1986,7414,11.76311,62.800735,,,,,30.644541
18,Portugal,1987,8126,9.3431482,69.239014,,,,,30.372629
18,Portugal,1988,9057,9.6970482,73.429176,,,,,32.47451
18,Portugal,1989,10042,12.61655,75.041565,,,,,32.344391
18,Portugal,1990,10894,13.37246,75.17775,14.8,,,,31.71348
18,Portugal,1991,11783,10.92623,69.90818,,,,,30.284439
18,Portugal,1992,12219,8.9416666,65.14225,,,,,30.2792
18,Portugal,1993,12236,6.5019512,62.448689,,,,,29.60257
18,Portugal,1994,12614,5.2143941,65.605721,,,,,30.643669
18,Portugal,1995,13413,4.123148,68.574448,14.7,,,,31.498079
18,Portugal,1996,13974,3.120697,69.221817,,,,,31.741541
18,Portugal,1997,14804,2.161612,71.549889,,,,,31.63949
18,Portugal,1998,15401,2.71644,,,,,,31.13629
18,Portugal,1999,16363,2.3038859,,,,,,30.41585
18,Portugal,2000,17353,2.8467209,,14.9,,,,29.99342
18,Portugal,2001,18071,4.3947568,,,,,,29.39245
18,Portugal,2002,18799,3.5450521,,,,,,28.688181
18,Portugal,2003,17603,3.2833331,,,,,,
19,Spain,1960,1074,,16.249819,3.9000001,,,,
19,Spain,1961,1201,2.005919,17.638802,,,,,
19,Spain,1962,1335,5.6347589,19.606129,,,,,
19,Spain,1963,1467,8.8046274,19.67972,,,,,
19,Spain,1964,1554,6.9501872,21.492392,,,,,
19,Spain,1965,1678,13.23638,22.708794,4.5999999,,,,
19,Spain,1966,1841,6.1941152,23.890324,,,,,
19,Spain,1967,1954,6.4145751,21.74692,,,,,
19,Spain,1968,2160,4.963315,24.657402,,,,,
19,Spain,1969,2447,2.1244521,26.033092,,,,,
19,Spain,1970,2715,5.757617,27.450756,5.8000002,,,,
19,Spain,1971,2951,8.2360411,27.574125,,,,,40.667221
19,Spain,1972,3293,8.2893658,28.926592,,,,,41.693291
19,Spain,1973,3710,11.39021,29.886894,,,,,42.23267
19,Spain,1974,4227,15.71734,33.602974,,,,,43.172298
19,Spain,1975,4600,16.925659,30.851402,8.1999998,,,,42.083221
19,Spain,1976,4965,17.629311,31.890625,,,,,41.384251
19,Spain,1977,5364,24.52669,30.979395,,,,,40.521809
19,Spain,1978,5761,19.78421,29.520868,,,,,39.432571
19,Spain,1979,6188,15.66901,29.62632,,,,,38.965611
19,Spain,1980,6856,15.54989,33.522945,13.3,0.25176001,0.31323999,24.568001,38.567551
19,Spain,1981,7447,14.55704,37.425205,,,,,37.673019
19,Spain,1982,7957,14.40796,38.388615,,,,,37.06181
19,Spain,1983,8378,12.17745,41.893536,,,,,36.794498
19,Spain,1984,8812,11.27433,43.44701,,,,,35.920799
19,Spain,1985,9259,8.8175268,43.49968,17.6,,,,36.209068
19,Spain,1986,9744,8.7965031,37.577763,,,,,36.654301
19,Spain,1987,10542,5.2462592,38.542778,,,,,36.09407
19,Spain,1988,11434,4.8404789,38.839157,,,,,35.9314
19,Spain,1989,12417,6.7914681,39.452454,,,,,36.218159
19,Spain,1990,13365,6.7179399,37.502689,25.5,,,,35.47665
19,Spain,1991,14152,5.9353271,37.407082,,,,,34.688511
19,Spain,1992,14564,5.925724,38.03965,,,,,32.8619
19,Spain,1993,14699,4.5686359,39.409481,,,,,31.168209
19,Spain,1994,15325,4.7184682,44.396439,,,,,30.55055
19,Spain,1995,16032,4.6747532,47.852901,28.6,,,,30.98291
19,Spain,1996,16720,3.558506,50.073299,,,,,30.45867
19,Spain,1997,17420,1.970708,55.558651,,,,,30.441401
19,Spain,1998,18479,1.833537,57.125301,,,,,30.196671
19,Spain,1999,19817,2.310672,,,,,,29.989201
19,Spain,2000,21074,3.4326141,,30.700001,,,,30.193701
19,Spain,2001,22257,3.5911009,,,,,,29.928841
19,Spain,2002,23756,3.066777,,,,,,29.684759
19,Spain,2003,24812,3.033474,,,,,,29.586519
20,Australia,1960,2373,,31.266439,50.400002,,,,
20,Australia,1961,2346,2.5121319,29.821074,,,,,
20,Australia,1962,2539,-0.278474,30.158545,,,,,
20,Australia,1963,2717,0.53057808,32.055397,,,,,
20,Australia,1964,2873,2.3611109,31.527285,,,,,
20,Australia,1965,2973,3.962008,31.035599,48.900002,,,,
20,Australia,1966,3230,2.975724,29.973152,,,,,
20,Australia,1967,3404,3.1939161,30.114193,,,,,
20,Australia,1968,3788,2.6529109,28.348595,,,,,
20,Australia,1969,4162,2.919359,29.821142,,,,,
20,Australia,1970,4490,3.9060681,28.962433,48.299999,,,,
20,Australia,1971,4677,6.0639958,27.807472,,,,,37.293591
20,Australia,1972,5013,5.8649788,27.70299,,,,,36.80088
20,Australia,1973,5595,9.4659224,29.440403,,,,,35.435848
20,Australia,1974,6024,15.11014,31.638611,,,,,36.886761
20,Australia,1975,6683,15.07196,28.900406,47,,,,37.104549
20,Australia,1976,7140,13.52391,31.207617,,,,,36.665291
20,Australia,1977,7482,12.30024,30.863096,,,,,35.999359
20,Australia,1978,8272,7.9236741,32.151321,,,,,35.652821
20,Australia,1979,9174,9.0900011,34.958309,,,,,35.81057
20,Australia,1980,10203,10.12658,33.861252,47.5,0.31729999,0.31797999,29.695999,37.026699
20,Australia,1981,11513,9.6917448,33.173725,,,,,35.924339
20,Australia,1982,11537,11.14551,31.657738,,,,,34.743671
20,Australia,1983,12300,10.11356,30.678139,,,,,34.825699
20,Australia,1984,13120,3.9501851,34.640999,,,,,35.29966
20,Australia,1985,14019,6.739049,35.246246,48.400002,,,,35.07288
20,Australia,1986,14537,9.0845318,34.7444,,,,,32.777859
20,Australia,1987,15554,8.4887457,34.723438,,,,,31.35881
20,Australia,1988,16524,7.2317719,34.083694,,,,,29.875179
20,Australia,1989,17255,7.5594249,34.358536,,,,,29.960911
20,Australia,1990,17322,7.2722602,34.461769,48.400002,,,,28.966801
20,Australia,1991,17652,3.2226801,35.23764,,,,,28.167999
20,Australia,1992,18496,0.98591548,37.69257,,,,,27.971661
20,Australia,1993,19432,1.81311,38.351791,,,,,28.00918
20,Australia,1994,20583,1.894977,39.71843,,,,,28.139919
20,Australia,1995,21773,4.6381359,40.153259,48.599998,,,,27.82765
20,Australia,1996,22562,2.6124201,39.977379,,,,,27.10232
20,Australia,1997,23649,0.25041741,42.1768,,,,,27.076691
20,Australia,1998,24853,0.85345542,41.36496,,,,,26.283131
20,Australia,1999,26283,1.465428,,,,,,26.190729
20,Australia,2000,27403,4.475183,,43.599998,,,,25.566681
20,Australia,2001,28492,4.3808408,,,,,,25.4391
20,Australia,2002,29819,3.003171,,,,,,25.94952
20,Australia,2003,31273,2.770735,,,,,,
21,New Zealand,1960,2545,,52.548824,58,,,,
21,New Zealand,1961,2659,1.830283,52.944569,,,,,
21,New Zealand,1962,2713,2.696079,48.803684,,,,,
21,New Zealand,1963,2866,1.909308,53.844959,,,,,
21,New Zealand,1964,3001,3.4348171,50.796028,,,,,
21,New Zealand,1965,3224,3.3962259,44.781643,54.299999,,,,
21,New Zealand,1966,3481,2.7737229,45.967167,,,,,
21,New Zealand,1967,3360,6.107955,39.779766,,,,,
21,New Zealand,1968,3489,4.283802,44.663773,,,,,
21,New Zealand,1969,3969,4.8780489,46.908524,,,,,
21,New Zealand,1970,4136,6.548347,48.324024,54.5,,,,
21,New Zealand,1971,4438,10.30303,45.481525,,,,,34.0294
21,New Zealand,1972,4780,6.776557,47.43124,,,,,33.208939
21,New Zealand,1973,5335,8.2332764,49.573406,,,,,32.451801
21,New Zealand,1974,6041,11.25198,55.458515,,,,,35.516602
21,New Zealand,1975,6382,14.52991,54.889248,57.099998,,,,34.529041
21,New Zealand,1976,6748,16.79104,57.889282,,,,,34.712021
21,New Zealand,1977,6867,14.58999,56.796474,,,,,32.954659
21,New Zealand,1978,7301,11.89591,55.041866,,,,,32.50108
21,New Zealand,1979,7915,13.70432,61.897545,,,,,32.65749
21,New Zealand,1980,8656,17.09277,62.086811,46.099998,0.26664001,0.29516,25.521999,32.18576
21,New Zealand,1981,9736,15.34623,62.446667,,,,,34.01445
21,New Zealand,1982,10687,16.1709,62.351555,,,,,34.555931
21,New Zealand,1983,11262,7.35568,61.913372,,,,,33.403709
21,New Zealand,1984,12141,6.2012138,70.573883,,,,,34.58643
21,New Zealand,1985,12556,15.39404,64.612869,46.599998,,,,33.268139
21,New Zealand,1986,13085,13.21782,55.481041,,,,,31.91995
21,New Zealand,1
gitextract_g7y1whbn/
├── LICENSE
├── README.md
├── SyntheticControlMethods/
│ ├── __init__.py
│ ├── __version__.py
│ ├── main.py
│ ├── optimize.py
│ ├── plot.py
│ ├── tables.py
│ └── validity_tests.py
├── examples/
│ ├── basque.py
│ ├── datasets/
│ │ ├── basque_data.csv
│ │ ├── german_reunification.csv
│ │ └── smoking_data.csv
│ ├── german_reunification.py
│ ├── proposal_99.py
│ ├── test_dataset.py
│ └── user_guide.ipynb
├── setup.cfg
├── setup.py
└── tests/
├── test_inferences.py
├── test_main.py
└── test_plot.py
SYMBOL INDEX (35 symbols across 6 files)
FILE: SyntheticControlMethods/main.py
class SynthBase (line 25) | class SynthBase(object):
method __init__ (line 28) | def __init__(self, dataset, outcome_var, id_var, time_var, treatment_p...
class DataProcessor (line 141) | class DataProcessor(object):
method _process_input_data (line 144) | def _process_input_data(self, dataset,
method _process_treated_data (line 216) | def _process_treated_data(self, dataset, outcome_var, id_var, time_var...
method _process_control_data (line 235) | def _process_control_data(self, dataset, outcome_var, id_var, time_var...
method _rescale_covariate_variance (line 259) | def _rescale_covariate_variance(self, treated_covariates, control_cova...
method _get_pairwise_difference_matrix (line 275) | def _get_pairwise_difference_matrix(self, treated_covariates, control_...
class Synth (line 283) | class Synth(DataProcessor, Optimize, Plot, Tables, ValidityTests):
method __init__ (line 286) | def __init__(self, dataset,
class DiffSynth (line 353) | class DiffSynth(DataProcessor, Optimize, Plot, Tables, ValidityTests):
method __init__ (line 356) | def __init__(self, dataset,
method difference_data (line 439) | def difference_data(self, dataset, not_diff_cols):
method demean_data (line 480) | def demean_data(self):
FILE: SyntheticControlMethods/optimize.py
class Optimize (line 20) | class Optimize(object):
method optimize (line 50) | def optimize(self,
method total_loss (line 124) | def total_loss(self, v_0,
method _get_dsc_outcome (line 196) | def _get_dsc_outcome(self, w, control_outcome, periods_pre_treatment, ...
method _update_original_data (line 231) | def _update_original_data(self, placebo):
method diffevo_optimize (line 266) | def diffevo_optimize(self):
method random_optimize (line 279) | def random_optimize(self, steps=10**4):
FILE: SyntheticControlMethods/plot.py
class Plot (line 22) | class Plot(object):
method plot (line 25) | def plot(self,
method _get_plotter (line 280) | def _get_plotter(self): # pragma: no cover
FILE: SyntheticControlMethods/tables.py
class Tables (line 6) | class Tables(object):
method _get_weight_df (line 9) | def _get_weight_df(self, data):
method _get_comparison_df (line 18) | def _get_comparison_df(self, data):
method _pre_post_rmspe_ratios (line 75) | def _pre_post_rmspe_ratios(self, placebo_outcomes, placebo=True):
method _pre_post_rmspe (line 128) | def _pre_post_rmspe(self, synth_outcome, treated_outcome, placebo=False):
FILE: SyntheticControlMethods/validity_tests.py
class ValidityTests (line 18) | class ValidityTests(object):
method in_space_placebo (line 21) | def in_space_placebo(self, n_optim=3):
method in_time_placebo (line 85) | def in_time_placebo(self, placebo_treatment_period, n_optim=5):
method _normalize_placebos (line 137) | def _normalize_placebos(self, placebo_outcomes):
FILE: tests/test_inferences.py
class TestValidityInferences (line 23) | class TestValidityInferences(unittest.TestCase):
method test_normalize_placebos (line 25) | def test_normalize_placebos(self):
Condensed preview — 22 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (879K chars).
[
{
"path": "LICENSE",
"chars": 10172,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 9946,
"preview": "# Synthetic Control Methods\n\n## A Python package for causal inference using synthetic controls\nThis Python package imple"
},
{
"path": "SyntheticControlMethods/__init__.py",
"chars": 658,
"preview": "# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with "
},
{
"path": "SyntheticControlMethods/__version__.py",
"chars": 612,
"preview": "# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with "
},
{
"path": "SyntheticControlMethods/main.py",
"chars": 23136,
"preview": "# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with "
},
{
"path": "SyntheticControlMethods/optimize.py",
"chars": 14579,
"preview": "# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with "
},
{
"path": "SyntheticControlMethods/plot.py",
"chars": 12074,
"preview": "# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with "
},
{
"path": "SyntheticControlMethods/tables.py",
"chars": 6904,
"preview": "from __future__ import absolute_import, division, print_function\n\nimport numpy as np\nimport pandas as pd\n\nclass Tables(o"
},
{
"path": "SyntheticControlMethods/validity_tests.py",
"chars": 7671,
"preview": "# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with "
},
{
"path": "examples/basque.py",
"chars": 1621,
"preview": "#Import packages\nimport pandas as pd\nimport numpy as np\nfrom SyntheticControlMethods import Synth, DiffSynth\n\n#Import da"
},
{
"path": "examples/datasets/basque_data.csv",
"chars": 72075,
"preview": "Unnamed: 0,regionno,regionname,year,gdpcap,sec.agriculture,sec.energy,sec.industry,sec.construction,sec.services.venta,s"
},
{
"path": "examples/datasets/german_reunification.csv",
"chars": 39855,
"preview": "code,country,year,gdp,infrate,trade,schooling,invest60,invest70,invest80,industry\r\n1,USA,1960,2879,,9.693181,43.799999,,"
},
{
"path": "examples/datasets/smoking_data.csv",
"chars": 58031,
"preview": "state,year,cigsale,lnincome,beer,age15to24,retprice\nAlabama,1970.0,89.8,,,0.17886178,39.6\nAlabama,1971.0,95.4,,,0.179927"
},
{
"path": "examples/german_reunification.py",
"chars": 2742,
"preview": "#Import packages\nimport pandas as pd\nimport numpy as np\n\nfrom SyntheticControlMethods import Synth, DiffSynth\n\n#Import d"
},
{
"path": "examples/proposal_99.py",
"chars": 1265,
"preview": "#Import packages\nimport pandas as pd\nimport numpy as np\n\nfrom SyntheticControlMethods import Synth, DiffSynth\n\n#Import d"
},
{
"path": "examples/test_dataset.py",
"chars": 632,
"preview": "\n\n#Import packages\nimport pandas as pd\nimport numpy as np\nfrom SyntheticControlMethods import Synth, DiffSynth\n\n#Import "
},
{
"path": "examples/user_guide.ipynb",
"chars": 600298,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"# How to use SyntheticControlMethod"
},
{
"path": "setup.cfg",
"chars": 62,
"preview": "[bdist_wheel]\nuniversal = 1\n\n[metadata]\nlicense_file = LICENSE"
},
{
"path": "setup.py",
"chars": 1816,
"preview": "from setuptools import setup, find_packages\n\nimport os\nimport re\nimport sys\nfrom codecs import open\n\ninstall_requires = "
},
{
"path": "tests/test_inferences.py",
"chars": 827,
"preview": "# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with "
},
{
"path": "tests/test_main.py",
"chars": 561,
"preview": "# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with "
},
{
"path": "tests/test_plot.py",
"chars": 561,
"preview": "# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with "
}
]
About this extraction
This page contains the full source code of the OscarEngelbrektson/SyntheticControlMethods GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 22 files (845.8 KB), approximately 476.5k tokens, and a symbol index with 35 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.