JJ
2005-Feb-23 06:05 UTC
[R] How to conctruct an inner grouping for nlme random statement?
Hello. Im hoping someone can help with a grouping question related to the "random=" statement within the nlme function. How do you specify that some grouping levels are inner to others? I tried several things, given below. Lets say I have a data frame with five variables, resp, cov1, ran1, ran2, group1, and group 2. The formula is resp~cov1 + ran1 + ran2, where the ran are random variables. The data is of length 80, and there are 4 unique factors in group1 and 20 unique factors in group2. These are factors related to ran1 and ran2, respectively. The difficult part is that I want to estimate only 4 random variables for ran1|group1 and the full 20 for ran2|group2. I have tried many ways, and I cannot find a way to do this. Is there a way? Can someone suggest a code snippet? First I tried making the data frame a groupedData object, so that group2 is inner to group1, as it should be. Then I used the statement: random as.formula(ran1+ran2~1). But this produced 20 estimates for both ran1 and ran2. I have also tried it without the data frame as a groupedData object, using the following: random = list(group1= c(ran1~1, group2=ran2~1)). But this gave only 4 estimates for ran2. I also tried: random = list(c(group1= ran1~1, group2=ran2~1)), but this just gave a parse error message. Any suggestions would be greatly appreciated. Is it even possible to do what I want to do? John
Douglas Bates
2005-Feb-23 18:28 UTC
[R] How to conctruct an inner grouping for nlme random statement?
JJ wrote:> Hello. Im hoping someone can help with a grouping > question related to the "random=" statement within the > nlme function. How do you specify that some grouping > levels are inner to others? I tried several things, > given below. > > Lets say I have a data frame with five variables, > resp, cov1, ran1, ran2, group1, and group 2. The > formula is resp~cov1 + ran1 + ran2, where the ran are > random variables. The data is of length 80, and there > are 4 unique factors in group1 and 20 unique factors > in group2. These are factors related to ran1 and > ran2, respectively. > > The difficult part is that I want to estimate only 4 > random variables for ran1|group1 and the full 20 for > ran2|group2. I have tried many ways, and I cannot > find a way to do this. Is there a way? Can someone > suggest a code snippet? > > First I tried making the data frame a groupedData > object, so that group2 is inner to group1, as it > should be. Then I used the statement: random > as.formula(ran1+ran2~1). But this produced 20 > estimates for both ran1 and ran2. > > I have also tried it without the data frame as a > groupedData object, using the following: > random = list(group1= c(ran1~1, group2=ran2~1)). But > this gave only 4 estimates for ran2. I also tried: > random = list(c(group1= ran1~1, group2=ran2~1)), but > this just gave a parse error message. > > Any suggestions would be greatly appreciated. Is it > even possible to do what I want to do? JohnI think we will need a bit more information before we are able to help. I'm not sure what you mean by ran1 and ran2 being random variables and group1 and group2 being factors related to ran1 and ran2. The lmer function in the lme4 package allows for specification of a mixed-effects model using grouping factors and model matrices. The model matrix determines the form of the random effects vector corresponding to each of the groups. The grouping factor determines the groups. In this specification I'm not sure what your ran1 and ran2 variables would be. It sounds as if you want a model that would be specified as fm1 <- lmer(resp ~ cov1 + (1|group1) + (1|group2)) but I'm not sure. Feel free to correspond directly with me if you wish.