Если у вас есть sommer> = 3.7, форсировать определенные компоненты дисперсии или ковариации можно, используя аргументы Gt (начальные значения) и Gtc (сокращения) из функции vs (), которая используется для указания модели дисперсии для случайного эффекта,
Например, предположим, что вы подходите к следующей многомерной смешанной модели для двух признаков:
library(sommer)
data(DT_cpdata)
#### create the variance-covariance matrix for id levels
A <- A.mat(GT) # additive relationship matrix
D <- D.mat(GT) # additive relationship matrix
#### look at the data and fit the model
DT$idd <- DT$id
head(DT)
ans.m <- mmer(cbind(Yield,color)~1,
random=~ vs(id, Gu=A)
+ vs(Rowf,Gtc=diag(2)),
rcov=~ vs(units),
data=DT)
В этой модели есть 2 случайных эффекта (id и Rowf) и остаточный член для юнитов.По умолчанию используется неструктурированная модель отклонений (т. Е. Единиц и идентификаторов), но вы можете увидеть, как для Rowf аргумент Gtc является матрицей ограничений, которая создает диагональную модель для Rowf:
> diag(2)
[,1] [,2]
[1,] 1 0
[2,] 0 1
, которая следует правилам:0: не оценивать 1: оценивать и ограничивать, чтобы быть положительным 2: оценивать и не ограничивать 3: фиксированный компонент дисперсии-ковариации, представленный в Gt
После этого легко увидеть, что если вы хотите форсировать определенные компоненты дисперсииВы должны предоставить начальные значения (аргумент Gt) и указать матрицу ограничений со значениями 3 (такая функция может быть создана функцией fixm ()).
ans.mf <- mmer(cbind(Yield,color)~1,
random=~ vs(id, Gu=A, Gt=ans.m$sigma_scaled$id,Gtc=fixm(2))
+ vs(Rowf,Gt=ans.m$sigma_scaled$Rowf, Gtc=fixm(2))
+ vs(idd, Gu=D),
rcov=~ vs(units, Gt=ans.m$sigma_scaled$units, Gtc=fixm(2)),
data=DT)
ans.m$sigma
ans.mf$sigma
Если вы проверите результаты, вы увидите, что у вас естьвынудил компоненты дисперсии для id, Rowf и единиц и правильно оценил компоненты для idd.