Дизайн матрицы для случайного эффекта для модели животного - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь сделать дизайн матрицы в R для животных эффект. У меня есть файл родословной и файл данных.

Файл данных (2 столбца, один для идентификатора животного и один для признака - в этом случае надои молока):

AnimalID    Trait
2           10
COWX1       11 
3           22
RO500       13
ANGUS50X    12

PED-файл (3 столбца, первый - идентификатор животного, второй - идентификатор матери и последний идентификатор отца):

AnimalID  MotherID  FatherID
7         0         0
10        0         0
2         0         0 
COWX1     7         10
5         7         0
3         0         10
RO500     2         0
ANGUS50X  COWX1     0

В конце я хочу получить эту матрицу дизайна:

0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 1 0 0 
0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1

Матрица имеет 5 строк и 8 столбцов. 5 строк, потому что есть 5 животных с зарегистрированным признаком и 8 столбцов, потому что все животные - 8.

В данный момент я использую функцию для получения матрицы дизайна, но она работает, только если я перекодирую Животные. Код должен начинаться с 1 и должен быть последовательно.

Пример:

Животное 7 - 1, 10 - 2, 2 - 3, COWX1 - 4, 5 - 5, 3 - 6, RO500 - 7 и ANGUS50X - 8.

Я не хочу перекодировать и хочу использовать идентификационный номер животного, полученный от фермеров.

Функция, которую я сейчас использую:

 animal <- factor(c(3,4,6,7,8), levels=1:8)
 model.matrix(~ animal + 0)

Кто-нибудь может мне помочь в этой проблеме?

Спасибо!

1 Ответ

0 голосов
/ 30 июля 2018

Я мог бы предположить, что вам нужно изменить имена столбцов и строк матрицы проектирования

ani<- read.table(text = "
AnimalID    Trait
2           10
COWX1       11 
3           22
RO500       13
ANGUS50X    12", header = TRUE)

PED <- read.table(text = "
AnimalID  MotherID  FatherID
7         0         0
10        0         0
2         0         0 
COWX1     7         10
5         7         0
3         0         10
RO500     2         0
ANGUS50X  COWX1     0", header = TRUE)


animal <- factor(ani$AnimalID, levels=PED$Animal)

dm <- model.matrix(~ animal + 0)
rownames(dm) <- ani$AnimalID
colnames(dm) <- PED$AnimalID
dm

Результат выглядит следующим образом:

         7 10 2 COWX1 5 3 RO500 ANGUS50X
2        0  0 1     0 0 0     0        0
COWX1    0  0 0     1 0 0     0        0
3        0  0 0     0 0 1     0        0
RO500    0  0 0     0 0 0     1        0
ANGUS50X 0  0 0     0 0 0     0        1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...