Для того, чтобы иметь дело с отдельными полами в летнее время, нужно установить летнее время> = 3.7. Эта модель напрямую манипулирует аргументом Gtc (в функции vs), который обрабатывает ограничения, применяемые для компонентов дисперсии и ковариации. Значения 1,2,3 соответствуют положительным, неограниченным, фиксированным.
Учитывая сказанное, структура данных проясняет, что ковариация среди всех признаков может быть оценена только для случайного эффекта "генотип":
> unsm(4)
[,1] [,2] [,3] [,4]
[1,] 1 2 2 2
[2,] 0 1 2 2
[3,] 0 0 1 2
[4,] 0 0 0 1
, тогда как для «индивида» это не полная неструктурированная черта, а выглядит так:
> mm <- adiag1(unsm(2),unsm(2));mm
[,1] [,2] [,3] [,4]
[1,] 1 2 0 0
[2,] 0 1 0 0
[3,] 0 0 1 2
[4,] 0 0 0 1
Короче говоря, модель выглядит следующим образом:
# Generate some fake data:
# 100 males and 100 females
# Two traits are measured on each male, and two traits on each female
# 20 individuals per sex are measured for each of 5 different genotypes
set.seed(3434)
df <- data.frame(
sex = rep(c("female", "male"), each = 100),
female_trait_1 = c(rnorm(100), rep(NA, 100)),
female_trait_2 = c(rnorm(100), rep(NA, 100)),
male_trait_1 = c(rep(NA, 100), rnorm(100)),
male_trait_2 = c(rep(NA, 100), rnorm(100)),
genotype = rep(rep(1:5, each = 20), 2),
individual = 1:200
)
df$genotype <- as.factor(df$genotype)
df$individual <- as.factor(df$individual)
library(sommer)
mm <- adiag1(unsm(2),unsm(2));mm
mix <- mmer(cbind(female_trait_1,
female_trait_2,
male_trait_1,
male_trait_2) ~ 1,
random=~vs(genotype,Gtc=unsm(4)) + vs(individual,Gtc=mm),
rcov=~vs(units), na.method.Y = "include",
data=df)
mix$sigma
cov2cor(mix$sigma$genotype)
cov2cor(mix$sigma$individual)
Возможно, вы захотите использовать реальные данные, чтобы получить значимые результаты, но это показывает путь. Приветствия.