Family representing a linear relationship with non-Gaussian errors
Source:R/population.R
ols_with_error.Rd
The ols_with_error()
family can represent any non-Gaussian error, provided
random variates can be drawn by an R function. A family specified this way
can be used to specify a population (via population()
), but can't be used
to estimate a model (such as with glm()
).
Arguments
- error
Function that can draw random variables from the non-Gaussian distribution, or a string giving the name of the function. For example,
rt
draws t-distributed random variates. The function must take an argumentn
indicating how many random variates to draw (as all random generation functions built into R do).- ...
Further arguments passed to the
error
function to draw random variates, such as to specify degrees of freedom, shape parameters, or other parameters of the distribution. These arguments are evaluated with the model data in the environment, so they can be expressions referring to model data, such as values of the predictors.
See also
custom_family()
for fully custom families, including for GLMs
Examples
# t-distributed errors with 3 degrees of freedom
ols_with_error(rt, df = 3)
#>
#> Family: ols_with_error
#> Link function: identity
#>
# A linear regression with t-distributed error, using error_scale to make
# errors large
population(
x1 = predictor(rnorm, mean = 4, sd = 10),
x2 = predictor(runif, min = 0, max = 10),
y = response(0.7 + 2.2 * x1 - 0.2 * x2,
family = ols_with_error(rt, df = 4),
error_scale = 2.5)
)
#> Population with variables:
#> x1: rnorm(list(mean = 4, sd = 10))
#> x2: runif(list(min = 0, max = 10))
#> y: ols_with_error(0.7 + 2.2 * x1 - 0.2 * x2, error_scale = 2.5)
# Cauchy-distributed errors
ols_with_error(rcauchy, scale = 3)
#>
#> Family: ols_with_error
#> Link function: identity
#>
# A contaminated error distribution, where
# 95% of observations are Gaussian and 5% are Cauchy
rcontaminated <- function(n) {
contaminant <- rbinom(n, 1, prob = 0.05)
return(ifelse(contaminant == 1,
rcauchy(n, scale = 20),
rnorm(n, sd = 1)))
}
ols_with_error(rcontaminated)
#>
#> Family: ols_with_error
#> Link function: identity
#>