Мне тут стало интересно, а на сколько лет можно прожить больше если исключить те факторы риска, на которые можно влиять самому? Чтобы ответить на этот вопрос я взял открытые данные одного из самых масштабных исследований влияния факторов риска на смертность “Global Burden of Disease 2019” [1] и с их помощью рассчитал оценку увеличения ожидаемой продолжительности жизни при условии исключения управляемых факторов риска. Чтобы было интереснее я оформил результаты в виде дашборда куда можно зайти выбрать страну, пол, возраст и факторы риска и посмотреть результаты. Под катом подробнее о процессе обработки данных, исходники самого дашборда на питоне и конечно подробно посмотрим на графики, там интересно.


Содержание:

  • Факторы риска и формат работы

  • Разглядывание графиков с результатами расчетов

  • Популяризация популяционной статистики

  • Валидация результатов и встреча с хаосом

  • Задача на размышление

  • Ссылки и источники

Факторы риска и формат работы

Итак, факторы были взяты следующие:

  • Табак (курение, пассивное курение, жевательный табак)

  • Употребление алкоголя

  • Употребление наркотиков

  • Низкая физическая активность

  • Небезопасный секс

  • Диетические риски (включает 15 различных факторов риска)

  • Высокое систолическое артериальное давление

  • Высокий индекс массы тела

  • Высокий уровень холестерина ЛПНП

  • Высокий уровень глюкозы в плазме натощак

Результаты с рассчитанной оценкой увеличения ожидаемой продолжительности жизни при исключении приведенных выше факторов я оформил в виде интерактивного дашборда и выложил в открытый доступ https://life-extension-3oyids3kha-uc.a.run.app

На страницу дашборда можно зайти по ссылке, выбрать страну, возраст, отметить факторы риска и посмотреть какое количество лет прибавится к ожидаемой продолжительности жизни при исключении выбранных факторов риска. Сразу можно посмотреть, как распределяется прибавка к продолжительности жизни с выбранными параметрами по отдельным факторам риска, по странам, по половому признаку и по возрастам. С мобильного тоже старался чтобы можно было что-то посмотреть, но в верстке мне конечно есть куда расти.

Веб интрефейс дашборда на десктопном и мобильном размере экрана
Веб интрефейс дашборда на десктопном и мобильном размере экрана

Так же, в открытом доступе на github исходный код и код обработки данных [2, 3]. Реализовано все на питоне, с помощью библиотек Plotly и Dash, для создания интерактивных дашбордов на мой взгляд очень простое и гибкое решение. Все добро упаковывается в докер контейнер и разворачивается с помощью Google Cloud Run – это так называемый serverless хостинг, позволяет экономить за счет того, что использует вычислительные ресурсы только когда кто-то заходит по ссылке, идеальное решение для сервисов, которые вы делаете для небольшой аудитории или для портфолио чтобы показать кому-то по случаю. (кстати напишите в комментариях интересно ли вам было бы чтобы я сделал подробную инструкцию по разработке и деплою подобного приложения)

Результаты и графики

Результаты получились довольно интересные, если вы мужчина средних лет, живущий в одной из постсоветских стран у меня для вас хорошая и плохая новости. Плохая это то, что ваша страна скорее всего в лидерах по мужской смертности по управляемых факторам риска, хорошая новость в том, что прибавка к ожидаемой продолжительности жизни при исключении этих факторов риска тоже одна из самых высоких в мире.

Распределение прибавки к ожидаемой продолжительности жизни по странам для мужчин в возрасте 37 лет и распределение по факторам риска прибавки к продолжительности жизни для России
Распределение прибавки к ожидаемой продолжительности жизни по странам для мужчин в возрасте 37 лет и распределение по факторам риска прибавки к продолжительности жизни для России

