当一个人只知道1个父母时,在R中创建一个血统?

时间:2016-02-11 09:35:49

标签: r error-handling

当某些人只知道一位父母时,有没有办法在R中创建一个血统?

我尝试在R中使用kinship2包来创建一个谱系,但我相信这只能在没有父母知道(被认为是第1代)的情况下处理,然后父母双方都知道。

我相信synbreed包能够处理这个并且我已经尝试了下面的代码但是由于某种原因我收到了一个我无法破译的错误代码。我的数据结构方式有问题吗?或者我如何制定create.pedigree()函数的参数?或者是不可能在synbreed包中构建这个谱系?

注意数据框的第5行和第6行' Ped'只有一个父ID。

> Ped<-read.csv("Pedigree.csv",header=T)
> library(synbreed)

> head(Ped)
  IndividualID    SireID     DamID    Sex
1    019-35751 026-34118 026-34117   male
2    019-35740      <NA>      <NA> female
3    019-35791 026-34129 026-34128   male
4    019-35702      <NA>      <NA>   male
5    019-35784      <NA> 026-34147 female
6    019-35764      <NA> 026-34133   male

> str(Ped)
'data.frame':   1136 obs. of  4 variables:
 $ IndividualID: Factor w/ 1136 levels "019-35702","019-35712",..: 6 4 10 1 9 8 3 63 62 108 ...
 $ SireID      : Factor w/ 136 levels "019-35712","019-35756",..: 8 NA 15 NA NA NA 23 23 23 84 ...
 $ DamID       : Factor w/ 131 levels "026-34101","026-34103",..: 4 NA 7 NA 13 8 NA NA NA 30 ...
 $ Sex         : Factor w/ 2 levels "female","male": 2 1 2 2 1 2 2 2 2 2 ...

> create.pedigree(Ped$IndividualID, Ped$SireID, Ped$DamID , unknown = NA)
Error in `[<-.data.frame`(`*tmp*`, is.na(pedigree), value = 0) : 
  unsupported matrix index in replacement

1 个答案:

答案 0 :(得分:1)

我不知道synbreed包及其对只有一位已知父母的个人的假设,因此下面的答案可能与您要查找的内容不同。

但是,如果你知道/相信未知的父母会提到独立的个人,那么你可以“修复”#34;您的数据集添加&#34;空&#34;父母。

类似于您展示的玩具数据集可能是

fid id father mother sex
1   1   .      .      1
1   2   .      .      2
1   3   1      2      1
1   4   1      2      1
1   5   .      2      2
1   6   .      2      1

在这里,我们为个人5和6缺少父亲。然后我们添加两个新条目来代表我们尚未见过的父亲。因此,数据集应该是

fid id father mother  sex
1   1    .       .      1
1   2    .       .      2
1   3    1       2      1
1   4    1       2      1
1  100   .       .      1
1  101   .       .      1
1   5   100      2      2
1   6   101      2      1

我们添加了两个新父亲,仅用于填充谱系结构。可以使用

读取最后一个数据集
library(kinship2)
indata <- read.table("ped.txt", header=TRUE, na.strings=".")
with(indata, pedigree(id=id, dadid=father, momid=mother, sex=sex, famid=fid))

现在,在固定数据集中,我们假设个体5和6是半兄弟,并且他们不能是完整的兄弟姐妹。如果synbreed包(和相关的计算)可以处理那些与我的建议不同(并且计算上相当困难)的个体的可能性。