Cases, ICU’s and liars, oh my!

As the most recent surge of COVID consumes Florida, there is a lot of talk about the ‘ICU’ in hospitals – namely, how the proportion of ICU COVID patients is lower now than it has been in the past or that the rise in ICU numbers have not kept pace with overall hospitalizations as it had previously. You’ll probably even hear respected scientists, doctors, and journalists say “well, cases are ridiculously high and hospital numbers are at crazy, unsustainable levels – but ICU is increasing slower than previous waves so don’t worry about it! (It’s milder!)”

While these ICU factoids are true from a literal data standpoint, there is no evidence that ICU levels are the primary indicator of what is occurring in the real world (at least in Florida). That is, the number of “covid patients in ICU” may seem like it would be the best metric of the severity of the pandemic (as measured by deaths, for example), but the data just does not support this.

In other words, malicious hacks like Kyle Lamb (who seem to be recruited by the DeSantis Regime solely to spread misinformation and harass anyone who dare talk about Florida COVID data) are full of nonsense, desperately trying to distract from the disaster unfolding in Florida. But, unlike the fascists running the state of Florida whose only concern is crafting a PR message to enact an extreme political agenda, I prefer to do the opposite.

Regression Models for Deaths

Firstly, what is the ‘ICU?’ As a layman with almost no knowledge of medicine or hospitals, I think of it as a ‘hospital within the hospital’ where the most severely wounded or ill end up. For COVID patients, I think of ventilators and intubation – basically, where people go to die. Naturally, because most people have only a general idea of what ‘ICU’ is (completely ignoring the minutiae of hospital logistics, data definitions, reporting of data across thousands of hospitals, etc.), simplistic messages like this or this imply that the situation is less severe because ‘less ICU = less bad.’ Hard to argue against that, right?

As an alternative to using ICU numbers, we start with an obvious choice: overall hospitalizations. Conceptually, I prefer the more general hospitalizations to ICU numbers because it presumably has fewer levels of bureaucracy to pass through. In addition to worrying about the definition of ‘covid hospitalization’ (don’t get me started on the FOR/WITH COVID talking point that is making the rounds again), you must also consider what constitutes ‘ICU.’ Generally, the fewer assumptions, caveats, and political meddling, the more reliable and consistent the data will be. 

To see which explains severity better (as measured by 7-day average of hospital reported deaths) and determine if the proportion of ICU patients has any effect on expected deaths, Poisson regression models were compared using overall census (along with % in ICU) and ICU census. The coefficient estimates for the Overall and ICU models are shown in tables 1 and 2, respectively. The number of days lag for each model was chosen by whichever value (from 0 to 10 days lag) minimized model deviance.

Based on goodness of fit over the past six months (covering the entire Delta Summer 2021 wave and into the current one), the overall hospital census is better than ICU census at explaining the ‘severity’ within hospitals. In addition, the percent of all COVID patients that are in ICU (the ‘% ICU, 7 Day Lag’ parameter in Table 1) has no significant effect on expected deaths, thus making all ‘% in ICU’ (and to a lesser extent, total ICU) talking points moot.

Table 1. Poisson regression coefficient estimates for ‘Census Model’ using overall census and percent within ICU (with autocorrelation consistent robust standard error estimates)

EstimateStd. Errorz valuePr(>|z|)
Intercept-6.060.220-27.5<2e-16
Log(Weekly Average Census, 7 Day Lag)1.200.01578.5<2e-16
% ICU, 7 Day Lag0.1310.4380.2990.765

Null deviance: 16549 on 192 df; Residual deviance:  36.35 on 190 df; AIC: 1151.1

Table 2. Poisson regression coefficient estimates for ‘ICU Model’ using ICU census (with autocorrelation consistent robust standard error estimates)

EstimateStd. Errorz valuePr(>|z|)
Intercept-4.460.338-13.2<2e-16
Log(Weekly Average ICU, 5 Day Lag)1.230.04328.6<2e-16

