• Don't want to see ads? Install an adblocker like uBlock Origin or use a Europe-based privacy-friendly browser like Vivaldi or Mullvad.

Admixtools My qpAdm Results Please Share Yours!

Do you know what Turkey_N has for Natufian admix? 10-15% also?
That’s what I meant, Turkey_N is 15% natufian.
The Greek ANF group is about 10%.
 
Do you know what Turkey_N has for Natufian admix? 10-15% also?
IMG_2505.jpeg

Turkey_N was 14.6% ± 3.94% natufian.

Rights:
Mbuti.DG,Russia_UstIshim_IUP.DG,Russia_Kostenki14_UP.SG,Russia_Sunghir3_UP.SG,Ethiopia_4500BP.AG,Morocco_Iberomaurusian.AG,Russia_Yana_UP.SG,Switzerland_Bichon_Epipaleolithic.SG,China_AmurRiver_Paleolithic.AG,Georgia_Dzudzuana_UP.AG
 
1743526945553.png

1743526973422.png



Code:
# Step 1: Define file paths
prefix <- "D:\\Bioinformatics\\Jovialis_1240k_merge\\merged_1240k"
my_f2_dir <- "D:\\Bioinformatics\\Jovialis_1240k_merge\\my_f2_dir_merged_1240k"

# Step 2: Load required libraries
library(admixtools)
library(tidyverse)

# Step 3: Define target and population lists
target <- c('Jovialis')
left <- c('Italy_Sicily_Himera_480BCE_NEurope.AG', 'Italy_Sicily_Himera_480BCE_Greek.AG')
right  <- c("Ethiopia_4500BP.AG", "Russia_YuzhniyOleniyOstrov_Mesolithic.AG",  "Luxembourg_Mesolithic.AG", "Georgia_Kotias_Mesolithic.SG", "Israel_Natufian.AG")

# Step 4: Combine all populations for f2 statistics
mypops <- c(target, left, right)

# Step 5: Generate f2 statistics for qpWave
cat("\nExtracting f2 statistics...\n")
extract_f2(prefix, my_f2_dir, pops = mypops, overwrite = TRUE, maxmiss = 1, blgsize = 0.05)
f2_blocks <- f2_from_precomp(my_f2_dir, pops = mypops, afprod = TRUE)

# Step 6: Run qpWave to validate admixture model complexity
cat("\nRunning qpWave to check rank...\n")
qpwave_results <- qpwave(f2_blocks, left = left, right = right, verbose = TRUE)

# Save qpWave results to file
write.csv(qpwave_results$rankdrop, file = "qpwave_rankdrop_results.csv", row.names = FALSE)

cat("\nqpWave Rank Drop Results:\n")
print(qpwave_results$rankdrop)

# Step 7: Determine whether to proceed with qpAdm
min_p <- min(qpwave_results$rankdrop$p, na.rm = TRUE)

if (!is.na(min_p) && min_p > 0.05) {
    cat("\nqpWave indicates that the source populations form a clade (p > 0.05). This suggests that the sources do not exhibit distinct ancestries.\n")
    cat("\nqpAdm may not provide meaningful results in this case, but we will proceed for comparison.\n")
    
    # Run qpAdm with allsnps = TRUE using genotype files
    results <- qpadm(prefix, left, right, target, allsnps = TRUE)
    
    cat("\nqpAdm Admixture Weights (allsnps = TRUE, may not be meaningful due to clade formation):\n")
    print(results$weights)
    
    cat("\nqpAdm Population Drop Results (allsnps = TRUE):\n")
    print(results$popdrop)
    
    # Save results to file
    write.csv(results$weights, file = "qpadm_weights_clade.csv", row.names = FALSE)
    write.csv(results$popdrop, file = "qpadm_popdrop_clade.csv", row.names = FALSE)
    
} else {
    cat("\nqpWave indicates that the source populations do not form a clade (p ≤ 0.05). Proceeding with qpAdm to estimate admixture proportions.\n")
    
    # Run qpAdm with allsnps = TRUE using genotype files
    results_true <- qpadm(prefix, left, right, target, allsnps = TRUE)
    
    cat("\nqpAdm Admixture Weights (allsnps = TRUE):\n")
    print(results_true$weights)
    
    cat("\nqpAdm Population Drop Results (allsnps = TRUE):\n")
    print(results_true$popdrop)
    
    # Save results to file
    write.csv(results_true$weights, file = "qpadm_weights_allsnps_TRUE.csv", row.names = FALSE)
    write.csv(results_true$popdrop, file = "qpadm_popdrop_allsnps_TRUE.csv", row.names = FALSE)
    
    # Run qpAdm with allsnps = FALSE for comparison
    results_false <- qpadm(f2_blocks, left, right, target, allsnps = FALSE)
    
    cat("\nqpAdm Admixture Weights (allsnps = FALSE):\n")
    print(results_false$weights)
    
    cat("\nqpAdm Population Drop Results (allsnps = FALSE):\n")
    print(results_false$popdrop)
    
    # Save results to file
    write.csv(results_false$weights, file = "qpadm_weights_allsnps_FALSE.csv", row.names = FALSE)
    write.csv(results_false$popdrop, file = "qpadm_popdrop_allsnps_FALSE.csv", row.names = FALSE)
}

