From noreply at r-forge.r-project.org Thu Jun 6 15:28:14 2013 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Thu, 6 Jun 2013 15:28:14 +0200 (CEST) Subject: [Georob-commits] r6 - in pkg: . R man Message-ID: <20130606132814.8DA80184B6F@r-forge.r-project.org> Author: papritz Date: 2013-06-06 15:28:13 +0200 (Thu, 06 Jun 2013) New Revision: 6 Modified: pkg/ChangeLog pkg/NAMESPACE pkg/R/georob.S3methods.R pkg/R/georob.cv.R pkg/R/georob.exported.functions.R pkg/R/georob.predict.R pkg/R/georob.private.functions.R pkg/man/cv.georob.Rd pkg/man/georob.control.Rd pkg/man/georobObject.Rd pkg/man/internal.functions.Rd pkg/man/predict.georob.Rd Log: handling design matrices with rank < ncol(x) changes for solving estimating equations for xi M pkg/R/georob.cv.R M pkg/R/georob.S3methods.R M pkg/R/georob.predict.R M pkg/R/georob.exported.functions.R M pkg/R/georob.private.functions.R M pkg/ChangeLog M pkg/man/internal.functions.Rd M pkg/man/cv.georob.Rd M pkg/man/georob.control.Rd M pkg/man/georobObject.Rd M pkg/man/predict.georob.Rd M pkg/NAMESPACE Modified: pkg/ChangeLog =================================================================== --- pkg/ChangeLog 2013-05-23 15:41:57 UTC (rev 5) +++ pkg/ChangeLog 2013-06-06 13:28:13 UTC (rev 6) @@ -68,8 +68,25 @@ * georob.exported.functions.R (georob): improved way to handle missing observations and to construct model.frame * georob.predict.R (predict.georob): correct handling of missing observations * georob.S3methods.R (georob.residuals): new argument "terms" -* georob.S3methods.R (ranef.georob, rstandard.georob,deviance.georob): correct handling of missing observations +* georob.S3methods.R (ranef.georob, residuals.georob, rstandard.georob, deviance.georob): correct handling of missing observations * variogram.R (plot.georob): correct handling of missing observations +2013-05-24 Andreas Papritz +* georob.cv.R (cv.georob): separate initial variogram parameters for each cross-validation set + + +2013-05-31 Andreas Papritz + +* georob.S3methods.R (ranef.georob, residuals.georob,rstandard.georob,deviance.georob): correct handling of missing observations +* georob.S3methods.R (deviance.georob, ranef.georob, rstandard.georob, summary.georob): revised expansion of covariance matrices + + +2013-06-06 Andreas Papritz + +* georob.exported.function.R (georob, georob.control): handling fixed effects model matrices with rank < ncol(x) +* georob.private.function.R (prepare.likelihood.calculations, compute.estimating.equations, negative.restr.loglikelihood, negative.restr.loglikelihood, gradient.negative.restricted.loglikelihood, georob.fit) : solving estimating equations for xi +* georob.S3methods.R ranef.georob, rstandard.georob) : solving estimating equations for xi +* georob.private.function.R (compute.covariances, estimate.xihat, update.xihat, negative.restr.loglikelihood): solving estimating equations for xi + Modified: pkg/NAMESPACE =================================================================== --- pkg/NAMESPACE 2013-05-23 15:41:57 UTC (rev 5) +++ pkg/NAMESPACE 2013-06-06 13:28:13 UTC (rev 6) @@ -76,16 +76,15 @@ ## compute.covariances, ## compute.estimating.equations, ## compute.semivariance, -## compute.U, ## dcorr.dparam, -## estimate.betahat.bhat, +## estimate.xihat, ## gcr, ## georob.fit, ## getCall.georob, ## gradient.negative.restricted.loglikelihood, ## negative.restr.loglikelihood, ## prepare.likelihood.calculations, -## update.betahat.bhat +## update.xihat S3method( deviance, georob ) S3method( fixed.effects, georob ) Modified: pkg/R/georob.S3methods.R =================================================================== --- pkg/R/georob.S3methods.R 2013-05-23 15:41:57 UTC (rev 5) +++ pkg/R/georob.S3methods.R 2013-06-06 13:28:13 UTC (rev 6) @@ -169,21 +169,30 @@ ## 2012-10-18 AP changes for new definition of eta ## 2012-11-26 AP method for random.effects ## 2013-04-23 AP new names for robustness weights - ## 2013-05-23 AP correct handling of missing observations + ## 2013-05-31 AP correct handling of missing observations + ## 2013-05-31 AP revised expansion of covariance matrices + ## 2013-05-06 AP changes for solving estimating equations for xi - object$Valpha.objects <- expand( object$Valpha.objects ) - object$cov <- expand( object$cov ) + ## temporarily redefine na.action component of object + object.na <- object$na.action + if( identical( class( object$na.action ), "exclude" ) ){ + class( object$na.action ) <- "omit" + } + + Valpha.objects <- expand( object$Valpha.objects ) + covmat <- expand( object$cov ) + bhat <- object$bhat if( standard ){ - if( is.null( object$cov$cov.bhat ) ){ + if( is.null( covmat$cov.bhat ) ){ ## compute standard errors of residuals - if( is.null( object$Valpha.objects$Valpha.inverse ) || - is.null( object$Valpha.objects$Valpha.ilcf ) + if( is.null( Valpha.objects$Valpha.inverse ) || + is.null( Valpha.objects$Valpha.ilcf ) ) stop( "'Valpha.objects' incomplete or missing in georob object;\n", "'Valpha.objects' must include components 'Valpha.inverse' and 'Valpha.ilcf'" @@ -194,12 +203,12 @@ ) - if( is.null( object$Valpha.objects$Valpha.ucf ) ){ + if( is.null( Valpha.objects$Valpha.ucf ) ){ ## compute upper cholesky factor of correlation matrix Valpha ## which is needed to compute cov( bhat ) - object$Valpha.objects$Valpha.ucf <- t( solve( object$Valpha.objects$Valpha.ilcf ) ) + Valpha.objects$Valpha.ucf <- t( solve( Valpha.objects$Valpha.ilcf ) ) } @@ -209,7 +218,9 @@ )[!duplicated( object$Tmat ), , drop = FALSE] r.cov <- compute.covariances( - Valpha.objects = object$Valpha.objects, + Valpha.objects = Valpha.objects, + Aalpha = object[["Aalpha"]], + Palpha = expand( object[["Palpha"]] ), rweights = object$rweights, XX = X, TT = object$Tmat, names.yy = rownames( model.frame( object ) ), nugget = object$param["nugget"], @@ -218,8 +229,8 @@ cov.bhat = TRUE, full.cov.bhat = FALSE, cov.betahat = FALSE, cov.bhat.betahat = FALSE, - cov.delta.bhat = FALSE, full.cov.delta.bhat = FALSE, - cov.delta.bhat.betahat = FALSE, + cov.deltabhat = FALSE, full.cov.deltabhat = FALSE, + cov.deltabhat.betahat = FALSE, cov.ehat = FALSE, full.cov.ehat = FALSE, cov.ehat.p.bhat = FALSE, full.cov.ehat.p.bhat = FALSE, aux.cov.pred.target = FALSE, @@ -236,10 +247,10 @@ ## extract standard errors of residuals from georob object - if( is.matrix( object$cov$cov.bhat ) ){ - se <- sqrt( diag( object$cov$cov.bhat ) ) + if( is.matrix( covmat$cov.bhat ) ){ + se <- sqrt( diag( covmat$cov.bhat ) ) } else { - se <- sqrt( object$cov$cov.bhat ) + se <- sqrt( covmat$cov.bhat ) } } @@ -248,8 +259,7 @@ } - bhat <- naresid( object$na.action, bhat ) - return( bhat ) + naresid( object.na, bhat ) } @@ -303,12 +313,19 @@ ## 2011-10-13 A. Papritz ## 2011-12-14 AP modified for replicated observations - ## 2013-05-23 AP modified for computing partial residuals for single terms + ## 2013-05-31 AP modified for computing partial residuals for single terms type <- match.arg( type ) if( !level %in% 1:0 ) stop( "wrong level: must be either 1 or 0" ) + ## temporarily redefine na.action component of object + + object.na <- object$na.action + if( identical( class( object$na.action ), "exclude" ) ){ + class( object$na.action ) <- "omit" + } + r <- object$residuals res <- switch( type, @@ -319,7 +336,6 @@ partial = r ) - res <- naresid(object$na.action, res) if( level == 0 && any( type %in% c( "working", "response", "partial" ) ) ){ res <- res + ranef( object, standard = FALSE )[object$Tmat] @@ -328,6 +344,8 @@ if( type == "partial" ) res <- res + predict( object, type = "terms", terms = terms )$fit drop( res ) + + naresid( object.na, res ) } @@ -352,53 +370,63 @@ ## 2012-01-05 AP modified for compress storage of matrices ## 2012-10-18 AP changes for new definition of eta ## 2013-04-23 AP new names for robustness weights - ## 2013-05-23 AP correct handling of missing observations + ## 2013-05-31 AP correct handling of missing observations + ## 2013-05-31 AP revised expansion of covariance matrices + ## 2013-05-06 AP changes for solving estimating equations for xi - object <- model - object$Valpha.objects <- expand( object$Valpha.objects ) - object$cov <- expand( object$cov ) + ## temporarily redefine na.action component of model + model.na <- model$na.action + if( identical( class( model$na.action ), "exclude" ) ){ + class( model$na.action ) <- "omit" + } + + Valpha.objects <- expand( model$Valpha.objects ) + covmat <- expand( model$cov ) + if( !level %in% 1:0 ) stop( "wrong level: must be either 1 or 0" ) if( - ( is.null( object$cov$cov.ehat ) & level == 1 ) || - ( is.null( object$cov$cov.ehat.p.bhat ) & level == 0 ) + ( is.null( covmat$cov.ehat ) & level == 1 ) || + ( is.null( covmat$cov.ehat.p.bhat ) & level == 0 ) ){ ## compute standard errors of residuals - if( is.null( object$Valpha.objects$Valpha.inverse ) || - is.null( object$Valpha.objects$Valpha.ilcf ) + if( is.null( Valpha.objects$Valpha.inverse ) || + is.null( Valpha.objects$Valpha.ilcf ) ) stop( "'Valpha.objects' incomplete or missing in georob object;\n", "'Valpha.objects' must include components 'Valpha.inverse' and 'Valpha.ilcf'" ) - if( is.null( object$expectations ) ) stop( + if( is.null( model$expectations ) ) stop( "'expectations' missing in georob object;\n", "use 'full.output = TRUE' when fitting the model" ) X <- model.matrix( - terms( object), - model.frame( object ) - )[!duplicated( object$Tmat ), , drop = FALSE] + terms( model), + model.frame( model ) + )[!duplicated( model$Tmat ), , drop = FALSE] - if( is.null( object$Valpha.objects$Valpha.ucf ) ){ - object$Valpha.objects$Valpha.ucf <- t( solve( object$Valpha.objects$Valpha.ilcf ) ) + if( is.null( Valpha.objects$Valpha.ucf ) ){ + Valpha.objects$Valpha.ucf <- t( solve( Valpha.objects$Valpha.ilcf ) ) } r.cov <- compute.covariances( - Valpha.objects = object$Valpha.objects, - rweights = object$rweights, - XX = X, TT = object$Tmat, names.yy = rownames( model.frame( object ) ), - nugget = object$param["nugget"], - eta = sum( object$param[c( "variance", "snugget")] ) / object$param["nugget"], - expectations = object$expectations, + Valpha.objects = Valpha.objects, + Aalpha = model[["Aalpha"]], + Palpha = expand( model[["Palpha"]] ), + rweights = model$rweights, + XX = X, TT = model$Tmat, names.yy = rownames( model.frame( model ) ), + nugget = model$param["nugget"], + eta = sum( model$param[c( "variance", "snugget")] ) / model$param["nugget"], + expectations = model$expectations, cov.bhat = FALSE, full.cov.bhat = FALSE, cov.betahat = FALSE, cov.bhat.betahat = FALSE, - cov.delta.bhat = FALSE, full.cov.delta.bhat = FALSE, - cov.delta.bhat.betahat = FALSE, + cov.deltabhat = FALSE, full.cov.deltabhat = FALSE, + cov.deltabhat.betahat = FALSE, cov.ehat = level == 1, full.cov.ehat = FALSE, cov.ehat.p.bhat = level == 0, full.cov.ehat.p.bhat = FALSE, aux.cov.pred.target = FALSE, @@ -410,9 +438,9 @@ ) if( level == 1 ){ - object$cov$cov.ehat <-r.cov$cov.ehat + covmat$cov.ehat <-r.cov$cov.ehat } else { - object$cov$cov.ehat.p.bhat <-r.cov$cov.ehat.p.bhat + covmat$cov.ehat.p.bhat <-r.cov$cov.ehat.p.bhat } } @@ -420,9 +448,9 @@ ## extract standard errors of residuals from georob object if( level == 1 ){ - se <- object$cov$cov.ehat + se <- covmat$cov.ehat } else { - se <- object$cov$cov.ehat.p.bhat + se <- covmat$cov.ehat.p.bhat } if( is.matrix( se ) ){ se <- sqrt( diag( se ) ) @@ -432,10 +460,8 @@ ## compute standardized residuals - se <- naresid( model$na.action, se ) + naresid( model.na, residuals( model, level = level ) / se ) - residuals( model, level = level ) / se - } ## ############################################################################## @@ -489,8 +515,9 @@ ## 2012-11-04 AP handling compressed cov.betahat ## 2012-11-27 AP changes in parameter back-transformation ## 2013-04-23 AP new names for robustness weights + ## 2013-05-31 AP revised expansion of covariance matrices - object$cov <- expand( object$cov ) + covmat <- expand( object$cov ) ans <- object[c( "call", "residuals", "bhat", "rweights", "converged", "convergence.code", @@ -507,7 +534,7 @@ ans$scale <- sqrt(object$param["nugget"]) ans$control$method <- "TODO: PRINT GLSROB CONTROL PARAMETERS HERE" - se <- sqrt(diag(expand(object$cov$cov.betahat))) + se <- sqrt(diag(covmat$cov.betahat)) est <- object$coefficients tval <- est/se @@ -519,7 +546,7 @@ ) if( correlation ){ - ans$correlation <- expand( object$cov$cov.betahat ) / outer(se, se) + ans$correlation <- covmat$cov.betahat / outer(se, se) } ans$param <- as.matrix( object$param, ncol = 1 ) @@ -619,12 +646,12 @@ } } - ans$se.residuals <- if( !is.null( object$cov$cov.ehat ) ){ + ans$se.residuals <- if( !is.null( covmat$cov.ehat ) ){ - if( is.matrix( object$cov$cov.ehat ) ){ - sqrt( diag( object$cov$cov.ehat ) ) + if( is.matrix( covmat$cov.ehat ) ){ + sqrt( diag( covmat$cov.ehat ) ) } else { - sqrt( object$cov$cov.ehat ) + sqrt( covmat$cov.ehat ) } } else NULL @@ -876,6 +903,7 @@ ## 2012-12-22 A. Papritz ## 2013-05-23 AP correct handling of missing observations + ## 2013-05-31 AP revised expansion of covariance matrices ## redefine na.action component of object @@ -886,12 +914,11 @@ if( object[["tuning.psi"]] < georob.control()[["tuning.psi.nr"]] ){ result <- NA_real_ } else { - object[["Valpha.objects"]] <- expand( object[["Valpha.objects"]] ) + Valpha.objects <- expand( object[["Valpha.objects"]] ) G <- sum( object[["param"]][c("variance", "snugget")] ) * - t(object[["Valpha.objects"]][["Valpha.ucf"]]) %*% object[["Valpha.objects"]][["Valpha.ucf"]] + t(Valpha.objects[["Valpha.ucf"]]) %*% Valpha.objects[["Valpha.ucf"]] diag( G ) <- diag( G ) + object[["param"]]["nugget"] - object[["Valpha.objects"]] <- compress( object[["Valpha.objects"]] ) G <- G[object[["Tmat"]], object[["Tmat"]]] iucf <- try( backsolve( Modified: pkg/R/georob.cv.R =================================================================== --- pkg/R/georob.cv.R 2013-05-23 15:41:57 UTC (rev 5) +++ pkg/R/georob.cv.R 2013-06-06 13:28:13 UTC (rev 6) @@ -71,6 +71,7 @@ ## 2012-12-04 AP modifiction for changes in predict.georob ## 2013-04-24 AP changes for parallelization on windows os ## 2013-05-23 AP correct handling of missing observations + ## 2013-05-24 AP separate initial variogram parameters for each cross-validation set ## auxiliary function that fits the model and computes the predictions of ## a cross-validation set @@ -96,6 +97,11 @@ environment( formula ) <- environment() environment( object$terms ) <- environment() + + ## read-off initial values of variogram parameters + + if( ( is.matrix( param ) || is.data.frame( param ) ) ) param <- param[..i..,] + if( ( is.matrix( fit.param ) || is.data.frame( fit.param ) ) ) fit.param <- fit.param[..i..,] t.georob <- update( object, @@ -212,6 +218,7 @@ } else { + nset <- length( unique( sets ) ) if( length( sets ) != NROW( data ) ) stop( "sets must be an integer vector with length equal to the number of observations" ) @@ -230,6 +237,16 @@ function( x ) x ) + ## check dimension of param and fit.param + + if( ( is.matrix( param ) || is.data.frame( param ) ) && nrow( param )!= nset ) stop( + "param must have 'nset' rows if it is a matrix or data frame" + ) + + if( ( is.matrix( fit.param ) || is.data.frame( fit.param ) ) && nrow( param )!= nset ) stop( + "fit.param must have 'nset' rows if it is a matrix or data frame" + ) + ## loop over all cross-validation sets if( .Platform$OS.type == "windows" ){ @@ -320,9 +337,9 @@ t.fit <- lapply( t.result, function( x ) return( x$fit ) ) - if( re.estimate && !all( sapply( t.fit, function(x) x$converged ) ) ) - warning( - "lack of covergence when fitting model to cross-validation sets" + if( re.estimate && !all( sapply( t.fit, function(x) x$converged ) ) ) warning( + "lack of covergence for ", + sum( !sapply( t.fit, function(x) x$converged ) ), " cross-validation sets" ) result <- list( Modified: pkg/R/georob.exported.functions.R =================================================================== --- pkg/R/georob.exported.functions.R 2013-05-23 15:41:57 UTC (rev 5) +++ pkg/R/georob.exported.functions.R 2013-06-06 13:28:13 UTC (rev 6) @@ -76,6 +76,7 @@ ## 2012-05-28 AP handle missing names of coefficients after calling update ## 2013-04-23 AP new names for robustness weights ## 2013-05-23 AP correct handling of missing observations and to construct model.frame + ## 2013-06-03 AP handling design matrices with rank < ncol(x) ## check whether input is complete @@ -177,12 +178,22 @@ min.max.sv <- range( svd( crossprod( x ) )$d ) condnum <- min.max.sv[1] / min.max.sv[2] + if( condnum <= control$min.condnum ){ + if( initial.param || tuning.psi >= control$tuning.psi.nr ) stop( + "singular fixed effects design matrices cannot be handled if 'initial.param = TRUE'", + "or for Gaussian REML estimation" + ) + cat( + "design matrix has not full column rank (condition number of X^T X: ", + signif( condnum, 2 ), ")\ninitial values of regression coefficients are computed by 'lm\n\n'" + ) + control$initial.method <- "lm" + warning( + "design matrix has not full column rank (condition number of X^T X: ", + signif( condnum, 2 ), ")\ninitial values of regression coefficients are computed by 'lm'" + ) + } - if( condnum <= control$min.condnum ) stop( - "design matrix has not full column rank (condition number of X^T X: ", - signif( condnum, 2 ), ")" - ) - ## subtract offset yy <- y @@ -224,7 +235,7 @@ fit$formula <- formula fit$terms <- mt fit$xlevels <- .getXlevels(mt, mf) - fit$call <- call + fit$call <- cl fit$tau <- tau fit$weights <- w fit$residuals <- drop( fit$residuals ) @@ -250,6 +261,27 @@ if( !is.null( offset ) ) fit$fitted.values + offset fit + }, + lm = { + + fit <- if( is.null(w) ){ + lm.fit(x, y, offset = offset, singular.ok = TRUE, ...) + } else { + lm.wfit(x, y, w, offset = offset, singular.ok = TRUE, ...) + } + class(fit) <- c(if (is.matrix(y)) "mlm", "lm") + fit$na.action <- attr(mf, "na.action") + fit$offset <- offset + fit$contrasts <- attr(x, "contrasts") + fit$xlevels <- .getXlevels(mt, mf) + fit$call <- cl + fit$terms <- mt + if (model) fit$model <- mf + if (ret.x) fit$x <- x + if (ret.y) fit$y <- y + fit$qr <- NULL + fit + } ) @@ -336,12 +368,13 @@ cov.bhat = control$cov.bhat, full.cov.bhat = control$full.cov.bhat, cov.betahat = control$cov.betahat, cov.bhat.betahat = control$cov.bhat.betahat, - cov.delta.bhat = control$cov.delta.bhat, - full.cov.delta.bhat = control$full.cov.delta.bhat, - cov.delta.bhat.betahat = control$cov.delta.bhat.betahat, + cov.deltabhat = control$cov.deltabhat, + full.cov.deltabhat = control$full.cov.deltabhat, + cov.deltabhat.betahat = control$cov.deltabhat.betahat, cov.ehat = control$cov.ehat, full.cov.ehat = control$full.cov.ehat, cov.ehat.p.bhat = control$cov.ehat.p.bhat, full.cov.ehat.p.bhat = control$full.cov.ehat.p.bhat, aux.cov.pred.target = control$aux.cov.pred.target, + min.condnum = control$min.condnum, psi.func = control$psi.func, tuning.psi.nr = control$tuning.psi.nr, irwls.initial = control$irwls.initial, @@ -400,12 +433,13 @@ cov.bhat = control$cov.bhat, full.cov.bhat = control$full.cov.bhat, cov.betahat = control$cov.betahat, cov.bhat.betahat = control$cov.bhat.betahat, - cov.delta.bhat = control$cov.delta.bhat, - full.cov.delta.bhat = control$full.cov.delta.bhat, - cov.delta.bhat.betahat = control$cov.delta.bhat.betahat, + cov.deltabhat = control$cov.deltabhat, + full.cov.deltabhat = control$full.cov.deltabhat, + cov.deltabhat.betahat = control$cov.deltabhat.betahat, cov.ehat = control$cov.ehat, full.cov.ehat = control$full.cov.ehat, cov.ehat.p.bhat = control$cov.ehat.p.bhat, full.cov.ehat.p.bhat = control$full.cov.ehat.p.bhat, aux.cov.pred.target = control$aux.cov.pred.target, + min.condnum = control$min.condnum, psi.func = control$psi.func, tuning.psi.nr = control$tuning.psi.nr, irwls.initial = control$irwls.initial, @@ -469,7 +503,7 @@ georob.control <- function( - initial.method = c("lmrob", "rq"), + initial.method = c("lmrob", "rq", "lm"), bhat = NULL, param.tf = param.transf(), fwd.tf = fwd.transf(), @@ -486,8 +520,8 @@ cov.bhat = FALSE, full.cov.bhat = FALSE, cov.betahat = TRUE, cov.bhat.betahat = FALSE, - cov.delta.bhat = TRUE, full.cov.delta.bhat = TRUE, - cov.delta.bhat.betahat = TRUE, + cov.deltabhat = TRUE, full.cov.deltabhat = TRUE, + cov.deltabhat.betahat = TRUE, cov.ehat = TRUE, full.cov.ehat = FALSE, cov.ehat.p.bhat = FALSE, full.cov.ehat.p.bhat = FALSE, aux.cov.pred.target = FALSE, @@ -535,10 +569,10 @@ ## should be computed ## cov.bhat.betahat logical, flag controlling whether the covariance matrix of ## bhat and betahat should be computed - ## cov.delta.bhat logical, flag controlling whether the covariances of z-bhat should be computed - ## full.cov.delta.bhat logical, flag controlling whether the full covariance matrix of z-bhat + ## cov.deltabhat logical, flag controlling whether the covariances of z-bhat should be computed + ## full.cov.deltabhat logical, flag controlling whether the full covariance matrix of z-bhat ## is computed (TRUE) or only the diagonal elements (FALSE) - ## cov.delta.bhat.betahat logical, flag controlling whether the covariance matrix of z-bhat + ## cov.deltabhat.betahat logical, flag controlling whether the covariance matrix of z-bhat ## and betahat should be computed ## cov.ehat logical, flag controlling whether the covariances of the resdiuals should be computed ## full.cov.ehat logical, flag controlling whether the full covariance matrix of the residuals @@ -587,8 +621,8 @@ cov.bhat = cov.bhat, full.cov.bhat = full.cov.bhat, cov.betahat = cov.betahat, cov.bhat.betahat = cov.bhat.betahat, - cov.delta.bhat = cov.delta.bhat, full.cov.delta.bhat = full.cov.delta.bhat, - cov.delta.bhat.betahat = cov.delta.bhat.betahat, + cov.deltabhat = cov.deltabhat, full.cov.deltabhat = full.cov.deltabhat, + cov.deltabhat.betahat = cov.deltabhat.betahat, cov.ehat = cov.ehat, full.cov.ehat = full.cov.ehat, cov.ehat.p.bhat = cov.ehat.p.bhat, full.cov.ehat.p.bhat = full.cov.ehat.p.bhat, aux.cov.pred.target = aux.cov.pred.target, Modified: pkg/R/georob.predict.R =================================================================== --- pkg/R/georob.predict.R 2013-05-23 15:41:57 UTC (rev 5) +++ pkg/R/georob.predict.R 2013-06-06 13:28:13 UTC (rev 6) @@ -93,7 +93,7 @@ locations.coords, betahat, bhat, pred.X, pred.coords, newdata, variogram.model, param, aniso, - cov.dbhat.betahat.l, cov.betahat.l, cov.bhat.betahat, cov.p.t, Valpha.objects, + cov.deltabhat.betahat.l, cov.betahat.l, cov.bhat.betahat, cov.p.t, Valpha.objects, pwidth, pheight, napp, signif, extended.output, full.covmat @@ -385,8 +385,8 @@ ## compute uk variance (= (co-)variance of prediction errors) aux <- cbind( - gammaValphai %*% cov.dbhat.betahat.l[1:n, 1:n] - pred.X[!ex, , drop = FALSE ] %*% cov.dbhat.betahat.l[-(1:n), 1:n], - - pred.X[!ex, , drop = FALSE ] %*% cov.dbhat.betahat.l[-(1:n), -(1:n)] + gammaValphai %*% cov.deltabhat.betahat.l[1:n, 1:n] - pred.X[!ex, , drop = FALSE ] %*% cov.deltabhat.betahat.l[-(1:n), 1:n], + - pred.X[!ex, , drop = FALSE ] %*% cov.deltabhat.betahat.l[-(1:n), -(1:n)] ) if( full.covmat ){ @@ -630,16 +630,16 @@ ## if needed compute missing covariance matrices cov.betahat <- is.null( object[["cov"]][["cov.betahat"]] ) - cov.dbhat <- is.null( object[["cov"]][["cov.delta.bhat"]] ) || - !is.matrix( object[["cov"]][["cov.delta.bhat"]] ) - cov.dbhat.betahat <- is.null( object[["cov"]][["cov.delta.bhat.betahat"]] ) + cov.deltabhat <- is.null( object[["cov"]][["cov.deltabhat"]] ) || + !is.matrix( object[["cov"]][["cov.deltabhat"]] ) + cov.deltabhat.betahat <- is.null( object[["cov"]][["cov.deltabhat.betahat"]] ) cov.bhat <- extended.output & ( is.null( object[["cov"]]$cov.bhat ) || !is.matrix( object[["cov"]]$cov.bhat ) ) cov.bhat.betahat <- extended.output & is.null( object[["cov"]]$cov.bhat.betahat ) cov.p.t <- extended.output & is.null( object[["cov"]]$aux.cov.pred.target ) - if( any( c( cov.betahat, cov.dbhat, cov.dbhat.betahat, + if( any( c( cov.betahat, cov.deltabhat, cov.deltabhat.betahat, extended.output & ( cov.bhat || cov.bhat.betahat || cov.p.t ) ) ) @@ -676,8 +676,8 @@ cov.bhat = cov.bhat, full.cov.bhat = cov.bhat, cov.betahat = cov.betahat, cov.bhat.betahat = cov.bhat.betahat, - cov.delta.bhat = cov.dbhat, full.cov.delta.bhat = cov.dbhat, - cov.delta.bhat.betahat = cov.dbhat.betahat, + cov.deltabhat = cov.deltabhat, full.cov.deltabhat = cov.deltabhat, + cov.deltabhat.betahat = cov.deltabhat.betahat, cov.ehat = FALSE, full.cov.ehat = FALSE, cov.ehat.p.bhat = FALSE, full.cov.ehat.p.bhat = FALSE, aux.cov.pred.target = cov.p.t, @@ -691,9 +691,9 @@ if( is.null( object[["cov"]] ) ) object[["cov"]] <- list() if( cov.betahat ) object[["cov"]][["cov.betahat"]] <- r.cov[["cov.betahat"]] - if( cov.dbhat ) object[["cov"]][["cov.delta.bhat"]] <- r.cov[["cov.delta.bhat"]] - if( cov.dbhat.betahat ) object[["cov"]][["cov.delta.bhat.betahat"]] <- - r.cov[["cov.delta.bhat.betahat"]] + if( cov.deltabhat ) object[["cov"]][["cov.delta"]] <- r.cov[["cov.delta"]] + if( cov.deltabhat.betahat ) object[["cov"]][["cov.deltabhat.betahat"]] <- + r.cov[["cov.deltabhat.betahat"]] if( extended.output && cov.bhat ) object[["cov"]][["cov.bhat"]] <- r.cov[["cov.bhat"]] if( extended.output && cov.bhat.betahat ) object[["cov"]][["cov.bhat.betahat"]] <- r.cov[["cov.bhat.betahat"]] @@ -702,26 +702,26 @@ } ## end cov - ## compute lower cholesky factor of covariance matrix of delta.bhat = (b - + ## compute lower cholesky factor of covariance matrix of delta = (b - ## bhat) and betahat - beta - cov.dbhat.betahat.l <- try( + cov.deltabhat.betahat.l <- try( t( chol( rbind( cbind( - object[["cov"]][["cov.delta.bhat"]], - object[["cov"]][["cov.delta.bhat.betahat"]] + object[["cov"]][["cov.delta"]], + object[["cov"]][["cov.deltabhat.betahat"]] ), cbind( - t( object[["cov"]][["cov.delta.bhat.betahat"]] ), + t( object[["cov"]][["cov.deltabhat.betahat"]] ), object[["cov"]][["cov.betahat"]] ) ) ) ), silent = TRUE ) - if( identical( class( cov.dbhat.betahat.l ), "try-error" ) ) stop( + if( identical( class( cov.deltabhat.betahat.l ), "try-error" ) ) stop( "covariance matrix of kriging errors 'b-bhat' and 'betahat' not positive definite" ) @@ -890,8 +890,8 @@ }, signal = { ## signal aux <- cbind( - cov.dbhat.betahat.l[1:n,1:n] - X %*% cov.dbhat.betahat.l[-(1:n),1:n], - - X %*% cov.dbhat.betahat.l[-(1:n),-(1:n)] + cov.deltabhat.betahat.l[1:n,1:n] - X %*% cov.deltabhat.betahat.l[-(1:n),1:n], + - X %*% cov.deltabhat.betahat.l[-(1:n),-(1:n)] ) aux <- aux[object[["Tmat"]], , drop = FALSE] if( full.covmat ){ @@ -1137,7 +1137,7 @@ locations.coords, betahat, bhat, pred.X, pred.coords, newdata, variogram.model, param, aniso, - cov.dbhat.betahat.l, cov.betahat.l, cov.bhat.betahat, cov.p.t, Valpha.objects, + cov.deltabhat.betahat.l, cov.betahat.l, cov.bhat.betahat, cov.p.t, Valpha.objects, pwidth, pheight, napp, signif, extended.output, full.covmat, @@ -1164,7 +1164,7 @@ bhat = bhat, pred.X = pred.X, pred.coords = pred.coords, newdata = newdata, variogram.model = variogram.model, param = param, aniso = aniso, - cov.dbhat.betahat.l = cov.dbhat.betahat.l, + cov.deltabhat.betahat.l = cov.deltabhat.betahat.l, cov.betahat.l = cov.betahat.l, cov.bhat.betahat = cov.bhat.betahat, cov.p.t = cov.p.t, @@ -1205,7 +1205,7 @@ variogram.model = object[["variogram.model"]], param = object[["param"]], aniso = object[["aniso"]], - cov.dbhat.betahat.l = cov.dbhat.betahat.l, + cov.deltabhat.betahat.l = cov.deltabhat.betahat.l, cov.betahat.l = cov.betahat.l, cov.bhat.betahat = cov.bhat.betahat, cov.p.t = cov.p.t, @@ -1235,7 +1235,7 @@ variogram.model = object[["variogram.model"]], param = object[["param"]], aniso = object[["aniso"]], - cov.dbhat.betahat.l = cov.dbhat.betahat.l, + cov.deltabhat.betahat.l = cov.deltabhat.betahat.l, cov.betahat.l = cov.betahat.l, cov.bhat.betahat = cov.bhat.betahat, cov.p.t = cov.p.t, @@ -1264,7 +1264,7 @@ variogram.model = object[["variogram.model"]], param = object[["param"]], aniso = object[["aniso"]], - cov.dbhat.betahat.l = cov.dbhat.betahat.l, + cov.deltabhat.betahat.l = cov.deltabhat.betahat.l, cov.betahat.l = cov.betahat.l, cov.bhat.betahat = cov.bhat.betahat, cov.p.t = cov.p.t, Modified: pkg/R/georob.private.functions.R =================================================================== --- pkg/R/georob.private.functions.R 2013-05-23 15:41:57 UTC (rev 5) +++ pkg/R/georob.private.functions.R 2013-06-06 13:28:13 UTC (rev 6) @@ -9,15 +9,15 @@ compute.covariances <- function( Valpha.objects, -# Valpha.inverse.Palpha, Palpha, + Aalpha, Palpha, rweights, XX, TT, names.yy, nugget, eta, expectations, cov.bhat, full.cov.bhat, cov.betahat, cov.bhat.betahat, - cov.delta.bhat, full.cov.delta.bhat, - cov.delta.bhat.betahat, + cov.deltabhat, full.cov.deltabhat, + cov.deltabhat.betahat, cov.ehat, full.cov.ehat, cov.ehat.p.bhat, full.cov.ehat.p.bhat, aux.cov.pred.target, @@ -48,486 +48,698 @@ ## 2012-11-04 AP unscaled psi-function ## 2013-02-05 AP covariance matrix of xihat ## 2013-04-23 AP new names for robustness weights + ## 2013-05-06 AP changes for solving estimating equations for xi - n <- nrow( XX ) - sel <- 1:n - result <- list( error = FALSE ) - a <- expectations["psi2"] - b <- expectations["dpsi"] + ## adjust flags for computing covariance matrices - TtWiT <- b - TtDT <- a - TtT <- as.vector( table( TT ) ) + cov.bhat.b <- FALSE + cov.bhat.e <- FALSE + cov.betahat.b <- FALSE + cov.betahat.e <- FALSE - ## ... aggregate elements of Wi and D for replicated observations - - if( sum( duplicated( TT ) ) > 0 ){ - TtWiT <- TtWiT * TtT - TtDT <- TtDT * TtT + if( any( c( cov.deltabhat, aux.cov.pred.target ))) cov.bhat.b <- TRUE + if( any( c( cov.ehat, aux.cov.pred.target ))) cov.bhat.e <- TRUE + if( any( c( cov.deltabhat.betahat, cov.ehat.p.bhat, aux.cov.pred.target ))) cov.betahat.b <- TRUE + if( any( c( cov.ehat, cov.ehat.p.bhat, aux.cov.pred.target ))) cov.betahat.e <- TRUE + if( any( c( cov.ehat, cov.ehat.p.bhat ) ) ) cov.betahat <- TRUE + if( any( c( cov.deltabhat, cov.deltabhat.betahat ))){ + cov.bhat <- TRUE + if( full.cov.deltabhat ) full.cov.bhat <- TRUE } + if( cov.deltabhat.betahat ) cov.bhat.betahat <- TRUE + if( cov.ehat ){ + cov.deltabhat.betahat <- TRUE + cov.deltabhat <- TRUE + if( full.cov.ehat ) full.cov.deltabhat <- TRUE + } - ## construct matrix M + ## compute required auxiliary items + + result.new <- list( error = FALSE ) - TtWiTXX <- TtWiT * XX - aux <- Valpha.objects$Valpha.inverse / eta - diag( aux ) <- diag( aux ) + TtWiT + a <- expectations["psi2"] + b <- expectations["dpsi"] - M <- rbind( - cbind( aux, TtWiTXX ), - cbind( t(TtWiTXX), crossprod( XX , TtWiTXX ) ) + TtT <- as.vector( table( TT ) ) + [TRUNCATED] To get the complete diff run: svnlook diff /svnroot/georob -r 6 From noreply at r-forge.r-project.org Mon Jun 10 12:49:41 2013 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Mon, 10 Jun 2013 12:49:41 +0200 (CEST) Subject: [Georob-commits] r7 - in pkg: R man Message-ID: <20130610104941.A83CF18458F@r-forge.r-project.org> Author: papritz Date: 2013-06-10 12:49:41 +0200 (Mon, 10 Jun 2013) New Revision: 7 Modified: pkg/R/georob.S3methods.R pkg/R/georob.exported.functions.R pkg/R/georob.predict.R pkg/R/georob.private.functions.R pkg/man/georob.control.Rd pkg/man/georobObject.Rd Log: error in predict.georob corrected, old names of flags for computing covariances restored M pkg/R/georob.S3methods.R M pkg/R/georob.predict.R M pkg/R/georob.exported.functions.R M pkg/R/georob.private.functions.R M pkg/man/georob.control.Rd M pkg/man/georobObject.Rd Modified: pkg/R/georob.S3methods.R =================================================================== --- pkg/R/georob.S3methods.R 2013-06-06 13:28:13 UTC (rev 6) +++ pkg/R/georob.S3methods.R 2013-06-10 10:49:41 UTC (rev 7) @@ -229,8 +229,8 @@ cov.bhat = TRUE, full.cov.bhat = FALSE, cov.betahat = FALSE, cov.bhat.betahat = FALSE, - cov.deltabhat = FALSE, full.cov.deltabhat = FALSE, - cov.deltabhat.betahat = FALSE, + cov.delta.bhat = FALSE, full.cov.delta.bhat = FALSE, + cov.delta.bhat.betahat = FALSE, cov.ehat = FALSE, full.cov.ehat = FALSE, cov.ehat.p.bhat = FALSE, full.cov.ehat.p.bhat = FALSE, aux.cov.pred.target = FALSE, @@ -425,8 +425,8 @@ cov.bhat = FALSE, full.cov.bhat = FALSE, cov.betahat = FALSE, cov.bhat.betahat = FALSE, - cov.deltabhat = FALSE, full.cov.deltabhat = FALSE, - cov.deltabhat.betahat = FALSE, + cov.delta.bhat = FALSE, full.cov.delta.bhat = FALSE, + cov.delta.bhat.betahat = FALSE, cov.ehat = level == 1, full.cov.ehat = FALSE, cov.ehat.p.bhat = level == 0, full.cov.ehat.p.bhat = FALSE, aux.cov.pred.target = FALSE, Modified: pkg/R/georob.exported.functions.R =================================================================== --- pkg/R/georob.exported.functions.R 2013-06-06 13:28:13 UTC (rev 6) +++ pkg/R/georob.exported.functions.R 2013-06-10 10:49:41 UTC (rev 7) @@ -368,9 +368,9 @@ cov.bhat = control$cov.bhat, full.cov.bhat = control$full.cov.bhat, cov.betahat = control$cov.betahat, cov.bhat.betahat = control$cov.bhat.betahat, - cov.deltabhat = control$cov.deltabhat, - full.cov.deltabhat = control$full.cov.deltabhat, - cov.deltabhat.betahat = control$cov.deltabhat.betahat, + cov.delta.bhat = control$cov.delta.bhat, + full.cov.delta.bhat = control$full.cov.delta.bhat, + cov.delta.bhat.betahat = control$cov.delta.bhat.betahat, cov.ehat = control$cov.ehat, full.cov.ehat = control$full.cov.ehat, cov.ehat.p.bhat = control$cov.ehat.p.bhat, full.cov.ehat.p.bhat = control$full.cov.ehat.p.bhat, aux.cov.pred.target = control$aux.cov.pred.target, @@ -433,9 +433,9 @@ cov.bhat = control$cov.bhat, full.cov.bhat = control$full.cov.bhat, cov.betahat = control$cov.betahat, cov.bhat.betahat = control$cov.bhat.betahat, - cov.deltabhat = control$cov.deltabhat, - full.cov.deltabhat = control$full.cov.deltabhat, - cov.deltabhat.betahat = control$cov.deltabhat.betahat, + cov.delta.bhat = control$cov.delta.bhat, + full.cov.delta.bhat = control$full.cov.delta.bhat, + cov.delta.bhat.betahat = control$cov.delta.bhat.betahat, cov.ehat = control$cov.ehat, full.cov.ehat = control$full.cov.ehat, cov.ehat.p.bhat = control$cov.ehat.p.bhat, full.cov.ehat.p.bhat = control$full.cov.ehat.p.bhat, aux.cov.pred.target = control$aux.cov.pred.target, @@ -520,8 +520,8 @@ cov.bhat = FALSE, full.cov.bhat = FALSE, cov.betahat = TRUE, cov.bhat.betahat = FALSE, - cov.deltabhat = TRUE, full.cov.deltabhat = TRUE, - cov.deltabhat.betahat = TRUE, + cov.delta.bhat = TRUE, full.cov.delta.bhat = TRUE, + cov.delta.bhat.betahat = TRUE, cov.ehat = TRUE, full.cov.ehat = FALSE, cov.ehat.p.bhat = FALSE, full.cov.ehat.p.bhat = FALSE, aux.cov.pred.target = FALSE, @@ -569,10 +569,10 @@ ## should be computed ## cov.bhat.betahat logical, flag controlling whether the covariance matrix of ## bhat and betahat should be computed - ## cov.deltabhat logical, flag controlling whether the covariances of z-bhat should be computed - ## full.cov.deltabhat logical, flag controlling whether the full covariance matrix of z-bhat + ## cov.delta.bhat logical, flag controlling whether the covariances of z-bhat should be computed + ## full.cov.delta.bhat logical, flag controlling whether the full covariance matrix of z-bhat ## is computed (TRUE) or only the diagonal elements (FALSE) - ## cov.deltabhat.betahat logical, flag controlling whether the covariance matrix of z-bhat + ## cov.delta.bhat.betahat logical, flag controlling whether the covariance matrix of z-bhat ## and betahat should be computed ## cov.ehat logical, flag controlling whether the covariances of the resdiuals should be computed ## full.cov.ehat logical, flag controlling whether the full covariance matrix of the residuals @@ -621,8 +621,8 @@ cov.bhat = cov.bhat, full.cov.bhat = full.cov.bhat, cov.betahat = cov.betahat, cov.bhat.betahat = cov.bhat.betahat, - cov.deltabhat = cov.deltabhat, full.cov.deltabhat = full.cov.deltabhat, - cov.deltabhat.betahat = cov.deltabhat.betahat, + cov.delta.bhat = cov.delta.bhat, full.cov.delta.bhat = full.cov.delta.bhat, + cov.delta.bhat.betahat = cov.delta.bhat.betahat, cov.ehat = cov.ehat, full.cov.ehat = full.cov.ehat, cov.ehat.p.bhat = cov.ehat.p.bhat, full.cov.ehat.p.bhat = full.cov.ehat.p.bhat, aux.cov.pred.target = aux.cov.pred.target, Modified: pkg/R/georob.predict.R =================================================================== --- pkg/R/georob.predict.R 2013-06-06 13:28:13 UTC (rev 6) +++ pkg/R/georob.predict.R 2013-06-10 10:49:41 UTC (rev 7) @@ -93,7 +93,7 @@ locations.coords, betahat, bhat, pred.X, pred.coords, newdata, variogram.model, param, aniso, - cov.deltabhat.betahat.l, cov.betahat.l, cov.bhat.betahat, cov.p.t, Valpha.objects, + cov.delta.bhat.betahat.l, cov.betahat.l, cov.bhat.betahat, cov.p.t, Valpha.objects, pwidth, pheight, napp, signif, extended.output, full.covmat @@ -385,8 +385,8 @@ ## compute uk variance (= (co-)variance of prediction errors) aux <- cbind( - gammaValphai %*% cov.deltabhat.betahat.l[1:n, 1:n] - pred.X[!ex, , drop = FALSE ] %*% cov.deltabhat.betahat.l[-(1:n), 1:n], - - pred.X[!ex, , drop = FALSE ] %*% cov.deltabhat.betahat.l[-(1:n), -(1:n)] + gammaValphai %*% cov.delta.bhat.betahat.l[1:n, 1:n] - pred.X[!ex, , drop = FALSE ] %*% cov.delta.bhat.betahat.l[-(1:n), 1:n], + - pred.X[!ex, , drop = FALSE ] %*% cov.delta.bhat.betahat.l[-(1:n), -(1:n)] ) if( full.covmat ){ @@ -630,16 +630,16 @@ ## if needed compute missing covariance matrices cov.betahat <- is.null( object[["cov"]][["cov.betahat"]] ) - cov.deltabhat <- is.null( object[["cov"]][["cov.deltabhat"]] ) || - !is.matrix( object[["cov"]][["cov.deltabhat"]] ) - cov.deltabhat.betahat <- is.null( object[["cov"]][["cov.deltabhat.betahat"]] ) + cov.delta.bhat <- is.null( object[["cov"]][["cov.delta.bhat"]] ) || + !is.matrix( object[["cov"]][["cov.delta.bhat"]] ) + cov.delta.bhat.betahat <- is.null( object[["cov"]][["cov.delta.bhat.betahat"]] ) cov.bhat <- extended.output & ( is.null( object[["cov"]]$cov.bhat ) || !is.matrix( object[["cov"]]$cov.bhat ) ) cov.bhat.betahat <- extended.output & is.null( object[["cov"]]$cov.bhat.betahat ) cov.p.t <- extended.output & is.null( object[["cov"]]$aux.cov.pred.target ) - if( any( c( cov.betahat, cov.deltabhat, cov.deltabhat.betahat, + if( any( c( cov.betahat, cov.delta.bhat, cov.delta.bhat.betahat, extended.output & ( cov.bhat || cov.bhat.betahat || cov.p.t ) ) ) @@ -676,8 +676,8 @@ cov.bhat = cov.bhat, full.cov.bhat = cov.bhat, cov.betahat = cov.betahat, cov.bhat.betahat = cov.bhat.betahat, - cov.deltabhat = cov.deltabhat, full.cov.deltabhat = cov.deltabhat, - cov.deltabhat.betahat = cov.deltabhat.betahat, + cov.delta.bhat = cov.delta.bhat, full.cov.delta.bhat = cov.delta.bhat, + cov.delta.bhat.betahat = cov.delta.bhat.betahat, cov.ehat = FALSE, full.cov.ehat = FALSE, cov.ehat.p.bhat = FALSE, full.cov.ehat.p.bhat = FALSE, aux.cov.pred.target = cov.p.t, @@ -691,9 +691,9 @@ if( is.null( object[["cov"]] ) ) object[["cov"]] <- list() if( cov.betahat ) object[["cov"]][["cov.betahat"]] <- r.cov[["cov.betahat"]] - if( cov.deltabhat ) object[["cov"]][["cov.delta"]] <- r.cov[["cov.delta"]] - if( cov.deltabhat.betahat ) object[["cov"]][["cov.deltabhat.betahat"]] <- - r.cov[["cov.deltabhat.betahat"]] + if( cov.delta.bhat ) object[["cov"]][["cov.delta.bhat"]] <- r.cov[["cov.delta.bhat"]] + if( cov.delta.bhat.betahat ) object[["cov"]][["cov.delta.bhat.betahat"]] <- + r.cov[["cov.delta.bhat.betahat"]] if( extended.output && cov.bhat ) object[["cov"]][["cov.bhat"]] <- r.cov[["cov.bhat"]] if( extended.output && cov.bhat.betahat ) object[["cov"]][["cov.bhat.betahat"]] <- r.cov[["cov.bhat.betahat"]] @@ -704,24 +704,23 @@ ## compute lower cholesky factor of covariance matrix of delta = (b - ## bhat) and betahat - beta - - cov.deltabhat.betahat.l <- try( + cov.delta.bhat.betahat.l <- try( t( chol( rbind( cbind( - object[["cov"]][["cov.delta"]], - object[["cov"]][["cov.deltabhat.betahat"]] + object[["cov"]][["cov.delta.bhat"]], + object[["cov"]][["cov.delta.bhat.betahat"]] ), cbind( - t( object[["cov"]][["cov.deltabhat.betahat"]] ), + t( object[["cov"]][["cov.delta.bhat.betahat"]] ), object[["cov"]][["cov.betahat"]] ) ) ) ), silent = TRUE ) - if( identical( class( cov.deltabhat.betahat.l ), "try-error" ) ) stop( + if( identical( class( cov.delta.bhat.betahat.l ), "try-error" ) ) stop( "covariance matrix of kriging errors 'b-bhat' and 'betahat' not positive definite" ) @@ -890,8 +889,8 @@ }, signal = { ## signal aux <- cbind( - cov.deltabhat.betahat.l[1:n,1:n] - X %*% cov.deltabhat.betahat.l[-(1:n),1:n], - - X %*% cov.deltabhat.betahat.l[-(1:n),-(1:n)] + cov.delta.bhat.betahat.l[1:n,1:n] - X %*% cov.delta.bhat.betahat.l[-(1:n),1:n], + - X %*% cov.delta.bhat.betahat.l[-(1:n),-(1:n)] ) aux <- aux[object[["Tmat"]], , drop = FALSE] if( full.covmat ){ @@ -1137,7 +1136,7 @@ locations.coords, betahat, bhat, pred.X, pred.coords, newdata, variogram.model, param, aniso, - cov.deltabhat.betahat.l, cov.betahat.l, cov.bhat.betahat, cov.p.t, Valpha.objects, + cov.delta.bhat.betahat.l, cov.betahat.l, cov.bhat.betahat, cov.p.t, Valpha.objects, pwidth, pheight, napp, signif, extended.output, full.covmat, @@ -1164,7 +1163,7 @@ bhat = bhat, pred.X = pred.X, pred.coords = pred.coords, newdata = newdata, variogram.model = variogram.model, param = param, aniso = aniso, - cov.deltabhat.betahat.l = cov.deltabhat.betahat.l, + cov.delta.bhat.betahat.l = cov.delta.bhat.betahat.l, cov.betahat.l = cov.betahat.l, cov.bhat.betahat = cov.bhat.betahat, cov.p.t = cov.p.t, @@ -1205,7 +1204,7 @@ variogram.model = object[["variogram.model"]], param = object[["param"]], aniso = object[["aniso"]], - cov.deltabhat.betahat.l = cov.deltabhat.betahat.l, + cov.delta.bhat.betahat.l = cov.delta.bhat.betahat.l, cov.betahat.l = cov.betahat.l, cov.bhat.betahat = cov.bhat.betahat, cov.p.t = cov.p.t, @@ -1235,7 +1234,7 @@ variogram.model = object[["variogram.model"]], param = object[["param"]], aniso = object[["aniso"]], - cov.deltabhat.betahat.l = cov.deltabhat.betahat.l, + cov.delta.bhat.betahat.l = cov.delta.bhat.betahat.l, cov.betahat.l = cov.betahat.l, cov.bhat.betahat = cov.bhat.betahat, cov.p.t = cov.p.t, @@ -1264,7 +1263,7 @@ variogram.model = object[["variogram.model"]], param = object[["param"]], aniso = object[["aniso"]], - cov.deltabhat.betahat.l = cov.deltabhat.betahat.l, + cov.delta.bhat.betahat.l = cov.delta.bhat.betahat.l, cov.betahat.l = cov.betahat.l, cov.bhat.betahat = cov.bhat.betahat, cov.p.t = cov.p.t, Modified: pkg/R/georob.private.functions.R =================================================================== --- pkg/R/georob.private.functions.R 2013-06-06 13:28:13 UTC (rev 6) +++ pkg/R/georob.private.functions.R 2013-06-10 10:49:41 UTC (rev 7) @@ -16,8 +16,8 @@ cov.bhat, full.cov.bhat, cov.betahat, cov.bhat.betahat, - cov.deltabhat, full.cov.deltabhat, - cov.deltabhat.betahat, + cov.delta.bhat, full.cov.delta.bhat, + cov.delta.bhat.betahat, cov.ehat, full.cov.ehat, cov.ehat.p.bhat, full.cov.ehat.p.bhat, aux.cov.pred.target, @@ -58,20 +58,20 @@ cov.betahat.b <- FALSE cov.betahat.e <- FALSE - if( any( c( cov.deltabhat, aux.cov.pred.target ))) cov.bhat.b <- TRUE + if( any( c( cov.delta.bhat, aux.cov.pred.target ))) cov.bhat.b <- TRUE if( any( c( cov.ehat, aux.cov.pred.target ))) cov.bhat.e <- TRUE - if( any( c( cov.deltabhat.betahat, cov.ehat.p.bhat, aux.cov.pred.target ))) cov.betahat.b <- TRUE + if( any( c( cov.delta.bhat.betahat, cov.ehat.p.bhat, aux.cov.pred.target ))) cov.betahat.b <- TRUE if( any( c( cov.ehat, cov.ehat.p.bhat, aux.cov.pred.target ))) cov.betahat.e <- TRUE if( any( c( cov.ehat, cov.ehat.p.bhat ) ) ) cov.betahat <- TRUE - if( any( c( cov.deltabhat, cov.deltabhat.betahat ))){ + if( any( c( cov.delta.bhat, cov.delta.bhat.betahat ))){ cov.bhat <- TRUE - if( full.cov.deltabhat ) full.cov.bhat <- TRUE + if( full.cov.delta.bhat ) full.cov.bhat <- TRUE } - if( cov.deltabhat.betahat ) cov.bhat.betahat <- TRUE + if( cov.delta.bhat.betahat ) cov.bhat.betahat <- TRUE if( cov.ehat ){ - cov.deltabhat.betahat <- TRUE - cov.deltabhat <- TRUE - if( full.cov.ehat ) full.cov.deltabhat <- TRUE + cov.delta.bhat.betahat <- TRUE + cov.delta.bhat <- TRUE + if( full.cov.ehat ) full.cov.delta.bhat <- TRUE } ## compute required auxiliary items @@ -169,8 +169,8 @@ ## ... of (b - bhat) (debugging status ok) - if( cov.deltabhat ){ - result.new$cov.deltabhat <- if( full.cov.deltabhat ) + if( cov.delta.bhat ){ + result.new$cov.delta.bhat <- if( full.cov.delta.bhat ) { aux <- V + result.new$cov.bhat - cov.bhat.b - t( cov.bhat.b ) attr( aux, "struc" ) <- "sym" @@ -189,18 +189,18 @@ ## ... of (b - bhat) and betahat (debugging status ok) - if( cov.deltabhat.betahat ){ - result.new$cov.deltabhat.betahat <- t( cov.betahat.b ) - result.new$cov.bhat.betahat - dimnames( result.new$cov.deltabhat.betahat ) <- dimnames( XX ) + if( cov.delta.bhat.betahat ){ + result.new$cov.delta.bhat.betahat <- t( cov.betahat.b ) - result.new$cov.bhat.betahat + dimnames( result.new$cov.delta.bhat.betahat ) <- dimnames( XX ) } ## ... of ehat (debugging status ok) if( cov.ehat ){ - aux1 <- tcrossprod( result.new$cov.deltabhat.betahat, XX )[TT,TT] + aux1 <- tcrossprod( result.new$cov.delta.bhat.betahat, XX )[TT,TT] result.new$cov.ehat <- if( full.cov.ehat ) { - aux <- bla <- result.new$cov.deltabhat[TT,TT] + + aux <- bla <- result.new$cov.delta.bhat[TT,TT] + tcrossprod( tcrossprod( XX, result.new$cov.betahat ), XX )[TT,TT] - aux1 - t(aux1) - cov.bhat.e[TT,] - t(cov.bhat.e)[,TT] - TX.cov.betahat.e - t(TX.cov.betahat.e) @@ -209,10 +209,10 @@ dimnames( aux ) <- list( names.yy, names.yy ) aux } else { - aux <- (if( full.cov.deltabhat ){ - diag( result.new$cov.deltabhat )[TT] + aux <- (if( full.cov.delta.bhat ){ + diag( result.new$cov.delta.bhat )[TT] } else { - result.new$cov.deltabhat[TT] + result.new$cov.delta.bhat[TT] }) + rowSums( XX * (XX %*% result.new$cov.betahat) )[TT] - 2 * diag( aux1 ) - 2 * diag( cov.bhat.e[TT,] ) - 2 * diag( TX.cov.betahat.e ) + nugget @@ -502,20 +502,20 @@ ## ## ## ... of delta.z = (z - bhat) (debugging status: ok) ## - ## if( cov.deltabhat ){ + ## if( cov.delta.bhat ){ ## - ## if( full.cov.deltabhat ){ + ## if( full.cov.delta.bhat ){ ## ## ## full matrix ## - ## result$cov.deltabhat <- nugget * ( + ## result$cov.delta.bhat <- nugget * ( ## M.inverse[sel, sel] %*% ValphaiP / eta + ## crossprod( sqrtD * PpXQt ) ## ) - ## dimnames( result$cov.deltabhat ) <- list( + ## dimnames( result$cov.delta.bhat ) <- list( ## rownames( XX ), rownames( XX ) ## ) - ## attr( result$cov.deltabhat, "struc" ) <- "sym" + ## attr( result$cov.delta.bhat, "struc" ) <- "sym" ## ## ## ## zur Kontrolle: Kovarianzmatrix UK-Vorhersagefehler ## ## @@ -523,26 +523,26 @@ ## ## t.Sigma <- t.V + nugget * diag( n ) ## ## t.iSigma <- solve( t.Sigma ) ## ## - ## ## t.cov.deltabhat <- t.V - t.V %*% t.iSigma %*% t.V + t.V %*% t.iSigma %*% XX %*% solve( + ## ## t.cov.delta.bhat <- t.V - t.V %*% t.iSigma %*% t.V + t.V %*% t.iSigma %*% XX %*% solve( ## ## t( XX ) %*% t.iSigma %*% XX ## ## ) %*% t(XX) %*% t.iSigma %*% t.V ## ## - ## ## print( summary( c( result$cov.deltabhat - t.cov.deltabhat ) ) ) + ## ## print( summary( c( result$cov.delta.bhat - t.cov.delta.bhat ) ) ) ## ## } else { ## ## ## diagonal elements only ## - ## result$cov.deltabhat <- nugget * ( + ## result$cov.delta.bhat <- nugget * ( ## colSums( ## drop( ## Valpha.objects$Valpha.ilcf %*% M.inverse[sel, sel] ## )^2 ## ) / eta + colSums( (sqrtD * PpXQt)^2 ) ## ) - ## names( result$cov.deltabhat ) <- rownames( XX ) + ## names( result$cov.delta.bhat ) <- rownames( XX ) ## - ## ## print( summary( c( result$cov.deltabhat - diag( t.cov.deltabhat ) ) ) ) + ## ## print( summary( c( result$cov.delta.bhat - diag( t.cov.delta.bhat ) ) ) ) ## ## } ## @@ -551,9 +551,9 @@ ## ## ## ... of delta.z = (z - bhat) and betahat (debugging status: ok) ## - ## if( cov.deltabhat.betahat ){ + ## if( cov.delta.bhat.betahat ){ ## - ## result$cov.deltabhat.betahat <- -nugget * ( + ## result$cov.delta.bhat.betahat <- -nugget * ( ## t(ValphaiP) %*% M.inverse[sel,-sel] / eta + ## crossprod( PpXQt, TtDT * QpXS ) ## ) @@ -564,11 +564,11 @@ ## ## t.Sigma <- t.V + nugget * diag( n ) ## ## t.iSigma <- solve( t.Sigma ) ## ## - ## ## t.cov.deltabhat.betahat <- t.V %*% t.iSigma %*% XX %*% solve( + ## ## t.cov.delta.bhat.betahat <- t.V %*% t.iSigma %*% XX %*% solve( ## ## t( XX ) %*% t.iSigma %*% XX ## ## ) ## ## - ## ## print( summary( c( result$cov.deltabhat.betahat - t.cov.deltabhat.betahat ) ) ) + ## ## print( summary( c( result$cov.delta.bhat.betahat - t.cov.delta.bhat.betahat ) ) ) ## ## } ## @@ -2454,8 +2454,8 @@ cov.bhat = TRUE, full.cov.bhat = TRUE, cov.betahat = FALSE, cov.bhat.betahat = FALSE, - cov.deltabhat = FALSE, full.cov.deltabhat = FALSE, - cov.deltabhat.betahat = FALSE, + cov.delta.bhat = FALSE, full.cov.delta.bhat = FALSE, + cov.delta.bhat.betahat = FALSE, cov.ehat = FALSE, full.cov.ehat = FALSE, cov.ehat.p.bhat = FALSE, full.cov.ehat.p.bhat = FALSE, aux.cov.pred.target = FALSE, @@ -3183,8 +3183,8 @@ cov.bhat, full.cov.bhat, cov.betahat, cov.bhat.betahat, - cov.deltabhat, full.cov.deltabhat, - cov.deltabhat.betahat, + cov.delta.bhat, full.cov.delta.bhat, + cov.delta.bhat.betahat, cov.ehat, full.cov.ehat, cov.ehat.p.bhat, full.cov.ehat.p.bhat, aux.cov.pred.target, @@ -4020,7 +4020,7 @@ if( any( c( cov.bhat, cov.betahat, cov.bhat.betahat, - cov.deltabhat, cov.deltabhat.betahat, + cov.delta.bhat, cov.delta.bhat.betahat, cov.ehat, cov.ehat.p.bhat, aux.cov.pred.target ) @@ -4041,8 +4041,8 @@ cov.bhat = cov.bhat, full.cov.bhat = full.cov.bhat, cov.betahat = cov.betahat, cov.bhat.betahat = cov.bhat.betahat, - cov.deltabhat = cov.deltabhat, full.cov.deltabhat = full.cov.deltabhat, - cov.deltabhat.betahat = cov.deltabhat.betahat, + cov.delta.bhat = cov.delta.bhat, full.cov.delta.bhat = full.cov.delta.bhat, + cov.delta.bhat.betahat = cov.delta.bhat.betahat, cov.ehat = cov.ehat, full.cov.ehat = full.cov.ehat, cov.ehat.p.bhat = cov.ehat.p.bhat, full.cov.ehat.p.bhat = full.cov.ehat.p.bhat, aux.cov.pred.target = aux.cov.pred.target, @@ -4087,7 +4087,7 @@ if( any( c( cov.bhat, cov.betahat, cov.bhat.betahat, - cov.deltabhat, cov.deltabhat.betahat, + cov.delta.bhat, cov.delta.bhat.betahat, cov.ehat, cov.ehat.p.bhat, aux.cov.pred.target ) ) Modified: pkg/man/georob.control.Rd =================================================================== --- pkg/man/georob.control.Rd 2013-06-06 13:28:13 UTC (rev 6) +++ pkg/man/georob.control.Rd 2013-06-10 10:49:41 UTC (rev 7) @@ -32,8 +32,8 @@ force.gradient = FALSE, zero.dist = sqrt(.Machine$double.eps), cov.bhat = FALSE, full.cov.bhat = FALSE, cov.betahat = TRUE, cov.bhat.betahat = FALSE, - cov.deltabhat = TRUE, full.cov.deltabhat = TRUE, - cov.deltabhat.betahat = TRUE, + cov.delta.bhat = TRUE, full.cov.delta.bhat = TRUE, + cov.delta.bhat.betahat = TRUE, cov.ehat = TRUE, full.cov.ehat = FALSE, cov.ehat.p.bhat = FALSE, full.cov.ehat.p.bhat = FALSE, aux.cov.pred.target = FALSE, min.condnum = 1.e-12, @@ -173,16 +173,16 @@ \eqn{\widehat{\mbox{\boldmath$\beta$\unboldmath}}}{hat\beta} is returned (default \code{FALSE}).} - \item{cov.deltabhat}{logical controlling whether the covariances of + \item{cov.delta.bhat}{logical controlling whether the covariances of \eqn{\mbox{\boldmath$B$\unboldmath}- \widehat{\mbox{\boldmath$B$\unboldmath}}}{B-hatB} are returned (default \code{TRUE}).} - \item{full.cov.deltabhat}{logical controlling whether the full covariance + \item{full.cov.delta.bhat}{logical controlling whether the full covariance matrix (\code{TRUE}) or only the variance vector of \eqn{\mbox{\boldmath$B$\unboldmath}- \widehat{\mbox{\boldmath$B$\unboldmath}}}{B-hatB} is returned (default \code{TRUE}).} - \item{cov.deltabhat.betahat}{logical controlling whether the covariance + \item{cov.delta.bhat.betahat}{logical controlling whether the covariance matrix of \eqn{\mbox{\boldmath$B$\unboldmath}- \widehat{\mbox{\boldmath$B$\unboldmath}}}{B-hatB} and \eqn{\widehat{\mbox{\boldmath$\beta$\unboldmath}}}{hat\beta} is returned Modified: pkg/man/georobObject.Rd =================================================================== --- pkg/man/georobObject.Rd 2013-06-06 13:28:13 UTC (rev 6) +++ pkg/man/georobObject.Rd 2013-06-10 10:49:41 UTC (rev 7) @@ -125,10 +125,10 @@ \eqn{\widehat{\mbox{\boldmath$B$\unboldmath}}}{hatB} and \eqn{\widehat{\mbox{\boldmath$\beta$\unboldmath}}}{hat\beta}. - \item \code{cov.deltabhat}: the covariances of + \item \code{cov.delta.bhat}: the covariances of \eqn{\mbox{\boldmath$B$\unboldmath}- \widehat{\mbox{\boldmath$B$\unboldmath}}}{B-hatB}. - \item \code{cov.deltabhat.betahat}: the covariances of + \item \code{cov.delta.bhat.betahat}: the covariances of \eqn{\mbox{\boldmath$B$\unboldmath}- \widehat{\mbox{\boldmath$B$\unboldmath}}}{B-hatB} and \eqn{\widehat{\mbox{\boldmath$\beta$\unboldmath}}}{hat\beta}. From noreply at r-forge.r-project.org Tue Jun 11 21:44:56 2013 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Tue, 11 Jun 2013 21:44:56 +0200 (CEST) Subject: [Georob-commits] r8 - in pkg: . R Message-ID: <20130611194456.99BC8185894@r-forge.r-project.org> Author: papritz Date: 2013-06-11 21:44:56 +0200 (Tue, 11 Jun 2013) New Revision: 8 Modified: pkg/ChangeLog pkg/R/georob.exported.functions.R pkg/R/georob.private.functions.R Log: non-robust estimation with rank deficient fixed effects design matrix M pkg/R/georob.exported.functions.R M pkg/R/georob.private.functions.R M pkg/ChangeLog Modified: pkg/ChangeLog =================================================================== --- pkg/ChangeLog 2013-06-10 10:49:41 UTC (rev 7) +++ pkg/ChangeLog 2013-06-11 19:44:56 UTC (rev 8) @@ -85,8 +85,13 @@ 2013-06-06 Andreas Papritz -* georob.exported.function.R (georob, georob.control): handling fixed effects model matrices with rank < ncol(x) -* georob.private.function.R (prepare.likelihood.calculations, compute.estimating.equations, negative.restr.loglikelihood, negative.restr.loglikelihood, gradient.negative.restricted.loglikelihood, georob.fit) : solving estimating equations for xi +* georob.exported.function.R (georob, georob.control): handling fixed effects model matrices with rank < ncol(x) for robust estimation +* georob.private.function.R (prepare.likelihood.calculations, compute.estimating.equations, negative.restr.loglikelihood, gradient.negative.restricted.loglikelihood, georob.fit) : solving estimating equations for xi * georob.S3methods.R ranef.georob, rstandard.georob) : solving estimating equations for xi -* georob.private.function.R (compute.covariances, estimate.xihat, update.xihat, negative.restr.loglikelihood): solving estimating equations for xi +* georob.private.function.R (estimate.xihat, prepare.likelihood.calculations, compute.estimating.equations, negative.restr.loglikelihood, gradient.negative.restricted.loglikelihood, georob.fit): handling fixed effects model matrices with rank < ncol(x) for robust estimation + +2013-06-11 Andreas Papritz + +* georob.exported.function.R (georob): handling fixed effects model matrices with rank < ncol(x) for non-robust estimation +* georob.private.function.R (estimate.xihat, prepare.likelihood.calculations, compute.estimating.equations, negative.restr.loglikelihood, gradient.negative.restricted.loglikelihood, georob.fit): handling fixed effects model matrices with rank < ncol(x) for non-robust estimation Modified: pkg/R/georob.exported.functions.R =================================================================== --- pkg/R/georob.exported.functions.R 2013-06-10 10:49:41 UTC (rev 7) +++ pkg/R/georob.exported.functions.R 2013-06-11 19:44:56 UTC (rev 8) @@ -175,22 +175,22 @@ ## check whether design matrix has full column rank + rankdef.x <- FALSE + min.max.sv <- range( svd( crossprod( x ) )$d ) condnum <- min.max.sv[1] / min.max.sv[2] if( condnum <= control$min.condnum ){ - if( initial.param || tuning.psi >= control$tuning.psi.nr ) stop( - "singular fixed effects design matrices cannot be handled if 'initial.param = TRUE'", - "or for Gaussian REML estimation" - ) + rankdef.x <- TRUE cat( "design matrix has not full column rank (condition number of X^T X: ", - signif( condnum, 2 ), ")\ninitial values of regression coefficients are computed by 'lm\n\n'" + signif( condnum, 2 ), ")\ninitial values of fixed effects coefficients are computed by 'lm'\n\n" ) control$initial.method <- "lm" + initial.param <- FALSE warning( "design matrix has not full column rank (condition number of X^T X: ", - signif( condnum, 2 ), ")\ninitial values of regression coefficients are computed by 'lm'" + signif( condnum, 2 ), ")\ninitial values of fixed effects coefficients are computed by 'lm'" ) } @@ -375,6 +375,7 @@ cov.ehat.p.bhat = control$cov.ehat.p.bhat, full.cov.ehat.p.bhat = control$full.cov.ehat.p.bhat, aux.cov.pred.target = control$aux.cov.pred.target, min.condnum = control$min.condnum, + rankdef.x = rankdef.x, psi.func = control$psi.func, tuning.psi.nr = control$tuning.psi.nr, irwls.initial = control$irwls.initial, @@ -440,6 +441,7 @@ cov.ehat.p.bhat = control$cov.ehat.p.bhat, full.cov.ehat.p.bhat = control$full.cov.ehat.p.bhat, aux.cov.pred.target = control$aux.cov.pred.target, min.condnum = control$min.condnum, + rankdef.x = rankdef.x, psi.func = control$psi.func, tuning.psi.nr = control$tuning.psi.nr, irwls.initial = control$irwls.initial, Modified: pkg/R/georob.private.functions.R =================================================================== --- pkg/R/georob.private.functions.R 2013-06-10 10:49:41 UTC (rev 7) +++ pkg/R/georob.private.functions.R 2013-06-11 19:44:56 UTC (rev 8) @@ -798,7 +798,7 @@ estimate.xihat <- function( - XX, min.condnum, yy, betahat, TT, xihat, + XX, min.condnum, rankdef.x, yy, betahat, TT, xihat, psi.function, tuning.psi, tuning.psi.nr, maxit, reltol, nugget, eta, Valpha.inverse, @@ -834,15 +834,23 @@ ## compute projection matrix Palpha and related items -# browser() -# result <- list( error = FALSE ) aux <- t( XX ) %*% Valpha.inverse - s <- svd( aux %*% XX ) - s$d <- ifelse( s$d / max( s$d ) <= min.condnum, 0., 1. / s$d ) - Palpha <- s$v %*% ( s$d * t( s$u ) ) + if( rankdef.x ){ + s <- svd( aux %*% XX ) + s$d <- ifelse( s$d / max( s$d ) <= min.condnum, 0., 1. / s$d ) + Palpha <- s$v %*% ( s$d * t( s$u ) ) # Moore-Penrose inverse + } else { + t.chol <- try( chol( aux %*% XX ), silent = TRUE ) + if( !identical( class( t.chol ), "try-error" ) ){ + Palpha <- chol2inv( t.chol ) + } else { + result$error <- TRUE + return( result ) + } + } result$Aalpha <- Palpha %*% aux dimnames( result$Aalpha ) <- dimnames( t(XX) ) @@ -1055,7 +1063,7 @@ adjustable.param, variogram.model, fixed.param, param.name, aniso.name, param.tf, bwd.tf, safe.param, lag.vectors, - XX, min.condnum, yy, betahat, TT, bhat, + XX, min.condnum, rankdef.x, yy, betahat, TT, bhat, psi.function, dpsi.function, tuning.psi, tuning.psi.nr, irwls.initial, irwls.maxiter, irwls.reltol, compute.Q, @@ -1282,7 +1290,7 @@ } lik.item$effects <- estimate.xihat( - XX, min.condnum, yy, betahat, TT, bhat, + XX, min.condnum, rankdef.x, yy, betahat, TT, bhat, psi.function, tuning.psi, tuning.psi.nr, irwls.maxiter, irwls.reltol, lik.item$param["nugget"], lik.item$eta, lik.item$Valpha$Valpha.inverse, @@ -1318,27 +1326,38 @@ Q <- rbind( cbind( aux, TtDTX ), cbind( t(TtDTX), crossprod( XX, TtDTX) ) - ) + ) / lik.item$param["nugget"] lik.item$Q <- list( error = TRUE ) - ## compute log(det(Q)) and inverse of Q by cholesky decomposition - - t.chol <- try( - chol( Q / lik.item$param["nugget"] ), - silent = TRUE - ) - - if( !identical( class( t.chol ), "try-error" ) ) { + if( rankdef.x ){ + ## compute log(pseudo.det(Q)) and (Moore-Penrose) pseudo inverse of Q by svd + lik.item$Q$error <- FALSE - lik.item$Q$log.det.Q <- 2 * sum( log( diag( t.chol) ) ) - lik.item$Q$Q.inverse <- chol2inv( t.chol ) + s <- svd( Q ) + lik.item$Q$log.det.Q <- sum( log( s$d[s$d / max( s$d ) > min.condnum] ) ) + s$d <- ifelse( s$d / max( s$d ) <= min.condnum, 0., 1. / s$d ) + lik.item$Q$Q.inverse <- s$v %*% ( s$d * t( s$u ) ) } else { - return( lik.item ) + ## compute log(det(Q)) and inverse of Q by cholesky decomposition + t.chol <- try( chol( Q ), silent = TRUE ) + + if( !identical( class( t.chol ), "try-error" ) ) { + + lik.item$Q$error <- FALSE + lik.item$Q$log.det.Q <- 2 * sum( log( diag( t.chol) ) ) + lik.item$Q$Q.inverse <- chol2inv( t.chol ) + + } else { + + return( lik.item ) + + } + } } @@ -2370,7 +2389,7 @@ variogram.model, fixed.param, param.name, aniso.name, param.tf, bwd.tf, safe.param, lag.vectors, - XX, min.condnum, yy, betahat, TT, bhat, + XX, min.condnum, rankdef.x, yy, betahat, TT, bhat, psi.function, dpsi.function, tuning.psi, tuning.psi.nr, irwls.initial, irwls.maxiter, irwls.reltol, @@ -2397,7 +2416,7 @@ adjustable.param, variogram.model, fixed.param, param.name, aniso.name, param.tf, bwd.tf, safe.param, lag.vectors, - XX, min.condnum, yy, betahat, TT, bhat, + XX, min.condnum, rankdef.x, yy, betahat, TT, bhat, psi.function, dpsi.function, tuning.psi, tuning.psi.nr, irwls.initial, irwls.maxiter, irwls.reltol, compute.Q = FALSE, @@ -2628,7 +2647,7 @@ variogram.model, fixed.param, param.name, aniso.name, param.tf, bwd.tf, safe.param, lag.vectors, - XX, min.condnum, yy, betahat, TT, bhat, + XX, min.condnum, rankdef.x, yy, betahat, TT, bhat, psi.function, dpsi.function, tuning.psi, tuning.psi.nr, irwls.initial, irwls.maxiter, irwls.reltol, @@ -2657,7 +2676,7 @@ adjustable.param, variogram.model, fixed.param, param.name, aniso.name, param.tf, bwd.tf, safe.param, lag.vectors, - XX, min.condnum, yy, betahat, TT, bhat, + XX, min.condnum, rankdef.x, yy, betahat, TT, bhat, psi.function, dpsi.function, tuning.psi, tuning.psi.nr, irwls.initial, irwls.maxiter, irwls.reltol, compute.Q = TRUE, @@ -2743,7 +2762,7 @@ variogram.model, fixed.param, param.name, aniso.name, param.tf, deriv.fwd.tf, bwd.tf, safe.param, lag.vectors, - XX, min.condnum, yy, betahat, TT, bhat, + XX, min.condnum, rankdef.x, yy, betahat, TT, bhat, psi.function, dpsi.function, d2psi.function, tuning.psi, tuning.psi.nr, irwls.initial, irwls.maxiter, irwls.reltol, @@ -2773,7 +2792,7 @@ adjustable.param, variogram.model, fixed.param, param.name, aniso.name, param.tf, bwd.tf, safe.param, lag.vectors, - XX, min.condnum, yy, betahat, TT, bhat, + XX, min.condnum, rankdef.x, yy, betahat, TT, bhat, psi.function, dpsi.function, tuning.psi, tuning.psi.nr, irwls.initial, irwls.maxiter, irwls.reltol, compute.Q = TRUE, @@ -3188,7 +3207,7 @@ cov.ehat, full.cov.ehat, cov.ehat.p.bhat, full.cov.ehat.p.bhat, aux.cov.pred.target, - min.condnum, + min.condnum, rankdef.x, psi.func, tuning.psi.nr, irwls.initial, @@ -3780,7 +3799,7 @@ bwd.tf = bwd.tf, safe.param = safe.param, lag.vectors = lag.vectors, - XX = XX, min.condnum = min.condnum, + XX = XX, min.condnum = min.condnum, rankdef.x = rankdef.x, yy = yy, betahat = betahat, TT = TT, bhat = bhat, psi.function = rho.psi.etc$psi.function, dpsi.function = rho.psi.etc$dpsi.function, @@ -3831,7 +3850,7 @@ bwd.tf = bwd.tf, safe.param = safe.param, lag.vectors = lag.vectors, - XX = XX, min.condnum = min.condnum, + XX = XX, min.condnum = min.condnum, rankdef.x = rankdef.x, yy = yy, betahat = betahat, TT = TT, bhat = bhat, psi.function = rho.psi.etc$psi.function, dpsi.function = rho.psi.etc$dpsi.function, @@ -3885,7 +3904,7 @@ bwd.tf = bwd.tf, safe.param = safe.param, lag.vectors = lag.vectors, - XX = XX, min.condnum = min.condnum, + XX = XX, min.condnum = min.condnum, rankdef.x = rankdef.x, yy = yy, betahat = betahat, TT = TT, bhat = bhat, psi.function = rho.psi.etc$psi.function, dpsi.function = rho.psi.etc$dpsi.function, @@ -3922,7 +3941,7 @@ bwd.tf = bwd.tf, safe.param = safe.param, lag.vectors = lag.vectors, - XX = XX, min.condnum = min.condnum, + XX = XX, min.condnum = min.condnum, rankdef.x = rankdef.x, yy = yy, betahat = betahat, TT = TT, bhat = bhat, psi.function = rho.psi.etc$psi.function, dpsi.function = rho.psi.etc$dpsi.function, @@ -3960,7 +3979,7 @@ bwd.tf = bwd.tf, safe.param = safe.param, lag.vectors = lag.vectors, - XX = XX, min.condnum = min.condnum, + XX = XX, min.condnum = min.condnum, rankdef.x = rankdef.x, yy = yy, betahat = betahat, TT = TT, bhat = bhat, psi.function = rho.psi.etc$psi.function, dpsi.function = rho.psi.etc$dpsi.function, @@ -3990,7 +4009,7 @@ bwd.tf = bwd.tf, safe.param = safe.param, lag.vectors = lag.vectors, - XX = XX, min.condnum = min.condnum, + XX = XX, min.condnum = min.condnum, rankdef.x = rankdef.x, yy = yy, betahat = betahat, TT = TT, bhat = bhat, psi.function = rho.psi.etc$psi.function, dpsi.function = rho.psi.etc$dpsi.function, From noreply at r-forge.r-project.org Wed Jun 12 15:24:40 2013 From: noreply at r-forge.r-project.org (noreply at r-forge.r-project.org) Date: Wed, 12 Jun 2013 15:24:40 +0200 (CEST) Subject: [Georob-commits] r9 - in pkg: . R man Message-ID: <20130612132440.8C3B9185671@r-forge.r-project.org> Author: papritz Date: 2013-06-12 15:24:39 +0200 (Wed, 12 Jun 2013) New Revision: 9 Modified: pkg/ChangeLog pkg/DESCRIPTION pkg/NAMESPACE pkg/R/georob.S3methods.R pkg/R/georob.cv.R pkg/R/georob.exported.functions.R pkg/R/georob.lgnpp.R pkg/R/georob.predict.R pkg/R/georob.private.functions.R pkg/R/variogram.R pkg/man/compress.Rd pkg/man/cv.georob.Rd pkg/man/fit.variogram.model.Rd pkg/man/georob.Rd pkg/man/georob.control.Rd pkg/man/lgnpp.Rd pkg/man/predict.georob.Rd pkg/man/sample.variogram.Rd Log: substituting [["x"]] for $x in all lists M pkg/R/georob.cv.R M pkg/R/georob.S3methods.R M pkg/R/georob.predict.R M pkg/R/variogram.R M pkg/R/georob.lgnpp.R M pkg/R/georob.exported.functions.R M pkg/R/georob.private.functions.R M pkg/DESCRIPTION M pkg/ChangeLog M pkg/man/georob.Rd M pkg/man/lgnpp.Rd M pkg/man/cv.georob.Rd M pkg/man/compress.Rd M pkg/man/georob.control.Rd M pkg/man/predict.georob.Rd M pkg/man/fit.variogram.model.Rd M pkg/man/sample.variogram.Rd M pkg/NAMESPACE Modified: pkg/ChangeLog =================================================================== --- pkg/ChangeLog 2013-06-11 19:44:56 UTC (rev 8) +++ pkg/ChangeLog 2013-06-12 13:24:39 UTC (rev 9) @@ -95,3 +95,14 @@ * georob.exported.function.R (georob): handling fixed effects model matrices with rank < ncol(x) for non-robust estimation * georob.private.function.R (estimate.xihat, prepare.likelihood.calculations, compute.estimating.equations, negative.restr.loglikelihood, gradient.negative.restricted.loglikelihood, georob.fit): handling fixed effects model matrices with rank < ncol(x) for non-robust estimation + + +2013-06-12 Andreas Papritz + +* georob.cv.R (all functions): substituting [["x"]] for $x in all lists +* georob.exported.functions.R (all functions): substituting [["x"]] for $x in all lists +* georob.lgnpp.R (all functions): substituting [["x"]] for $x in all lists +* georob.predict.R (all functions): substituting [["x"]] for $x in all lists +* georob.private.functions.R (all functions): substituting [["x"]] for $x in all lists +* georob.S3methods.R (all functions): substituting [["x"]] for $x in all lists +* variogram.R (all functions): substituting [["x"]] for $x in all lists Modified: pkg/DESCRIPTION =================================================================== --- pkg/DESCRIPTION 2013-06-11 19:44:56 UTC (rev 8) +++ pkg/DESCRIPTION 2013-06-12 13:24:39 UTC (rev 9) @@ -7,8 +7,7 @@ person( "Andreas", "Papritz", role = c( "cre", "aut" ), email = "andreas.papritz at env.ethz.ch" ), person( "Cornelia", "Schwierz", role = "ctb" )) -Depends: R(>= 2.14.0), lmtest, nlme, - robustbase, sp(>= 0.9-60), parallel +Depends: R(>= 2.14.0), lmtest, nlme, robustbase, sp(>= 0.9-60) Imports: constrainedKriging(>= 0.1-9), nleqslv, quantreg, RandomFields(>= 2.0.55), spatialCovariance(>= 0.6-4) Suggests: geoR Modified: pkg/NAMESPACE =================================================================== --- pkg/NAMESPACE 2013-06-11 19:44:56 UTC (rev 8) +++ pkg/NAMESPACE 2013-06-12 13:24:39 UTC (rev 9) @@ -1,4 +1,4 @@ -import( stats ) +import( stats, parallel ) importFrom( constrainedKriging, covmodel, f.point.block.cov, K, preCKrige ) importFrom( lmtest, waldtest, waldtest.default ) Modified: pkg/R/georob.S3methods.R =================================================================== --- pkg/R/georob.S3methods.R 2013-06-11 19:44:56 UTC (rev 8) +++ pkg/R/georob.S3methods.R 2013-06-12 13:24:39 UTC (rev 9) @@ -25,9 +25,6 @@ # 2011-08-11 A. Papritz -# ToDos: -# - ...$xy durch ...[["xy"]] ersetzen - ## ############################################################################## model.frame.georob <- @@ -92,6 +89,7 @@ ## 2011-08-13 A. Papritz ## 2012-02-07 AP change for anisotropic variograms ## 2012-12-18 AP invisible(x) + ## 2013-06-12 AP substituting [["x"]] for $x in all lists ## code borrowed from print.lmrob for printing fixed effects coeffcients @@ -107,10 +105,10 @@ ## print variogram parameters cat("\n") - cat( "Variogram: ", x$variogram.model, "\n" ) - param <- x$param + cat( "Variogram: ", x[["variogram.model"]], "\n" ) + param <- x[["param"]] names( param ) <- ifelse( - x$initial.objects$fit.param, + x[["initial.objects"]][["fit.param"]], names( param ), paste( names( param ), "(fixed)", sep = "" ) ) @@ -121,13 +119,13 @@ ## print anisotropy parameters - if( !x$aniso$isotropic ){ + if( !x[["aniso"]][["isotropic"]] ){ cat("\n") cat( "Anisotropy parameters: ", "\n" ) - aniso <- x$aniso$aniso * c( rep(1, 2), rep( 180/pi, 3 ) ) + aniso <- x[["aniso"]][["aniso"]] * c( rep(1, 2), rep( 180/pi, 3 ) ) names( aniso ) <- ifelse( - x$initial.objects$fit.aniso, + x[["initial.objects"]][["fit.aniso"]], names( aniso ), paste( names( aniso ), "(fixed)", sep = "" ) ) @@ -172,60 +170,40 @@ ## 2013-05-31 AP correct handling of missing observations ## 2013-05-31 AP revised expansion of covariance matrices ## 2013-05-06 AP changes for solving estimating equations for xi + ## 2013-06-12 AP substituting [["x"]] for $x in all lists ## temporarily redefine na.action component of object - object.na <- object$na.action - if( identical( class( object$na.action ), "exclude" ) ){ - class( object$na.action ) <- "omit" + object.na <- object[["na.action"]] + if( identical( class( object[["na.action"]] ), "exclude" ) ){ + class( object[["na.action"]] ) <- "omit" } - Valpha.objects <- expand( object$Valpha.objects ) - covmat <- expand( object$cov ) + Valpha.objects <- expand( object[["Valpha.objects"]] ) + covmat <- expand( object[["cov"]] ) - bhat <- object$bhat + bhat <- object[["bhat"]] if( standard ){ - if( is.null( covmat$cov.bhat ) ){ + if( is.null( covmat[["cov.bhat"]] ) ){ ## compute standard errors of residuals - if( is.null( Valpha.objects$Valpha.inverse ) || - is.null( Valpha.objects$Valpha.ilcf ) - ) stop( - "'Valpha.objects' incomplete or missing in georob object;\n", - "'Valpha.objects' must include components 'Valpha.inverse' and 'Valpha.ilcf'" - ) - if( is.null( object$expectations ) ) stop( - "'expectations' missing in georob object;\n", - "use 'full.output = TRUE' when fitting the object" - ) - - - if( is.null( Valpha.objects$Valpha.ucf ) ){ - - ## compute upper cholesky factor of correlation matrix Valpha - ## which is needed to compute cov( bhat ) - - Valpha.objects$Valpha.ucf <- t( solve( Valpha.objects$Valpha.ilcf ) ) - - } - X <- model.matrix( terms( object ), model.frame( object ) - )[!duplicated( object$Tmat ), , drop = FALSE] + )[!duplicated( object[["Tmat"]] ), , drop = FALSE] r.cov <- compute.covariances( Valpha.objects = Valpha.objects, Aalpha = object[["Aalpha"]], - Palpha = expand( object[["Palpha"]] ), - rweights = object$rweights, - XX = X, TT = object$Tmat, names.yy = rownames( model.frame( object ) ), - nugget = object$param["nugget"], - eta = sum( object$param[c( "variance", "snugget")] ) / object$param["nugget"], - expectations = object$expectations, + Palpha = object[["Palpha"]], + rweights = object[["rweights"]], + XX = X, TT = object[["Tmat"]], names.yy = rownames( model.frame( object ) ), + nugget = object[["param"]]["nugget"], + eta = sum( object[["param"]][c( "variance", "snugget")] ) / object[["param"]]["nugget"], + expectations = object[["expectations"]], cov.bhat = TRUE, full.cov.bhat = FALSE, cov.betahat = FALSE, cov.bhat.betahat = FALSE, @@ -237,20 +215,20 @@ verbose = 0 ) - if( r.cov$error ) stop( + if( r.cov[["error"]] ) stop( "an error occurred when computing the variances of the random effects" ) - se <- sqrt( r.cov$cov.bhat ) + se <- sqrt( r.cov[["cov.bhat"]] ) } else { ## extract standard errors of residuals from georob object - if( is.matrix( covmat$cov.bhat ) ){ - se <- sqrt( diag( covmat$cov.bhat ) ) + if( is.matrix( covmat[["cov.bhat"]] ) ){ + se <- sqrt( diag( covmat[["cov.bhat"]] ) ) } else { - se <- sqrt( covmat$cov.bhat ) + se <- sqrt( covmat[["cov.bhat"]] ) } } @@ -281,8 +259,9 @@ ## ... further arguments passed to methods ## 2012-11-26 A. Papritz + ## 2013-06-12 AP substituting [["x"]] for $x in all lists - object$coef + object[["coef"]] } @@ -314,6 +293,7 @@ ## 2011-10-13 A. Papritz ## 2011-12-14 AP modified for replicated observations ## 2013-05-31 AP modified for computing partial residuals for single terms + ## 2013-06-12 AP substituting [["x"]] for $x in all lists type <- match.arg( type ) @@ -321,28 +301,28 @@ ## temporarily redefine na.action component of object - object.na <- object$na.action - if( identical( class( object$na.action ), "exclude" ) ){ - class( object$na.action ) <- "omit" + object.na <- object[["na.action"]] + if( identical( class( object[["na.action"]] ), "exclude" ) ){ + class( object[["na.action"]] ) <- "omit" } - r <- object$residuals + r <- object[["residuals"]] res <- switch( type, working = , response = r, deviance = , - pearson = if( is.null(object$weights) ) r else r * sqrt(object$weights), + pearson = if( is.null(object[["weights"]]) ) r else r * sqrt(object[["weights"]]), partial = r ) if( level == 0 && any( type %in% c( "working", "response", "partial" ) ) ){ - res <- res + ranef( object, standard = FALSE )[object$Tmat] + res <- res + ranef( object, standard = FALSE )[object[["Tmat"]]] } if( type == "partial" ) - res <- res + predict( object, type = "terms", terms = terms )$fit + res <- res + predict( object, type = "terms", terms = terms )[["fit"]] drop( res ) naresid( object.na, res ) @@ -373,55 +353,41 @@ ## 2013-05-31 AP correct handling of missing observations ## 2013-05-31 AP revised expansion of covariance matrices ## 2013-05-06 AP changes for solving estimating equations for xi + ## 2013-06-12 AP substituting [["x"]] for $x in all lists ## temporarily redefine na.action component of model - model.na <- model$na.action - if( identical( class( model$na.action ), "exclude" ) ){ - class( model$na.action ) <- "omit" + model.na <- model[["na.action"]] + if( identical( class( model[["na.action"]] ), "exclude" ) ){ + class( model[["na.action"]] ) <- "omit" } - Valpha.objects <- expand( model$Valpha.objects ) - covmat <- expand( model$cov ) + Valpha.objects <- expand( model[["Valpha.objects"]] ) + covmat <- expand( model[["cov"]] ) if( !level %in% 1:0 ) stop( "wrong level: must be either 1 or 0" ) if( - ( is.null( covmat$cov.ehat ) & level == 1 ) || - ( is.null( covmat$cov.ehat.p.bhat ) & level == 0 ) + ( is.null( covmat[["cov.ehat"]] ) & level == 1 ) || + ( is.null( covmat[["cov.ehat.p.bhat"]] ) & level == 0 ) ){ ## compute standard errors of residuals - if( is.null( Valpha.objects$Valpha.inverse ) || - is.null( Valpha.objects$Valpha.ilcf ) - ) stop( - "'Valpha.objects' incomplete or missing in georob object;\n", - "'Valpha.objects' must include components 'Valpha.inverse' and 'Valpha.ilcf'" - ) - if( is.null( model$expectations ) ) stop( - "'expectations' missing in georob object;\n", - "use 'full.output = TRUE' when fitting the model" - ) - X <- model.matrix( terms( model), model.frame( model ) - )[!duplicated( model$Tmat ), , drop = FALSE] + )[!duplicated( model[["Tmat"]] ), , drop = FALSE] - if( is.null( Valpha.objects$Valpha.ucf ) ){ - Valpha.objects$Valpha.ucf <- t( solve( Valpha.objects$Valpha.ilcf ) ) - } - r.cov <- compute.covariances( Valpha.objects = Valpha.objects, Aalpha = model[["Aalpha"]], - Palpha = expand( model[["Palpha"]] ), - rweights = model$rweights, - XX = X, TT = model$Tmat, names.yy = rownames( model.frame( model ) ), - nugget = model$param["nugget"], - eta = sum( model$param[c( "variance", "snugget")] ) / model$param["nugget"], - expectations = model$expectations, + Palpha = model[["Palpha"]], + rweights = model[["rweights"]], + XX = X, TT = model[["Tmat"]], names.yy = rownames( model.frame( model ) ), + nugget = model[["param"]]["nugget"], + eta = sum( model[["param"]][c( "variance", "snugget")] ) / model[["param"]]["nugget"], + expectations = model[["expectations"]], cov.bhat = FALSE, full.cov.bhat = FALSE, cov.betahat = FALSE, cov.bhat.betahat = FALSE, @@ -433,14 +399,14 @@ verbose = 0 ) - if( r.cov$error ) stop( + if( r.cov[["error"]] ) stop( "an error occurred when computing the variance of the residuals" ) if( level == 1 ){ - covmat$cov.ehat <-r.cov$cov.ehat + covmat[["cov.ehat"]] <-r.cov[["cov.ehat"]] } else { - covmat$cov.ehat.p.bhat <-r.cov$cov.ehat.p.bhat + covmat[["cov.ehat.p.bhat"]] <-r.cov[["cov.ehat.p.bhat"]] } } @@ -448,9 +414,9 @@ ## extract standard errors of residuals from georob object if( level == 1 ){ - se <- covmat$cov.ehat + se <- covmat[["cov.ehat"]] } else { - se <- covmat$cov.ehat.p.bhat + se <- covmat[["cov.ehat.p.bhat"]] } if( is.matrix( se ) ){ se <- sqrt( diag( se ) ) @@ -479,6 +445,7 @@ ## ... further arguments passed to cv.georob ## 2011-12-22 A. Papritz + ## 2013-06-12 AP substituting [["x"]] for $x in all lists if( !identical( class( model )[1], "georob" ) ) stop( "model is not of class 'georob'" @@ -516,74 +483,75 @@ ## 2012-11-27 AP changes in parameter back-transformation ## 2013-04-23 AP new names for robustness weights ## 2013-05-31 AP revised expansion of covariance matrices + ## 2013-06-12 AP substituting [["x"]] for $x in all lists - covmat <- expand( object$cov ) + covmat <- expand( object[["cov"]] ) ans <- object[c( "call", "residuals", "bhat", "rweights", "converged", "convergence.code", "iter", "loglik", "variogram.model", "gradient", "tuning.psi", "df.residual" )] - ans <- c( ans, object$initial.objects["fit.param"] ) + ans <- c( ans, object[["initial.objects"]]["fit.param"] ) - if( !object$aniso$isotropic ) ans$fit.param <- c( - ans$fit.param, object$initial.objects$fit.aniso + if( !object[["aniso"]][["isotropic"]] ) ans[["fit.param"]] <- c( + ans[["fit.param"]], object[["initial.objects"]][["fit.aniso"]] ) - ans$terms <- NA - ans$scale <- sqrt(object$param["nugget"]) - ans$control$method <- "TODO: PRINT GLSROB CONTROL PARAMETERS HERE" + ans[["terms"]] <- NA + ans[["scale"]] <- sqrt(object[["param"]]["nugget"]) + ans[["control"]][["method"]] <- "TODO: PRINT GLSROB CONTROL PARAMETERS HERE" - se <- sqrt(diag(covmat$cov.betahat)) - est <- object$coefficients + se <- sqrt(diag(covmat[["cov.betahat"]])) + est <- object[["coefficients"]] tval <- est/se - ans$coefficients <- cbind( - est, se, tval, 2 * pt( abs(tval), object$df.residual, lower.tail = FALSE ) + ans[["coefficients"]] <- cbind( + est, se, tval, 2 * pt( abs(tval), object[["df.residual"]], lower.tail = FALSE ) ) - dimnames( ans$coefficients ) <- list( + dimnames( ans[["coefficients"]] ) <- list( names(est), c("Estimate", "Std. Error", "t value", "Pr(>|t|)") ) if( correlation ){ - ans$correlation <- covmat$cov.betahat / outer(se, se) + ans[["correlation"]] <- covmat[["cov.betahat"]] / outer(se, se) } - ans$param <- as.matrix( object$param, ncol = 1 ) + ans[["param"]] <- as.matrix( object[["param"]], ncol = 1 ) - if( !object$aniso$isotropic ) ans$param <- rbind( - ans$param, - as.matrix( object$aniso$aniso, ncol = 1 ) * c( rep( 1, 2 ), rep( 180/pi, 3 ) ) + if( !object[["aniso"]][["isotropic"]] ) ans[["param"]] <- rbind( + ans[["param"]], + as.matrix( object[["aniso"]][["aniso"]], ncol = 1 ) * c( rep( 1, 2 ), rep( 180/pi, 3 ) ) ) - colnames( ans$param ) <- "Estimate" + colnames( ans[["param"]] ) <- "Estimate" ## compute confidence intervals of variogram parameters from observed ## Fisher information matrix (Gaussian REML only) - if( !is.null( object$hessian ) ){ + if( !is.null( object[["hessian"]] ) ){ ## initialization cor.tf.param <- cov.tf.param <- matrix( - NA, nrow = nrow( object$hessian ), ncol = nrow( object$hessian ), - dimnames = dimnames( object$hessian ) + NA, nrow = nrow( object[["hessian"]] ), ncol = nrow( object[["hessian"]] ), + dimnames = dimnames( object[["hessian"]] ) ) - se <- rep( NA, nrow( object$hessian ) ) - names( se ) <- rownames( object$hessian) + se <- rep( NA, nrow( object[["hessian"]] ) ) + names( se ) <- rownames( object[["hessian"]]) - ci <- matrix( NA, nrow = nrow( ans$param ), ncol = 2 ) + ci <- matrix( NA, nrow = nrow( ans[["param"]] ), ncol = 2 ) colnames( ci ) <- c( "Lower", "Upper" ) - rownames( ci ) <- rownames( ans$param ) + rownames( ci ) <- rownames( ans[["param"]] ) ## select parameters that are not on boundary of parameter space - sr <- !apply( object$hessian, 1, function( x ) all( is.na( x ) ) ) + sr <- !apply( object[["hessian"]], 1, function( x ) all( is.na( x ) ) ) if( sum( sr ) > 0 ){ - t.chol <- try( chol( object$hessian[sr, sr] ), silent = TRUE ) + t.chol <- try( chol( object[["hessian"]][sr, sr] ), silent = TRUE ) if( !identical( class( t.chol ), "try-error" ) ){ @@ -604,15 +572,15 @@ ## compute confidence interval on original scale of parameters - sel.names <- names( object$param[object$initial.objects$fit.param] ) - if( !object$aniso$isotropic ) sel.names <- c( + sel.names <- names( object[["param"]][object[["initial.objects"]][["fit.param"]]] ) + if( !object[["aniso"]][["isotropic"]] ) sel.names <- c( sel.names, - names( object$aniso$aniso[object$initial.objects$fit.aniso] ) + names( object[["aniso"]][["aniso"]][object[["initial.objects"]][["fit.aniso"]]] ) ) sel.names <- sel.names[sr] - ff <- c( rep( 1, length( object$param ) + 2 ), rep( 180/pi, 3 ) ) - names( ff ) <- names( c( object$param, object$aniso$aniso ) ) + ff <- c( rep( 1, length( object[["param"]] ) + 2 ), rep( 180/pi, 3 ) ) + names( ff ) <- names( c( object[["param"]], object[["aniso"]][["aniso"]] ) ) ci[sel.names, ] <- t( sapply( @@ -623,19 +591,19 @@ c(-1, 1) * se[x] * qnorm( (1-signif)/2, lower.tail = FALSE ) ) }, - param = c( object$param, object$aniso$aniso ), + param = c( object[["param"]], object[["aniso"]][["aniso"]] ), f = ff, se = se, - param.tf = object$param.tf, - trafo.fct = object$fwd.tf, - inv.trafo.fct = object$bwd.tf + param.tf = object[["param.tf"]], + trafo.fct = object[["fwd.tf"]], + inv.trafo.fct = object[["bwd.tf"]] ) ) is.angle <- rownames( ci ) %in% c( "omega", "phi", "zeta" ) if( sum(is.angle) > 0 ) ci[is.angle, ] <- ci[is.angle, ] * 180/pi - ans$param <- cbind( ans$param, ci ) - if( correlation ) ans$cor.tf.param <- cor.tf.param + ans[["param"]] <- cbind( ans[["param"]], ci ) + if( correlation ) ans[["cor.tf.param"]] <- cor.tf.param } else { warning( @@ -646,12 +614,12 @@ } } - ans$se.residuals <- if( !is.null( covmat$cov.ehat ) ){ + ans[["se.residuals"]] <- if( !is.null( covmat[["cov.ehat"]] ) ){ - if( is.matrix( covmat$cov.ehat ) ){ - sqrt( diag( covmat$cov.ehat ) ) + if( is.matrix( covmat[["cov.ehat"]] ) ){ + sqrt( diag( covmat[["cov.ehat"]] ) ) } else { - sqrt( covmat$cov.ehat ) + sqrt( covmat[["cov.ehat"]] ) } } else NULL @@ -682,48 +650,48 @@ ## 2012-02-07 AP change for anisotropic variograms ## 2012-12-18 AP invisible(x) ## 2013-04-23 AP new names for robustness weights + ## 2013-06-12 AP substituting [["x"]] for $x in all lists - cat("\nCall:") - cat( paste( deparse(x$call), sep = "\n", collapse = "\n"), "\n", sep = "" ) + cat( paste( deparse(x[["call"]]), sep = "\n", collapse = "\n"), "\n", sep = "" ) cat("\nTuning constant: ", x[["tuning.psi"]], "\n" ) - if( is.na( x$converged ) ){ + if( is.na( x[["converged"]] ) ){ cat( "\nEstimation with fixed variogram parameters\n" ) } else { - if(!(x$converged)) { + if(!(x[["converged"]])) { cat( "\nAlgorithm did not converge, diagnostic code: ", - x$convergence.code, "\n" + x[["convergence.code"]], "\n" ) } else { cat( - "\nConvergence in", x$iter[1], "function and", - x$iter[2], "Jacobian/gradient evaluations\n" + "\nConvergence in", x[["iter"]][1], "function and", + x[["iter"]][2], "Jacobian/gradient evaluations\n" ) } - attr( x$gradient, "eeq.emp" ) <- NULL - attr( x$gradient, "eeq.exp" ) <- NULL + attr( x[["gradient"]], "eeq.emp" ) <- NULL + attr( x[["gradient"]], "eeq.exp" ) <- NULL cat( "\nEstimating equations (gradient)\n") - print( x$gradient, digits = digits, ... ) + print( x[["gradient"]], digits = digits, ... ) - if( x$tuning.psi >= - georob.control()$tuning.psi.nr ) cat( + if( x[["tuning.psi"]] >= + georob.control()[["tuning.psi.nr"]] ) cat( "\nMaximized restricted log-likelihood:", - x$loglik, "\n" + x[["loglik"]], "\n" ) } - df <- x$df.residual + df <- x[["df.residual"]] - bhat <- x$bhat + bhat <- x[["bhat"]] cat( "\nPredicted latent variable (z):\n") if(df > 5){ nam <- c("Min", "1Q", "Median", "3Q", "Max") @@ -732,7 +700,7 @@ } else print( bhat, digits = digits, ...) - resid <- x$residuals + resid <- x[["residuals"]] cat( "\nResiduals (epsilon):\n") if(df > 5){ nam <- c("Min", "1Q", "Median", "3Q", "Max") @@ -741,8 +709,8 @@ } else print( resid, digits = digits, ...) - if( !is.null( x$se.residuals ) ){ - resid <- x$residuals / x$se.residuals + if( !is.null( x[["se.residuals"]] ) ){ + resid <- x[["residuals"]] / x[["se.residuals"]] cat( "\nStandardized residuals:\n") if(df > 5){ nam <- c("Min", "1Q", "Median", "3Q", "Max") @@ -752,21 +720,21 @@ else print( resid, digits = digits, ...) } - cat( "\nVariogram: ", x$variogram.model, "\n" ) - rownames( x$param ) <- ifelse( - x$fit.param, - rownames( x$param ), - paste( rownames( x$param ), "(fixed)", sep = "" ) + cat( "\nVariogram: ", x[["variogram.model"]], "\n" ) + rownames( x[["param"]] ) <- ifelse( + x[["fit.param"]], + rownames( x[["param"]] ), + paste( rownames( x[["param"]] ), "(fixed)", sep = "" ) ) - ## print( format( x$param, digits = digits ), print.gap = 2, quote = FALSE ) + ## print( format( x[["param"]], digits = digits ), print.gap = 2, quote = FALSE ) printCoefmat( - x$param, digits = digits, signif.stars = FALSE, ... + x[["param"]], digits = digits, signif.stars = FALSE, ... ) - if( !is.null( x$cor.tf.param ) ){ + if( !is.null( x[["cor.tf.param"]] ) ){ - correl <- x$cor.tf.param + correl <- x[["cor.tf.param"]] p <- NCOL(correl) if( p > 1 ){ cat("\nCorrelation of (transformed) variogram parameters:\n") @@ -780,15 +748,15 @@ cat( "\nFixed effects coefficients:\n" ) printCoefmat( - x$coefficients, digits = digits, signif.stars = signif.stars, ... + x[["coefficients"]], digits = digits, signif.stars = signif.stars, ... ) cat( "\nResidual standard error (sqrt(nugget)):", - format(signif(x$scale, digits)), "\n" + format(signif(x[["scale"]], digits)), "\n" ) - correl <- x$correlation + correl <- x[["correlation"]] if( !is.null(correl) ){ p <- NCOL(correl) if( p > 1 ){ @@ -801,7 +769,7 @@ } cat("\n") - summarizeRobWeights(x$rweights, digits = digits, ... ) + summarizeRobWeights(x[["rweights"]], digits = digits, ... ) invisible( x ) } @@ -812,9 +780,10 @@ function( object, ... ) { - ## 2012-11-04 AP handling compressed cov.betahat + ## 2012-11-04 AP handling compressed cov.betahat + ## 2013-06-12 AP substituting [["x"]] for $x in all lists - result <- expand( object$cov$cov.betahat ) + result <- expand( object[["cov"]][["cov.betahat"]] ) attr( result, "struc" ) <- NULL result @@ -830,6 +799,7 @@ { ## 2012-02-08 AP change for anisotropic variograms + ## 2013-06-12 AP substituting [["x"]] for $x in all lists ## refit model with fixed variogram parameters @@ -841,13 +811,13 @@ object <- update( object, - param = object$param, - aniso = object$aniso$aniso, + param = object[["param"]], + aniso = object[["aniso"]][["aniso"]], fit.param = c( variance = FALSE, snugget = FALSE, nugget = FALSE, scale = FALSE, a = FALSE, alpha = FALSE, beta = FALSE, delta = FALSE, gamma = FALSE, lambda = FALSE, n = FALSE, nu = FALSE - )[names( object$param )], + )[names( object[["param"]] )], fit.aniso = c( f1 = FALSE, f2 = FALSE, omega = FALSE, phi = FALSE, zeta = FALSE ), @@ -871,21 +841,22 @@ { ## 2012-12-22 method for extracting (restricted) loglikelihood + ## 2013-06-12 AP substituting [["x"]] for $x in all lists val <- if( REML ){ - val <- object$loglik + val <- object[["loglik"]] } else if( object[["tuning.psi"]] >= georob.control()[["tuning.psi.nr"]] ){ D <- deviance( object ) -0.5 * ( - D + attr( D, "log.det.covmat" ) + length( object$residuals ) * log( 2 * pi ) + D + attr( D, "log.det.covmat" ) + length( object[["residuals"]] ) * log( 2 * pi ) ) } else NA_real_ - attr(val, "nall") <- length(object$residuals) - attr(val, "nobs") <- object$df.residual - attr(val, "df") <- length(object$coefficients) + - sum( object$initial.objects$fit.param ) + - sum( object$initial.objects$fit.aniso) + attr(val, "nall") <- length(object[["residuals"]]) + attr(val, "nobs") <- object[["df.residual"]] + attr(val, "df") <- length(object[["coefficients"]]) + + sum( object[["initial.objects"]][["fit.param"]] ) + + sum( object[["initial.objects"]][["fit.aniso"]]) class(val) <- "logLik" val @@ -904,19 +875,19 @@ ## 2012-12-22 A. Papritz ## 2013-05-23 AP correct handling of missing observations ## 2013-05-31 AP revised expansion of covariance matrices + ## 2013-06-12 AP substituting [["x"]] for $x in all lists ## redefine na.action component of object - if( identical( class( object$na.action ), "exclude" ) ){ - class( object$na.action ) <- "omit" + if( identical( class( object[["na.action"]] ), "exclude" ) ){ + class( object[["na.action"]] ) <- "omit" } if( object[["tuning.psi"]] < georob.control()[["tuning.psi.nr"]] ){ result <- NA_real_ } else { Valpha.objects <- expand( object[["Valpha.objects"]] ) - G <- sum( object[["param"]][c("variance", "snugget")] ) * - t(Valpha.objects[["Valpha.ucf"]]) %*% Valpha.objects[["Valpha.ucf"]] + G <- sum( object[["param"]][c("variance", "snugget")] ) * Valpha.objects[["Valpha"]] diag( G ) <- diag( G ) + object[["param"]]["nugget"] G <- G[object[["Tmat"]], object[["Tmat"]]] Modified: pkg/R/georob.cv.R =================================================================== --- pkg/R/georob.cv.R 2013-06-11 19:44:56 UTC (rev 8) +++ pkg/R/georob.cv.R 2013-06-12 13:24:39 UTC (rev 9) @@ -10,8 +10,8 @@ formula = NULL, subset = NULL, nset = 10, seed = NULL, sets = NULL, duplicates.in.same.set = TRUE, - re.estimate = TRUE, param = object$param, - fit.param = object$initial.objects$fit.param, + re.estimate = TRUE, param = object[["param"]], + fit.param = object[["initial.objects"]][["fit.param"]], return.fit = FALSE, reduced.output = TRUE, lgn = FALSE, ncores = min( nset, detectCores() ), @@ -20,6 +20,7 @@ ) { +# \$([[:alnum:]\.]+)([\^\r,$\[\] \(\)]) [["\1"]]\2 ## Function computes nset-fold cross-validation predictions from a ## fitted georob object @@ -72,6 +73,7 @@ ## 2013-04-24 AP changes for parallelization on windows os ## 2013-05-23 AP correct handling of missing observations ## 2013-05-24 AP separate initial variogram parameters for each cross-validation set + ## 2013-06-12 AP substituting [["x"]] for $x in all lists ## auxiliary function that fits the model and computes the predictions of ## a cross-validation set @@ -96,7 +98,7 @@ ## change environment of terms and formula so that subset selection works for update environment( formula ) <- environment() - environment( object$terms ) <- environment() + environment( object[["terms"]] ) <- environment() ## read-off initial values of variogram parameters @@ -148,8 +150,8 @@ if( reduced.output ){ - if( !is.null( t.georob$cov$cov.betahat ) ){ - t.se.coef <- sqrt( diag( expand( t.georob$cov$cov.betahat ) ) ) + if( !is.null( t.georob[["cov"]][["cov.betahat"]] ) ){ + t.se.coef <- sqrt( diag( expand( t.georob[["cov"]][["cov.betahat"]] ) ) ) } else { t.se.coef <- NULL } @@ -160,9 +162,9 @@ "coefficients" )] - t.georob$aniso <- t.georob$aniso$aniso + t.georob[["aniso"]] <- t.georob[["aniso"]][["aniso"]] - if( !is.null( t.se.coef ) ) t.georob$se.coefficients <- t.se.coef + if( !is.null( t.se.coef ) ) t.georob[["se.coefficients"]] <- t.se.coef } @@ -172,15 +174,15 @@ ## redefine na.action component of object - if( identical( class( object$na.action ), "exclude" ) ){ - class( object$na.action ) <- "omit" + if( identical( class( object[["na.action"]] ), "exclude" ) ){ + class( object[["na.action"]] ) <- "omit" } ## update terms of object is formula is provided if( !is.null( formula ) ){ formula <- update( formula( object ), formula ) - object$terms <- terms( formula ) + object[["terms"]] <- terms( formula ) } else { formula <- formula( object ) } @@ -189,20 +191,20 @@ ## as data argument to georob must exist in GlobalEnv) data <- cbind( - get_all_vars( formula( object ), eval( getCall(object)$data ) ), - get_all_vars( object$locations.objects$locations, eval( getCall(object)$data ) ) + get_all_vars( formula( object ), eval( getCall(object)[["data"]] ) ), + get_all_vars( object[["locations.objects"]][["locations"]], eval( getCall(object)[["data"]] ) ) ) ## select subset if appropriate if( !is.null( subset ) ){ data <- data[subset, ] - object$Tmat <- object$Tmat[subset] - } else if( !is.null( getCall(object)$subset ) ){ - data <- data[eval( getCall(object)$subset ), ] + object[["Tmat"]] <- object[["Tmat"]][subset] + } else if( !is.null( getCall(object)[["subset"]] ) ){ + data <- data[eval( getCall(object)[["subset"]] ), ] } -# if( !is.null( getCall(object)$subset ) ) +# if( !is.null( getCall(object)[["subset"]] ) ) ## define cross-validation sets @@ -226,8 +228,8 @@ } if( duplicates.in.same.set ){ - dups <- duplicated( object$Tmat ) - idups <- match( object$Tmat[dups], object$Tmat[!dups] ) + dups <- duplicated( object[["Tmat"]] ) + idups <- match( object[["Tmat"]][dups], object[["Tmat"]][!dups] ) sets[dups] <- (sets[!dups])[idups] } @@ -249,7 +251,7 @@ ## loop over all cross-validation sets - if( .Platform$OS.type == "windows" ){ + if( .Platform[["OS.type"]] == "windows" ){ ## create a SNOW cluster on windows OS @@ -302,25 +304,25 @@ ## create single data frame with cross-validation results - result <- t.result[[1]]$pred - result$subset <- rep( 1, nrow( t.result[[1]]$pred ) ) + result <- t.result[[1]][["pred"]] + result[["subset"]] <- rep( 1, nrow( t.result[[1]][["pred"]] ) ) for( t.i in 2:length( t.result ) ) { result <- rbind( result, data.frame( - t.result[[t.i]]$pred, - subset = rep( t.i, nrow( t.result[[t.i]]$pred ) ) + t.result[[t.i]][["pred"]], + subset = rep( t.i, nrow( t.result[[t.i]][["pred"]] ) ) ) ) } - t.ix <- sort( result$i, index.return = T )$ix + t.ix <- sort( result[["i"]], index.return = T )[["ix"]] result <- result[t.ix, ] - result$data <- model.response( + result[["data"]] <- model.response( model.frame( formula( object), data, na.action = na.pass ) ) - if( lgn ) result$lgn.data <- exp( result$data ) + if( lgn ) result[["lgn.data"]] <- exp( result[["data"]] ) result <- result[, -match("i", colnames( result) )] @@ -335,11 +337,11 @@ result[, c(isubset, idata, ipred, ise)] ) - t.fit <- lapply( t.result, function( x ) return( x$fit ) ) + t.fit <- lapply( t.result, function( x ) return( x[["fit"]] ) ) - if( re.estimate && !all( sapply( t.fit, function(x) x$converged ) ) ) warning( + if( re.estimate && !all( sapply( t.fit, function(x) x[["converged"]] ) ) ) warning( "lack of covergence for ", - sum( !sapply( t.fit, function(x) x$converged ) ), " cross-validation sets" + sum( !sapply( t.fit, function(x) x[["converged"]] ) ), " cross-validation sets" ) result <- list( @@ -369,8 +371,9 @@ ## plot method for class "cv.georob" ## 2011-12-21 A. Papritz + ## 2013-06-12 AP substituting [["x"]] for $x in all lists - x <- x$pred [TRUNCATED] To get the complete diff run: svnlook diff /svnroot/georob -r 9