Surmortalité… et vaccins ?

La grande mode depuis quelque temps chez les peureux vaccinaux, c’est de prétendre que la surmortalité « toute cause confondue » serait de la faute aux vaccins (oui parce que faute de trouver pleins de morts du covid depuis qu’on vaccine, ils se rabattent sur les morts toutes causes, dès fois que le vaccin causerait des accidents de la route…). J’ai donc fini par aller chercher quelques chiffres…

Première tentative : se concentrer sur les vaccins à ARNm

Dans un premier temps, j’avais simplement tenté de me concentrer sur les vaccins à ARNm : le CominartyⓇ de BioNTech, distribué par Pfizer, et le SpikevaxⓇ de chez Moderna. Pourquoi ? Pour tenter d’anticiper quelques critiques du genre « c’est à cause de l’ARN, c’est une nouvelle technologie, etc. » Le discours habituel de « je-suis-pas-antivax-seulement-anti-ARN ».

Pour cela, il faut trouver les doses de vaccin administré par fabricant. Et en fait, ce n’est pas si simple que cela. OurWorldInData semble fournir quelques données, dont le fichier CSV se trouve sur Github. Puis j’avais rapporté cela à la population du pays, grâce aux données de population CSV que l’on trouve sur api.worldbank.org. Une table de la liste des pays listant leur nom anglais, français, leur code ISO2 et ISO3 me permettait ensuite des jointures pour extraire les données. On y ajoutait ensuite l’excès de mortalité que l’on trouve sur Eurostat (toujours au format CSV) et on pouvait travailler.

Au final, on trouvait ce graphique :

Graphique qui ne montre pas une causalité flagrante :

  • L’Islande, très peu vaccinée (à l’ARNm), a une surmortalité importante
  • A l’inverse, le Danemark, très vacciné (2,4 doses par personne) a une surmortalité moyenne et est dépassé par de nombreux pays.
  • Au milieu, le Liechtenstein, vacciné à 1,8 dose par habitant, a pourtant une forte sous-mortalité
  • La Suède ou l’Italie sont plus vaccinés que le Luxembourg, les Pays-Bas, l’Allemagne, l’Autriche, l’Espagne, Malte… mais ont une surmortalité bien plus faible.
  • Et même si l’on prend le « groupe de tête » (de la Suisse au Danemark), aucune tendance ne se dégage vraiment

Affaire réglée ? Pas vraiment

Parce que j’avais oublié un détail : Les données de doses vaccinale par fabricant, pour certains pays (pas tous !), elles ne sont indiquées que très tardivement : seulement début 2022. Exemple de l’Islande :

Résultat : l’impression que le pays a très peu vacciné.

Ce biais (énorme) n’est pas aisément repérable :

  • Cela ne concerne que certains pays. Pour la France par exemple, on a les données depuis le début de la vaccination fin 2020.
  • Le chiffre final que l’on obtenait (0,5 dose / habitant pour l’Islande), bien que faible, n’était pas forcément surprenant : comme on se concentrait uniquement sur 2 vaccins, rien ne dit que le pays n’a pas vacciné massivement avec des vaccins d’autres fabricants
  • Finalement, quand on automatise le traitement de téléchargement / importation de donnée, on ne se rend pas vraiment compte de ce problème. Une importation manuelle des données depuis les graphiques de OurWorldInData et recopie manuelle m’aurait sans doute permis de voir ce problème.

Bref, du coup, impossible de travailler uniquement sur les vaccins à ARNm. Il va falloir prendre tous les vaccins en compte.

2e tentative : prendre tous les vaccins en compte

Je retourne sur OurWorldInData. L’information cette fois va être plus simple à trouver : Sur n’importe quel graphique Covid du site, on trouve un bouton de téléchargement.

Ce bouton permet de télécharger une image du graphique en PNG ou SVG, mais pas seulement : on a aussi un lien « Full Data (CSV) ».

Cliquer sur ce lien permet de télécharger un immense CSV (90 Mo à ce jour) contenant toutes les colonnes concernant le Covid, de tous les pays, à toutes les dates depuis début 2020. L’URL de ce fichier est https://covid-19.nyc3.digitaloceanspaces.com/public/owid-covid-data.csv

Je peux l’intégrer à mon système de téléchargement pour l’intégrer dans une base de donnée SQLite.

Vous pouvez télécharger la base de donnée ici (32 Mo en .zip – 171 Mo décompressé)

