[R] a question about glht function
Achim Zeileis
Achim.Zeileis at uibk.ac.at
Tue Jul 26 11:31:52 CEST 2011
On Tue, 26 Jul 2011, Peter Ehlers wrote:
> On 2011-07-26 01:13, Achim Zeileis wrote:
>>
>>
>> On Tue, 26 Jul 2011, Lao Meng wrote:
>>
>>> Hi all:
>>> There's a question about glht function.
>>>
>>> My data:data_ori,which inclue CD4, GROUP,time.
>>>
>>>
>>> f_GROUP<-factor(data_ori$GROUP)
>>>
>>> f_GROUP is a factor of 3 levels(0,1,2,3)
>>>
>>>
>>> result<- lme(sqrt(CD4) ~ f_GROUP*time ,random = ~time|ID,data=data_ori)
>>>
>>> glht(result, linfct = mcp(f_GROUP="Tukey") )
>>> Error in `[.data.frame`(mf, nhypo[checknm]) : undefined columns selected
>>>
>>>
>>> I can't find out the reason for Error.
>>
>> We can't either based on the information you provide. If I set up random
>> data based on your specification, then everything works fine for me in R
>> 2.13.1 with nlme 3.1-102 and multcomp 1.2-7.
>>
>> ## random data
>> set.seed(0)
>> data_ori<- data.frame(
>> CD4 = rnorm(100)^2,
>> time = runif(100),
>> f_GROUP = factor(sample(0:3, 100, replace = TRUE)),
>> ID = factor(rep(1:10, each = 10))
>> )
>>
>> ## model fitting
>> library("nlme")
>> result<- lme(sqrt(CD4) ~ f_GROUP * time, random = ~ time | ID,
>> data = data_ori)
>>
>> ## multiple comparisons
>> library("multcomp")
>> glht(result, linfct = mcp(f_GROUP = "Tukey"))
>>
>> Everything works ok. glht() just issues an appropriate warning that Tukey
>> contrasts of f_GROUP might not be what you want in the presence of
>> interactions.
>
> Yes, but try this:
>
> set.seed(0)
> data_ori <- data.frame(
> CD4 = rnorm(100)^2,
> time = runif(100),
> GROUP = sample(0:3, 100, replace = TRUE),
> ID = factor(rep(1:10, each = 10))
> )
>
> f_GROUP<-factor(data_ori$GROUP)
> result <- lme(sqrt(CD4) ~ f_GROUP * time, random = ~ time | ID,
> data = data_ori)
> glht(result, linfct = mcp(f_GROUP = "Tukey"))
> #Error in `[.data.frame`(mf, nhypo[checknm]) : undefined columns
> # selected
>
> (Note that I changed data_ori$f_GROUP to data_ori$GROUP.)
Thanks for pointing this out. So the workaround seems to be to simply put
f_GROUP into data_ori.
The source of the problem is that because "nlme" does not provide a
model.frame() method for "lme" objects, "multcomp" brings its own
unexported multcomp:::model.frame.lme() which simply extracts $data.
However, this is not always the model.frame - as in this example. It would
probably be safer to modify the $call and reevaluate the model frame as
lme() itself does.
> Peter Ehlers
>
>>
>>>
>>> Any help from you are welcome.
>>>
>>>
>>> Many thanks!
>>>
>>> [[alternative HTML version deleted]]
>>>
>>> ______________________________________________
>>> R-help at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>>> http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>>
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
>
More information about the R-help
mailing list