===== openSNP (open genetics data) ===== We split into two groups: - trying to run a GWAS, comparing the genotypes of openSNP users to the 1000 Genomes data set, to see whether there are significantly overrepresented variants in openSNP users - trying to recreate [[http://www.nature.com/nature/journal/v456/n7218/fig_tab/nature07331_F1.html|the main graphics of this publication]], a graph of a principal component analysis which shows that genetic variation clusters well according to geography: ==== Doing a PCA w/ openSNP data ==== [[https://dl.dropboxusercontent.com/u/170329/pca-opensnp.png|{{https://dl.dropboxusercontent.com/u/170329/pca-opensnp.png?350}}]] This is done in multiple steps with the help of PLINK and SmartPCA: ===Data Selection=== * Use only complete 23andMe data sets -> Remove all files < 15 mb in size and that are not 23andMe * Convert the 23andMe files into PLINKs binary format //plink --23file input-file F1 ID1 I 1 --out output-file-prefix// * This will give you a directory full of BED/BIM/FAM/LOG files. The .log files can already be useful, e.g. to figure out the chromosomal sex ratio in our sample: bastian@phix ~/eth_hackdays/plink_binaries ᐅ cat *.log|grep Inferred|sort|uniq -c 578 Inferred sex: female. 845 Inferred sex: male. * Try to merge those BED files into a single one: //plink -bfile a_single_file --merge-list bed_files_to_merge_list.txt --make-bed --out merged_23andme_opensnp// * but it crashed, as some of the SNPs are tri-allelic (instead of only having two different variants at the position, 3 are measured). This is most likely an artefact of the data, and thus have to be removed * Fortunately the crashing merge-list command gives you a list of broken SNPs: //merged-23andme-opensnp-merge.missnp//, this again can be used by PLINK to remove those from the single individual files before doing the merge. * For this you can use //run_plink_remove_snps.py// from the GitHub-repo. It remove the ~2k SNPs that do not work as expected. * With those new files you can then run the merge step: //plink --bfile ../plink_binaries_filtered/2-filtered --merge-list ../opensnp-fun/plink_merge_list_filtered.txt --make-bed --out merged-23andme-opensnp-filtered// * This should work just fine now, the resulting logfile should give you ± this: Total genotyping rate is 0.482581. 1626942 variants and 1423 people pass filters and QC. Note: No phenotypes present * Great! Now we can remove SNPs that are too highly correlated with other ones close by, using PLINK once again. * For the parameters we use the ones provided in the paper cited above: A SNP-Window Size of 50, an increment of 5 SNPs and a r2 of 0.8: * //plink --bfile merged-23andme-opensnp-filtered --indep-pairwise 50 5 0.8 --make-bed --out merged-23andme-opensnp-filtered-noLD// * The resulting out-files can then again be used to remove the listed SNPs using PLINK ===PCA=== So far for the data processing, now we can go for the PCA itself. * For this we can use //smartpca//, which is part of the [[https://github.com/chrchang/eigensoft/|EIGENSOFT]] package. * The documentation is kind of lacking for smartpca, but this seems to work: smartpca.perl -i merged-23andme-opensnp-filtered-noLD.bed -a merged-23andme-opensnp-filtered-noLD.bim -b merged-23andme-opensnp-filtered-noLD.fam -l test.log -o test.pca -p test.plot -e test.eigen -i / -a / -b are all fed with the corresponding bed/bim/fam files of PLINK. -l -o -p -e are the output files for smartpca. The -o gives just the prefix. * With that done you should get a //test.log// which ends with //##end of smartpca run// ===Results & Viz: R + ggplot === With that done we can use the //test.pca.evec// which was generated for plotting with R & ggplot2. library(ggplot2) d = read.table("test.pca.evec", as.is = T) ggplot(d,aes(x=d[,2],y=d[,3],color=d[,4])) + geom_point() + scale_x_continuous("PC1") + scale_y_continuous("PC2") + scale_color_continuous("PC3") This should yield the upper of the two plots linked below. In an even more quick & dirty approach (and totally undocumented) I associated the genotyping files with the phenotypes given by the openSNP users, here the eye color. * Example Results * https://dl.dropboxusercontent.com/u/170329/pca-opensnp.png * https://dl.dropboxusercontent.com/u/170329/pca-opensnp-eyecolor.png === TO-DO === * The plots here were done on all SNPs, not the subsampled ones (as I didn't notice that it wasn't done automatically…). Should re-run it on the less autocorrelated set * Right now the scripts for generating all the data are messy at best and can't be run automatically, should be fixed * Include the 1000Genomes data, not done so far. * Go wild! ===== Data ===== * [[https://opensnp.org|openSNP]] * [[1000genomes.org|1000 Genomes]] ===== Team ===== * [[https://twitter.com/gedankenstuecke|@gedankenstuecke]] * [[https://twitter.com/ciyer|@ciyer]] * [[https://twitter.com/podehaye|@podehaye]] * and other team members ===== Links ===== * Repo for doing PCA on openSNP: https://github.com/ciyer/opensnp-fun * [[https://github.com/gedankenstuecke/opensnp-fun|@gedankenstuecke's fork of ciyer's repo]] * [[http://www.nature.com/nature/journal/v456/n7218/fig_tab/nature07331_F1.html|The figure we tried to reproduce]] * [[https://www.cog-genomics.org/plink2/strat|PLINK manual]] {{tag>status:demo needs:dev needs:design needs:data needs:expert}}