cat("\nAnalysis complete. Check the output CSV files for detailed results.\n")
 
View attachment 18119
View attachment 18120


Code:
# Step 1: Define file paths
prefix <- "D:\\Bioinformatics\\Jovialis_1240k_merge\\merged_1240k"
my_f2_dir <- "D:\\Bioinformatics\\Jovialis_1240k_merge\\my_f2_dir_merged_1240k"

# Step 2: Load required libraries
library(admixtools)
library(tidyverse)

# Step 3: Define target and population lists
target <- c('Jovialis')
left <- c('Italy_Sicily_Himera_480BCE_NEurope.AG', 'Italy_Sicily_Himera_480BCE_Greek.AG')
right  <- c("Ethiopia_4500BP.AG", "Russia_YuzhniyOleniyOstrov_Mesolithic.AG",  "Luxembourg_Mesolithic.AG", "Georgia_Kotias_Mesolithic.SG", "Israel_Natufian.AG")

# Step 4: Combine all populations for f2 statistics
mypops <- c(target, left, right)

# Step 5: Generate f2 statistics for qpWave
cat("\nExtracting f2 statistics...\n")
extract_f2(prefix, my_f2_dir, pops = mypops, overwrite = TRUE, maxmiss = 1, blgsize = 0.05)
f2_blocks <- f2_from_precomp(my_f2_dir, pops = mypops, afprod = TRUE)

# Step 6: Run qpWave to validate admixture model complexity
cat("\nRunning qpWave to check rank...\n")
qpwave_results <- qpwave(f2_blocks, left = left, right = right, verbose = TRUE)

# Save qpWave results to file
write.csv(qpwave_results$rankdrop, file = "qpwave_rankdrop_results.csv", row.names = FALSE)

cat("\nqpWave Rank Drop Results:\n")
print(qpwave_results$rankdrop)

# Step 7: Determine whether to proceed with qpAdm
min_p <- min(qpwave_results$rankdrop$p, na.rm = TRUE)

if (!is.na(min_p) && min_p > 0.05) {
    cat("\nqpWave indicates that the source populations form a clade (p > 0.05). This suggests that the sources do not exhibit distinct ancestries.\n")
    cat("\nqpAdm may not provide meaningful results in this case, but we will proceed for comparison.\n")
   
    # Run qpAdm with allsnps = TRUE using genotype files
    results <- qpadm(prefix, left, right, target, allsnps = TRUE)
   
    cat("\nqpAdm Admixture Weights (allsnps = TRUE, may not be meaningful due to clade formation):\n")
    print(results$weights)
   
    cat("\nqpAdm Population Drop Results (allsnps = TRUE):\n")
    print(results$popdrop)
   
    # Save results to file
    write.csv(results$weights, file = "qpadm_weights_clade.csv", row.names = FALSE)
    write.csv(results$popdrop, file = "qpadm_popdrop_clade.csv", row.names = FALSE)
   
} else {
    cat("\nqpWave indicates that the source populations do not form a clade (p ≤ 0.05). Proceeding with qpAdm to estimate admixture proportions.\n")
   
    # Run qpAdm with allsnps = TRUE using genotype files
    results_true <- qpadm(prefix, left, right, target, allsnps = TRUE)
   
    cat("\nqpAdm Admixture Weights (allsnps = TRUE):\n")
    print(results_true$weights)
   
    cat("\nqpAdm Population Drop Results (allsnps = TRUE):\n")
    print(results_true$popdrop)
   
    # Save results to file
    write.csv(results_true$weights, file = "qpadm_weights_allsnps_TRUE.csv", row.names = FALSE)
    write.csv(results_true$popdrop, file = "qpadm_popdrop_allsnps_TRUE.csv", row.names = FALSE)
   
    # Run qpAdm with allsnps = FALSE for comparison
    results_false <- qpadm(f2_blocks, left, right, target, allsnps = FALSE)
   
    cat("\nqpAdm Admixture Weights (allsnps = FALSE):\n")
    print(results_false$weights)
   
    cat("\nqpAdm Population Drop Results (allsnps = FALSE):\n")
    print(results_false$popdrop)
   
    # Save results to file
    write.csv(results_false$weights, file = "qpadm_weights_allsnps_FALSE.csv", row.names = FALSE)
    write.csv(results_false$popdrop, file = "qpadm_popdrop_allsnps_FALSE.csv", row.names = FALSE)
}

