Я выполняю надежную регрессию с тяжелым пакетом . Я хотел бы получить представление о вкладе терминов в объяснение отклонений. В простой регрессии с lm()
, anova()
(которая вызывает anova.lm()
) будет использоваться для этого. К сожалению, heavy::heavyLm
возвращает объект класса heavyLm
, который явно не наследуется от lm
, поэтому anova.lm()
не вызывается и anova()
не может использоваться:
rr <- heavy:heavyLm(<some_formula>, data=<some_data_frame>, family=Cauchy())
anova(rr)
# Error in UseMethod("anova") :
# no applicable method for 'anova' applied to an object of class "heavyLm"
Идеи
- Попытка каким-либо образом вызвать
anova.lm()
и заставить его поверить, что rr
относится к типу heavyLm
, безусловно, не будет работать. Я заметил, что anova.lm()
не просто вычисляет sum((rr$model[,2]-rr$coefficients[[2]]*mean(rr$model[,2]))**2)
, т. Е. (X - коэффициент (x) * среднее (x)) ** 2, но выполняет вычисления с rr$effects
и rr$qr
, которые существуют, только если rr
имеет тип lm
, а не тип heavyLm
. Я даже не уверен, как это сделать вручную. - Есть ли другой способ вычислить таблицу ANOVA? Я заметил, что есть и другие функции, такие как
aov()
. Тем не менее, я не уверен, что они не будут просто возвращать регрессию как обычный OLS, как в lm()
(вместо того, чтобы придерживаться надежной регрессии). Также:
aov(rr)
# Error in eval(predvars, data, env) : object '' not found
- Есть ли альтернатива таблице ANOVA, которую можно использовать для той же цели и которую можно получить проще или непосредственно из
heavyLm
объектов? Элементы heavyLm
объекта выглядят как names(rr)
[1] "dims" "family" "settings" "coefficients" "sigma2" "fitted.values" "residuals" "weights" "distances" "acov" "logLik"<br>
[12] "numIter" "control" "speed" "converged" "call" "na.action" "contrasts" "xlevels" "terms" "model"
Программное обеспечение - это R 3.6.3 с тяжелым 0.38.196 при Linux 5.5.9.