IAI CS2 common mistakes
IAI CS2 · Understand the traps and how to avoid them.
When asked to derive or interpret a survival function from a hazard, candidates write S(t) = exp(-h(t)) or S(t) = 1 - H(t) instead of S(t) = exp(-∫₀ᵗ h(u) du). They also confuse the hazard with a probability density, e.g. stating that h(t) is the probability of dying at time t.
The hazard is an instantaneous rate conditional on survival, not a probability or a density. Under exam pressure, candidates pattern-match the exponential formula and drop the integral, or they treat h(t) as f(t).
What to do instead
Write the fundamental relationships from first principles every time: h(t) = f(t)/S(t), H(t) = ∫₀ᵗ h(u)du, S(t) = exp(-H(t)), f(t) = h(t)S(t). For discrete or grouped data, use h_j = d_j / r_j and S(t) = ∏_{j: t_j ≤ t}(1 - h_j). Before answering, check units: a hazard has units of 1/time, a probability is dimensionless.
In Kaplan-Meier estimation, candidates fail to handle censoring correctly: they treat censored observations as deaths, or they omit censored subjects from the risk set at later event times. They also miscompute the risk set size when there are ties.
Censoring is the defining feature of survival data, but candidates often apply naive proportions (deaths/total) from non-survival statistics. Ties and late entries are easy to overlook when hand-computing.
What to do instead
For each distinct event time t_(j), list the number at risk r_j (all subjects with time ≥ t_(j), including those censored later), the number of events d_j, and compute the factor (1 - d_j/r_j). Multiply factors in order. Censored observations contribute to r_j at times before their censoring time but do not produce an event factor. For ties, use the same r_j and d_j at that time. Practise a small dataset with both censoring and ties until the risk-set bookkeeping is automatic.
When fitting a Cox proportional hazards model, candidates interpret exp(β) as a hazard ratio for a one-unit increase but forget that it is a ratio of hazards at the same time t, conditional on covariates, and they misinterpret the baseline hazard. They also report exp(β) as a risk ratio or as a probability.
The partial likelihood output gives coefficients on the log-hazard scale, and software labels exp(coef) as 'HR'. Candidates then slip into ordinary logistic-regression language.
What to do instead
State explicitly: h(t|x) = h₀(t) exp(β'x), so a one-unit increase in x_k multiplies the hazard by exp(β_k) at every time t; it is not a probability and not a cumulative risk. The baseline hazard h₀(t) is unspecified and cancels in the partial likelihood. If a cumulative risk is required, derive it from the Breslow or Kalbfleisch-Prentice baseline hazard estimate, not from exp(β).
Candidates test the proportional hazards assumption using a global test only, or they ignore it altogether. When PH fails, they still report a single hazard ratio without stratifying, adding a time interaction, or switching to an accelerated failure time model.
Software routinely prints a cox.zph table, and candidates glance at the global p-value without inspecting per-covariate results or Schoenfeld residual plots. Time-varying effects are conceptually harder than a single coefficient.
What to do instead
Run cox.zph and examine each covariate's test and the smoothed Schoenfeld residual plot. If a covariate violates PH, either stratify on it (if categorical), include a time interaction term x × g(t) (e.g. x × log t), or fit an AFT model and compare. Report the diagnostic and the remedy in the answer, not just the original HR.
In parametric survival modelling, candidates choose between exponential, Weibull, Gompertz, log-normal, and gamma distributions without linking the choice to the shape of the hazard. They then interpret AFT coefficients as if they were Cox log-hazard ratios.
The distributions look interchangeable in software output, and candidates memorise parameter counts rather than hazard shapes. The AFT parameterisation (log T = μ + β'x + σε) is easily confused with the PH parameterisation.
What to do instead
Memorise hazard shapes: exponential constant; Weibull h(t) = λγ t^{γ-1} monotone (γ>1 increasing, γ<1 decreasing); Gompertz exponentially increasing; log-normal and log-logistic initially increasing then decreasing; gamma flexible. For AFT models, exp(β_k) is a time ratio (multiplicative effect on survival time), not a hazard ratio; the corresponding hazard ratio is exp(-β_k/σ) for Weibull. State the parameterisation before interpreting coefficients.
When asked to graduate or smooth crude mortality rates, candidates apply a smoothing method without checking that the graduated rates preserve the total number of deaths, remain positive, and are monotone where expected. They also ignore exposure size when comparing crude rates.
Graduation is treated as a curve-fitting exercise rather than a constrained estimation problem. Candidates forget the standard tests (chi-square, signs, cumulative deviations) and the requirement that graduated rates reproduce the observed deaths.
What to do instead
For each graduation, verify: (i) ∑ E_x q̂_x = ∑ D_x (total deaths preserved); (ii) q̂_x > 0 and q̂_x < 1; (iii) smoothness and appropriate shape at old ages; (iv) run the chi-square goodness-of-fit test, the signs test, and the cumulative deviations test. When comparing crude rates, compute standard errors using the exposure, e.g. Var(D/E) ≈ D/E². Present the graduation with its diagnostics, not just the fitted curve.
In generalised linear models, candidates specify a Poisson or binomial GLM but forget the log or logit link when interpreting coefficients, or they use the identity link by default. They also confuse the dispersion parameter with the variance function and ignore overdispersion in count data.
R's glm() defaults to a Gaussian family with identity link, and candidates carry over linear-model intuition. The distinction between the variance function V(μ) and the dispersion φ is subtle.
What to do instead
Write the three components explicitly: random component (distribution), systematic component (η = Xβ), and link (g(μ) = η). For Poisson, g(μ) = log μ, so exp(β_k) is a multiplicative rate ratio; for binomial with logit link, exp(β_k) is an odds ratio. Check overdispersion by comparing residual deviance to residual degrees of freedom or by fitting a quasi-Poisson/negative binomial model; if φ > 1, report adjusted standard errors.
In Bayesian analysis, candidates use a flat or default prior without checking whether it is proper, or they report a posterior mean without a credible interval and without any convergence diagnostic. They also misinterpret a 95% credible interval as a confidence interval.
Software such as Stan or JAGS runs with default priors, and candidates focus on the point estimate. The interpretation of credible intervals is conceptually distinct from frequentist coverage.
What to do instead
Always state the prior, verify propriety (or use a weakly informative proper prior), and report the posterior mean or median with a 95% credible interval. For MCMC, report convergence diagnostics: R-hat close to 1, effective sample size, trace plots, and divergence counts. Interpret the credible interval as: given the model and prior, there is 95% posterior probability that the parameter lies in the interval - not a repeated-sampling statement.
When using R for survival analysis, candidates call survfit() or coxph() without checking the Surv() object for correct event coding, or they treat a factor covariate as numeric. They also forget set.seed() before simulation and misread the output of summary(coxph) as if it were a prediction.
The Surv(time, status) function expects status = 1 for events and 0 for censored (or a factor with two levels); miscoding silently reverses the event indicator. Factors entered as integers are fitted as continuous covariates.
What to do instead
Before modelling, run table(data$status) and str(data) to confirm event coding and variable classes. Convert categorical variables with factor() and set reference levels with relevel(). Use set.seed() for any simulation. To obtain predicted survival curves, use survfit(fit, newdata = ...) and inspect the resulting summary; do not read coefficients as predictions. Include the relevant R code and output interpretation in written answers.
Candidates apply a method outside its assumptions: using a Cox model when the proportional hazards assumption is clearly violated and no remedy is applied; using a Poisson GLM for overdispersed counts; using a normal approximation for small numbers of deaths; or treating competing risks as independent censoring.
Exam questions often present a dataset or scenario and expect the candidate to select the model, but candidates default to the most familiar method and skip assumption checks.
What to do instead
For each modelling question, write a short assumption checklist before fitting: PH for Cox (test with cox.zph), mean-variance relationship for GLMs (check dispersion), independence and distributional assumptions for parametric models, and the censoring mechanism (independent vs informative). For competing risks, use cause-specific hazards or the Fine-Gray subdistribution model rather than standard Kaplan-Meier, which overestimates the cumulative incidence of the event of interest.