В целом же оценка увеличения опж как у мужчин так и у женщин сильно варьирует в зависимости от страны и возраста, но в первые 40 лет жизни не слишком изменяется, находясь в интервале 5.87 (q05=4.09, q95=8.09) лет, зато начиная с 40 лет стремительно начинает падать снижаясь к 80 годам более чем вдвое до 2.51, (q05=1.68, q95=3.43) соответственно. Что в целом логично ведь людей, имеющих факторы риска, связанные с плохими привычками и нездоровым образом жизни до такого возраста, доживает гораздо меньше. Вывод, если вам 40 лет – самое время «закрыться с прибылью» и начать вести здоровый образ жизни прямо сейчас, позже может быть уже поздно.

Распределение увеличения ожидаемой продолжительности жизни по возрасту.
Распределение увеличения ожидаемой продолжительности жизни по возрасту.

Интересные графики также получаются если добавить к данным разметку стран по уровню дохода от всемирного банка и отобразить каждую страну в координатах, где по горизонтали будет лежать текущая продолжительность жизни при рождении, а по вертикали полученная оценка увеличения продолжительности жизни при исключении управляемых факторов риска. Очередная иллюстрация классического "Все счастливые семьи похожи друг на друга, а каждая несчастливая семья несчастлива по-своему."

Ожидаемая продолжительность жизни к увеличению ожидаемой продолжительности жизни при рождении для стран раскрашенный по уровню дохода.
Ожидаемая продолжительность жизни к увеличению ожидаемой продолжительности жизни при рождении для стран раскрашенный по уровню дохода.

Разброс значений в оценке увеличения опж довольно маленький в странах с самой высокой продолжительностью жизни и напротив, чем меньше опж, тем разброс по вертикальной оси становится больше. Интересно что наибольшее значение оценки увеличения продолжительности жизни получается в странах нижнего среднего и верхнего среднего дохода, как правило — это развивающиеся страны, возможно такие высокие значения можно объяснить тем что в этих странах у людей уже появилась возможность вести нездоровый образ жизни но еще нет такой хорошей медицины как в самых богатых и развитых странах.

С другого конца продолжительности жизни как правило находятся самые отстающие страны со слабой экономикой и их оценка увеличения продолжительности жизни при исключении управляемых факторов риска даже еще ниже чем в самых богатых странах, конечно не потому что все там поголовно ходят каждый день в спортзал, а скорее потому что смертность в этих странах больше связана с факторами на которые каждый отдельный человек повлиять может довольно слабо, что-то вроде отсутствия гигиены чистой питьевой воды и базовых медицинских услуг.

Взглянем еще и на сравнение между среднемировыми мужчинами и женщинами по вкладам факторов риска в оценку увеличения продолжительности жизни. В целом у обоих полов основную и примерно одинаковую долю занимают метаболические и пищевые факторы риска но у женщин гораздо больший вклад от исключения небезопасного секса – 7% против 3.2% у мужчин, а у мужчин бросаются в глаза в разы большие доли вкладов при исключении употребления алкоголя и табака –  7.9% против 2.1% и 16% против 6.4% соответственно. Выводы делайте сами.

Обработка данных и немного популярной популяционной статистики

Прежде нам нужна интуиция о том, как строится оценка «ожидаемая продолжительность жизни», по сути, это среднее количество лет, которое проживут гипотетические люди, находящиеся в одной половозрастной группе, при условии, что коэффициенты смертности останутся такими же, какими мы их наблюдали на момент сбора данных.

Мы говорим как бы: а давайте посчитаем соотношение населения по возрастам к смертности в этих возрастах за текущий год и представим, что эти соотношения не будут меняться в будущем, а затем смоделируем популяцию воображаемых статистических существ, над которыми мы проведем совершенно не гуманный эксперимент. Эти статистические люди должны будут родиться все в один момент в количестве скажем 100.000, а затем единственной их задачей будет жить с теми же коэффициентами смертности как и в нашем реальном мире.

Затем мы сразу переходим к тому печальному моменту, когда в нашем смоделированном мире умер последний его представитель и начинаем свои безжалостные подсчеты. Нам нужно посчитать для каждого года жизни этой популяции сколько лет удалось прожить тем статистическим людям, которые до этого возраста дожили.