Ensuite, la « difficulté » est de récupérer uniquement la dernière donnée de chaque pays. Difficulté supplémentaire : autant pour avoir la date la plus récente, il suffit de chercher le MAX(), autant pour le nombre total de doses, puisque c’est cumulatif, il suffit aussi de chercher le MAX() des données ; autant par contre pour la surmortalité actuelle, il faut récupérer la valeur qui correspond à la date des dernières données. Car la surmortalité globale peut augmenter ou baisser. Par exemple, de très fort en 2020 en plein covid, elle a maintenant baissé. On ne peut donc aller chercher, pour chaque pays, ni le MAX, ni le MIN. Il faut vraiment récupérer la dernière donnée. Difficulté supplémentaire : il semble que la donnée ne soit indiquée que toutes les semaines. On ne peut donc pas simplement prendre la valeur correspondant à celle de la date max (on risquerait de tomber sur une valeur NULL). Il faut aller chercher la dernière valeur qui précède la date MAX.

Bon. Un peu de SQL pour créer une vue à coup de sous-requêtes. Ça va le faire.

SQL
DROP VIEW IF EXISTS v_last_data;
CREATE VIEW v_last_data AS
SELECT
    -- Infos de la vue partielle
    _owid.*,
    -- Infos du pays
    owid.location,
    owid.continent,
    owid.population,
    owid.median_age,
    owid.aged_70_older,
    owid.aged_65_older,
    owid.diabetes_prevalence,
    owid.female_smokers,
    owid.male_smokers,
    owid.extreme_poverty,
    owid.handwashing_facilities,
    owid.human_development_index,
    owid.hospital_beds_per_thousand,
    owid.life_expectancy,
    -- Recherche de la dernière valeue pour l'excès de mortalité
    -- = dernière valeur avant la dernière date de donnée
    (
        select o.excess_mortality_cumulative
        from owid o
        where o."date" <= _owid."date"                  -- avant (ou égale) la date la plus récente
          and o.iso_code = _owid.iso_code               -- et pour le pays considéré
          and o.excess_mortality_cumulative is not null -- pour une donnée non nulle !
        order by o."date" desc -- date la plus récente
        limit 1                -- 1ere ligne trouvée
    ) as "excess_mortality",
    -- Estimation de l'excès de mortalité
    estimated_excess_mortality."date" as estimated_excess_mortality_date,
    estimated_excess_mortality.iso3c,
    estimated_excess_mortality.cumulative_estimated_daily_excess_deaths_per_100k,
    estimated_excess_mortality.cumulative_estimated_daily_excess_deaths_raw_estimate_per_100k,
    estimated_excess_mortality.cumulative_estimated_daily_excess_deaths_ci_95_top_per_100k,
    estimated_excess_mortality.cumulative_estimated_daily_excess_deaths_ci_95_bot_per_100k
FROM
    -- Vue partielle :
    -- Sort la dernière date de chaque pays.
    (
    SELECT
        owid.iso_code,
        MAX(owid."date") AS "date",
        MAX(owid.total_vaccinations_per_hundred) AS total_vaccinations_per_hundred
    FROM owid
    GROUP BY owid.iso_code
) _owid
INNER JOIN owid ON owid."date" = _owid."date" and owid.iso_code = _owid.iso_code
-- Dernières infos sur l'excès de mortalité
INNER JOIN estimated_excess_mortality ON estimated_excess_mortality.iso3c   = _owid.iso_code
                                      AND estimated_excess_mortality."date" = (select max("date") from estimated_excess_mortality e where e."date" <= _owid."date" and e.iso3c = _owid.iso_code order by e."date" desc limit 1)

Avec ça, on peut tirer les données que vous trouverez dans ce tableau Excel à télécharger ici .

Puis, à partir de là, on peut faire un joli nuage de points.

Résultat ? Je vous laisse admirer… Plus on vaccine, plus la surmortalité semble faible (avec un R² de 0,076 on pourra certes objecter que ce n’est pas significatif. Néanmoins, en tout état de cause, il est faux de dire que la surmortalité augmente avec le vaccin. Dans le pire des cas, il n’y a pas de corrélation)

Encore une victoire de Chat Noir !

Allons plus loin

J’ai cherché à savoir s’il pouvait y avoir des corrélations de la surmortalité avec d’autres causes. Quelques exemples :

Index de développement : plus les pays sont développés, plus la surmortalité est faible. Ce n’est pas vraiment surprenant (R²= 0,22 pour un modèle liénaire).

Prévalence de comorbidité tel que le diabète : plus les gens sont diabétiques, plus la surmortalité semble importante. Là encore, ce n’est pas vraiment une surprise (mais l’effet est faible et pour ainsi dire quasi négligeable. R² = 0,014 pour un modèle linéaire)

Par nombre de lits d’hôpitaux par habitant : sans surprise, plus on a de lits, mieux on peut soigner, moins on meurt. La surprise provient par contre du fait que cela ne semble pas linéaire (mais Excel refuse de tracer une courbe de tendance tangentielle… si quelqu’un trouve pourquoi) : Au-delà de 4-5 lits pour 1000 habitants, l’augmentation du nombre de lits ne semble pas changer grand-chose.

Et joyeux Noël

Voir le thread en ligne :

Et pour voir tous les threads :