1 Comment
⭠ Return to thread

Here I calculated a risk ratio within 52 weeks from the first dose that was adjusted for age group and vaccination week.

For each combination of age group and vaccination week, I calculated the 52-week mortality rate among all vaccinated people included in the dataset. And then for each vaccine type, I multiplied the population size for each combination of age group and vaccination week with the baseline mortality rate to get the expected deaths, and I added together the expected deaths for all combinations of age group and vaccination week to get the total expected deaths for the vaccine type, and I derived the risk ratio by dividing the actual deaths with the expected deaths.

So basically the risk ratio of each vaccine type shows the deaths as a multiple of deaths among all vaccinated people who were modified to have the same distribution of age groups and vaccination weeks as the vaccine type. The relative risk is the same as an excess mortality percent divided by 100 and then incremented by 1.

The risk ratio was about 0.94 for Pfizer and 1.12 for Moderna. So the Moderna-Pfizer ratio is only about 1.19, so it's much lower than 1.5:

> t=fread("Otevrena-data-NR-26-30-COVID-19-prehled-populace-2024-01.csv")

> codes=rep("Other",26)

> codes[c(1,8,9,16,20,21,23)]="Pfizer"

> codes[c(2,15)]="Moderna"

> codes[3]="AstraZeneca"

> codes[4]="Janssen"

> codes[c(7,22)]="Novavax"

> names(codes)=sprintf("CO%02d",1:26)

> weeks=unique(format(seq(as.Date("2020-1-1"),as.Date("2024-12-31"),1),"%Y-%V"))

> d=t[Infekce<=1] # exclude duplicate entries for people with two or more cases

> d=d[Datum_Prvni_davka!=""] # exclude unvaccinated people

> d[,date:=match(Datum_Prvni_davka,weeks)] # convert year plus week number of first dose to integer

> d[,dead:=match(ifelse(DatumUmrtiLPZ=="",Umrti,DatumUmrtiLPZ),weeks)] # some people are missing Umrti but not DatumUmrtiLPZ, and vice versa

> d=d[date<min(grep("2023",weeks))] # exclude people with first dose in 2023 or 2024

> d=d[,.(date,dead,type=codes[OckovaciLatkaKod_Prvni_davka],born=RokNarozeni)]

> d=d[born!="-"&!born%like%"19(05|10)"] # exclude a few people with erroneous birth dates

> a=d[,.(dead=sum((dead-date)%in%0:51),pop=.N),.(date,type,born)] # count deaths within 52 weeks from first dose

> a=merge(a,a[,.(base=sum(dead)/sum(pop)),.(date,born)]) # get baseline mortality rate for each age and vaccination week

> o=a[,.(dead=sum(dead),pop=sum(pop),rr=sum(dead)/sum(base*pop)),type]

> print(o[order(-pop)],r=F)

type dead pop rr

Pfizer 14790 2183514 0.94

Moderna 2729 182240 1.12

Janssen 1395 152581 1.12

AstraZeneca 3474 123531 1.21

Novavax 9 3097 0.59

Other 0 8 0.00

The Moderna-Pfizer ratio inceased to about 1.25 when I disabled the normalization by vaccination week. And when I did the normalization by 4-week bins and not by individual weeks of vaccination, the Moderna-Pfizer ratio was about 1.22.

If I would've additionally normalized the calculation by the comorbidity index, the difference between Moderna and Pfizer would've become even smaller, but then I would've also had to exclude people with no COVID case listed (since the comorbidity index is only included for people with a COVID case): sars2.net/czech4.html#Mortality_rate_within_year_from_vaccination_normalized_by_comorbidity_index_in_new_UZIS_data.

When I modified the code above to calculate the risk ratio during the entire observation period and not only the first 52 weeks, the Moderna-Pfizer ratio increased from about 1.19 to about 1.22, so it didn't make much difference.

Expand full comment