Python works with packages. A large number of packages can be dowloaded all together in the Anaconda environment. Start downloading here (version >3) https://www.anaconda.com/download/ Anaconda comes with
Enjoy!
Bee careful :
import warnings
warnings.filterwarnings('ignore')
import numpy as np
import numpy.random as npr
import matplotlib.pyplot as plt
import pandas as pd
Le fichier Supra_data_s.txt contient les données relevées lors d’une étude prospective (SUPRA - Supervision of the PRogression of Atherosclerosis in HIV-1 infected patients) parmi des participants de la cohorte Aquitaine. L’étude portait sur l’évaluation des facteurs de risques associés aux maladies cardiovasculaires chez les patients infectés par le VIH, en utilisant le marqueur IMT - intima media thickness of the carotid arteries (colonne mesure). L’étude comportait le relevé d’autres marqueurs connus comme étant des facteurs de risques des maladies cardiovasculaires : sexe (SEXE = 1 si homme, 2 si femme), age (AGE en années), taille (en cm), poids (en kg), habitudes liées au sport (0=non sportif, 1=sportif), tabac et prise d’alcool (0=consommation nulle, 1=consommation occasionnelle, 2=consommation régulière).
data = np.loadtxt("Supra_data_s.txt",skiprows=1)
header = ["SEXE","AGE","taille","poids","tabac","SPORT","mesure","alcool"]
print(data[0:10,:])
Créer la variable BMI Indice de Masse Corporelle telle que $$ BMI=\frac{Poids}{Taille^2}, $$ et l'ajouter au dataset.
bmi = data[:,3:4]/(data[:,2:3]/100)**2
data = np.concatenate((data,bmi),axis=1)
header = header + ["bmi"]
print(data.shape)
QUESTION Visualiser :
plt.figure(1)
plt.subplot(221)
plt.scatter(data[:,8],data[:,6])
plt.xlabel("BMI")
plt.ylabel("IMT")
plt.subplot(222)
plt.scatter(data[:,1],data[:,6])
plt.xlabel("age")
plt.ylabel("IMT")
plt.subplot(223)
plt.scatter(data[:,2],data[:,6])
plt.xlabel("taille")
plt.ylabel("IMT")
plt.subplot(224)
plt.scatter(data[:,3],data[:,6])
plt.xlabel("poids")
plt.ylabel("IMT")
plt.subplots_adjust(top=0.92, bottom=-0.3, left=0.10, right=0.95, hspace=0.25,wspace=0.35)
QESTION Quel est selon vous la variable qui permette le mieux de prédire, avec un modèle linéaire la variable IMT ?
QUESTION Pour chacun des couples vu précédemment, calculer le coefficient de corrélation de Pearson. Et commenter en fonction de ce qui a été vu dans la question précédente.
for i in [8,1,2,3]:
print(np.corrcoef(data[:,6],data[:,i])[0,1])
QUESTION Utiliser la fonction OLS de la librairie statsmodels.api afin d'estimer le modèle de régression prédisant l'IMT en fonction des autres variables du problème. Le modèles sera noté model, la matrice des coefficients de régression sera notée $B$ et l'intercept (=ordonnée à l'origine) $B_0$. On fera attention à inclure l'intercept dans le modèle.
import statsmodels.api as sm
# Delete 6th column of data and put it in the matrix X
# sm.add_constant permits to include the computation of the intercept in the model :) do not forget it!
X = sm.add_constant(np.delete(data,6,1))
Y = data[:,6:7]
model = sm.OLS(Y, X).fit()
B_0 = model.params[0]
B = np.delete(np.array([model.params]).T,0,0)
QUESTION Observer le détail du modèle linéaire construit et interprêter les différentes p-values.
print(model.summary())
QUESTION Quelles sont les variables significatives ?
Ce sont :
const
soit l'interceptx2
soit AGEx3
soit taillex4
soit poidsx8
soit IMCQUESTION Créer un nouveau modèle avec ces variables et observer les éventuelles modifications.
X = sm.add_constant(data[:,[1,2,3,8]])
Y = data[:,6:7]
model_sparse = sm.OLS(Y, X).fit()
B_0 = model_sparse.params[0]
B = np.delete(np.array([model_sparse.params]).T,0,0)
print(model_sparse.summary())
QUESTION Représenter les valeurs prédites en fonction des valeurs réelles.
plt.scatter(Y,model_sparse.predict(X))
plt.xlabel("IMT réelle")
plt.ylabel("IMT prédit")
QUESTION Tracer les résidus en fonction des valeurs estimées et juger de l'hypothèse d'homoscédasticité. Qu'observe-t-on ?
plt.scatter(model_sparse.predict(X),Y.T-model_sparse.predict(X))
plt.xlabel("IMT prédit")
plt.ylabel("Résidus")
QUESTIONS FINALES
QUESTION EN PLUS
Si le temps le permet regarder les résidus en fonction de toutes les variables explicatives et dire si' l'éventuelle hétéroscédasticité peut venir de telle ou telle variable.