[R] Adding regression lines to each factor on a plot when using ANCOVA

Peter Ehlers ehlers at ucalgary.ca
Fri Apr 2 22:59:51 CEST 2010


On 2010-04-02 11:07, Michael Friendly wrote:
> This is a nice example; thanks for providing it in this form.  I tried
> to trim it down to show fewer groups, but ran into the following errors
> that I can't understand:
>
> ## keep species 1:6
>  > dataset <- subset(dataset, species < 7)
> Warning message:
> In Ops.factor(species, 7) : < not meaningful for factors

You could use: as.numeric(as.character(species)) < 7
(I usually keep both a numeric and a factor version of the
variable when I foresee doing something like this. Then
you can just use the numeric version with '<'.)

>
> ## OK, just subset the rows of dataset to keep species 1:6
>
>  > dataset <- dataset[1:20,]
>  > ancova(logBeak ~ logMass * species, data=dataset)
> Error in `contrasts<-`(`*tmp*`, value = "contr.treatment") :
> contrasts can be applied only to factors with 2 or more levels

I don't get this error (in R 2.11.0 devel), but the lattice
display doesn't work. I get packet errors which go away after
I make sure that the new 'species' has only 6 levels:

  dataset$species <- factor(dataset$species)

I suspect that you may have to do the same.

  -Peter

>  > ancova(logBeak ~ logMass + species, data=dataset)
> Error in `contrasts<-`(`*tmp*`, value = "contr.treatment") :
> contrasts can be applied only to factors with 2 or more levels
>
> -Michael
>
>
> RICHARD M. HEIBERGER wrote:
>> ## Steve,
>>
>> ## please use the ancova function in the HH package.
>>
>> install.packages("HH")
>> library(HH)
>>
>>
>> ## windows.options(record=TRUE)
>> windows.options(record=TRUE)
>> # hypothetical data
>> beak.lgth <-
>> c(2.3,4.2,2.7,3.4,4.2,4.8,1.9,2.2,1.7,2.5,15,16.5,14.7,9.6,8.5,9.1,
>> 9.4,17.7,15.6,14,6.8,8.5,9.4,10.5,10.9,11.2,11.5,19,17.2,18.9,
>> 19.5,19.9,12.6,12.1,12.9,14.1,12.5,15,14.8,4.3,5.7,2.4,3.5,2.9)
>> mass <-
>> c(45.9,47.1,47.6,17.2,17.9,17.7,44.9,44.8,45.3,44.9,39,39.7,41.2,
>> 84.8,79.2,78.3,82.8,102.8,107.2,104.1,51.7,45.5,50.6,27.5,26.6,
>> 27.5,26.9,25.4,23.7,21.7,22.2,23.8,46.9,51.5,49.4,33.4,33.1,33.2,
>> 34.7,39.3,41.7,40.5,42.7,41.8)
>> ## Make species into a factor
>> species <-
>> factor(c(1,1,1,2,2,2,3,3,3,3,4,4,4,5,5,5,5,6,6,6,7,7,7,
>> 8,8,8,8,9,9,9,9,9,10,10,10,11,11,11,11,12,12,12,12,12))
>> ## then construct a data.frame with the three variables and the log
>> transforms
>> dataset <- data.frame(species, beak.lgth, mass,
>> logBeak=log10(beak.lgth),
>> logMass=log10(mass))
>> ## default is 7 colors, we need 12
>> trellis.par.set("superpose.line",
>> Rows(trellis.par.get("superpose.line"), c(1:6, 1:6)))
>> trellis.par.set("superpose.symbol",
>> Rows(trellis.par.get("superpose.symbol"), c(1:6, 1:6)))
>>
>> ancova(logBeak ~ logMass * species, data=dataset)
>> ancova(logBeak ~ logMass + species, data=dataset)
>> ancova(logBeak ~ logMass, groups=species, data=dataset)
>> ancova(logBeak ~ species, x=logMass, data=dataset)
>> bwplot(logBeak ~ species, data=dataset)
>>
>> ## Rich
>>
>> [[alternative HTML version deleted]]
>>
>
>

-- 
Peter Ehlers
University of Calgary



More information about the R-help mailing list