[R-sig-ME] adding a kinship matrix as a random covariate
Federico Calboli
f.calboli at imperial.ac.uk
Mon Nov 11 21:02:12 CET 2013
[This email might, or might have not, bounced, so I'm sending it a second time. Apologies if you receive multiple copies]
Hi All,
I am possibly not up to date on using R mixed models when my random covariate is a Kinship matrix (from genetic data, not pedigree).
I have a data frame (called my.data), with m rows and 126 columns. The columns are the phenotypes (quantitative) and a number of covariates, plus the genotype (coded as x/y, where y and y are microsatellite lengths). Independently I have a m by m matrix of kinship values, derived from the genetic data.
All looks like:
> my.data
id temp bw bl dt rbw rbl sex MSA MSB MSC MSD MDE MSF MSG MSH
1 1 16 0.8707 16.66 54 0.01612407 0.3085185 m 240/256 162/166 256/256 123/123 <NA> 120/156 331/335 115/115
2 2 16 0.8644 16.91 54 0.01600741 0.3131481 m 268/270 162/162 256/256 123/123 361/373 120/156 <NA> 115/119
3 3 16 0.8464 17.25 54 0.01567407 0.3194444 m 240/268 162/162 272/272 123/123 353/361 120/120 <NA> 115/115
4 4 16 0.9077 18.16 54 0.01680926 0.3362963 <NA> 256/270 162/162 <NA> 123/123 353/361 120/120 <NA> 115/119
5 5 16 0.9075 18.05 53 0.01712264 0.3405660 f <NA> <NA> <NA> 111/115 353/361 120/120 <NA> 115/115
6 6 16 0.8296 17.36 53 0.01565283 0.3275472 f 268/270 162/162 <NA> 111/123 353/361 120/156 <NA> 115/119
7 7 16 0.8354 17.74 51 0.01638039 0.3478431 f <NA> <NA> <NA> 115/123 <NA> 120/156 <NA> 115/119
8 8 16 0.8614 16.84 53 0.01625283 0.3177358 f <NA> 162/162 256/256 123/123 <NA> 120/156 <NA> 115/119
9 9 16 0.7756 18.22 54 0.01436296 0.3374074 f 268/270 <NA> 272/272 115/123 <NA> 120/120 <NA> 115/115
10 10 16 0.8076 16.37 53 0.01523774 0.3088679 f <NA> 162/172 <NA> 115/123 361/373 120/120 <NA> 115/115
and the kinship matrix:
> Kinship[1:6, 1:6]
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0.5438596 0.4035088 0.3750000 0.3618421 0.3728070 0.3771930
[2,] 0.4035088 0.5614035 0.3903509 0.4298246 0.3925439 0.3925439
[3,] 0.3750000 0.3903509 0.5438596 0.3399123 0.3179825 0.3991228
[4,] 0.3618421 0.4298246 0.3399123 0.5219298 0.3771930 0.3662281
[5,] 0.3728070 0.3925439 0.3179825 0.3771930 0.5175439 0.3662281
[6,] 0.3771930 0.3925439 0.3991228 0.3662281 0.3662281 0.5833333
I tried in lme4 the following:
lmer(all$bw ~ all$MSA + all$temp + all$sex + all$dt + (1|Kinship))
returns
Error in `[[<-.data.frame`(`*tmp*`, i, value = c(233L, 174L, 161L, 162L, :
replacement has 384120 rows, data has 485
I tried in nlme this:
lme(all$bw ~ all$MSA + all$temp + all$sex + all$dt, random = ~ 1|Kinship, na.action = na.omit)
Error in eval(expr, envir, enclos) : object 'bw' not found
If I put the kinship in my.data
> my.data$K = Kinship
lme(bw ~ MSA + temp + sex + dt, random = ~ 1|K, data = my.data, na.action = na.omit)
Error in `row.names<-.data.frame`(`*tmp*`, value = origOrder) :
invalid 'row.names' length
Obviously using a m by m matrix is not a good way of specifying a random effect. Given my data, which is not going to change, is there a way of using the K matrix as a random covariate? alternatively, which packages would allow me to do so? Finally, I will admit it openly, from the start. I am after a p-value, ideally from an anova, to see if the different genotypes at each locus have an effect or not.
Best
F
More information about the R-sig-mixed-models
mailing list