# Calculs & dataframes
import pandas as pd
import numpy as np
import scipy.stats as stat
import pingouin as pg
# Régression linéaire
import statsmodels.api as sm
import statsmodels.formula.api as smf
from statsmodels.stats.outliers_influence import OLSInfluence, variance_inflation_factor
from sklearn.preprocessing import StandardScaler # pour centrer-réduire les données
# Librairies pour graphiques
import matplotlib.pyplot as plt
%matplotlib inline
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
import seaborn as sns
import plotly.express as px
from plotly.subplots import make_subplots
import plotly.graph_objects as go
plt.rcParams.update(plt.rcParamsDefault)
# Figure : évolution du chômage (BIT) selon le sexe et l'âge
data = evol_chom.loc[evol_chom.AGEQ.isin(["T1524", "T2549", "T5064", "T1564"])].\
replace({"H": "Hommes",
"F": "Femmes",
"E": "Ensemble",
"T1524":"15-24 ans",
"T2549":"25-49 ans",
"T5064":"50-64 ans",
"T1564":"Ensemble"}).sort_values(by=["ANNEE", "AGEQ"])
fig = px.line(data, x="ANNEE", y="TXCHOM",
color="SEXE", facet_col="AGEQ", color_discrete_map=pal_sexe,
labels={"ANNEE": "Année",
"TXCHOM": "Taux de chômage (%)",
"SEXE": "Sexe"})
fig.update_traces(mode="lines")
# Personnalisation du graphique
fig.for_each_annotation(lambda a: a.update(text=a.text.split("=")[-1]))
fig.layout.update(title="Évolution du taux de chômage (au sens du BIT) selon l'âge et le sexe",
xaxis_title="Années",
yaxis_title="Taux de chômage (%)",
legend_title=dict(text="Source : INSEE", side="top"),
template=mon_theme,
height=400)
fig.update_xaxes(dtick=10)
fig.update_yaxes(dtick=2)
fig.show(config=config)
#------------------------------------------#
# Figure : évolution du chômage (BIT) selon le sexe et l'âge
data = evol_chom.loc[evol_chom.AGEQ.isin(["T1524", "T2549", "T5064", "T1564"])].\
replace({"H": "Hommes",
"F": "Femmes",
"E": "Ensemble",
"T1524":"15-24 ans",
"T2549":"25-49 ans",
"T5064":"50-64 ans",
"T1564":"Ensemble"}).\
sort_values(by=["ANNEE", "AGEQ"])
fig = px.line(data, x="ANNEE", y="TXCHOM",
facet_col="SEXE", color="AGEQ", color_discrete_map=pal_age,
labels={"ANNEE": "Année",
"TXCHOM": "Taux de chômage (%)",
"SEXE": "Sexe"})
fig.update_traces(mode="lines")
# Personnalisation du graphique
fig.for_each_annotation(lambda a: a.update(text=a.text.split("=")[-1]))
fig.layout.update(title="Évolution du taux de chômage (au sens du BIT) selon le sexe et l'âge",
xaxis_title="Années",
yaxis_title="Taux de chômage (%)",
legend_title=dict(text="Source : INSEE", side="top"),
template=mon_theme,
height=400)
fig.update_xaxes(dtick=10)
fig.update_yaxes(dtick=2)
fig.show(config=config)
# Régression pour le taux de chômage (moindre carrés ordinaires)
var = ['TXCHOM',
'REV_MEDIAN',
"TX_INFL",
'TXCDD_EMBAUCHE',
'TXTPART_EMPBIT',
'GINI',
'PROD_HW_I15',
'BALANCE_BS',
'DEP_GEN_PTPIB',
'DEP_CIB_PTPIB',
'SAL_HW_I15'
]
data = df[var].copy().dropna()
data['BALANCE_BS'] = data['BALANCE_BS']/1e9 # balance en milliard d'euros
data['REV_MEDIAN'] = data['REV_MEDIAN']/1e3 # revenu en milliers d'euro
# Définitions des variables
X = data.drop(["TXCHOM"], axis=1)
y = data.TXCHOM
# Ajout de la constante
X = sm.add_constant(X)
# Modèle de régrssion (méthode des moindres carrés ordinaires)
regr1 = sm.OLS(y, X, missing='drop').fit()
# Affichage des résultats
regr1.summary()
/opt/venv/lib/python3.7/site-packages/scipy/stats/stats.py:1604: UserWarning:
kurtosistest only valid for n>=20 ... continuing anyway, n=18
/opt/venv/lib/python3.7/site-packages/scipy/stats/stats.py:1604: UserWarning:
kurtosistest only valid for n>=20 ... continuing anyway, n=18
Avec une p-valeur de 0.91 > 0.05, on ne rejette pas l'hypothèse nulle de normalité des résidus
Sur les 18 mesures, 0 sont des mesures atypiques, soit 0.0 % .
Sur les 18 mesures, 1 sont des mesures influentes, soit 5.6 % .
Nombre de mesures influentes et atypiques : 0
En pratique, une valeur VIFj>10 (sauf la constante) indique un problème de colinéarité éventuel.
VIF Factor features
0 6289.241111 const
1 9.051010 REV_MEDIAN
2 2.647508 TX_INFL
3 7.166693 TXCDD_EMBAUCHE
4 11.472018 PROD_HW_I15
5 10.481492 BALANCE_BS
6 11.266381 DEP_GEN_PTPIB
/opt/venv/lib/python3.7/site-packages/scipy/stats/stats.py:1604: UserWarning:
kurtosistest only valid for n>=20 ... continuing anyway, n=18