The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

CausalSpline estimates nonlinear causal dose-response functions for continuous treatments using spline-based methods under standard causal assumptions (unconfoundedness + positivity).
Most causal inference tools assume a linear treatment effect:
\[Y = \beta_0 + \beta_1 T + \gamma X + \varepsilon\]
Real policy and health problems often violate this: dosage effects, thresholds, diminishing returns, and non-monotone relationships are common. CausalSpline models the exposure-response curve nonparametrically:
\[E[Y(t)] = \beta_0 + f(T)\]
where \(f(T)\) is a natural cubic spline or B-spline, estimated via IPW, G-computation, or doubly-robust methods.
# CRAN
install.packages("CausalSpline")
# Development version
remotes::install_github("causalfragility-lab/CausalSpline")library(CausalSpline)
# Simulate data with a threshold effect
set.seed(42)
dat <- simulate_dose_response(n = 500, dgp = "threshold", confounding = 0.6)
# Fit causal dose-response curve via IPW
fit <- causal_spline(
Y ~ T | X1 + X2 + X3, # outcome ~ treatment | confounders
data = dat,
method = "ipw",
df_exposure = 5
)
summary(fit)
plot(fit)
# G-computation alternative
fit_gc <- causal_spline(Y ~ T | X1 + X2 + X3, data = dat,
method = "gcomp", df_exposure = 5)
# Doubly robust estimation
fit_dr <- causal_spline(Y ~ T | X1 + X2 + X3, data = dat,
method = "dr", df_exposure = 5)
# Predict at specific treatment values
predict(fit_gc, newt = c(3, 5, 7), se_fit = TRUE)
# Check positivity / overlap
check_overlap(dat$T, fit$weights)A key feature of CausalSpline is geometric fragility diagnostics — tools for evaluating the structural stability of the estimated dose-response curve across treatment levels.
# Slope-based fragility (identifies flat / weak-effect regions)
fc_slope <- fragility_curve(fit, type = "inverse_slope")
plot(fc_slope)
# Curvature-based fragility (identifies thresholds and turning points)
fc_curv <- fragility_curve(fit, type = "curvature_ratio")
plot(fc_curv)
# Regional fragility summary over a policy-relevant interval
region_fragility(fit, a = 3, b = 6, type = "curvature_ratio")These diagnostics complement traditional sensitivity analyses by examining the internal geometric stability of the causal function — where is the estimated relationship flat, rapidly changing, or structurally ambiguous?
| Method | method = |
Consistent if … |
|---|---|---|
| Inverse Probability Weighting | "ipw" |
GPS model correct |
| G-computation | "gcomp" |
Outcome model correct |
| Doubly Robust (AIPW) | "dr" |
At least one model correct |
simulate_dose_response(dgp = "threshold") # flat region then linear rise
simulate_dose_response(dgp = "diminishing") # concave / diminishing returns
simulate_dose_response(dgp = "nonmonotone") # inverted-U / hump shape
simulate_dose_response(dgp = "linear") # linear baseline
simulate_dose_response(dgp = "sinusoidal") # oscillatory / complex shape| Function | Description |
|---|---|
causal_spline() |
Estimate the causal dose-response curve |
fragility_curve() |
Compute local geometric fragility diagnostics |
region_fragility() |
Regional fragility summary over treatment intervals |
gradient_curve() |
First and second derivatives of the estimated curve |
dose_response_curve() |
Extract the dose-response data frame |
predict() |
Predict E[Y(t)] at new treatment values |
check_overlap() |
Overlap / positivity diagnostics (ESS, weight plot) |
simulate_dose_response() |
Simulate nonlinear dose-response datasets |
CausalSpline is the causal extension of MultiSpline. While MultiSpline fits multivariate spline regressions for prediction, CausalSpline:
citation("CausalSpline")GPL (>= 3)
Maintainer: Subir Hait
haitsubi@msu.edu
Michigan State University
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.