https://github.com/cran/aster
Tip revision: 63c8e8a453ea587001e2438a8ce51cf0e1e1675c authored by Charles J. Geyer on 23 March 2009, 00:00:00 UTC
version 0.7-7
version 0.7-7
Tip revision: 63c8e8a
gradmat.Rout.save
R version 2.5.0 (2007-04-23)
Copyright (C) 2007 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
>
> library(aster)
Loading required package: trust
>
> set.seed(42)
>
> nind <- 25
>
> vars <- c("l2", "l3", "f2", "f3", "h2", "h3")
> pred <- c(0, 1, 1, 2, 3, 4)
> fam <- c(1, 1, 1, 1, 3, 3)
> length(pred) == length(fam)
[1] TRUE
> nnode <- length(pred)
>
> theta <- matrix(0, nind, nnode)
> root <- matrix(1, nind, nnode)
> x <- raster(theta, pred, fam, root)
> dimnames(x) <- list(NULL, vars)
>
> data <- as.data.frame(x)
> site <- factor(sample(LETTERS[1:4], nind, replace = TRUE))
> foo <- rnorm(nind)
> data <- data.frame(x, site = site, foo = foo, root = 1)
>
> redata <- reshape(data, varying = list(vars),
+ direction = "long", timevar = "varb", times = as.factor(vars),
+ v.names = "resp")
>
> out <- aster(resp ~ foo + site + varb, pred, fam, varb, id, root,
+ data = redata)
> summary(out, show.graph = TRUE)
Call:
aster.formula(formula = resp ~ foo + site + varb, pred = pred,
fam = fam, varvar = varb, idvar = id, root = root, data = redata)
Graphical Model:
variable predecessor family
l2 root bernoulli
l3 l2 bernoulli
f2 l2 bernoulli
f3 l3 bernoulli
h2 f2 truncated.poisson(truncation = 0)
h3 f3 truncated.poisson(truncation = 0)
Estimate Std. Error z value Pr(>|z|)
(Intercept) 1.65073 0.99528 1.659 0.0972 .
foo 0.07857 0.10960 0.717 0.4735
siteB 0.14573 0.26619 0.547 0.5841
siteC -0.25967 0.24569 -1.057 0.2906
siteD -0.35936 0.35182 -1.021 0.3070
varbf3 -0.96858 1.43012 -0.677 0.4982
varbh2 -2.49200 1.60196 -1.556 0.1198
varbh3 -1.53971 1.09216 -1.410 0.1586
varbl2 -1.02810 1.24891 -0.823 0.4104
varbl3 -1.65561 1.19680 -1.383 0.1666
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
>
> out2 <- aster(x, root, pred, fam, modmat = out$modmat)
> summary(out2)
Call:
NULL
Estimate Std. Error z value Pr(>|z|)
(Intercept) 1.65073 0.99528 1.659 0.0972 .
foo 0.07857 0.10960 0.717 0.4735
siteB 0.14573 0.26619 0.547 0.5841
siteC -0.25967 0.24569 -1.057 0.2906
siteD -0.35936 0.35182 -1.021 0.3070
varbf3 -0.96858 1.43012 -0.677 0.4982
varbh2 -2.49200 1.60196 -1.556 0.1198
varbh3 -1.53971 1.09216 -1.410 0.1586
varbl2 -1.02810 1.24891 -0.823 0.4104
varbl3 -1.65561 1.19680 -1.383 0.1666
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
>
> out3 <- aster(x, root, pred, fam, modmat = out$modmat, type = "cond")
> summary(out3)
Call:
NULL
Estimate Std. Error z value Pr(>|z|)
(Intercept) 8.173e-01 6.865e-01 1.191 0.234
foo 1.167e-01 2.630e-01 0.444 0.657
siteB -2.681e-01 6.180e-01 -0.434 0.664
siteC -9.232e-01 5.999e-01 -1.539 0.124
siteD -1.326e+00 8.440e-01 -1.571 0.116
varbf3 4.307e-01 9.032e-01 0.477 0.634
varbh2 -1.350e+00 9.006e-01 -1.499 0.134
varbh3 -2.720e-01 7.136e-01 -0.381 0.703
varbl2 5.227e-01 6.754e-01 0.774 0.439
varbl3 7.393e-16 7.319e-01 1.01e-15 1.000
>
> foo <- match(sort(unique(site)), site)
> modmat.pred <- out$modmat[foo, , ]
>
> ##### case 1: eta = theta, zeta = phi
>
> beta.hat <- out3$coef
>
> modmat.pred.mat <- matrix(modmat.pred, ncol = length(beta.hat))
>
> theta.hat <- matrix(modmat.pred.mat %*% beta.hat, nrow = dim(modmat.pred)[1])
>
> nind <- dim(modmat.pred)[1]
> nnode <- dim(modmat.pred)[2]
> ncoef <- dim(modmat.pred)[3]
>
> aster:::setfam(fam.default())
>
> phi.hat <- .C("aster_theta2phi",
+ nind = as.integer(nind),
+ nnode = as.integer(nnode),
+ pred = as.integer(pred),
+ fam = as.integer(fam),
+ theta = as.double(theta.hat),
+ phi = matrix(as.double(0), nind, nnode))$phi
>
> my.phi.hat <- theta.hat
> my.phi.hat[ , 4] <- my.phi.hat[ , 4] - log(exp(exp(theta.hat[ , 6])) - 1)
> my.phi.hat[ , 3] <- my.phi.hat[ , 3] - log(exp(exp(theta.hat[ , 5])) - 1)
> my.phi.hat[ , 2] <- my.phi.hat[ , 2] - log(1 + exp(theta.hat[ , 4]))
> my.phi.hat[ , 1] <- my.phi.hat[ , 1] - log(1 + exp(theta.hat[ , 3]))
> my.phi.hat[ , 1] <- my.phi.hat[ , 1] - log(1 + exp(theta.hat[ , 2]))
> all.equal(my.phi.hat, phi.hat)
[1] TRUE
>
> gradmat <- 0 * modmat.pred
> storage.mode(gradmat) <- "double"
>
> gradmat <- .C("aster_D_beta2theta2phi",
+ nind = as.integer(nind),
+ nnode = as.integer(nnode),
+ ncoef = as.integer(ncoef),
+ pred = as.integer(pred),
+ fam = as.integer(fam),
+ theta = as.double(theta.hat),
+ modmat = as.double(modmat.pred),
+ gradmat = gradmat)$gradmat
>
> my.gradmat <- 0 * gradmat
> epsilon <- 1e-9
> for (k in 1:ncoef) {
+ beta.epsilon <- beta.hat
+ beta.epsilon[k] <- beta.hat[k] + epsilon
+ theta.epsilon <- matrix(modmat.pred.mat %*% beta.epsilon, nrow = nind)
+ phi.epsilon <- .C("aster_theta2phi",
+ nind = as.integer(nind),
+ nnode = as.integer(nnode),
+ pred = as.integer(pred),
+ fam = as.integer(fam),
+ theta = as.double(theta.epsilon),
+ phi = matrix(as.double(0), nind, nnode))$phi
+ my.gradmat[ , , k] <- (phi.epsilon - phi.hat) / epsilon
+ }
>
> all.equal(gradmat, my.gradmat, tolerance = sqrt(epsilon))
[1] TRUE
>
> ##### case 2: eta = phi, zeta = theta
>
> beta.hat <- out2$coef
>
> phi.hat <- matrix(modmat.pred.mat %*% beta.hat, nrow = nind)
>
> theta.hat <- .C("aster_phi2theta",
+ nind = as.integer(nind),
+ nnode = as.integer(nnode),
+ pred = as.integer(pred),
+ fam = as.integer(fam),
+ phi = as.double(phi.hat),
+ theta = matrix(as.double(0), nind, nnode))$theta
>
> gradmat <- .C("aster_D_beta2phi2theta",
+ nind = as.integer(nind),
+ nnode = as.integer(nnode),
+ ncoef = as.integer(ncoef),
+ pred = as.integer(pred),
+ fam = as.integer(fam),
+ theta = as.double(theta.hat),
+ modmat = as.double(modmat.pred),
+ gradmat = gradmat)$gradmat
>
> my.gradmat <- 0 * gradmat
> epsilon <- 1e-9
> for (k in 1:ncoef) {
+ beta.epsilon <- beta.hat
+ beta.epsilon[k] <- beta.hat[k] + epsilon
+ phi.epsilon <- matrix(modmat.pred.mat %*% beta.epsilon, nrow = nind)
+ theta.epsilon <- .C("aster_phi2theta",
+ nind = as.integer(nind),
+ nnode = as.integer(nnode),
+ pred = as.integer(pred),
+ fam = as.integer(fam),
+ phi = as.double(phi.epsilon),
+ theta = matrix(as.double(0), nind, nnode))$theta
+ my.gradmat[ , , k] <- (theta.epsilon - theta.hat) / epsilon
+ }
>
> all.equal(gradmat, my.gradmat, tolerance = sqrt(epsilon))
[1] TRUE
>
> ##### case 3: eta = phi, zeta = tau
>
> root.pred <- matrix(1, nind, nnode)
>
> beta.hat <- out2$coef
>
> beta2tau <- function(beta) {
+
+ phi <- matrix(modmat.pred.mat %*% beta, nrow = nind)
+
+ theta <- .C("aster_phi2theta",
+ nind = as.integer(nind),
+ nnode = as.integer(nnode),
+ pred = as.integer(pred),
+ fam = as.integer(fam),
+ phi = as.double(phi),
+ theta = matrix(as.double(0), nind, nnode))$theta
+
+ ctau <- .C("aster_theta2ctau",
+ nind = as.integer(nind),
+ nnode = as.integer(nnode),
+ pred = as.integer(pred),
+ fam = as.integer(fam),
+ theta = as.double(theta),
+ ctau = double(nind * nnode))$ctau
+
+ tau <- .C("aster_ctau2tau",
+ nind = as.integer(nind),
+ nnode = as.integer(nnode),
+ pred = as.integer(pred),
+ fam = as.integer(fam),
+ root = as.double(root.pred),
+ ctau = as.double(ctau),
+ tau = double(nind * nnode))$tau
+
+ return(tau)
+ }
>
> tau.hat <- beta2tau(beta.hat)
>
> gradmat <- .C("aster_D_beta2phi2tau",
+ nind = as.integer(nind),
+ nnode = as.integer(nnode),
+ ncoef = as.integer(ncoef),
+ pred = as.integer(pred),
+ fam = as.integer(fam),
+ beta = as.double(beta.hat),
+ root = as.double(root.pred),
+ origin = rep(as.double(0), nind * nnode),
+ modmat = as.double(modmat.pred),
+ gradmat = gradmat)$gradmat
>
> my.gradmat <- 0 * gradmat
> epsilon <- 1e-9
> for (k in 1:ncoef) {
+ beta.epsilon <- beta.hat
+ beta.epsilon[k] <- beta.hat[k] + epsilon
+ tau.epsilon <- beta2tau(beta.epsilon)
+ my.gradmat[ , , k] <- (tau.epsilon - tau.hat) / epsilon
+ }
>
> all.equal(gradmat, my.gradmat, tolerance = sqrt(epsilon))
[1] TRUE
>
> ##### case 4: eta = theta, zeta = tau
>
> beta.hat <- out3$coef
>
> beta2tau <- function(beta) {
+
+ theta <- matrix(modmat.pred.mat %*% beta, nrow = nind)
+
+ ctau <- .C("aster_theta2ctau",
+ nind = as.integer(nind),
+ nnode = as.integer(nnode),
+ pred = as.integer(pred),
+ fam = as.integer(fam),
+ theta = as.double(theta),
+ ctau = double(nind * nnode))$ctau
+
+ tau <- .C("aster_ctau2tau",
+ nind = as.integer(nind),
+ nnode = as.integer(nnode),
+ pred = as.integer(pred),
+ fam = as.integer(fam),
+ root = as.double(root.pred),
+ ctau = as.double(ctau),
+ tau = double(nind * nnode))$tau
+
+ return(tau)
+ }
>
> tau.hat <- beta2tau(beta.hat)
>
> gradmat <- .C("aster_D_beta2theta2tau",
+ nind = as.integer(nind),
+ nnode = as.integer(nnode),
+ ncoef = as.integer(ncoef),
+ pred = as.integer(pred),
+ fam = as.integer(fam),
+ beta = as.double(beta.hat),
+ root = as.double(root.pred),
+ modmat = as.double(modmat.pred),
+ gradmat = gradmat)$gradmat
>
> my.gradmat <- 0 * gradmat
> for (k in 1:ncoef) {
+ beta.epsilon <- beta.hat
+ beta.epsilon[k] <- beta.hat[k] + epsilon
+ tau.epsilon <- beta2tau(beta.epsilon)
+ my.gradmat[ , , k] <- (tau.epsilon - tau.hat) / epsilon
+ }
>
> all.equal(gradmat, my.gradmat, tolerance = sqrt(epsilon))
[1] TRUE
>
>