pub struct Ssm { /* private fields */ }Expand description
Average treatment effect of a binary treatment when the outcome is
observed only where the selection indicator S is 1 (attrition,
non-response), as DoubleML’s DoubleMLSSM. Requires a selection indicator
(DmlData::with_selection_indicator) and, for
SsmScore::Nonignorable, an instrument for selection
(DmlData::with_instrument).
The score is doubly robust in the outcome models of the selected treated
and controls, the propensity P(D = 1 | X) and the selection probability
P(S = 1 | D, X). Under nonignorable selection each training fold is
split in halves: the selection probability is learned on the first, and
the other nuisances on the second with the predicted selection
probability as a covariate.
Implementations§
Source§impl Ssm
impl Ssm
Sourcepub fn new(
ml_g: impl Regressor + 'static,
ml_pi: impl Classifier + 'static,
ml_m: impl Classifier + 'static,
) -> Self
pub fn new( ml_g: impl Regressor + 'static, ml_pi: impl Classifier + 'static, ml_m: impl Classifier + 'static, ) -> Self
ml_g learns E[Y | D, X] on the selected, ml_pi the selection
probability P(S = 1 | D, X), ml_m the propensity P(D = 1 | X).
pub fn from_boxed( ml_g: Box<dyn Regressor>, ml_pi: Box<dyn Classifier>, ml_m: Box<dyn Classifier>, ) -> Self
pub fn score(self, score: SsmScore) -> Self
Sourcepub fn clipping_threshold(self, t: f64) -> Self
pub fn clipping_threshold(self, t: f64) -> Self
Treatment propensities are clipped to [t, 1 − t] (default t = 0.01).
Selection probabilities are not clipped, as in DoubleML.
Sourcepub fn calibration(self, calibration: Calibration) -> Self
pub fn calibration(self, calibration: Calibration) -> Self
Calibrate the propensity scores before clipping (default: none), as
DoubleML’s ps_processor_config.
Sourcepub fn normalize_ipw(self, normalize: bool) -> Self
pub fn normalize_ipw(self, normalize: bool) -> Self
Normalise the inverse-probability weights within treated and controls.
Sourcepub fn n_rep(self, n_rep: usize) -> Self
pub fn n_rep(self, n_rep: usize) -> Self
Number of independent sample splits (default 1). Estimates are aggregated across repetitions by the median, as in DoubleML.
Sourcepub fn fit(&self, data: &DmlData) -> Result<DmlFit>
pub fn fit(&self, data: &DmlData) -> Result<DmlFit>
Draw seeded sample splits and fit. With clustered data
(DmlData::with_clusters) whole clusters are assigned to folds
and standard errors are cluster-robust.
Sourcepub fn fit_with_cluster_folds(
&self,
data: &DmlData,
splits: &[Vec<ClusterFold>],
) -> Result<DmlFit>
pub fn fit_with_cluster_folds( &self, data: &DmlData, splits: &[Vec<ClusterFold>], ) -> Result<DmlFit>
Fit clustered data with explicit cluster folds, one
Vec<ClusterFold> per repetition.
Sourcepub fn sensitivity_benchmark(
&self,
data: &DmlData,
long: &DmlFit,
benchmarking_set: &[usize],
) -> Result<SensitivityBenchmark>
pub fn sensitivity_benchmark( &self, data: &DmlData, long: &DmlFit, benchmarking_set: &[usize], ) -> Result<SensitivityBenchmark>
Sensitivity benchmark for the covariate columns benchmarking_set:
refits this model without them (with the same sample splitting, so
long must come from fit with the current settings)
and compares it with long.
Sourcepub fn fit_with_folds(
&self,
data: &DmlData,
splits: &[Vec<Fold>],
) -> Result<DmlFit>
pub fn fit_with_folds( &self, data: &DmlData, splits: &[Vec<Fold>], ) -> Result<DmlFit>
Fit with caller-supplied splits, one Vec<Fold> per repetition
(e.g. to reproduce another implementation exactly).
Sourcepub fn nuisance_regressor(
self,
name: &str,
learner: impl Regressor + 'static,
) -> Self
pub fn nuisance_regressor( self, name: &str, learner: impl Regressor + 'static, ) -> Self
Use learner for the regression nuisance name (DoubleML’s name,
e.g. "ml_g1") instead of the model’s default learner for it.
Sourcepub fn nuisance_regressor_boxed(
self,
name: &str,
learner: Box<dyn Regressor>,
) -> Self
pub fn nuisance_regressor_boxed( self, name: &str, learner: Box<dyn Regressor>, ) -> Self
As nuisance_regressor, boxed.
Sourcepub fn nuisance_classifier(
self,
name: &str,
learner: impl Classifier + 'static,
) -> Self
pub fn nuisance_classifier( self, name: &str, learner: impl Classifier + 'static, ) -> Self
Use learner for the classification nuisance name instead of the
model’s default learner for it.
Sourcepub fn nuisance_classifier_boxed(
self,
name: &str,
learner: Box<dyn Classifier>,
) -> Self
pub fn nuisance_classifier_boxed( self, name: &str, learner: Box<dyn Classifier>, ) -> Self
As nuisance_classifier, boxed.
Trait Implementations§
Source§impl LinearScoreModel for Ssm
impl LinearScoreModel for Ssm
Source§fn strata(&self, data: &DmlData) -> Option<Vec<usize>>
fn strata(&self, data: &DmlData) -> Option<Vec<usize>>
Stratify by treatment and selection (D + 2S), as DoubleML.
Source§fn validate(&self, data: &DmlData) -> Result<()>
fn validate(&self, data: &DmlData) -> Result<()>
Source§fn estimate_score(
&self,
input: &ScoreInput<'_>,
folds: &[Fold],
) -> Result<ScoreEstimate>
fn estimate_score( &self, input: &ScoreInput<'_>, folds: &[Fold], ) -> Result<ScoreEstimate>
folds and return the score elements.Auto Trait Implementations§
impl !RefUnwindSafe for Ssm
impl !UnwindSafe for Ssm
impl Freeze for Ssm
impl Send for Ssm
impl Sync for Ssm
impl Unpin for Ssm
impl UnsafeUnpin for Ssm
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more