Arte SheetsLearn. Try. Understand.

Statistical & Mathematical Formulas

Greenwood’s Formula & Kalbfleisch-Prentice Log-Log Survival 95% CI

Calculate Kaplan-Meier survival standard error SE(S(t)) = S(t) * SQRT(Σ d_i / (n_i * (n_i - d_i))) via Major Greenwood’s 1926 formula and construct bounded [0, 1] log-log 95% confidence limits S(t)^EXP(±1.96 * SQRT(V) / |LN(S(t))|).

Why SAS and R use log-log Kalbfleisch-Prentice CIs instead of naive S(t) ± 1.96·SE!

Major Greenwood (1926) derived the exact delta-method variance of a product-limit survival curve S(t) = Π(1 - d_i / n_i) across event times where d_i deaths occur out of n_i patients at risk: SE(S(t)) = S(t) * SQRT(Σ [d_i / (n_i * (n_i - d_i))])! However, adding symmetric ±1.96 * SE(S(t)) directly onto S(t) = 0.92 with SE = 0.0582 produces an impossible upper survival bound of 1.0341 (> 100% survival)!

John Kalbfleisch and Ross Prentice (1980)—now the default in R’s survival package and SAS PROC LIFETEST—solved that boundary violation via the complementary log-log transform LN(-LN(S(t))), yielding asymmetric 95% bounds strictly trapped inside (0, 1): θ = EXP(1.96 * SQRT(V_sum) / ABS(LN(S(t)))), Lower_95 = S(t)^θ, and Upper_95 = S(t)^(1 / θ)! Watch at S(t) = 0.9200 with cumulative Greenwood sum V_sum = 0.0040: naive upper CI overshoots 1.0341, whereas log-log Upper_95 stays cleanly bounded at 0.9813 (Lower_95 = 0.6916); at S(t) = 0.7200 and V_sum = 0.0085, SE = 0.0664 and the 95% log-log CI spans [0.5659, 0.8274]!

Kaplan-Meier Point S(t) & Greenwood Sum V_sumGreenwood SE(S(t))Log-Log 95% Lower BoundLog-Log 95% Upper Bound
12-Month Survival (S = 0.7200, V_sum = 0.0085)0.06640.56590.8274
Early 3-Month Survival (S = 0.9200, V_sum = 0.0040)0.05820.69160.9813 (Never > 1.00!)
Boundary S <= 0 or S >= 1Log-Log Singularity"Invalid Survival Inputs"Requires 0 < S(t) < 1, V_sum > 0

Greenwood Survival Standard Error SE(S(t)) = S(t) * SQRT(V_sum)

Evaluates S(t) * SQRT(V_sum) from Kaplan-Meier survival probability B2 and cumulative Σ d_i / (n_i*(n_i - d_i)) sum B3.

=IF(OR(B2 <= 0, B2 >= 1, B3 <= 0), "Invalid Survival Inputs", ROUND(B2 * SQRT(B3), 4))

Kalbfleisch-Prentice Log-Log 95% Upper Survival Confidence Limit

Computes S(t) ^ EXP(-1.96 * SQRT(V_sum) / ABS(LN(S(t)))) (use +1.96 in the exponent for the lower confidence limit).

=IF(OR(B2 <= 0, B2 >= 1, B3 <= 0), "Invalid Survival Inputs", ROUND(B2 ^ EXP(-1.96 * SQRT(B3) / ABS(LN(B2))), 4))

Try the example

Use the original values or change them to test your understanding.

Further reading