Например, упрощено возьмем что коэффициенты смертности начинаются с 0.01 и увеличиваются на 0.01 на протяжении 100 лет. Таким образом если в возрасте 0 лет у нас было 100.000 людей то до возраста 1 доживет уже 100.000 – (100.000 * 0.01) =  99.000, тогда до следующего возраста доживет уже 99.000 – (99.000 * 0.02) = 97.020 и так далее до возраста 101 до которого уже не доживет ровно 0 статистических существ т.к. коэффициент смертности в 100 лет станет равным 1.

Далее мы считаем сколько человеко-лет было прожито в каждой возрастной группе, например от 0 до 1 года у нас умерло 1000, значит 99.000 человек прожили полный год в этом возрасте а из тысячи тех, кому не повезло будем считать, что они умирали в течении года равномерно и в среднем тогда получается, что они прожили в этом возрасте полгода (кто-то умер в начале года, а кто-то в конце, находим среднее) итого 99.000 + 1000 / 2 = 99.500 человеко-лет для возраста 0. Так повторяем для каждого возраста.

Код расчета ожидаемой продолжительности жизни (на python)
def life_expectancy_from_population_and_deats(
    data: pd.DataFrame,
    age_group_start_column: str,
    deaths_column: str,
    population_column: str,
    radix: int=100_000,
    last_age_group_years: int=5,
) -> pd.DataFrame:
    """
    calculating life expectancy by population and deaths
    based on guideline
    https://www.ons.gov.uk/peoplepopulationandcommunity/healthandsocialcare/healthandlifeexpectancies/methodologies/guidetocalculatingnationallifetables
    """

    life_table = data.copy()
    life_table.sort_values(by=age_group_start_column, inplace=True)

    # Calculate q_x - likelihood or risk of death having reached age x
    life_table['q_x'] = (
       life_table[deaths_column].values
        /
        (
            (
                0.5
                *
                life_table[deaths_column].values
            )
            +
            life_table[population_column].values
        )
    )

    # Calculate l_x - number of people surviving to age x
    life_table['l_x'] = np.nan
    life_table.loc[life_table.index[0], 'l_x'] = radix

    for i in range(1, len(life_table.index), 1):
        life_table.loc[life_table.index[i], 'l_x'] = (
            life_table.loc[life_table.index[i - 1], 'l_x']
            -
            (
                life_table.loc[life_table.index[i - 1], 'l_x']
                *
                life_table.loc[life_table.index[i - 1], 'q_x']
            )
        )

    # Calculate L_x - the number of person years lived at each individual age group
    life_table['L_x'] = np.nan

    for i in range(0, len(life_table.index) - 1, 1):

        curr_age_group_years = (
            life_table.loc[life_table.index[i + 1], age_group_start_column]
            -
            life_table.loc[life_table.index[i], age_group_start_column]
        )

        current_age_L_x = (
            life_table.loc[life_table.index[i], 'l_x']
            +
            life_table.loc[life_table.index[i + 1], 'l_x']
        )

        life_table.loc[life_table.index[i], 'L_x'] = curr_age_group_years * (current_age_L_x / 2)

    life_table.loc[life_table.index[-1], 'L_x'] = (
        last_age_group_years * (life_table.loc[life_table.index[-1], 'l_x'] / 2)
    )

    # Calculate T_x - total number of years lived
    life_table['T_x'] = np.nan

    for i in range(0, len(life_table.index), 1):

        curr_age_group_sum = life_table.loc[life_table.index[i]:, 'L_x'].sum()

        life_table.loc[life_table.index[i], 'T_x'] = curr_age_group_sum

    # Calculate E_x - period expectation of life at exact age x
    life_table['E_x'] = (
        life_table['T_x'].values
        /
        life_table['l_x'].values
    )

    return life_table

Теперь чтобы посчитать ожидаемую продолжительность жизни в любом возрасте, мы берем выбранную возрастную группу, смотрим сколько в ней было человек на старте, и находим сумму прожитых лет начиная с этого возраста до самого последнего, и потом находим среднее, то есть делим сумму лет на количество человек - получаем среднее количество лет которое проживет наш воображаемый статистический человек находясь в этом возрасте.

