** Was Sie mit diesem Artikel machen können **
Ich studiere Biologie an der Graduiertenschule. Python ist sehr nützlich für die Analyse von experimentellen Daten in Diagrammen, aber es war ziemlich problematisch, da es nur wenige Bibliotheken gibt, die verschiedene Tests durchführen (insbesondere signifikante Unterschiedstests zwischen Gruppen). Als Lösung
Usw. sind möglich. (Für 2 konnte ich dies tun, indem ich [Rpy2] einführte (https://qiita.com/MTNakata/items/04a045f4beb0fa9e3a4d))
Ich möchte jedoch wirklich nicht parametrische Tests in Python ausführen! Aus diesem Grund habe ich beschlossen, einen nicht parametrischen Test mit einer Bibliothek namens dritte Methode ** scilit_posthocs ** durchzuführen.
Wenn Sie nur an der Implementierung von scikit_posthocs interessiert sind, können Sie hoffentlich sofort zur folgenden Tabelle springen.
Zunächst einmal, um den Test zu starten Der folgende Inhalt basiert auf dem folgenden J-Stage-Artikel Für diejenigen, die den statistischen Test I nicht verstehen, II //www.jstage.jst.go.jp/article/kagakutoseibutsu/51/6/51_408/_pdf), [Ⅲ](https://www.jstage.jst.go.jp/article/kagakutoseibutsu/51/ 7 / 51_483 / _pdf)
Ich interpretiere und beschreibe diese Artikel auf meine eigene Weise.
Es wird ein bisschen lang sein, also werde ich es aktualisieren, wenn ich Zeit habe, aber kurz gesagt, ich werde dem nächsten Fluss folgen.
** Nicht unterstützte (unabhängige) Daten in 3 oder mehr Gruppen ** ↓ Normalitätstest (Shapiro-Wilk-Test oder QQ-Diagramm ..) → Gehen Sie zu Non-Para ↓ Gleicher Dispersionstest (Bartlett-Test) → Zu Nicht-Abs ↓ Zentralisierte Verteilungsanalyse (ANOVA) → zu Nicht-Abs ↓ Tukey_HSD-Test, Scheffe-Test, Tukey-Test (n ist in jeder Gruppe gleich), Dunnett-Test (Vergleich mit der Kontrollgruppe)
In dem Artikel, auf den ich mich bezog,
** Wenn Sie im obigen Flussdiagramm zu Nicht-Para gehen ** ↓ Gleicher Dispersionstest (Levene-Test, Fligner-Test) ↓ Einwegverteilungsanalyse (Kruskal-Wallis-Test) ↓ Steel-Dwass (dscf) -Test, Conover-Test Derzeit handelt es sich bei diesen Tests auch um Post-hoc-Tests. Warum also nicht einen signifikanten Unterschied in der zentralisierten Dispersionsanalyse aufweisen? ?? Ich denke das, aber gemäß dem obigen Artikel habe ich geschrieben, dass es nicht notwendig ist, eine verteilte Analyse durchzuführen.
scikit_posthocs ist eine Bibliothek, die viele Tests abdeckt und sehr einfach zu verwenden ist, die scipy und statsmodels nicht abdecken. Die offizielle Website ist sehr gut organisiert. Offizielle HP GitHub Repository
Abhängige Pakete sind Numpy, Pandas, Scipy, Stasmodels, Matplotlib, Seaborn. scikit_posthocs kann mit pip installiert werden.
!pip install scikit_posthocs
ist. Jeder Test (außer HSD) kann wie folgt ausgeführt werden.
import scikit_posthoc as sp
import seaborn as sns
#Laden Sie Titanic-Daten
df = sns.load_dataset("titanic")
#Steel-Dwass-Test
#val_col ist die Wertespalte
#group_col ist die Spalte der Gruppe, die Sie vergleichen möchten
sp.posthoc_dscf(df,val_col="fare",group_col="class")
Das Ergebnis wird im folgenden Datenrahmen zurückgegeben. Der Inhalt der Tabelle ist p-Werte.
Ich habe den obigen Inhalt auf Github zusammengestellt. rola-bio/stats_test Laden Sie stats_test.py in Ihr Arbeitsverzeichnis herunter und importieren Sie es. Und wenn Sie stats_test () ausführen, Wie im obigen Ablauf gezeigt, werden die Normalität und die gleiche Varianz der Daten getestet und die Varianzanalyse wird automatisch durchgeführt. Die Daten werden dann mit einem geeigneten Test analysiert und die Ergebnisse der signifikanten Unterschiede und das Balkendiagramm der Daten werden dargestellt. Standardmäßig ist einer der Tests Tukey-HSD, Steel-Dwass und Conover ausgewählt.
Verwenden wir diese Funktion nun, um den Tarifunterschied in Abhängigkeit vom Passagiertyp anhand der Passagierdaten der Titanic zu analysieren, die bei Seeleuten standardmäßig installiert ist.
titanic.ipynb
import stats_test as st
import seaborn as sns
#Laden Sie Titanic-Daten
df = sns.load_dataset("titanic")
df.head()
Verwenden Sie als Nächstes stats_test (), um den Datenrahmen, den zu testenden Wert und das zu gruppierende Element anzugeben.
Dieses Mal habe ich versucht, die Passagiertypen nach Einstiegsort (embark_town) zu unterteilen.
titanic.ipynb
st.stats_test(df,val_col="fare",group_col="embark_town")
Ups ~~? ?? Ich habe einen Fehler bekommen, als ich das ausgeführt habe.
TypeError: '<' not supported between instances of 'float' and 'str'
Anscheinend gibt es einen Fehler (nan) in Tarif oder Embark_town. Dieser Fehler kann auftreten, wenn group_col mit dem Wert int oder null gemischt wird. Im Falle eines int-Fehlers
df ["Spaltenname"] = df ["Spaltenname"] .astype (str)
Sie können damit umgehen. Dieses Mal entfernte ich Nan mit Dropna wie unten gezeigt.
titanic.ipynb
st.stats_test(df.dropna(subset=["embark_town"]),val_col="fare",group_col="embark_town")
Anscheinend gibt es zwischen allen Gruppen einen signifikanten Unterschied des p-Werts <0,001 oder weniger. Leute, die nach Cherbourg gekommen sind, sind bedeutend verrückt ...
Ups, ich! Ich gab eine Erklärung ab, die für einen Mann lächerlich wäre.
Menschen, die in Cherbourg fahren, sind schwer krank
Diese Daten unterscheiden nicht zwischen Männern und Frauen. Lassen Sie uns als Nächstes einen signifikanten Unterschiedstest nach Geschlecht durchführen.
titanic.ipynb
for sex in df["sex"].unique():
print("""
This result is from {}
""".format(sex))
df_query = df.query("sex =='{}'".format(sex))
st.stats_test(df_query.dropna(subset=["embark_town"]),
val_col="fare",group_col="embark_town")
Das Ergebnis war so etwas. Es ist schwer zu verstehen, da sich die Farbcodierung der Einstiegsstelle seit dem ersten Ergebnis geändert hat. .. .. Sie können es anpassen, indem Sie mit sign_barplot () im Paket spielen.
Auf jeden Fall scheinen die Passagiere in Cherbourg sowohl für Männer als auch für Frauen bedeutend reicher zu sein. (Gununu ,,,) Der Lohnunterschied zwischen Southampton und Cherbourg für Männer ist jedoch auf einen p-Wert von etwa 0,01 gestiegen. Liegt es an Maya Yoshida?
Das ist es.
Übrigens, wenn Sie result = True an stats_test () übergeben, wird auch das Ergebnis des Tests in der Mitte angezeigt. Sie können den Test selbst angeben, indem Sie test = "Testname" bestehen. (Oder Sie können es einfach ändern, indem Sie mit der Funktion stats_test.py, one_way_ANOVA () spielen.)
Im Laufe der Zeit können wir auch Implementierungen einzelner Tests schreiben. Einzelheiten entnehmen Sie bitte dem Inhalt des Codes ...
Recommended Posts