a_lampei
2013-Nov-07 11:15 UTC
[R] problem with interaction in lmer even after creating an "interaction variable"
Dear all, I have a problem with interactions in lmer. I have 2 factors (garden and gebiet) which interact, plus one other variable (home), dataframe arr. When I put: / lmer (biomass ~ home + garden:gebiet + ( 1|Block), data = arr)/ it writes: /Error in lme4::lFormula(formula = biomass ~ home + garden:gebiet + (1 | : rank of X = 28 < ncol(X) = 30/ In the lmer help I found out that if not all combination of the interaction are realized, lmer has problems and one should do new variable using "interaction", which I did: / arr$agg <- interaction (arr$gebiet, arr$garden, drop = TRUE)/ when I fit the interaction term now: / lmer (biomass ~ home + agg+ ( 1|Block), data = arr)/ The error does not change: / Error in lme4::lFormula(formula = biomass ~ home + agg + (1 | Block), : rank of X = 28 < ncol(X) = 29/ No NAs are in the given variables in the dataset. Interestingly it works when I put only given interaction like /lmer (biomass ~ agg + ( 1|Block), data = arr)/ Even following models work: /lmer (biomass ~ gebiet*garden + ( 1|Block), data = arr) lmer (biomass ~ garden + garden:gebiet +( 1|Block), data = arr)/ But if I add the interaction term in th enew formate of the new fariable, it reports again the same error. /lmer (biomass ~ garden + agg +( 1|Block), data = arr)/ If I put any other variable from the very same dataframe (not only variable "home"), the error is reported again. I do not understand it, the new variable is just another factor now, or? And it is in the same dataframe, it has the same length. Does anyone have any idea? Thanks a lot, Anna -- View this message in context: http://r.789695.n4.nabble.com/problem-with-interaction-in-lmer-even-after-creating-an-interaction-variable-tp4679951.html Sent from the R help mailing list archive at Nabble.com.
Ben Bolker
2013-Nov-07 14:03 UTC
[R] problem with interaction in lmer even after creating an "interaction variable"
a_lampei <anna.lampei-bucharova <at> uni-tuebingen.de> writes:> > Dear all, > I have a problem with interactions in lmer. I have 2 factors (garden and > gebiet) which interact, plus one other variable (home), > dataframe arr. When > I put: > / > lmer (biomass ~ home + garden:gebiet + ( 1|Block), data = arr)/ > > it writes: > /Error in lme4::lFormula(formula = biomass ~ home + garden:gebiet > + (1 | : > rank of X = 28 < ncol(X) = 30/ > > In the lmer help I found out that if not all combination of > the interaction > are realized, lmer has problems and one should do new variable using > "interaction", which I did: > / > arr$agg <- interaction (arr$gebiet, arr$garden, drop = TRUE)/ > > when I fit the interaction term now: > / > lmer (biomass ~ home + agg+ ( 1|Block), data = arr)/ > > The error does not change: > / > Error in lme4::lFormula(formula = biomass ~ home + agg + (1 | Block), : > rank of X = 28 < ncol(X) = 29/ > > No NAs are in the given variables in the dataset. > > Interestingly it works when I put only given interaction like > > /lmer (biomass ~ agg + ( 1|Block), data = arr)/ > > Even following models work: > /lmer (biomass ~ gebiet*garden + ( 1|Block), data = arr) > lmer (biomass ~ garden + garden:gebiet +( 1|Block), data = arr)/ > > But if I add the interaction term in th enew formate of > the new fariable, it > reports again the same error. > > /lmer (biomass ~ garden + agg +( 1|Block), data = arr)/ > > If I put any other variable from the very same dataframe > (not only variable > "home"), the error is reported again. > > I do not understand it, the new variable is just another > factor now, or? And > it is in the same dataframe, it has the same length. > > Does anyone have any idea? > > Thanks a lot, Anna >This probably belongs on r-sig-mixed-models. Presumably 'home' is still correlated with one of the columns of 'garden:gebiet'. Here's an example of how you can use svd() to find out which of your columns are collinear: set.seed(101) d <- data.frame(x=runif(100),y=1:100,z=2:101) m <- model.matrix(~x+y+z,data=d) s <- svd(m) zapsmall(s$d) ## [1] 828.8452 6.6989 2.6735 0.0000 ## this tells us there is one collinear component zapsmall(s$v) ## [,1] [,2] [,3] [,4] ## [1,] -0.0105005 -0.7187260 0.3872847 0.5773503 ## [2,] -0.0054954 -0.4742947 -0.8803490 0.0000000 ## [3,] -0.7017874 0.3692117 -0.1945349 0.5773503 ## [4,] -0.7122879 -0.3495142 0.1927498 -0.5773503 ## this tells us that the first (intercept), third (y), ## and fourth (z) column of the model matrix are ## involved in the collinear term, i.e. ## 1+y-z is zero