/**
* jQuery Plugin: Sticky Tabs
*
* @author Aidan Lister
// Set the correct tab when the page loads showStuffFromHash(context);
// Set the correct tab when a user uses their back/forward button $(window).on('hashchange', function() { showStuffFromHash(context); });
// Change the URL when tabs are clicked $('a', context).on('click', function(e) { history.pushState(null, null, this.href); showStuffFromHash(context); });
return this; }; }(jQuery));
window.buildTabsets = function(tocID) {
// build a tabset from a section div with the .tabset class function buildTabset(tabset) {
// check for fade and pills options var fade = tabset.hasClass("tabset-fade"); var pills = tabset.hasClass("tabset-pills"); var navClass = pills ? "nav-pills" : "nav-tabs";
// determine the heading level of the tabset and tabs var match = tabset.attr('class').match(/level(\d) /); if (match === null) return; var tabsetLevel = Number(match[1]); var tabLevel = tabsetLevel + 1;
// find all subheadings immediately below var tabs = tabset.find("div.section.level" + tabLevel); if (!tabs.length) return;
// create tablist and tab-content elements var tabList = $('
'); $(tabs[0]).before(tabList); var tabContent = $('
'); $(tabs[0]).before(tabContent);
// build the tabset var activeTab = 0; tabs.each(function(i) {
// get the tab div var tab = $(tabs[i]);
// get the id then sanitize it for use with bootstrap tabs var id = tab.attr('id');
// see if this is marked as the active tab if (tab.hasClass('active')) activeTab = i;
// remove any table of contents entries associated with // this ID (since we'll be removing the heading element) $("div#" + tocID + " li a[href='#" + id + "']").parent().remove();
// sanitize the id for use with bootstrap tabs id = id.replace(/[.\/?&!#<>]/g, '').replace(/\s/g, '_'); tab.attr('id', id);
// get the heading element within it, grab it's text, then remove it var heading = tab.find('h' + tabLevel + ':first'); var headingText = heading.html(); heading.remove();
// build and append the tab list item var a = $('' + headingText + ''); a.attr('href', '#' + id); a.attr('aria-controls', id); var li = $('
'); li.append(a); tabList.append(li);
// set it's attributes tab.attr('role', 'tabpanel'); tab.addClass('tab-pane'); tab.addClass('tabbed-pane'); if (fade) tab.addClass('fade');
// move it into the tab content div tab.detach().appendTo(tabContent); });
// set active tab $(tabList.children('li')[activeTab]).addClass('active'); var active = $(tabContent.children('div.section')[activeTab]); active.addClass('active'); if (fade) active.addClass('in');
if (tabset.hasClass("tabset-sticky")) tabset.rmarkdownStickyTabs(); }
// convert section divs with the .tabset class to tabsets var tabsets = $("div.section.tabset"); tabsets.each(function(i) { buildTabset($(tabsets[i])); }); };
PRELIMINARY ANALYSIS: Princess Diamond Corona Virus Risk Analysis
Introduction
This report is a preliminary analysis of the risk of infection (symptomatic and asymptomatic) and death (fatality rate or FR) from the corona virus. The analysis is based on the data derived from the Diamond Princess, a cruise ship which experienced an outbreak of the virus in February 2020. The passengers and crew were forced into a quarantine on the boat for a period of time. The quarantine had the unintended consequence of exposing the people to the virus and dramatically increasing the rates of infection. In total, there were 3,711 people on the boat, 619 became infected and to-date 7 have died.
The current date of this analysis is March 10, 2020.
The Diamond Princess data is unique in that all (or almost all) the passengers and crew were tested for the virus. As far as I know, this is the only meaningful data set where the denominator of the corona risk rates is known. However, there are still a significant number of passengers who have not recovered, or worse, are still in critical condition. Therefore, the numerator of the risk rates of death is only partially known. On the other hand, the risk rates of infection are known.
Warning: This analysis is a “naive” analysis, in that I do not adjust for future expected deaths. The fatality rates therefore represent a floor. I will comment on this further in the report.
All code and data can be found on Github.
Summary of Results
- The CFR for those below age 60 is very low. The fatality rate increases from age 60 and is very high for those age 70 and above: about 1% for 70s, 8% for the 80s and 16% in the 90s. That is, mortality risk is highly skewed towards the elderly.
- The risk of infection is high across all ages. The belief that young children or young adults are not susceptible to infection is false.
- The risk of becoming symptomatic is also high across all ages.
- The risk of symptomatic and asymptomatic infection increases significantly from age 50 onwards
- Roughly half the infected population is asymptomatic.
Methodology
Software: I used Greta and Greta GP to conduct a Bayesian analysis.
Models: The basic model is binomial model with a uniform prior assumption on the risk probability. For the youngest and very oldest ages there is very little data and this prior influences the results.
I developed a model combining all age groups and a model that analyzed each age group separately. For the latter, I used two types of models: 1. The first model assumes each age category is independent from the others. 2. The second model assumes a correlation structure between each age category. This was achieved by applying a latent Gaussian Process over the age-dependent risk parameters, using a RBF (radial basis function) kernel. I tested two GP models.
2.1. The first fixed the \(\rho\) parameter of the RBF at 10 years. That is, the correlation between age x and x+d is \(e^{-(\frac{d}{\rho})^2}\). So if \(d=10\) and \(\rho=10\), the correlation between two adjacent 10-year age buckets is \(e^{-(\frac{10}{10})^2}=0.36\). If \(\rho=20\), the correlation is 0.778. The tested model fixed \(\rho=10\). 2.2. The second model, treated \(\rho\) as a parameter. For this second model, I set the prior for \(\rho\) to have a mean of 20 and a standard deviation of 5. The model estimated the posterior mean value of \(\rho\) of 22 with a 95% credible interval of 14 to 35.
The GP Model under 2.2 represents an advanced model and I think gives a more accurate analysis of the fatality rates. The GP model has the advantage of smoothing out the risk rates across the age buckets and recognizing that the risk rates between age buckets is almost certainly correlated.
Recommended Actions
Disclaimer: I am not an epidemiologist so my analysis is very much one of an armchair scientist. However, I am an actuary, so I know a thing or two about risk rates.
The analysis suggests the following:
- There will be a lot of people walking around asymptomatic but capable of spreading the disease. Social distancing will be key to avoiding the spread of the disease. Also, if face masks are helpful in stopping an infected person from spreading the diseases, then for sure, people in crowds should be wearing masks even if they feel healthy. The Surgeon General’s suggestion not to wear a mask assuming they are available (which they are currently not) is ridiculous.
- The elderly need to exhibit extreme caution.
- Even if you are healthy and young, the risk of an outbreak on a cruise line is very high and the chance of being forced into an involuntary quarantine seems, to me, to be higher than I would be willing to bear.
- Likewise, avoiding large gatherings would be preferred. We are starting to see the closing of college classes and schools. I expect this to accelerate.
Future Deaths
Based on my quick analysis, it would not surprise me if there will be additional deaths in the exposed population. Most of the infections have now occured at least 20 days ago. I would expect the fatality rates to possibly climb proportiontely by 20% to 50% (e.g. a 10% “naive” fatality rates could translate to an ultimate 12% to 15% rate), but am doubtful these ultimate fatality rates would double over the naive levels. This area still need further analysis (see Russel below for more information).
However, the analysis below is very useful in its own right, even ignoring future deaths.
Data Sources
Russel et al National Institute of Infectious Diseases Wikipedia
Note that Russel conducts a similar analysis but adjusts for outstanding deaths. My data of the age distribution differ from Russel and are based on information from Wikipedia. There are 7 deaths, 4 in the 80s, 2 in the 70s and 1 unknown. I assigned the unknown proportionately to the 80s and 70s buckets.
Summary of Results
A. Combined Age Category Model
Risk Rates
The "theta" amounts represent the parameters of the binomial distribution and are the rates of infection or fatality.
B. Independent Age Category Model
Risk Rates
Notes: There are very limited data for the age categories 5, 15 and 95. Here the uniform plays an outsize role, the resultant posterior values for these age buckets suggests a uniform prior might not be the most optimal prior, and a prior skewed towards lower risk rates might be more appropriate.
C. Gaussian Process Model: Fixed Rho
Fixed \(\rho=10\)
Fatality Rates
C. Gaussian Process Model: Variable Rho
Fixed \(\rho=10\)
Fatality Rates
Model Parameters
// add bootstrap table styles to pandoc tables function bootstrapStylePandocTables() { $('tr.header').parent('thead').parent('table').addClass('table table-condensed'); } $(document).ready(function () { bootstrapStylePandocTables(); });