Description Details Author(s) References See Also Examples
Package simex
is an implementation of the SIMEX–algorithm by Cook
and Stephanski and the MCSIMEX–Algorithm by Küchenhoff, Mwalili and Lesaffre.
Package: | simex |
Type: | Package |
Version: | 1.8 |
Date: | 2019-07-28 |
License: | GPL 2 or above |
LazyLoad: | yes |
The package includes first of all the implementation for the SIMEX– and MCSIMEX–Algorithms. Jackknife and asymptotic variance estimation are implemented. Various methods and analytic tools are provided for a simple and fast access to the SIMEX– and MCSIMEX–Algorithm.
Functions simex()
and mcsimex()
can be used on models issued
from lm()
, glm()
with asymtotic estimation.
Models from nls()
, gam()
(package mgcv),
polr()
(package MASS),
lme()
, nlme()
(package nlme) and coxph()
(package survival) can also be corrected with
these algorithms, but without asymptotic estimations.
Wolfgang Lederer, Heidi Seibold, Helmut Küchenhoff
Maintainer: Wolfgang Lederer,wolfgang.lederer@gmail.com
Lederer, W. and Küchenhoff, H. (2006) A short introduction to the SIMEX and MCSIMEX. R News, 6/4, 26 – 31
and for functions generating the initial naive models:
lm
, glm
, nls
,
gam
, lme
, nlme
, polr
, coxph
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | # See example(simex) and example(mcsimex)
## Seed
set.seed(49494)
## simulating the measurement error standard deviations
sd_me1 <- 0.3
sd_me2 <- 0.4
temp <- runif(100, min = 0, max = 0.6)
sd_me_het1 <- sort(temp)
temp2 <- rnorm(100, sd = 0.1)
sd_me_het2 <- abs(sd_me_het1 + temp2)
## simulating the independent variables x (real and with measurement error):
x_real1 <- rnorm(100)
x_real2 <- rpois(100, lambda = 2)
x_real3 <- -4*x_real1 + runif(100, min = -2, max = 2) # correlated to x_real
x_measured1 <- x_real1 + sd_me1 * rnorm(100)
x_measured2 <- x_real2 + sd_me2 * rnorm(100)
x_het1 <- x_real1 + sd_me_het1 * rnorm(100)
x_het2 <- x_real3 + sd_me_het2 * rnorm(100)
## calculating dependent variable y:
y1 <- x_real1 + rnorm(100, sd = 0.05)
y2 <- x_real1 + 2*x_real2 + rnorm(100, sd = 0.08)
y3 <- x_real1 + 2*x_real3 + rnorm(100, sd = 0.08)
### one variable with homoscedastic measurement error
(model_real <- lm(y1 ~ x_real1))
(model_naiv <- lm(y1 ~ x_measured1, x = TRUE))
(model_simex <- simex(model_naiv, SIMEXvariable = "x_measured1", measurement.error = sd_me1))
plot(model_simex)
### two variables with homoscedastic measurement errors
(model_real2 <- lm(y2 ~ x_real1 + x_real2))
(model_naiv2 <- lm(y2 ~ x_measured1 + x_measured2, x = TRUE))
(model_simex2 <- simex(model_naiv2, SIMEXvariable = c("x_measured1", "x_measured2"),
measurement.error = cbind(sd_me1, sd_me2)))
plot(model_simex2)
### one variable with increasing heteroscedastic measurement error
model_real
(mod_naiv1 <- lm(y1 ~ x_het1, x = TRUE))
(mod_simex1 <- simex(mod_naiv1, SIMEXvariable = "x_het1",
measurement.error = sd_me_het1, asymptotic = FALSE))
plot(mod_simex1)
## Not run:
### two correlated variables with heteroscedastic measurement errors
(model_real3 <- lm(y3 ~ x_real1 + x_real3))
(mod_naiv2 <- lm(y3 ~ x_het1 + x_het2, x = TRUE))
(mod_simex2 <- simex(mod_naiv2, SIMEXvariable = c("x_het1", "x_het2"),
measurement.error = cbind(sd_me_het1, sd_me_het2), asymptotic = FALSE))
plot(mod_simex2)
### two variables, one with homoscedastic, one with heteroscedastic measurement error
model_real2
(mod_naiv3 <- lm(y2 ~ x_measured1 + x_het2, x = TRUE))
(mod_simex3 <- simex(mod_naiv3, SIMEXvariable = c("x_measured1", "x_het2"),
measurement.error = cbind(sd_me1, sd_me_het2), asymptotic = FALSE))
### glm: two variables, one with homoscedastic, one with heteroscedastic measurement error
t <- x_real1 + 2*x_real2
g <- 1 / (1 + exp(-t))
u <- runif(100)
ybin <- as.numeric(u < g)
(logit_real <- glm(ybin ~ x_real1 + x_real2, family = binomial))
(logit_naiv <- glm(ybin ~ x_measured1 + x_het2, x = TRUE, family = binomial))
(logit_simex <- simex(logit_naiv, SIMEXvariable = c("x_measured1", "x_het2"),
measurement.error = cbind(sd_me1, sd_me_het2), asymptotic = FALSE))
summary(logit_simex)
print(logit_simex)
plot(logit_simex)
## End(Not run)
|
Call:
lm(formula = y1 ~ x_real1)
Coefficients:
(Intercept) x_real1
-0.004752 0.994554
Call:
lm(formula = y1 ~ x_measured1, x = TRUE)
Coefficients:
(Intercept) x_measured1
-0.01217 0.90327
Naive model:
lm(formula = y1 ~ x_measured1, x = TRUE)
SIMEX-Variables: x_measured1
Number of Simulations: 100
Coefficients:
(Intercept) x_measured1
-0.01528 0.97007
Call:
lm(formula = y2 ~ x_real1 + x_real2)
Coefficients:
(Intercept) x_real1 x_real2
-0.01411 0.99094 2.00011
Call:
lm(formula = y2 ~ x_measured1 + x_measured2, x = TRUE)
Coefficients:
(Intercept) x_measured1 x_measured2
0.2050 0.8909 1.8593
Naive model:
lm(formula = y2 ~ x_measured1 + x_measured2, x = TRUE)
SIMEX-Variables: x_measured1, x_measured2
Number of Simulations: 100
Coefficients:
(Intercept) x_measured1 x_measured2
-0.04414 0.93716 1.97311
Call:
lm(formula = y1 ~ x_real1)
Coefficients:
(Intercept) x_real1
-0.004752 0.994554
Call:
lm(formula = y1 ~ x_het1, x = TRUE)
Coefficients:
(Intercept) x_het1
-0.0189 0.8513
Naive model:
lm(formula = y1 ~ x_het1, x = TRUE)
SIMEX-Variables: x_het1
Number of Simulations: 100
Coefficients:
(Intercept) x_het1
-0.002565 0.938262
Call:
lm(formula = y3 ~ x_real1 + x_real3)
Coefficients:
(Intercept) x_real1 x_real3
0.01734 0.97012 1.99334
Call:
lm(formula = y3 ~ x_het1 + x_het2, x = TRUE)
Coefficients:
(Intercept) x_het1 x_het2
-0.1016 -0.1986 1.7146
Naive model:
lm(formula = y3 ~ x_het1 + x_het2, x = TRUE)
SIMEX-Variables: x_het1, x_het2
Number of Simulations: 100
Coefficients:
(Intercept) x_het1 x_het2
-0.1096 -0.1167 1.7426
Call:
lm(formula = y2 ~ x_real1 + x_real2)
Coefficients:
(Intercept) x_real1 x_real2
-0.01411 0.99094 2.00011
Call:
lm(formula = y2 ~ x_measured1 + x_het2, x = TRUE)
Coefficients:
(Intercept) x_measured1 x_het2
3.9284 1.3993 0.1356
Naive model:
lm(formula = y2 ~ x_measured1 + x_het2, x = TRUE)
SIMEX-Variables: x_measured1, x_het2
Number of Simulations: 100
Coefficients:
(Intercept) x_measured1 x_het2
3.9008 2.1769 0.3238
Call: glm(formula = ybin ~ x_real1 + x_real2, family = binomial)
Coefficients:
(Intercept) x_real1 x_real2
-1.088 0.690 2.895
Degrees of Freedom: 99 Total (i.e. Null); 97 Residual
Null Deviance: 80.99
Residual Deviance: 40.09 AIC: 46.09
Call: glm(formula = ybin ~ x_measured1 + x_het2, family = binomial,
x = TRUE)
Coefficients:
(Intercept) x_measured1 x_het2
1.8511007 0.1799577 -0.0006873
Degrees of Freedom: 99 Total (i.e. Null); 97 Residual
Null Deviance: 80.99
Residual Deviance: 80.49 AIC: 86.49
Naive model:
glm(formula = ybin ~ x_measured1 + x_het2, family = binomial, x = TRUE)
SIMEX-Variables: x_measured1, x_het2
Number of Simulations: 100
Coefficients:
(Intercept) x_measured1 x_het2
1.83420 0.28642 0.02438
Call:
simex(model = logit_naiv, SIMEXvariable = c("x_measured1", "x_het2"),
measurement.error = cbind(sd_me1, sd_me_het2), asymptotic = FALSE)
Naive model:
glm(formula = ybin ~ x_measured1 + x_het2, family = binomial,
x = TRUE)
Simex variable :
x_measured1 x_het2
Measurement error : "0.3" "heteroscedastic"
Number of iterations: 100
Residuals:
Min. 1st Qu. Median Mean 3rd Qu. Max.
-0.913794 0.117733 0.130605 0.001902 0.154765 0.233736
Coefficients:
Jackknife variance:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.83420 0.29571 6.203 1.36e-08 ***
x_measured1 0.28642 1.00333 0.285 0.776
x_het2 0.02438 0.24870 0.098 0.922
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Naive model:
glm(formula = ybin ~ x_measured1 + x_het2, family = binomial, x = TRUE)
SIMEX-Variables: x_measured1, x_het2
Number of Simulations: 100
Coefficients:
(Intercept) x_measured1 x_het2
1.83420 0.28642 0.02438
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.