Skip to contents

Generates a linear model object to estimate a treatment effect, with proper estimation of variances accounting for the study design.

Usage

lmitt(obj, design, data, ...)

# S3 method for class 'formula'
lmitt(obj, design, data, absorb = FALSE, offset = NULL, weights = NULL, ...)

# S3 method for class 'lm'
lmitt(obj, design = NULL, ...)

Arguments

obj

A formula or a lm object. See Details.

design

The Design to be used. Alternatively, a formula creating a design (of the type of that would be passed as the first argument to rd_design(), rct_design(), or obs_design()). If the formula includes a forcing() element, an RD design is created. Otherwise an observational design is created. An RCT design must be created manually using rct_design().

data

A data.frame such as would be passed into lm().

...

Additional arguments passed to lm(). One such argument is dichotomy, which can be used to dichotomize a non-binary treatment variable in design. See the Details section of the ett() or att() help pages for information on specifying this formula.

absorb

If TRUE, fixed effects are included for blocks identified in the Design. Excluded in FALSE. Default is FALSE. The estimates of these fixed effects are suppressed from the returned object.

offset

Offset of the kind which would be passed into lm(). Ideally, this should be the output of cov_adj().

weights

Which weights should be generated? Options are "ate" or "ett". Alternatively, the output of a manually run ate() or ett() can be used.

Value

teeMod model.

Details

The first argument to lmitt() should be a formula specifying the outcome on the left hand side. The right hand side of the formula can be any of the following:

  • 1: Estimates a main treatment effect.

  • a subgroup variable: Estimates a treatment effect within each level of your subgrouping variable.

  • a continuous moderator: Estimates a main treatment effect as well as a treatment by moderator interaction. The moderator is not automatically centered.

Alternatively, obj can be a pre-created lm object. No modification is made to the formula of the object. See the help for as.lmitt() for details of this conversion.

Note that although the Design creation functions (e.g. rct_design()) take an optional subset= argument used in the creation of the Design, this is not the same as the subset= argument passed to lm() or lmitt(). The subset= argument when creating a Design restricts the data used to generate the Design, but has no direct impact on the future lm() or lmitt() calls using that Design. (It can indirectly have an impact by excluding particular units of assignment from receiving a treatment assignment and thus complete case analysis removes them from the model.)

On the other hand, the subset= argument in lm() or lmitt() refers only to subsetting the data argument passed into lm() or lmitt().

To avoid variable name collision, the treatment variable defined in the design will have a "." appended to it. For example, if you request a main treatment effect (with a formula of ~ 1) with a treatment variable named "txt", you can obtain it's estimate from the returned teeMod object via $coefficients["txt."].

lmitt() will produce a message if the Design passed in has block information that is not being utilized in the model. Note that this is not an error, but could be an oversight. To disable this message, run options("propertee_message_on_unused_blocks" = FALSE).

Examples

data(simdata)
des <- rct_design(z ~ unit_of_assignment(uoa1, uoa2), data = simdata)
mod1 <- lmitt(y ~ 1, data = simdata, design = des, weights = "ate")
mod2 <- lmitt(y ~ as.factor(o), data = simdata, design = des, weights = "ate")
mod3 <- lmitt(y ~ 1, data = simdata,
              design = z ~ uoa(uoa1, uoa2) + forcing(force))