Dear all, I am working on modifying the R working matrix to commodate some other correlations that not included in the package. I am having problem to locate where the R matrix are defined for regular matrices, i.e. independence, exchangeable, AR and unstructure. it might have something within .C("Cgee",but don't understand it well enough to know. Can you anyone help? /*gee source code*/ function (formula = formula(data), id = id, data = parent.frame(), subset, na.action, R = NULL, b = NULL, tol = 0.001, maxiter = 25, family = gaussian, corstr = "independence", Mv = 1, silent = TRUE, contrasts = NULL, scale.fix = FALSE, scale.value = 1, v4.4compat FALSE) { message("Beginning Cgee S-function, @(#) geeformula.q 4.13 98/01/27") call <- match.call() m <- match.call(expand = FALSE) m$R <- m$b <- m$tol <- m$maxiter <- m$link <- m$varfun <- m$corstr <- m$Mv <- m$silent <- m$contrasts <- m$family <- m$scale.fix <- m$scale.value <- m$v4.4compat <- NULL if (is.null(m$id)) m$id <- as.name("id") if (!is.null(m$na.action) && m$na.action != "na.omit") { warning("Only 'na.omit' is implemented for gee\ncontinuing with 'na.action=na.omit'") m$na.action <- as.name("na.omit") } m[[1]] <- as.name("model.frame") m <- eval(m, parent.frame()) Terms <- attr(m, "terms") y <- as.matrix(model.extract(m, "response")) x <- model.matrix(Terms, m, contrasts) Q <- qr(x) if (Q$rank < ncol(x)) stop("rank-deficient model matrix") N <- rep(1, length(y)) if (dim(y)[2] == 2) { N <- as.vector(y %*% c(1, 1)) y <- y[, 1] } else { if (dim(y)[2] > 2) stop("Only binomial response matrices (2 columns)") } offset <- model.extract(m, offset) id <- model.extract(m, id) if (is.null(id)) { stop("Id variable not found") } nobs <- nrow(x) p <- ncol(x) xnames <- dimnames(x)[[2]] if (is.null(xnames)) { xnames <- paste("x", 1:p, sep = "") dimnames(x) <- list(NULL, xnames) } if (is.character(family)) family <- get(family) if (is.function(family)) family <- family() if (!is.null(b)) { beta <- matrix(as.double(b), ncol = 1) if (nrow(beta) != p) { stop("Dim beta != ncol(x)") } message("user's initial regression estimate") print(beta) } else { message("running glm to get initial regression estimate") mm <- match.call(expand = FALSE) mm$R <- mm$b <- mm$tol <- mm$maxiter <- mm$link <- mm$varfun <- mm$corstr <- mm$Mv <- mm$silent <- mm$contrasts <- mm$scale.fix <- mm$scale.value <- mm$id <- NULL mm[[1]] <- as.name("glm") beta <- eval(mm, parent.frame())$coef print(beta) beta <- as.numeric(beta) } if (length(id) != length(y)) stop("Id and y not same length") maxclsz <- as.integer(max(unlist(lapply(split(id, id), "length")))) maxiter <- as.integer(maxiter) silent <- as.integer(silent) if (length(offset) <= 1) offset <- rep(0, length(y)) if (length(offset) != length(y)) stop("offset and y not same length") offset <- as.double(offset) if (!is.null(R)) { Rr <- nrow(R) if (Rr != ncol(R)) stop("R is not square!") if (Rr < maxclsz) stop("R not big enough to accommodate some clusters.") } else { R <- matrix(as.double(rep(0, maxclsz * maxclsz)), nrow = maxclsz) } links <- c("identity", "log", "logit", "inverse", "probit", "cloglog") fams <- c("gaussian", "poisson", "binomial", "Gamma", "quasi") varfuns <- c("constant", "mu", "mu(1-mu)", "mu^2") corstrs <- c("independence", "fixed", "stat_M_dep", "non_stat_M_dep", "exchangeable", "AR-M", "unstructured") linkv <- as.integer(match(c(family$link), links, -1)) famv <- match(family$family, fams, -1) if (famv < 1) stop("unknown family") if (famv <= 4) varfunv <- famv else varfunv <- match(family$varfun, varfuns, -1) varfunv <- as.integer(varfunv) corstrv <- as.integer(match(corstr, corstrs, -1)) if (linkv < 1) stop("unknown link.") if (varfunv < 1) stop("unknown varfun.") if (corstrv < 1) stop("unknown corstr.") naivvar <- matrix(rep(0, p * p), nrow = p) robvar <- matrix(rep(0, p * p), nrow = p) phi <- as.double(scale.value) scale.fix <- as.integer(scale.fix) errstate <- as.integer(1) tol <- as.double(tol) Mv <- as.integer(Mv) maxcl <- as.integer(0) if (!(is.double(x))) x <- as.double(x) if (!(is.double(y))) y <- as.double(y) if (!(is.double(id))) id <- as.double(id) if (!(is.double(N))) N <- as.double(N) modvec <- as.integer(c(linkv, varfunv, corstrv)) if (v4.4compat) compatflag <- 1 else compatflag <- 0 z <- .C("Cgee", x, y, id, N, offset, nobs, p, modvec, Mv, estb = beta, nv = naivvar, rv = robvar, sc = phi, wcor = R, tol, mc = maxcl, iter = maxiter, silent, err = errstate, scale.fix, as.integer(compatflag), PACKAGE = "gee") if (z$err != 0) warning("Cgee had an error (code= ", z$err, "). Results suspect.") if (min(eigen(z$wcor)$values) < 0) { warning("Working correlation estimate not positive definite") z$err <- z$err + 1000 } fit <- list() attr(fit, "class") <- c("gee", "glm") fit$title <- "GEE: GENERALIZED LINEAR MODELS FOR DEPENDENT DATA" fit$version <- "gee S-function, version 4.13 modified 98/01/27 (1998)" links <- c("Identity", "Logarithm", "Logit", "Reciprocal", "Probit", "Cloglog") varfuns <- c("Gaussian", "Poisson", "Binomial", "Gamma") corstrs <- c("Independent", "Fixed", "Stationary M-dependent", "Non-Stationary M-dependent", "Exchangeable", "AR-M", "Unstructured") fit$model <- list() fit$model$link <- links[linkv] fit$model$varfun <- varfuns[varfunv] fit$model$corstr <- corstrs[corstrv] if (!is.na(match(c(corstrv), c(3, 4, 6)))) fit$model$M <- Mv fit$call <- call fit$terms <- Terms fit$formula <- as.vector(attr(Terms, "formula")) fit$contrasts <- attr(x, "contrasts") fit$nobs <- nobs fit$iterations <- z$iter fit$coefficients <- as.vector(z$estb) fit$nas <- is.na(fit$coefficients) names(fit$coefficients) <- xnames eta <- as.vector(x %*% fit$coefficients) fit$linear.predictors <- eta mu <- as.vector(family$linkinv(eta)) fit$fitted.values <- mu fit$residuals <- y - mu fit$family <- family fit$y <- as.vector(y) fit$id <- as.vector(id) fit$max.id <- z$mc z$wcor <- matrix(z$wcor, ncol = maxclsz) fit$working.correlation <- z$wcor fit$scale <- z$sc fit$robust.variance <- z$rv fit$naive.variance <- z$nv fit$xnames <- xnames fit$error <- z$err dimnames(fit$robust.variance) <- list(xnames, xnames) dimnames(fit$naive.variance) <- list(xnames, xnames) fit } <environment: namespace:gee> [[alternative HTML version deleted]]