Revision 63c8e8a453ea587001e2438a8ce51cf0e1e1675c authored by Charles J. Geyer on 23 March 2009, 00:00:00 UTC, committed by Gabor Csardi on 23 March 2009, 00:00:00 UTC
1 parent b524c08
Raw File
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
> 
> 
back to top