Мне было интересно узнать о некоторых вещах в dummy.coef()
, которые преобразуют оценочные параметры (контрасты) в моделях ANOVA в исходные.Он работает только для одномерных моделей, но изменения, необходимые для его работы и для многомерных моделей, кажутся незначительными.В dummy.coef.lm()
:
- строка 52
coef <- object$coefficients
должна быть coef <- as.matrix(object$coefficients)
для размещения одномерных и многомерных моделей (coef(object)
- вектор в 1-м случае и матрица во 2-м) - строка 60
ans <- drop(mm[rn == tl[j], keep, drop = FALSE] %*% coef[keep])
должна быть ans <- drop(mm[rn == tl[j], keep, drop = FALSE] %*% coef[keep, ])
, чтобы все столбцы были в coef
- строка 61
names(ans) <- rnn[rn == tl[j]]
может быть names(ans) <- rep(rnn[rn == tl[j]], ncol(coef))
, чтобы дать имена строкамвсе столбцы
Метод печати потребует некоторых изменений, но, похоже, это так. Кто-нибудь знает, почему dummy.coef()
не был разработан для работы с многовариантными моделями?
Еще одна вещь, на которую я наткнулся: строки 20-22:
for (i in vars) args[[i]] <- if (nxl[[i]] == 1)
rep.int(1, nl)
else factor(rep.int(xl[[i]][1L], nl), levels = xl[[i]])
Это безопасно??То есть, если предложение if()
равно TRUE
, не будет ли неожиданное else
?Я бы ожидал что-то вроде
for (i in vars) args[[i]] <- if (nxl[[i]] == 1) {
rep.int(1, nl)
} else { factor(rep.int(xl[[i]][1L], nl), levels = xl[[i]]) }