Two-stage measurement error

measurement.error(
  model1,
  formula,
  data = parent.frame(),
  predictfun = function(mu, var, data, ...) mu[, 1]^2 + var[1],
  id1,
  id2,
  ...
)

Arguments

model1

Stage 1 model

formula

Formula specifying observed covariates in stage 2 model

data

data.frame

predictfun

Predictions to be used in stage 2

id1

Optional id-vector of stage 1

id2

Optional id-vector of stage 2

...

Additional arguments to lower level functions

See also

stack.estimate

Examples

m <- lvm(c(y1,y2,y3)~u,c(y3,y4,y5)~v,u~~v,c(u,v)~x)
transform(m,u2~u) <- function(x) x^2
transform(m,uv~u+v) <- prod
regression(m) <- z~u2+u+v+uv+x
set.seed(1)
d <- sim(m,1000,p=c("u,u"=1))

## Stage 1
m1 <- lvm(c(y1[0:s],y2[0:s],y3[0:s])~1*u,c(y3[0:s],y4[0:s],y5[0:s])~1*v,u~b*x,u~~v)
latent(m1) <- ~u+v
e1 <- estimate(m1,d)

pp <- function(mu,var,data,...) {
    cbind(u=mu[,"u"],u2=mu[,"u"]^2+var["u","u"],v=mu[,"v"],uv=mu[,"u"]*mu[,"v"]+var["u","v"])
}
(e <- measurement.error(e1, z~1+x, data=d, predictfun=pp))
#>             Estimate Std.Err   2.5% 97.5% P-value
#> (Intercept)   0.1358   27.63 -54.03 54.30  0.9961
#> x             1.1287   10.29 -19.04 21.30  0.9127
#> u             0.9437   17.91 -34.15 36.04  0.9580
#> u2            0.9374   31.05 -59.92 61.79  0.9759
#> v             1.1385   15.48 -29.21 31.48  0.9414
#> uv            1.0375   29.79 -57.34 59.42  0.9722

## uu <- seq(-1,1,length.out=100)
## pp <- estimate(e,function(p,...) p["(Intercept)"]+p["u"]*uu+p["u2"]*uu^2)$coefmat
if (interactive()) {
    plot(e,intercept=TRUE,line=0)

    f <- function(p) p[1]+p["u"]*u+p["u2"]*u^2
    u <- seq(-1,1,length.out=100)
    plot(e, f, data=data.frame(u), ylim=c(-.5,2.5))
}