动物模型随机效应的设计矩阵

时间:2018-06-28 14:35:44

标签: r

我正在尝试为动物效果设计R中的设计矩阵。 我有一个谱系文件和一个数据文件。

数据文件(两列,一列用于动物识别,一列用于特征-在这种情况下为牛奶产量):

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

PED文件(3列,第一列是动物ID,第二列是母亲ID,最后一个父亲ID):

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。

我不想重新编码,我想使用从农民那里获得的动物ID。

我现在使用的功能:

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

有人可以帮助我解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我想您需要更改设计矩阵的列名和行名

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