lms {EpiForsk} | R Documentation |
Wrapper around lm for sibling design
Description
Fits a linear model using demeaned data. Useful for sibling design.
Usage
lms(formula, data, grp_id, obs_id = NULL, ...)
## S3 method for class 'lms'
print(x, digits = max(3L, getOption("digits") - 3L), ...)
Arguments
formula |
A formula, used to create a model matrix with demeaned columns. |
data |
A data frame, data frame extension (e.g. a tibble), or a lazy data frame (e.g. from dbplyr or dtplyr). |
grp_id |
< |
obs_id |
< |
... |
Additional arguments to be passed to lm(). In print, additional arguments are ignored without warning. |
x |
An S3 object with class lms. |
digits |
The number of significant digits to be passed to format(coef(x), .) when print()ing. |
Details
lms
estimates parameters in the linear model
y_{ij_i}=\alpha_i+x_{ij_i}^T\beta + \varepsilon_{ij_i}
where \alpha_i
is a group (e.g. sibling group)
specific intercept and x_{ij_i}
are covariate values for
observation j_i
in group i.
\varepsilon_{ij_i}\sim N(0, \sigma^2)
is a normally distributed error term. It is assumed that interest is in
estimating the vector \beta
while \alpha_{i}
are nuisance parameters. Estimation of \beta
uses the mean deviation
method, where
y_{ij_i}^{'}=y_{ij_i}-y_i
is regressed on
x_{ij_i}^{'}=x_{ij_i}-x_i.
Here y_i
and x_i
refers to the mean of y and x in group i.
lms
can keep track of observations by providing a unique identifier
column to obs_id
. lms
will return obs_id
so it matches the order of
observations in model.
lms
only supports syntactic covariate names. Using a non-syntactic name
risks returning an error, e.g if names end in + or -.
Value
A list with class c("lms", "lm")
. Contains the output from lm
applied
to demeaned data according to formula
, as well as the original data and the
provided formula.
Author(s)
KIJA
Examples
sib_id <- sample(200, 1000, replace = TRUE)
sib_out <- rnorm(200)
x1 <- rnorm(1000)
x2 <- rnorm(1000) + sib_out[sib_id] + x1
y <- rnorm(1000, 1, 0.5) + 2 * sib_out[sib_id] - x1 + 2 * x2
data <- data.frame(
x1 = x1,
x2 = x2,
y = y,
sib_id = sib_id,
obs_id = 1:1000
)
mod_lm <- lm(y ~ x1 + x2, data) # OLS model
mod_lm_grp <- lm(y ~ x1 + x2 + factor(sib_id), data) # OLS with grp
mod_lms <- lms(y ~ x1 + x2, data, sib_id, obs_id) # conditional model
summary(mod_lm)
coef(mod_lm_grp)[1:3]
summary(mod_lms)
print(mod_lms)