Ну а чтобы посчитать прибавку к ожидаемой продолжительности жизни достаточно пересчитать все вышеперечисленные пункты с подправленными коэффициентами смертности из которых мы убрали смерти, связанные с фактором риска. Тут тоже все просто, меньше коэффициент смертности больше гипотетических людей проживают больше лет. Затем вычитаем из полученного результата оригинальную продолжительность жизни и получаем прибавку.

То есть основная часть задачи состоит в том, чтобы рассчитать на сколько уменьшится смертность в каждом возрасте при исключении фактора риска. И тут есть одна сложность если взять смертность по каждому фактору риска и сложить, то получится число в несколько раз большее чем вообще людей умерло, это происходит потому, что каждая смерть может быть связана с несколькими факторами.

То есть если мы напрямую вычтем смертность, связанную с фактором риска, то получится, что мы как бы говорим окей, те люди, смерть которых была связана, например с курением и высоким давлением они бы все не умерли если бы исключили курение, но кажется, что это утверждение вряд ли верно. Чтобы получить более правдоподобную оценку мы можем сложить смертность по каждому фактору риска, посчитать долю каждого фактора риска в общей сумме, а затем взять число смертей из графы All risks factors, куда просто записывается любая смерть, которая была связана с одним или более фактором риска, и посчитать вклад каждого фактора риска в это число.

Интерфейс конфигуратора для выбора параметров при загрузке данных с результатами исследования Global Burden of Disease: https://vizhub.healthdata.org/gbd-results/
Визуальное представление разницы детальной и агрегированной статистики смертности по факторам риска

Валидация результатов и встреча с хаосом

Чтобы проверить совпадут ли результаты моих расчетов с ожидаемой продолжительностью жизни уже рассчитанной авторами исследования я взял исходные данные сайта предоставляющего доступ к данным исследования Global Burden of Disease https://vizhub.healthdata.org/gbd-results/ Выбрав смертность с разбивкой по полу и возрасту для 204 стран я пересчитал ожидаемую продолжительность жизни. Когда я построил гистограмму распределения средней абсолютной ошибки по странам и по полу между рассчитанным мною значением и оригинальным, я был озадачен:

Средняя абсолютная ошибка между рассчитанным значением ожидаемой продолжительности жизни и оригинальными данными из исследования
Средняя абсолютная ошибка между рассчитанным значением ожидаемой продолжительности жизни и оригинальными данными из исследования

То есть в среднем ошибка довольно небольшая составляет порядка 0.07 лет, в пересчете на дни около 25 дней. Все было бы неплохо, если бы не два еле заметных столбика на значениях 1.5 и 2.59 года, оказалось что высота этих столбиков равна единицам. Но когда я узнал что эти столбцы отвечали значениям посчитанным мною для мужчин и женщин по стране Украина, то был просто обескуражен. Дальше я взглянул на сравнение рассчитанного и загруженного значений по возрасту для мужчин по Украине и увидел следующую картину.

То есть рассчитанное с помощью смертности и популяции значение оказалось гораздо ниже чем загруженное с того же сайта. А поскольку для всех остальных стран значения практически совпадают то можно сделать наиболее вероятное предположения что после расчета ожидаемой продолжительности жизни для Украины были либо были увеличены данные по смертности либо снижены данные по популяции. В общем тут я грустью еще раз осознал, что война это абсолютный хаос, который просачивается везде.

Заключение

На прощание интересный мысленный эксперимент на подумать, мы знаем, что прогресс не просто идет, а двигается с ускорением. Еще пару лет назад мы не могли себе представить, что появится чат GPT и что он будет настолько мощным, так же каждый год появляются новые способы лечения, позволяющие людям жить дольше и чувствовать себя лучше. Представьте, что через 5 лет появится способ отката биологического возраста на 5 лет, а в течение следующих 5 лет медицина научится делать откат на еще 10 лет и так далее. А теперь подумайте сколько лет жизни можно потерять, не дожив до первой продлевающей жизнь терапии!

