Você está usando o model.matrix() com o 0? Se você tem um fator com K níveis e declara apenas ele, a matriz correspondente terá K colunas. Sem usar o 0 na fórmula, a primeira coluna refere-se ao intercepto, as demais representam contrastes para com esse nível. No entanto, com mais de um fator categórico, o intercepto vai representar simultaneamente o primeiro nível dos dos fatores declarados. A melhor coisa a fazer é brincar com a função para entender o que ela faz. Consulte a documentação da função para mais detalhes e opções.

da <- expand.grid(A=gl(2,1), B=gl(3,1), C=gl(4,1))
str(da)

model.matrix(~A, da)
model.matrix(~0+A, da)
model.matrix(~B, da)
model.matrix(~C, da)
model.matrix(~A+B, da)
model.matrix(~A*B, da)
model.matrix(~A/B, da)
model.matrix(~A:B, da)
model.matrix(~0+A:B, da)
model.matrix(~A+B+C, da)


À disposição.
Walmes.