cat("\nAnalysis complete. Check the output CSV files for detailed results.\n")
You should make a nice pie chart for your results :)
 
You can use ChatGPT to make them and to produce them in a format to download.
Can you pass me the prompt? Because the pie chart that chatgpt is giving me looks different lol
 
Ok, so I had done some two-way qpAdm models using Iron Age northwest Europeans and the old kingdom Egyptian NUE001

1745974380449.png

1745974464864.png

1745974539460.png

1745974631770.png




My FST distances to various modern global populations:

1745974875798.png


And no, I have no idea why I'm so distance to this Scottish sample is 0.008

Further testing of this near east signal using modern English + BedouinB and Scottish + BedouinB:

1745975376012.png

1745975477306.png
 
This is what my results look like in G25:

1745976623779.png

1745976677400.png

1745976783370.png

1745976882885.png

1745976962174.png

One thing I find interesting again is that qpAdm assigned this exact admixture with Denmark IA and NUE001.
But in G25 the fit isn't as good, whereas in qpAdm the p-value was 0.79 which is over 10 times the passing score (p-value) of 0.05:

1745977336651.png
 
Had a number of models ran I'll also show what G25 yields with the same samples.

Steppe, ANF, WHG model:

View attachment 17745

G25:
View attachment 17753

Steppe, ANF, WHG model + Jordan_PPNB:

View attachment 17747
G25:
View attachment 17752

EHG, WHG, CHG, Iran_N model:

View attachment 17749
G25:

View attachment 17750

View attachment 17754

G25:

View attachment 17755
Since I’ve gotten significantly better at modeling, I’ve decided to come back to this thread with my new models on my LivingDNA+Ancestry merged file. 450K SNP overlap with the AADR 1240K.

IMG_7350.png
IMG_7349.png
IMG_7346.png
 
outgroups of the first model?
Here:

Mbuti.DG,Russia_UstIshim_IUP.DG,Russia_Kostenki14_UP.SG,Russia_Sunghir_UP.SG3,Georgia_Dzudzuana_UP.SG,Turkey_Central_Pinarbasi_Epipaleolithic.AG,Turkey_Central_Boncuklu_PPN.AG,Israel_Natufian1.AG,Morocco_Iberomaurusian.AG,Italy_Epigravettian.SG,ANE,WSHG,Georgia_Satsurblia_LateUP.SG,Iran_Wezmeh_N.SG,India_GreatAndaman_100BP.SG

ANE is Russia_MA1_UP.SG,
WSHG are these samples:
BOT14.SG, BOT15.SG, BOT2016.SG, BOT2016.AG, BOT14.AG, L5209.AG.SG, L5213.AG.SG, XHM100.SG, XHM110.SG, XHM135.SG,
Natufian1 is I1072.AG,
And Russia_Sunghir_UP.SG3 is Sunghir3.SG
 
Since I’ve gotten significantly better at modeling, I’ve decided to come back to this thread with my new models on my LivingDNA+Ancestry merged file. 450K SNP overlap with the AADR 1240K.

View attachment 18320View attachment 18321View attachment 18322
ourgroups of the first model?
Here:

Mbuti.DG,Russia_UstIshim_IUP.DG,Russia_Kostenki14_UP.SG,Russia_Sunghir_UP.SG3,Georgia_Dzudzuana_UP.SG,Turkey_Central_Pinarbasi_Epipaleolithic.AG,Turkey_Central_Boncuklu_PPN.AG,Israel_Natufian1.AG,Morocco_Iberomaurusian.AG,Italy_Epigravettian.SG,ANE,WSHG,Georgia_Satsurblia_LateUP.SG,Iran_Wezmeh_N.SG,India_GreatAndaman_100BP.SG

ANE is Russia_MA1_UP.SG,
WSHG are these samples:
BOT14.SG, BOT15.SG, BOT2016.SG, BOT2016.AG, BOT14.AG, L5209.AG.SG, L5213.AG.SG, XHM100.SG, XHM110.SG, XHM135.SG,
Natufian1 is I1072.AG,
And Russia_Sunghir_UP.SG3 is Sunghir3.SG
Thank you.
 
Ok, so I had done some two-way qpAdm models using Iron Age northwest Europeans and the old kingdom Egyptian NUE001

View attachment 18208
View attachment 18209
View attachment 18210
View attachment 18211



My FST distances to various modern global populations:

View attachment 18212

And no, I have no idea why I'm so distance to this Scottish sample is 0.008

Further testing of this near east signal using modern English + BedouinB and Scottish + BedouinB:

