Функция MASS::lm.gls
подходит для линейной модели с использованием обобщенных наименьших квадратов и возвращает объект класса «lm.gls», но не имеет print
, summary
или другими методами.Написание обертки для функции линейного моделирования [MASS :: lm.gls()]
Я мог бы определить их просто угон методы для «лм» объекты
print.lm.gls <- function(object, ...) {
class(object) <- "lm"
print(object, ...)
}
summary.lm.gls <- function(object, ...) {
class(object) <- "lm"
summary(object, ...)
}
Вместо этого я попытался написать обертку для lm.gls
, чтобы добавить «лм» в качестве другого класса. (Я понимаю, что это может быть опасно, потому что не все методы «lm» могут быть действительны для GLS.)
Вот что я пытался. Это не работает, как показано в примере ниже, но я не понимаю, почему нет, или как это делать в более общем плане.
lm_gls <- function(formula, data, W, subset, na.action, inverse = FALSE,
method = "qr", model = FALSE, x = FALSE, y = FALSE, contrasts = NULL,
...)
{
result <- MASS::lm.gls(formula, data, W, subset, na.action,
inverse = inverse, method = method, model = model, x = x, y = y, contrasts = contrasts,
...)
class(result) <- c(class(result), "lm")
result
}
Тестовый пример:
library(vcd) # needs vcd_1.3-3+
data(Punishment, package="vcd")
pun.lor <- loddsratio(Freq ~ memory + attitude + age + education, data = Punishment)
pun.lor.df <- as.data.frame(pun.lor)
library(MASS)
pun.gls <- lm_gls(LOR ~ as.numeric(age) * as.numeric(education), data=pun.lor.df,
W=vcov(pun.lor), inverse=TRUE, x=TRUE, y=TRUE)
Это дает ошибку:
> pun.gls <- lm_gls(LOR ~ as.numeric(age) * as.numeric(education), data=pun.lor.df, W=vcov(pun.lor), inverse=TRUE, x=TRUE, y=TRUE)
Error in xj[i] : invalid subscript type 'closure'