Chancen
- Die Gewinnchancen sind gleichbedeutend mit "Multiplikator" im Pferderennen. Wenn das Wettticket erscheint, wird eine Rückerstattung entsprechend den Gewinnchancen gewährt. Wenn die Gewinnchancen 10-mal höher wären, wäre der Einsatz 10-mal höher und würde zurückgegeben ...
- In der Statistik sind ** Quoten ** das Verhältnis ** der Wahrscheinlichkeit, dass ein Ereignis eintritt (P), zur Wahrscheinlichkeit, dass es nicht eintritt (1-P), und die Berechnungsmethode lautet $ \ displaystyle \ frac { Es ist P} {1-P} $.
- Zum Beispiel gibt es Medikamente A und B, und die Ergebnisse jeder klinischen Studie werden als zwei Ereignisse angezeigt, "wirksam" und "unwirksam".
|
Effektiv P. |
Keine Wirkung 1-P |
Gewinnchancen P./(1-P) |
Chemikalie A. |
0.2 |
0.8 |
0.250 |
Chemikalie B. |
0.05 |
0.95 |
0.053 |
Wahrscheinlichkeit
- ** Quotenverhältnis ** ist das Verhältnis zweier Quoten **. Das Quotenverhältnis von Medikament A zu Medikament B beträgt $ 0,250 / 0,053 = 4,75 $, was die Quote von A geteilt durch die Quote von B ist.
- Höhere (oder kleinere) Quotenverhältnisse bedeuten, dass eine Beziehung zwischen Ereignissen besteht, und ein Quotenverhältnis von 1,0 bedeutet, dass die Beziehungen zwischen Ereignissen unabhängig sind und sich nicht gegenseitig beeinflussen. des Weiteren···
- ** Das logarithmische Quotenverhältnis ist das logarithmische Quotenverhältnis, und der Regressionskoeffizient ist das logarithmische Quotenverhältnis, wenn die erklärende Variable um eine Einheit geändert wird. ** **.
Beziehung zwischen Odds Ratio und Regressionskoeffizient bei der logistischen Regression
Um ** zu berücksichtigen, nehmen wir ein Modell an, das das Bestehen / Nichtbestehen des Tests (1, wenn bestanden, 0, wenn nicht bestanden) aus der Anzahl der Lernstunden vorhersagt. ** **.
⑴ Bibliothek importieren
#Bibliothek zur numerischen Berechnung
import numpy as np
import pandas as pd
import scipy as sp
from scipy import stats
#Bibliothek zum Zeichnen von Grafiken
from matplotlib import pyplot as plt
%matplotlib inline
import seaborn as sns
#Bibliothek zur Schätzung statistischer Modelle
import statsmodels.formula.api as smf
import statsmodels.api as sm
#Angabe der Anzahl der Anzeigestellen
%precision 3
- scipy ist eine Bibliothek zur Durchführung fortgeschrittener wissenschaftlicher Berechnungen und verfügt über ein Modul, das statistische Funktionen, sogenannte Statistiken, zusammenfasst.
- https://docs.scipy.org/doc/scipy/reference/stats.html
- seaborn ist eine auf matplotlib basierende Visualisierungsbibliothek, die Matplotlib-Diagramme aussagekräftiger macht.
- https://seaborn.pydata.org/introduction.html
- statsmodels ist, wie der Name schon sagt, ein Modul, das Klassen und Funktionen zur Schätzung verschiedener statistischer Modelle bereitstellt.
- https://www.statsmodels.org/devel/
⑵ Daten lesen und bestätigen
#Daten bekommen
url = 'https://raw.githubusercontent.com/yumi-ito/sample_data/master/6-3-1-logistic-regression.csv'
#Daten lesen
df = pd.read_csv(url)
# #Geben Sie die ersten 5 Datenzeilen aus
df.head()
#Grundlegende Datenstatistik ausgeben
df.describe().apply(lambda s: s.apply(lambda x: format(x, 'g')))
- Es gibt 10 erklärende Variablen, "0, 1, 2, ..., 8, 9 Stunden", nur für die Lernzeit (Stunden).
- Die Zielvariable ist das Ergebnis des Tests, der im Durchschnitt 0,46 beträgt, also 46 von 100 bestanden.
#Zeichnen Sie ein Balkendiagramm
sns.set()
sns.barplot(x = "hours", y = "result", data = df, palette='summer_r')
sns.set ()
gibt den Stil des Diagrammbereichs an, der der Standardstatus ist. Verwenden Sie alternativ sns.set (style =" whitegrid ")
, um eine Graustufenlinie auf weißem Hintergrund zu erstellen.
- Das Argument lautet
seaborn.barplot (x Spaltenname, y Spaltenname, DataFrame Name, Farbpalettenname)
.
- Standardmäßig wird ein Fehlerbalken (Fehlerbereich) gezeichnet, der das 95% -Konfidenzintervall angibt. Fügen Sie dem Argument
ci = None
hinzu, um es auszublenden.
- https://seaborn.pydata.org/generated/seaborn.barplot.html
- Je länger die Lernzeit ist, desto höher ist tendenziell die Erfolgsquote, und die Erfolgsquote schwankt stark, je nachdem, ob sie 5 Stunden oder weniger oder 6 Stunden oder mehr beträgt.
- Berechnen wir die Erfolgsquote für jede Lernzeit.
pass_rate = df.groupby("hours").mean()
- Verwenden Sie die Pandas-Funktion
groupby ()
, um dieselben Elemente in den in den Argumenten angegebenen Spalten zu gruppieren und den Durchschnitt von jedem mit .mean ()
zu berechnen.
- Die Erfolgsquote steigt dramatisch an, wenn die Lernzeit 6 Stunden oder mehr beträgt.
(3) Modellschätzung und Bestätigung der Ergebnisse
#Schätzen Sie das Modell
mod_glm = smf.glm(formula = "result ~ hours",
data = df,
family = sm.families.Binomial()).fit()
- Wenn Sie ein verallgemeinertes lineares Modell mit Statistikmodellen schätzen möchten, verwenden Sie die Funktion
smf.glm ()
. glm ist eine Abkürzung für Generalized Linear Models.
- Das erste Argument, "Formel", gibt die Struktur des Modells an, wobei die Zielvariable "Ergebnisse" und die erklärende Variable "Stunden" ist.
- Das dritte Argument, "Familie", ist die Angabe der Wahrscheinlichkeitsverteilung. Da dieses Beispiel eine Binomialverteilung ist, wenden Sie "sm.families.Binomial ()" an.
#Geben Sie eine Zusammenfassung der Schätzergebnisse aus
mod_glm.summary()
#Zeichnen Sie eine Regressionskurve
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)
- Wenn das Argument "logistic" True ist, wird angenommen, dass y eine binäre Variable ist, und Statistikmodelle werden verwendet, um das logistische Regressionsmodell zu schätzen. Eine binäre Variable ist eine Variable, die nur zwei Werte annehmen kann, 0 und 1.
- Die Argumente
dispers_kws
und line_kws
sind zusätzliche Schlüsselwortargumente, die an plt.scatter und plt.plot übergeben werden und die Farbe der Punkte und Regressionskurven im Streudiagramm angeben.
- Die Argumente "x_jitter" und "y_jitter" geben an, dass die Punkte nur zur Darstellung leicht nach oben und unten gestreut werden sollen. Da das Bestehen / Nichtbestehen nur 1 oder 0 ist, werden die Punkte so gesteuert, dass sie sich überlappen.
- Versuchen Sie, die Erfolgsquote für jede Lernzeit numerisch zu ermitteln.
#Spalte mit gleicher Differenznummer mit Spaltennamen Stunden(0~9)Erstellen Sie einen DataFrame für
predicted_value = pd.DataFrame({"hours": np.arange(0, 10, 1)})
#Berechnen Sie die vorhergesagte Erfolgsquote
pred = mod_glm.predict(predicted_value)
- Verwenden Sie für das Modell "mod_glm" die Funktion "Predict ()", um den vorhergesagten Wert gemäß dem erstellten Datenrahmen "Predicted_Wert" zu berechnen.
⑷ Finden Sie das logarithmische Quotenverhältnis und vergleichen Sie es mit dem Koeffizienten
#Erhalten Sie 1 Stunde und 2 Stunden Passrate
pred_1 = pred[1]
pred_2 = pred[2]
#Berechnen Sie die Gewinnchancen für jeden
odds_1 = pred_1 / (1 - pred_1)
odds_2 = pred_2 / (1 - pred_2)
#Berechnen Sie das Log Odds Ratio
print("Log Odds Ratio:", round(sp.log(odds_2 / odds_1), 3))
#Modellkoeffizienten berechnen
value = mod_glm.params["hours"]
print("Modellkoeffizienten:", round(value, 3))
- ** Das Log Odds Ratio entspricht dem Regressionskoeffizienten **.
- Wenn Sie die Exp (Exponentialfunktion) des Regressionskoeffizienten verwenden, entspricht diese auch dem Odds Ratio.
numpy.exp (x)
gibt das natürliche logarithmische $ e $ an die $ x $ Potenz zurück.
#Nehmen Sie exp des Regressionskoeffizienten
exp = sp.exp(mod_glm.params["hours"])
print("Koeffizient exp:", round(exp, 3))
#Quotenverhältnis berechnen
odds = odds_2 / odds_1
print("Wahrscheinlichkeit:", round(odds, 3))
- Mit anderen Worten, wenn sich die erklärende Variable um 1 ändert, ändert sich die objektive Variable um das Odds Ratio.
- In einigen Fällen ist es möglicherweise einfacher zu verstehen oder zu erklären, wenn Sie in ein Odds Ratio anstatt in einen Regressionskoeffizienten umrechnen.