P efficace | Aucun effet 1-P | Cotes P/(1-P) | |
---|---|---|---|
Chimique A | 0.2 | 0.8 | 0.250 |
Chimique B | 0.05 | 0.95 | 0.053 |
** Le rapport de cotes ** est le rapport de deux cotes **. Le rapport de cotes entre le médicament A et le médicament B est de 0,250 $ / 0,053 = 4,75 $, ce qui correspond à la cote de A divisée par la cote de B.
Pour considérer **, supposons un modèle qui prédit la réussite / l'échec du test (1 en cas de réussite, 0 en cas d'échec) à partir du nombre d'heures d'étude. ** **
#Bibliothèque utilisée pour le calcul numérique
import numpy as np
import pandas as pd
import scipy as sp
from scipy import stats
#Bibliothèque pour dessiner des graphiques
from matplotlib import pyplot as plt
%matplotlib inline
import seaborn as sns
#Bibliothèque d'estimation de modèles statistiques
import statsmodels.formula.api as smf
import statsmodels.api as sm
#Spécification du nombre de chiffres d'affichage
%precision 3
#Obtenez des données
url = 'https://raw.githubusercontent.com/yumi-ito/sample_data/master/6-3-1-logistic-regression.csv'
#Lire les données
df = pd.read_csv(url)
# #Sortir les 5 premières lignes de données
df.head()
#Sortie des statistiques de base des données
df.describe().apply(lambda s: s.apply(lambda x: format(x, 'g')))
#Dessinez un graphique à barres
sns.set()
sns.barplot(x = "hours", y = "result", data = df, palette='summer_r')
sns.set ()
spécifie le style de la zone graphique, qui est l'état par défaut. Vous pouvez également utiliser sns.set (style =" whitegrid ")
pour créer une ligne d'échelle de gris sur un fond blanc.seaborn.barplot (x nom de colonne, y nom de colonne, nom DataFrame, nom de palette de couleurs)
.ci = None
à l'argument pour le masquer.pass_rate = df.groupby("hours").mean()
groupby ()
pour regrouper les mêmes éléments dans les colonnes spécifiées dans les arguments, et calculez la moyenne de chacun avec .mean ()
.#Estimer le modèle
mod_glm = smf.glm(formula = "result ~ hours",
data = df,
family = sm.families.Binomial()).fit()
smf.glm ()
. glm est une abréviation de modèles linéaires généralisés.#Produire un résumé des résultats de l'estimation
mod_glm.summary()
#Dessinez une courbe de régression
sns.lmplot(x = "hours", y = "result",
data = df,
logistic = True,
scatter_kws = {"color": "green"},
line_kws = {"color": "black"},
x_jitter = 0.1, y_jitter = 0.02)
scatter_kws
et line_kws
sont des arguments de mots-clés supplémentaires passés à plt.scatter et plt.plot qui spécifient la couleur des points et des courbes de régression dans le diagramme de dispersion.x_jitter
et y_jitter
spécifient que les points doivent être dispersés légèrement de haut en bas, juste pour l'apparence. Étant donné que la réussite / l'échec n'est que de 1 ou 0, les points sont contrôlés pour se chevaucher.#Colonne de nombre de différence égal avec le nom de la colonne heures(0~9)Créer un DataFrame pour
predicted_value = pd.DataFrame({"hours": np.arange(0, 10, 1)})
#Calculez le taux de réussite prévu
pred = mod_glm.predict(predicted_value)
mod_glm
, utilisez la fonction predict ()
pour calculer la valeur prédite en fonction du bloc de données créé preded_value
.#Obtenez un taux de réussite de 1 heure et 2 heures
pred_1 = pred[1]
pred_2 = pred[2]
#Calculez les cotes pour chacun
odds_1 = pred_1 / (1 - pred_1)
odds_2 = pred_2 / (1 - pred_2)
#Calculer le rapport de cotes du journal
print("Rapport de cotes:", round(sp.log(odds_2 / odds_1), 3))
#Calculer les coefficients du modèle
value = mod_glm.params["hours"]
print("Coefficients du modèle:", round(value, 3))
numpy.exp (x)
renvoie la puissance logarithmique naturelle $ e $ à la puissance $ x $.#Prendre exp du coefficient de régression
exp = sp.exp(mod_glm.params["hours"])
print("Coefficient exp:", round(exp, 3))
#Calculer le rapport de cotes
odds = odds_2 / odds_1
print("Rapport de cotes:", round(odds, 3))