View attachment 18213
View attachment 18214
Are you sure you have North African/Near Eastern ancestry, and that it isn’t just capturing your southern shift due to the fact that you are an English person? I really feel like you’re just scoring near eastern admixture because you’re being modeled as Scottish, who are the most Northern European in the world. (alongside western Scandinavians, of course.)
 
Are you sure you have North African/Near Eastern ancestry, and that it isn’t just capturing your southern shift due to the fact that you are an English person? I really feel like you’re just scoring near eastern admixture because you’re being modeled as Scottish, who are the most Northern European in the world. (alongside western Scandinavians, of course.)
I thought about that, and it could be what you are describing. That it's picking up extra EEF/ANF from the French/English in my ancestry as opposed to lower EEF Northern Euros. I don't know, it could be that the Scotland IA samples and the Iron age Scandinavians just fit my genetic profile better than the England IA samples that were tried. ChatGPT said that using the more northern Euro samples would better isolate Near East. I shared a pic of a run that was done where it was a 3 way model with the northern euro sample, Phoenician, and ANF. That model failed and assigned negative ANF. The models where Mycenaeans and Minoans were used in 2-way qpAdm models weren't noticably better than using Near East samples.

One surprise is my Y-DNA haplo. It's more associated with the Mediterranean and Near East than Northern/Northwest Europe which leads me to think that some of this near east admix comes from Greek/Roman/Medieval period interactions that would also show up in other northwest Europeans today. Which shouldn't diminish the significance of it. It's there and detectable/measurable.

When I first joined this website, I shared my Eurogenes k13 2-way oracle results. It showed these meaniful 3-5+% admixtures from Bedouins, Egypt, Yemenite Jews etc. A member astutely pointed out that this admix could have come from my French ancestry. France is connected to the Mediterranean and by extension, the Near East. It's very plausible I inherited some real Near East admix from earlier Greco-Roman times.

1749751874091.png

1749751916747.png
 
I thought about that, and it could be what you are describing. That it's picking up extra EEF/ANF from the French/English in my ancestry as opposed to lower EEF Northern Euros. I don't know, it could be that the Scotland IA samples and the Iron age Scandinavians just fit my genetic profile better than the England IA samples that were tried. ChatGPT said that using the more northern Euro samples would better isolate Near East. I shared a pic of a run that was done where it was a 3 way model with the northern euro sample, Phoenician, and ANF. That model failed and assigned negative ANF. The models where Mycenaeans and Minoans were used in 2-way qpAdm models weren't noticably better than using Near East samples.

One surprise is my Y-DNA haplo. It's more associated with the Mediterranean and Near East than Northern/Northwest Europe which leads me to think that some of this near east admix comes from Greek/Roman/Medieval period interactions that would also show up in other northwest Europeans today. Which shouldn't diminish the significance of it. It's there and detectable/measurable.

When I first joined this website, I shared my Eurogenes k13 2-way oracle results. It showed these meaniful 3-5+% admixtures from Bedouins, Egypt, Yemenite Jews etc. A member astutely pointed out that this admix could have come from my French ancestry. France is connected to the Mediterranean and by extension, the Near East. It's very plausible I inherited some real Near East admix from earlier Greco-Roman times.

View attachment 18408
View attachment 18409
Try English + near east, whichever fits best.
 
Try English + near east, whichever fits best.
1750436128801.jpeg

Rights that were used: Mbuti.DG,Scottish.HO,BedouinA.DG,Lebanese.HO

Thats the best.




1750436962728.jpeg

Rights:Mbuti.DG,Scottish.HO,BedouinA.DG,Lebanese.HO


This is with Bedouins and with larger rights:

1750437128050.png


Others:
1750437477272.png


1750437243041.png


1750437316362.png

1750437383081.png


1750437685307.png


1750437869923.png
 
View attachment 18429
Rights that were used: Mbuti.DG,Scottish.HO,BedouinA.DG,Lebanese.HO

Thats the best.




View attachment 18432
Rights:Mbuti.DG,Scottish.HO,BedouinA.DG,Lebanese.HO


This is with Bedouins and with larger rights:

View attachment 18433

Others:
View attachment 18437

View attachment 18434

View attachment 18435
View attachment 18436

View attachment 18438

View attachment 18439
And do you pass better with a near east source in the model, or better without a near east source in the model?
 
And do you pass better with a near east source in the model, or better without a near east source in the model?
One good test would be for you to model yourself with English + Saudi with Mbuti.DG,Scottish.HO,BedouinA.DG,Lebanese.HO as the same right pops that were used in my model. I want to see what your results are. I'm thinking you have relatively similar ancestry to me. If you try it and the admix is smaller with higher standard errors, lower p-values, lower admixture assignments, or out right model failure, then it's more evidence in my case.
 
Back
Top