[R] update don't find an object

Ronaldo Reis Junior chrysopa at gmail.com
Thu Feb 21 19:08:22 CET 2008


Em Qui 21 Fev 2008, David Winsemius escreveu:
> Ronaldo Reis Junior <chrysopa em gmail.com> wrote in
>
> news:200802210736.15414.chrysopa em gmail.com:
> > I try this update:
> >
> > mmaa <- update(mma,biomass~qvartemp)
>
> That does not look like it has proper arguments to update.formula. As
> the update() help page suggests:
>
> ?update.formula
>
> You should have included the call that created "mma". Assuming that
> "mma" is a model object, and the dependent variable in that model was
> "biomass", then perhaps:
>
>  mmaa <- update(mma, ~ . + qvartemp) # ... is what you wanted?
>
> On the other hand, I do not see "biomass" in your list of objects below,
> so who knows? If these guesses are wrong, then re-read the posting guide
> and provide more detail.
>
> > but I have this message:
> >
> > Error in eval(expr, envir, enclos) : object "qvartemp" not found
> >
> > but this object exist:
> >
> > [1] "cont"      "i"         "levelsord" "mma"       "qvar"
> > "qvarmma"  [7] "qvartemp"  "test"      "yvar"
> >
> > but if I use the glm directly it work:
> >
> > mmaa <- glm(biomass~qvartemp)
>
> I guess "biomass" must exist <somewhere>. More guessing: Is it in one of
> those other objects that you attach()ed before the call to glm()?
>
> <snipped  summary output>
>
> > Anybody have any idea about this problem in update?
>
> I doubt that it is a problem in update.


David,

I don't understand this problem, in console it work, but in script id don't 
work.

Look a example:

### The data set
> clippingdata <- structure(list(biomass = c(551L, 457L, 450L, 731L, 499L, 
632L, 
595L, 580L, 508L, 583L, 633L, 517L, 639L, 615L, 511L, 573L, 648L, 
677L, 417L, 449L, 517L, 438L, 415L, 555L, 563L, 631L, 522L, 613L, 
656L, 679L), clipping = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 3L, 
3L, 3L, 3L, 3L, 3L, 5L, 5L, 5L, 5L, 5L, 5L, 1L, 1L, 1L, 1L, 1L, 
1L, 4L, 4L, 4L, 4L, 4L, 4L), .Label = c("control", "n25", "n50", 
"r10", "r5"), class = "factor")), .Names = c("biomass", "clipping"
), class = "data.frame", row.names = c(NA, -30L))

> attach(clippingdata)

### copying the variable
> clipping2 <- clipping

### recode the variable to n-1 levels

> levels(clipping2)[1] <- "controln25"
> levels(clipping2)[2] <- "controln25"

### Show the levels
> levels(clipping2)
[1] "controln25" "n50"        "r10"        "r5"        

### Make a model
> m <- glm(biomass~clipping)

### View the model
> m

Call:  glm(formula = biomass ~ clipping) 

Coefficients:
(Intercept)  clippingn25  clippingn50  clippingr10   clippingr5  
     465.17        88.17       104.17       145.50       145.33  

Degrees of Freedom: 29 Total (i.e. Null);  25 Residual
Null Deviance:	    209400 
Residual Deviance: 124000 	AIC: 346.9 


### making a new formula, I need to make this to generalise the program.
> new.form <- 
as.formula(gsub("clipping","clipping2",as.expression(m$formula)))

> new.form
biomass ~ clipping2

### making a new model using this new form
> mma <- update(m,new.form)

> mma

Call:  glm(formula = biomass ~ clipping2) 

Coefficients:
 (Intercept)  clipping2n50  clipping2r10   clipping2r5  
      509.25         60.08        101.42        101.25  

Degrees of Freedom: 29 Total (i.e. Null);  26 Residual
Null Deviance:	    209400 
Residual Deviance: 147300 	AIC: 350.1 

### Comparing model
> anova(m,mma,test="F")
Analysis of Deviance Table

Model 1: biomass ~ clipping
Model 2: biomass ~ clipping2
  Resid. Df Resid. Dev Df Deviance      F  Pr(>F)  
1        25     124020                             
2        26     147340 -1   -23320 4.7009 0.03987 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

This is all idea of script, it work in console, but in script only the 
directly use of glm work, the update don't work. But is the same think. I 
don't find the error.

using my script to make all automatic
> contstep(yvar="biomass",qvar="clipping",mma=m,test="F")

This the result is start:

------------------
Níveis atuais
control n25 n50 r5 r10

### this is the result of print(qvartemp)

Resultado do contraste a 5% de significância
 [1] controln25 controln25 controln25 controln25 controln25 controln25
 [7] n50        n50        n50        n50        n50        n50       
[13] r5         r5         r5         r5         r5         r5        
[19] controln25 controln25 controln25 controln25 controln25 controln25
[25] r10        r10        r10        r10        r10        r10       
Levels: controln25 n50 r5 r10

### this is the result of print (new.form)

biomass ~ qvartemp

### This is the error resulted from line number 49 from my script 
### mmaa <- update(mma,new.form)

Error in eval(expr, envir, enclos) : object "qvartemp" not found.

My script is in attach.

The very strange is that in console the idea work but in script don't work. If 
is rebuild the model using glm from line 52, it work:

This is the result using glm directly and not update.

> contstep(yvar="biomass",qvar="clipping",mma=m,test="F")
------------------
Níveis atuais
control n25 n50 r5 r10

Resultado do contraste a 5% de significância
biomass ~ qvartemp
control e n25 são diferentes
------------------
Níveis atuais
control n25 n50 r5 r10

Resultado do contraste a 5% de significância
biomass ~ qvartemp
n25 e n50 são iguais
------------------
Níveis atuais
control n25n50 r5 r10

Resultado do contraste a 5% de significância
biomass ~ qvartemp
n25n50 e r5 são iguais
------------------
Níveis atuais
control n25n50r5 r10

Resultado do contraste a 5% de significância
biomass ~ qvartemp
n25n50r5 e r10 são iguais

----- Resultado final dos níveis agrupados --------
control n25n50r5r10

The problem in the use  of glm and not update is that other parameters from 
original model need to be passed to contstep function. Using update, I change 
only the model formula and others parameter remain the same 
(family,weights,maxit,etc)

Thanks for all comments
Ronaldo
-- 
You may call me by my name, Wirth, or by my value, Worth.
		-- Nicklaus Wirth
--
> Prof. Ronaldo Reis Júnior
|  .''`. UNIMONTES/Depto. Biologia Geral/Lab. de Biologia Computacional
| : :'  : Campus Universitário Prof. Darcy Ribeiro, Vila Mauricéia
| `. `'` CP: 126, CEP: 39401-089, Montes Claros - MG - Brasil
|   `- Fone: (38) 3229-8187 | ronaldo.reis em unimontes.br | chrysopa em gmail.com
| http://www.ppgcb.unimontes.br/ | ICQ#: 5692561 | LinuxUser#: 205366


More information about the R-help mailing list