Null deviance: 16549 on 192 df; Residual deviance:  116.38 on 191 df; AIC: 1229.1

As we can see from the figure, the ‘ICU model’ (green line) fits the Delta peak of deaths quite poorly and appears to be severely underfitting the current increase while the overall ‘Census Model’ (red line) fits much better throughout and continues to track the current wave’s increase well. This is not saying that the number of ICU patients is not predictive (it clearly is based on the model in Table 2), but it is not as accurate as the overall number of people hospitalized.

There are likely more restrictive limits to ICU utilization vs overall hospital (staff, beds, etc.) so its use may be limited in certain situations when hospitals are overwhelmed or there are staff shortages. I would not be surprised if political pressure is being applied to make the ICU situation appear rosier than reality; it wouldn’t be the first time ICU definitions were changed in Florida.

But, looking only at the data, there’s no evidence that the proportion of ICU is indicative of the general severity of patients or the number of deaths in hospitals (in Florida using HHS data). If this were the case, you would expect deaths to increase as % ICU increased for a given number of overall hospitalizations; this is not observed, however. Of course, these relationships might change in the future, but for the past 6 months, ‘% ICU’ is a mostly useless variable when modeling deaths. Also, these models say nothing about hospital resources in ICU vs non-ICU beds (a separate but important consideration), only about expected hospital deaths. It might be of interest to include a time factor (either linear or a Delta vs Omicron factor) to evaluate if the expected number of deaths (for a given census) is changing over time.

In conclusion, do not be tricked into believing there is no crisis because of uncritical, conventional wisdom (‘less ICU = less bad’) or many-people-are-saying-type narratives – look at the data and see what is happening yourself! Based on current trajectories of hospital admissions, this wave will likely approach (if not exceed) that of Summer 2021 in terms of overall hospitalizations and possibly even deaths, sadly. This is not being a ‘doomer’ or having a ‘political agenda.’ It is simply being a realist that is willing to confront inconvenient truths (like the very real prospect of another 20,000 Floridians dying over the next few months). If it turns out that this wave is less severe, and many people are only incidentally hospitalized – great! Prepare for the worst but hope for the best. We all want to get back to normal but should do so safely and smartly.

But remember: the greatest harm in being cautious – or dare I say, conservative – is damaging the egos of sociopaths like Ron DeSantis who desperately want you to believe that everything is fine so he can have yet another Victory Tour on Fox News at your expense. The alternative, being recklessly optimistic, could result in thousands of preventable deaths of society’s most vulnerable – something DeSantis and his army of keyboard warriors are more than willing to risk if it means gaining political power.

APPENDIX:

## R script for analysis

# library to read JSON files

require(rjson);require(lmtest);require(sandwich)

# list desired fields from HHS data

fields=c(“date”,”inpatient_beds_used_covid”,”previous_day_admission_adult_covid_confirmed”,

         “previous_day_admission_pediatric_covid_confirmed”,”staffed_icu_adult_patients_confirmed_and_suspected_covid”,

         “deaths_covid”,”critical_staffing_shortage_today_yes”,”critical_staffing_shortage_today_no”,                                        

         “critical_staffing_shortage_today_not_reported”,”critical_staffing_shortage_anticipated_within_week_yes”,                     

         “critical_staffing_shortage_anticipated_within_week_no”,”critical_staffing_shortage_anticipated_within_week_not_reported” )

#make string

