-
Notifications
You must be signed in to change notification settings - Fork 34
Description
In a A x B design, how do I remove one main effect and keep the other and the interaction term (e.g., remove Group main effect in Group (2) x Time (2) when I do not expect a group difference at pretest)?
I can add terms to a formula:
f1 = @formula y ~ 1 + Time + (1 | Subj);
f1 = f1.lhs ~ (f1.rhs + Term(:Time & :Group) )
m1 = fit(MixedModel, f1, dat; contrasts)
But how can I substract a term? For example, could this be implemented, too?
f2 = @formula y ~ 1 + Time + Group + Time & Group + (1 | Subj);
f2 = f2.lhs ~ (f2.rhs - Term(:Group) )
ERROR: MethodError: no method matching -(::Tuple{ConstantTerm{Int64}, Term, InteractionTerm{Tuple{…}}, FunctionTerm{typeof(|), Vector{…}}}, ::Term)
The function -
exists, but no method is defined for this combination of argument types.
One workaround is to extract terms from a fitted model matrix and then assemble the needed ones to a new formula:
f3 = @formula y ~ 1 + Group*Time + (1 | Subj);
m3 = fit(MixedModel, f3, dat; contrasts)
mm3 = modelmatrix(m3)
dat.T = mm3[:, 3];
dat.TxG = mm3[:, 4];
f4 = @formula y ~ 1 + T + TxG + (1 | Subj);
m4 = fit(MixedModel, f4, dat; contrasts)
However, this becomes very cumbersome with many terms nested under the first one. Or is there a simple loop to assemble a formula selectively from the model matrix? Adding a subtraction method would be very helpful. Thank you.