import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
df= pd.read_csv('c:/1/Stroke_Prediction_NUM.csv')
df.head(3)
Celem naszego badania jest sprawdzenie, czy istnieje istotny statystycznie wpływ palenia na udar mózgu.
Podzielę pacjentów na trzy grupy:
- ci co kiedyś palili,
- ci co palą,
- ci, którzy nigdy nie palili.
– h0: poziom zapadalności na udar (średnia) jest taki sam pomiędzy grupami
– h1: poziom zapadalności na udar (średnia) jest statycznie inny pomiędzy strefami
pd.pivot_table(df, index= ['Smoking_Status'], columns = "Stroke", values= "ID", aggfunc= ['count'])
Test ANOVA¶
import statsmodels.api as sm
from statsmodels.formula.api import ols
model_H = ols('Stroke ~ C(Smoking_Status)', data=df).fit()
anova_table = sm.stats.anova_lm(model_H, typ=2)
print(anova_table)
Interpretacja: Wartość P uzyskana z analizy ANOVA jest znacząca (P
ANOVA pokazała, że istnieją statystycznie istotne różnice. Niestety ANOVA nie wskazuje, które grupy różnią się od siebie.
Aby poznać pary różniące się istotnie, należy przeprowadzić analizę wielokrotnego porównania par (porównanie post-hoc) za pomocą testu HSD Tukeya.
Testu HSD Tukeya¶
from statsmodels.stats.multicomp import pairwise_tukeyhsd
m_comp = pairwise_tukeyhsd(endog=df['Stroke'], groups=df['Smoking_Status'], alpha=0.05)
print(m_comp)
m_comp.plot_simultaneous() # Plot group confidence intervals
plt.vlines(x=0.022,ymin=-0.5,ymax=3.5, color="red", alpha=0.8, linestyle='--')
Test Tukey HSD wykazał statystycznie istotną różnicę w zapadalności na udary w następujących parach:
– “formerly smoked” i “never smoked”
– “formerly smoked” i “smokes”
Powyższe wyniki z Tukey HSD sugerują, że oprócz wymienionych zestawów, wszystkie inne porównania par zachowują hipotezę zerową, czyli w pozostałych parach nie istnieją istotne różnice statystyczne w poziomie zapadalności na udar. Okazuje się, że decydujące jest to, że ktoś kiedyś palił i potem rzucił.
Sprawdzenie spełnienia warunków ANOVA¶
Warunki:
- wartości rezydualne mają rozkład normalny (test Shapiro Wilksa)
- wariancje w grupach są jednorodne (test Levene lub Bartlett)
- obserwacje są prowadzone niezależnie od siebie
Test Levene’a Sprawdzenie jednorodności wariancji¶
Hipoteza zerowa : grupy z populacji mają równe wariancje.
PKS = pd.pivot_table(df, index = 'Gender', columns = 'Smoking_Status', values='Stroke')
PKS.head(4)
P01=PKS['formerly smoked'].dropna(how='any')
P02=PKS['never smoked'].dropna(how='any')
P03=PKS['smokes'].dropna(how='any')
Wykresy przedstawiają statystyki poziomu prawdopodobieństwa w czterech grupach.
PKS.plot.kde()
import matplotlib.pyplot as plt
PKS.boxplot(column=['formerly smoked', 'never smoked', 'smokes'], grid=False)
Wartość wynikowa ‘Stroke’ jest wartością dyskretną. Nie ma więc potrzeby sprawdzania zgodności rozkładu normalnego.
Gdybyśmy jednak chcieli to sprawdzić testem test Levenea …
import scipy.stats as stats
w,p = stats.levene(P01,P02,P03)
print("Value: ",w)
print("p-value: ",p)
Ponieważ wartość P jest znacząca, bo jest mniejsza od współczynnika ufności 0.05 (p
Przyjrzymy się bliżej resztom modelu. Jak można się było spodziewać to wartości dyskretne…
from statsmodels.graphics.gofplots import qqplot
from matplotlib import pyplot
qqplot(model_H.resid, line='s')
pyplot.show()