#r #function #dataframe #vector
#r #функция #фрейм данных #вектор
Вопрос:
В моем коде ниже m3$modelStruct$varStruct
возвращает именованный вектор чисел. Но когда я умножаю это на sigma(m3)^2
, умножение не происходит. Есть ли исправление для этого?
library(nlme)
dat <- read.csv('https://raw.githubusercontent.com/rnorouzian/e/master/var.csv')
dat$fmonth <- factor(dat$month)
vf2 <- varIdent(form= ~ 1 | fmonth)
m3 <- lme(y ~ x*fmonth, random = ~1|id, data = dat,
weights = vf2)
sigma(m3)^2 * m3$modelStruct$varStruct ## PROBLEM IS HERE!
Ответ №1:
Ваши предположения о m3$modelStruct$varStruct
том, что вы являетесь именованным вектором, неверны. Ваше умножение возвращает объект
class(sigma(m3)^2 * m3$modelStruct$varStruct)
#[1] "varIdent" "varFunc"
Таким образом, вызывается метод print print.varFunc
.
Если вы действительно хотите умножить на значения, отображаемые на print(m3$modelStruct$varStruct)
, вам необходимо извлечь коэффициенты:
m3$modelStruct$varStruct
#Variance function structure of class varIdent representing
# 5 6 9 10 12 3 4 11 8 2 1 7
#1.0000000 1.0065306 1.8362431 1.3632609 0.7827463 1.2128426 0.8708676 0.9233713 0.6003184 0.6064313 1.2060820 0.8399081
sigma(m3)^2 * coef(m3$modelStruct$varStruct, uncons = FALSE, allCoef = TRUE)
# 5 6 9 10 12 3 4 11 8 2 1 7
#4.292699 4.320733 7.882439 5.852068 3.360094 5.206368 3.738372 3.963755 2.576986 2.603227 5.177347 3.605472