From agalecki at umich.edu  Fri Jun 29 01:18:25 2007
From: agalecki at umich.edu (agalecki at umich.edu)
Date: Fri, 29 Jun 2007 01:18:25 +0200 (CEST)
Subject: [Rd] Bug in varIdent (nlme package) (PR#9765)
Message-ID: <20070628231825.AE5946599A@slim.kubism.ku.dk>

This is a multi-part message in MIME format.
--------------000706080709050507050106
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hello,

1. The following code (below) and output  <varIdentOutput.txt> 
illustrate that
argument fixed= in varIdent function is ignored during the execution.

2. File named <RevisedvarIdent.txt> shows how to fix the problem.
The  changed line in this file  is labeled  using  comment " # !!! This 
line changed".

Thank you

Andrzej Galecki


###  Code used for illustration starts here  ####
library(nlme)
sessionInfo()

Orth <- subset(Orthodont, Subject %in% c("M01","F01"))
# Argument fixed in varIdent is ignored
vf1.incorrect  <- varIdent(form=~1|Sex,fixed=c(Female=0.5))
vf1I <- Initialize(vf1.incorrect, data=Orth)
varWeights(vf1I)

# Tentative varIdent function (revised)
source("C:/temp/RevisedvarIdent.txt")

vf2.correct  <- varIdent(form=~1|Sex,fixed=c(Female=0.5))
vf2I <- Initialize(vf2.correct, data=Orth)
coef(vf2I)
varWeights(vf2I)
# rm(varIdent)  # Remove tentative varIdent function

###  Code ends here  ####


--------------000706080709050507050106
Content-Type: text/plain;
 name="RevisedvarIdent.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="RevisedvarIdent.txt"

varIdent <-
function (value = numeric(0), form = ~1, fixed = NULL) 
{
    if (is.null(getGroupsFormula(form))) {
        value <- numeric(0)
        attr(value, "fixed") <- NULL
    }
    else {
        if ((lv <- length(value)) > 0) {
            if (is.null(grpNames <- names(value)) && (lv > 1)) {
                stop("Initial values must have group names in varIdent")
            }
            value <- unlist(value)
            if (any(value <= 0)) {
                stop("Initial values for \"varIdent\" must be > 0.")
            }
            value <- log(value)
        }
        else grpNames <- NULL
        attr(value, "groupNames") <- grpNames
        if (!is.null(fixed)) {       # !!! This line changed
            fix <- attr(value, "fixed") <- log(unlist(fixed))
            if (is.null(fixNames <- names(fix))) {
                stop("Fixed parameters must have names in varIdent")
            }
            if (!is.null(attr(value, "groupNames"))) {
                attr(value, "groupNames") <- c(attr(value, "groupNames"), 
                  fixNames)
            }
        }
    }
    attr(value, "formula") <- asOneSidedFormula(form)
    class(value) <- c("varIdent", "varFunc")
    value
}


--------------000706080709050507050106
Content-Type: text/plain;
 name="varIdentOutput.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="varIdentOutput.txt"

> library(nlme)
> sessionInfo()
R version 2.5.0 (2007-04-23) 
i386-pc-mingw32 

locale:
LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252

attached base packages:
[1] "stats"     "graphics"  "grDevices" "utils"     "datasets"  "methods"  
[7] "base"     

other attached packages:
    nlme 
"3.1-80" 
> 


> # Argument fixed in varIdent is ignored
> Orth <- subset(Orthodont, Subject %in% c("M01","F01"))
> # Argument fixed in varIdent is ignored
> vf1.incorrect  <- varIdent(form=~1|Sex,fixed=c(Female=0.5))
> vf1I <- Initialize(vf1.incorrect, data=Orth)
> varWeights(vf1I)
  Male   Male   Male   Male Female Female Female Female 
     1      1      1      1      1      1      1      1 
> 


> # Tentative varIdent function (revised)
> source("C:/temp/RevisedvarIdent.txt")
> 
> vf2.correct  <- varIdent(form=~1|Sex,fixed=c(Female=0.5))
> vf2I <- Initialize(vf2.correct, data=Orth)
> varWeights(vf2I)
  Male   Male   Male   Male Female Female Female Female 
     1      1      1      1      2      2      2      2 
> rm(varIdent)  # Remove tentative varIdent function











--------------000706080709050507050106--



[Rd] Bug in varIdent (nlme package) (PR#9765)
agalecki at umich.edu