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

  • 本文关键字:模型 随机 r
  • 更新时间 :
  • 英文 :


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

数据文件(2 列,一列用于动物 ID,一列用于性状 - 在本例中为产奶量(:

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)

任何人都可以帮助我解决这个问题吗?

谢谢!

我可以假设您需要更改设计矩阵的列名和行名

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

最新更新