[adegenet-forum] Looking for help with a PCA using adegenet in R

Jombart, Thibaut t.jombart at imperial.ac.uk
Tue Oct 19 18:37:55 CEST 2010


Dear Sarrah, 

In this case read.structure should not be used - it is designed for diploid individuals only. Fortunately, you can still read your data in adegenet using df2genind.

The trick consists in merging the 4 alleles into a single character string:
#####
> foo=read.table("foo.txt", head=TRUE)
> head(foo)
  Ind Reg Al1 Al2 Al3 Al4
1 271  ON   7  10  11  -9
2 273  ON   2  10  13  -9
3 272  ON   4  11  12  -9
4 465  ON   1   2  -9  -9
5 472  ON   3   6  11  19
6 489  ON   2   3   4  19
> gen=apply(foo[,3:6],1,paste,collapse="/")
> gen
 [1] "7/10/11/-9" "2/10/13/-9" "4/11/12/-9" "1/2/-9/-9"  "3/6/11/19" 
 [6] "2/3/4/19"   "7/12/-9/-9" "7/14/43/-9" "4/5/15/19"  "7/14/20/26"
[11] "5/7/8/-9"   "4/11/21/-9" "7/21/24/-9" "1/20/26/49" "7/16/20/26"
[16] "7/25/27/49" "3/19/25/49" "7/9/12/-9" 
#####

A problem in your data is that for a single locus and individual, it happens that some but not all data are missing (expl:  "1/2/-9/-9"). Are these actual tetraploid data? Or is the actual ploidy unknown?
For now, I consider that frequencies cannot be inferred as soon as there is at least one NA.

#####
> isNA=grep("-9",gen)
> gen[isNA] <- NA
> gen
 [1] NA           NA           NA           NA           "3/6/11/19" 
 [6] "2/3/4/19"   NA           NA           "4/5/15/19"  "7/14/20/26"
[11] NA           NA           NA           "1/20/26/49" "7/16/20/26"
[16] "7/25/27/49" "3/19/25/49" NA          
##### 

We can now obtain the genind object:

#####
>  x=df2genind(data.frame(gen), ind.names=foo$Ind, pop=foo$Reg, sep="/", ploidy=4)
Warning message:
In df2genind(data.frame(gen), ind.names = foo$Ind, pop = foo$Reg,  :
  entirely non-type individual(s) deleted
> truenames(x)
$tab
    gen.01 gen.02 gen.03 gen.04 gen.05 gen.06 gen.07 gen.11 gen.14 gen.15
472   0.00   0.00   0.25   0.00   0.00   0.25   0.00   0.25   0.00   0.00
489   0.00   0.25   0.25   0.25   0.00   0.00   0.00   0.00   0.00   0.00
466   0.00   0.00   0.00   0.25   0.25   0.00   0.00   0.00   0.00   0.25
749   0.00   0.00   0.00   0.00   0.00   0.00   0.25   0.00   0.25   0.00
319   0.25   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00   0.00
323   0.00   0.00   0.00   0.00   0.00   0.00   0.25   0.00   0.00   0.00
341   0.00   0.00   0.00   0.00   0.00   0.00   0.25   0.00   0.00   0.00
385   0.00   0.00   0.25   0.00   0.00   0.00   0.00   0.00   0.00   0.00
    gen.16 gen.19 gen.20 gen.25 gen.26 gen.27 gen.49
472   0.00   0.25   0.00   0.00   0.00   0.00   0.00
489   0.00   0.25   0.00   0.00   0.00   0.00   0.00
466   0.00   0.25   0.00   0.00   0.00   0.00   0.00
749   0.00   0.00   0.25   0.00   0.25   0.00   0.00
319   0.00   0.00   0.25   0.00   0.25   0.00   0.25
323   0.25   0.00   0.25   0.00   0.25   0.00   0.00
341   0.00   0.00   0.00   0.25   0.00   0.25   0.25
385   0.00   0.25   0.00   0.25   0.00   0.00   0.25

$pop
[1] ON ON ON ON ON ON ON ON
Levels: ON

> genind2df(x, sep="/")
    pop         gen
472  ON 03/06/11/19
489  ON 02/03/04/19
466  ON 04/05/15/19
749  ON 07/14/20/26
319  ON 01/20/26/49
323  ON 07/16/20/26
341  ON 07/25/27/49
385  ON 03/19/25/49
#####

Now you can use 'x' as any other genind object:
#####
> Hs(x)
        1 
0.9238281 
> summary(x)
 # Total number of genotypes:  8 

 # Population sample sizes:  
ON 
 8 

 # Number of alleles per locus:  
L1 
17 

[etc.]
#####

Best regards,

Thibaut


________________________________________
From: adegenet-forum-bounces at lists.r-forge.r-project.org [adegenet-forum-bounces at lists.r-forge.r-project.org] On Behalf Of Sarrah Castillo [scastillo at nrdpfc.ca]
Sent: 19 October 2010 16:20
To: adegenet-forum at lists.r-forge.r-project.org
Subject: [adegenet-forum] Looking for help with a PCA using adegenet in R

Hello Dr. Jombart
I was wondering if you could help me with an issue I am having with your program (Adegenet) in R.
I am attempting to perform a PCA using a structure file. The difference is that this is based on tetraploid data.  Structure allows for multiple ploidy, however I am unsure of how to have the program read my data as tetraploid instead of diploid. The genetic information is for a single locus with between 2-4 alleles (with -9 representing missing data)

Here is an example of my file (with -9 representing missing data)

Ind     Reg     Al1     Al2     Al3     Al4
271     ON      7       10      11      -9
273     ON      2       10      13      -9
272     ON      4       11      12      -9
465     ON      1       2       -9      -9
472     ON      3       6       11      19
489     ON      2       3       4       19
519     ON      7       12      -9      -9
551     ON      7       14      43      -9
466     ON      4       5       15      19
749     ON      7       14      20      26
111     ON      5       7       8       -9
173     ON      4       11      21      -9
318     ON      7       21      24      -9
319     ON      1       20      26      49
323     ON      7       16      20      26
341     ON      7       25      27      49
385     ON      3       19      25      49
485     ON      7       9       12      -9

Ind=individual
Reg=region
Al1= allele 1
Al2= allele 2
Al3= allele 3
Al4= allele 4


Any help would be much appreciated.

Thank you
Sarrah Castillo


____________________
Sarrah Castillo
MSc Candidate
Environmental & Life Sciences Graduate Program
Trent University, 2140 East Bank Drive,
Peterborough, Ontario, K9J 7B8, Canada
e-mail:scastillo at nrdpfc.ca




More information about the adegenet-forum mailing list