url=paste0(“https://healthdata.gov/resource/g62h-syeh.json?state=FL&$select=&#8221;,paste0(fields,collapse = ‘,’),”&$order=date%20asc”)

# get data

data1 <- fromJSON(paste(readLines(url), collapse=””))

# make into separate objects

staff_short=icu_beds=hosp_deaths=beds=hosp_admits=date=NULL

for(i in 1:length(data1)){

  staff_short[i]=as.numeric(data1[[i]]$critical_staffing_shortage_today_yes)/

    (as.numeric(data1[[i]]$critical_staffing_shortage_today_yes)+as.numeric(data1[[i]]$critical_staffing_shortage_today_no)+

       as.numeric(data1[[i]]$critical_staffing_shortage_today_not_reported))

  hosp_deaths[i]=as.numeric(data1[[i]]$deaths_covid)

  beds[i]=as.numeric(data1[[i]]$inpatient_beds_used_covid)

  icu_beds[i]=as.numeric(data1[[i]]$staffed_icu_adult_patients_confirmed_and_suspected_covid)

  hosp_admits[i]=as.numeric(data1[[i]]$previous_day_admission_adult_covid_confirmed)

  +as.numeric(data1[[i]]$previous_day_admission_pediatric_covid_confirmed)

  date[i]=substr(data1[[i]]$date,1,10)         

}

date=as.Date(date)

max(date)

# desired days back

k=200

m=length(data1)

# make 7-day averages of some fields (remove last placeholder value)

admits=sapply((m-k+1):m-1,function(i) mean(hosp_admits[(i-6):i]))

admits0=sapply((m-k+1):m-2,function(i) mean(hosp_admits[(i-6):i]))

census=sapply((m-k+1):m-1,function(i) mean(beds[(i-6):i]))

icu=sapply((m-k+1):m-1,function(i) mean(icu_beds[(i-6):i]))

hdeaths=sapply(seq(m-k+1,m,1)-1,function(i) mean(hosp_deaths[(i-6):i]))

# create lagged variables

lag1=7;lag2=5

x1=hdeaths[-(1:lag1)]

x2=census[-((k-lag1+1):k)]

x3=icu[-((k-lag2+1):k)];x3=x3[-(1:(lag1-lag2))]

x4=x3/census[-c(1:2,(k-lag2+1):k)]

# model with census and % icu

dmod2.0=glm(round(x1)~log(x2)+x4,family=’poisson’)

coeftest(dmod2.0, vcov. = vcovHAC)

# model with census only

dmod2=glm(round(x1)~log(x2),family=’poisson’)

coeftest(dmod2, vcov. = vcovHAC)

# icu model

dmod3=glm(round(x1)~log(x3),family=’poisson’)

coeftest(dmod3, vcov. = vcovHAC)

# Make plot

layout(c(2,1),c(2,2),c(1,2))

par(mar=c(3.5,2.5,0,1))

plot(x1,type=’l’,ylab=”,xlab=”,xaxt=’n’,bty=’n’,ylim=c(0,300),cex.axis=.7)

axis(1,at=rev(seq(length(x1),1,-30)),format(date[rev(seq(m,m-length(x1),-30))-1],”%b %d”),las=2,cex.axis=.9)

lines(dmod2$fitted.values,col=2)

lines(dmod3$fitted.values,col=3)

legend(“topright”,inset=.025,cex=.9,lty=1,col=c(1,2,3),c(“Hospital Deaths”,”Census Model”,”ICU Model”),bty=’n’)

par(mar=c(0,2.5,1.3,1))

plot(x4,type=’l’,col=2,lwd=1,yaxt=’n’,ylim=c(.13,.28),xlim=c(0,200),xaxt=’n’,ylab=”Percent Inpatient ICU”,bty=’n’,xlab=”,cex.axis=.7)

ppx1=which(x4==max(x4));text(c(ppx1,length(x4))-1,x4[c(ppx1,length(x4))],paste0(round(x4[c(ppx1,length(x4))]*100),”%”), adj=c(0,-.7),cex=.7,xpd=T)

axis(2,seq(.12,.28,.04),paste0(seq(12,28,4),”%”),las=2,cex.axis=.7)

text(x=20,y=.27,”Percent ICU

(7 Days Back)”,cex=.8)

%d bloggers like this: