Этот блог является продолжением моего последнего блога Прогнозирование ожидаемой продолжительности жизни, часть 1: Использование статистики для понимания. Если вы хотите создать репозиторий github для получения более подробного кода, посетите: https://github.com/roydipta/life_expectancy.
Резюме:
В прошлом блоге мы исследовали использование статистики, чтобы получить представление о данных, которые у нас были. Выводы были:
- Продолжительность жизни в более развитой стране выше, чем в развивающейся стране.
- Ожирение выше в более развитой стране, чем в развивающейся.
Это кажется очень элементарным открытием, но мы можем продолжить исследование этих утверждений, чтобы увидеть, сможем ли мы узнать что-нибудь новое.
Начало: изучение корреляционной матрицы и диаграмм рассеяния
У нас много функций, так как же нам определить, с какими из них работать? Мы можем видеть, какие функции коррелируют друг с другом, чтобы избежать мультиколлинеарности. Для этого мы можем создать корреляционную матрицу.
Мы также можем посмотреть на диаграмму рассеяния, чтобы увидеть, как каждая функция соотносится с ожидаемой продолжительностью жизни.
def CorrMtx(df, dropDuplicates = True): if dropDuplicates: mask = np.zeros_like(df, dtype=np.bool) mask[np.triu_indices_from(mask)] = True # Set background color / chart style sns.set_style(style = 'white') # Set up matplotlib figure f, ax = plt.subplots(figsize=(11, 9)) # Add diverging colormap from red to blue cmap = sns.diverging_palette(250, 10, as_cmap=True) # Draw correlation plot with or without duplicates if dropDuplicates: sns.heatmap(df, mask=mask, cmap=cmap, square=True, linewidth=.5, cbar_kws={"shrink": .5}, ax=ax) else: sns.heatmap(df, cmap=cmap, square=True, linewidth=.5, cbar_kws={"shrink": .5}, ax=ax) CorrMtx(df.corr(), dropDuplicates = True)
features = ['year', 'adult_mortality', 'infant_deaths', 'alcohol', 'percentage_expenditure', 'hepatitis_b', 'measles', 'bmi', 'under-five_deaths', 'polio', 'total_expenditure', 'diphtheria', 'hiv/aids', 'gdp', 'population', 'thinness_1-19_years', 'thinness_5-9_years', 'income_composition_of_resources', 'schooling', 'obesity', 'suicides_no'] n = 4 row_groups= [features[i:i+n] for i in range(0, len(features), n) ] for i in row_groups: pp = sns.pairplot(data=df, y_vars=['life_expectancy'],x_vars=i, kind="reg", height=3)
Из этих графиков видно, что на графиках рассеяния выделяются некоторые особенности. В частности: образование, ожирение, алкоголь, структура доходов, дифтерия, процентные расходы и развитый статус. Таким образом, мы можем провести базовую регрессию по этим функциям и посмотреть, что у нас получится.
ols('life_expectancy~schooling+obesity+alcohol+income_composition_of_resources+percentage_expenditure+diphtheria+status',data=df).fit().summary()
Итак, похоже, что наш R-Squared неплох. Это 0,68, что означает, что дисперсия зависимой переменной объясняется 68% независимых переменных. Но в результатах есть кое-что интересное. Если вы посмотрите на вкладку коэффициентов в сводке OLS, вы увидите, что ожирение имеет положительную корреляцию. Что на самом деле не имеет смысла, эта положительная корреляция означает, что чем выше шкала ожирения в стране, тем выше их ожидаемая продолжительность жизни. Хм, а почему так? Это может означать, что более развитые страны имеют лучший доступ к продовольственным ресурсам. Давайте рассмотрим это дальше. Если мы правы, в развитых странах должно быть больше людей с ожирением. Мы должны пройти наш проверенный Т-тест!
In [13]:
stats.ttest_ind(developed['obesity'], developing['obesity'])
Из [13]:
Ttest_indResult(statistic=8.718160546902753, pvalue=4.985541604428258e-18)
In [74]:
y = df.groupby(['status']).obesity.mean().fillna(0) x = y.index; figure, ax = plt.subplots(figsize = (10,6)); sns.barplot(x,y, palette="Greens_r"); sns.set(style='dark') ax.set_title('Status of Country vs Obesity', fontdict={'fontsize':'x-large'}); ax.set_xlabel('Status', fontdict={'fontsize':'x-large'}); ax.set_ylabel('Obesity', fontdict={'fontsize':'x-large'});
Поскольку наше значение P значительно ниже уверенности 0,05, мы можем отклонить нулевую гипотезу. Таким образом, мы можем с уверенностью сказать, что в среднем в развитых странах уровень ожирения выше, чем в неразвивающихся странах. Но есть кое-что интересное. Разделив корреляцию ожирения и ожидаемой продолжительности жизни в развитых и развивающихся странах, мы можем увидеть, что в развивающихся странах по мере увеличения индекса ожирения продолжительность жизни увеличивается. В то время как в более развитых странах по мере увеличения ожирения продолжительность жизни уменьшается.