Этот блог является продолжением моего последнего блога Прогнозирование ожидаемой продолжительности жизни, часть 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, мы можем отклонить нулевую гипотезу. Таким образом, мы можем с уверенностью сказать, что в среднем в развитых странах уровень ожирения выше, чем в неразвивающихся странах. Но есть кое-что интересное. Разделив корреляцию ожирения и ожидаемой продолжительности жизни в развитых и развивающихся странах, мы можем увидеть, что в развивающихся странах по мере увеличения индекса ожирения продолжительность жизни увеличивается. В то время как в более развитых странах по мере увеличения ожирения продолжительность жизни уменьшается.