Кстати если вас интересует тема продления жизни присоединяйтесь к сообществу активистов https://openlongevity.org/ продвигающих данное направление на всех уровнях от научных разработок до привлечения инвестиций и подготовки общественного мнения, у ребят также есть русскоязычный канал в телеграмме: t.me/LifeExtensionForum (https://t.me/LifeExtensionForum) и куча интересных проектов.

Ну и если вам понравилась эта статья расшарьте её в соц сетях, подписывайтесь, на меня тут, поставьте звездочку проекту на github или добавляйтесь на linkedin, это будет хорошей прибавкой к моей мотивации делать новые интересные публикации.

Ссылки

  1. Исследование Global Burden of Disease

  2. Репозиторий с кодом дашборда

  3. Репозиторий с кодом обработки данных и дебагом графиков

Комментарии (7)


  1. 0sya
    07.08.2023 11:01

    Спасибо.
    У меня вопрос: почему в "калькуляторе" с увеличением возраста ожидаемая продолжительность жизни растёт?
    По моим сведениям те, кому сейчас 10 лет в среднем проживут дольше, чем те, кому уже 60. Это вызвано улучшениями условий жизни и труда, развитием медицины, заботе об экологии и т.д.

    А в "калькуляторе" наоборот:

    РФ, мужчина, 10 лет - ожидаемая 68,51, "добавочная" 8,86

    РФ, мужчина, 60 лет - ожидаемая 77,23, "добавочная" 6,73
    И так со всеми странами.


    1. Nikitius_Ivanov Автор
      07.08.2023 11:01

      Хороший вопрос! В большинстве случаев это верно, но не всегда, ожидаемая продолжительность жизни по большому счету зависит только от одного параметра -- смертности в возрастных группах, что есть ни что иное, как количество популяции в данном возрасте поделить на количество смертей в данном возрасте. И чем этот коэффициент смертности выше - тем продолжительность жизни в этом возрасте будет ниже. Как правило смертность увеличивается с возрастом а популяция падает, но не всегда, если половозрастная пирамида имеет провалы, как например в России, то возможны такие скачки продолжительности жизни.


      1. 0sya
        07.08.2023 11:01

        Как я написал, это не только в России.
        И больше похоже не на скачки, а на равномерное изменение величины:


        США, Мужчина: 10 лет - 76.95 20 лет - 77.21 30 лет - 77.97 40 лет - 78.78 50 лет - 79.87, 60 лет - 81.79

        Намибия, Мужчина: 10 лет - 63.94 20 лет - 64.67 30 лет - 65.84 40 лет - 67.66 50 лет - 70.68, 60 лет - 74.7

        Франция, Мужчина: 10 лет - 80.23 20 лет - 80.36 30 лет - 80.72 40 лет - 81.18 50 лет - 82.0, 60 лет - 83.56

        И так далее.
        Почему так?


        1. Nikitius_Ivanov Автор
          07.08.2023 11:01

          Да действительно интересное наблюдение! У меня есть пока только одно объяснение связанно с повышенной детской смертностью, в целом в цифры вписывается, чем она выше в стране тем больше перекос между молодыми и старыми. Вот быстро накидал график смертности по этим трем странам:


    1. Ivan22
      07.08.2023 11:01

      60 летнего в армию уже не берут....


    1. koss4ok
      07.08.2023 11:01
      +1

      Вероятнее всего причина в следующем:

      Если ты уже дожил до 60, то ты более вероятно доживешь до 70, чем 10 летний (у которого впереди жизнь полная опасности).

      Т.е. поведение абсолютно логичное - чем ты ближе к какому-то возрасту - тем больше вероятность дожить до него.

      Проведём мысленный эксперимент:

      Как ты думаешь, какая вероятность 10 летнему дожить до 120 лет? - я бы сказал - меньше процента.

      А какая вероятность, что до 120 лет доживет человек, которому 119 лет? - вероятность этого гораздо выше

      Соответственно и ОПЖ его будет больше, чем для 10 летнего


  1. janatem
    07.08.2023 11:01

    Почему к управляемым рискам отнесены последние четыре фактора? Это, скорее, признаки, зависящие от чего-то неуправляемого (генетика) и управляемого (питание и т.д.).