Skip to contents

Predict the PCA scores for a gt_pca, either for the original data or projecting new data.

Usage

# S3 method for class 'gt_pca'
predict(
  object,
  new_data = NULL,
  project_method = c("none", "simple", "OADP", "least_squares"),
  lsq_pcs = c(1, 2),
  block_size = NULL,
  n_cores = 1,
  as_matrix = TRUE,
  ...
)

Arguments

object

the gt_pca object

new_data

a gen_tibble if scores are requested for a new dataset

project_method

a string taking the value of either "simple", "OADP" (Online Augmentation, Decomposition, and Procrustes (OADP) projection), or "least_squares" (as done by SMARTPCA)

lsq_pcs

a vector of length two with the values of the two principal components to use for the least square fitting. Only relevant ifproject_method = 'least_squares'

block_size

number of loci read simultaneously (larger values will speed up computation, but require more memory)

n_cores

number of cores

as_matrix

logical, whether to return the result as a matrix (default) or a tibble.

...

no used

Value

a matrix of predictions (in line with predict using a prcomp object) or a tibble, with samples as rows and components as columns. The number of components depends on how many were estimated in the gt_pca object.

References

Zhang et al (2020). Fast and robust ancestry prediction using principal component analysis 36(11): 3439–3446.

Examples

# Create a gen_tibble of lobster genotypes
bed_file <-
  system.file("extdata", "lobster", "lobster.bed", package = "tidypopgen")
lobsters <- gen_tibble(bed_file,
  backingfile = tempfile("lobsters"),
  quiet = TRUE
)

# Remove monomorphic loci and impute
lobsters <- lobsters %>% select_loci_if(loci_maf(genotypes) > 0)
lobsters <- gt_impute_simple(lobsters, method = "mode")

# Subset into two datasets: one original and one to predict
original_lobsters <- lobsters[c(1:150), ]
new_lobsters <- lobsters[c(151:176), ]

# Create PCA object
pca <- gt_pca_partialSVD(original_lobsters)

# Predict
predict(pca, new_data = new_lobsters, project_method = "simple")
#>              .PC1        .PC2        .PC3        .PC4        .PC5        .PC6
#> Vig11  0.84495324 -1.32057095  0.95199040  1.94839846  0.80850195 -2.48726987
#> Vig12 -0.07065694 -1.50166991  1.47821253 -0.65881868 -0.32228405  0.50084850
#> Vig13  0.58238791  0.39219100  0.99630978 -0.63288948 -1.20847141  1.38919001
#> Vig14 -1.99602145 -2.72731004  2.62251475 -1.98680500 -0.34075528 -0.12146277
#> Vig15  2.26512567 -0.95914412  0.02818837 -0.50138973  0.62787179 -0.64795356
#> Vig16 -1.61997544  0.15563731 -0.40919334  0.11173586  0.50622350  1.11854701
#> Vig17 -0.89287211 -3.18719723 -1.20601118  2.34870824 -2.33942914 -1.56549736
#> Vig18  1.05375670 -6.10652671 -0.82400057 -0.09187650  0.69699406 -1.40561403
#> Vig19 -1.17999551 -2.76944741  1.15010211 -1.20380960  0.24458605 -0.33721468
#> Vig20 -1.13094344 -2.51297661  1.29598913 -1.95585394 -1.40074692 -1.72114107
#> Vig21  1.45168737 -3.78272355 -0.65105851  1.25919966 -0.05981051 -0.72402871
#> Vig22  3.21701452 -4.81619496  1.41010615 -0.35000653  1.17661661 -2.28860783
#> Vig23 -1.90947818 -2.65470446 -0.37492036 -0.29023475 -2.52320183 -0.30582156
#> Vig24  1.28030055 -0.07325206  1.09767261  0.03358915 -1.70200452  0.14763356
#> Vig25 -2.52427515  0.39525228  0.57686195 -1.08051656 -0.36361029  0.71910092
#> Vig26 -0.75644140 -4.01534680  1.22994589  1.73545488 -1.08699849  0.77562836
#> Vig27  1.70410788 -0.05110208  1.16705289  1.26292192 -0.14261284 -0.59887368
#> Vig28 -0.21966527 -1.09228344  1.82206389 -0.11802565 -0.81543990 -1.93059542
#> Vig29 -1.80466347 -1.03162891  2.07763585 -0.30734296  1.41805841 -1.44704073
#> Vig30  0.69482871 -0.79526772  0.91429649 -0.73744265  0.63946822 -0.00832335
#> Vig31  0.28195945 -6.36122988  0.56220908  0.58385324  0.78660638 -2.00252223
#> Vig32 -0.93086395 -2.42914291  0.98211553 -0.10126105  0.17805143  0.96874494
#> Vig33 -0.37248494 -3.62456011  0.65785222  0.40916552 -0.56166707  0.26276509
#> Vig34 -0.30753874 -6.81517053 -1.18709724 -0.09927797 -1.72030191 -1.27847587
#> Vig35 -2.43398848  0.60635980 -1.25686251  0.32353264 -0.15047601  1.41621901
#> Vig36  1.46467362 -4.46678967  2.53264029 -1.12870891 -0.20734613 -1.62905258
#>              .PC7        .PC8        .PC9       .PC10
#> Vig11  1.52777096 -1.51131063  0.74038292  0.01516207
#> Vig12 -0.12498898 -1.68443455  0.56254200 -0.48023226
#> Vig13 -0.02183661  1.28402899 -0.53105701  0.39991004
#> Vig14 -1.09481998 -1.78278611  0.72962139  0.74706789
#> Vig15  2.52704695 -0.81028103  1.56008567  1.21557644
#> Vig16  2.00582704  0.54789136 -0.95219207  0.20802815
#> Vig17  1.66238380  0.50856597 -0.03069758  1.13355924
#> Vig18 -0.36586879 -1.80176553  1.02610432 -1.85184381
#> Vig19 -0.31767420 -0.73445721 -0.22502040 -0.21155048
#> Vig20  2.10001332 -0.18007731 -0.76794917  0.02148115
#> Vig21  2.14159315 -2.00469523 -1.51150345  0.26520736
#> Vig22  0.35367486 -0.92968102  1.07611369 -2.00758176
#> Vig23  1.66242946  0.01520255  1.36135538  0.81743107
#> Vig24  1.11196915  0.56990781  0.16502708  1.12759456
#> Vig25  0.79085512  1.63079533  0.33625704  1.32880574
#> Vig26 -0.80559424  0.35422467 -0.02250144 -3.08140603
#> Vig27  1.93681287 -1.54261398  1.95076197  1.56666492
#> Vig28  0.70739380 -0.95388559  1.45470073  0.38913439
#> Vig29  0.12506807  0.88350450  0.31998914  0.27068806
#> Vig30  0.42978594 -0.75662056  0.38966104  0.22344619
#> Vig31  0.72805753  0.71855592  0.24921606  0.42971234
#> Vig32 -0.35527173 -1.01854014 -0.55387443  1.04468276
#> Vig33  0.02694817 -1.19006766  0.27706970 -2.34531402
#> Vig34  0.53566592  1.62395351  0.75212462 -0.61787774
#> Vig35  0.65649555 -1.25456935 -0.63035895 -0.19707490
#> Vig36  2.06423654 -1.37240744  1.98663932 -0.75062139

# Predict with OADP
predict(pca, new_data = new_lobsters, project_method = "OADP")
#>              .PC1        .PC2        .PC3       .PC4        .PC5       .PC6
#> Vig11  0.89730930 -1.46636303  1.14351172  2.4359043  1.01915444 -3.1448299
#> Vig12 -0.07420107 -1.63420957  1.71061677 -0.7861686 -0.38700249  0.6028120
#> Vig13  0.62705559  0.44619604  1.25001301 -0.8350496 -1.61118140  1.8592399
#> Vig14 -2.08080051 -2.93066453  2.96913603 -2.3086783 -0.39806609 -0.1421679
#> Vig15  2.41022742 -1.06868561  0.03406264 -0.6314546  0.79751036 -0.8256000
#> Vig16 -1.72395889  0.17340689 -0.49408163  0.1405351  0.64206631  1.4230896
#> Vig17 -0.95308173 -3.57268268 -1.47493051  3.0038994 -3.01982148 -2.0276899
#> Vig18  1.11663168 -6.75697692 -0.98416390 -0.1140875  0.87244710 -1.7646337
#> Vig19 -1.24474568 -3.03780815  1.34981119 -1.4616112  0.29903569 -0.4133387
#> Vig20 -1.18708181 -2.73309619  1.49915896 -2.3335754 -1.68188082 -2.0713907
#> Vig21  1.53291181 -4.15843943 -0.76801709  1.5393596 -0.07365531 -0.8940289
#> Vig22  3.33481205 -5.12508629  1.56964673 -0.3984072  1.34543129 -2.6213354
#> Vig23 -2.01596603 -2.91707173 -0.44175403 -0.3542353 -3.10193978 -0.3769667
#> Vig24  1.37208979 -0.08264588  1.35614475  0.0434720 -2.22400661  0.1935946
#> Vig25 -2.64033034  0.42714612  0.65939444 -1.2701136 -0.42985734  0.8518972
#> Vig26 -0.79477312 -4.37544584  1.42836887  2.0811726 -1.31214200  0.9385453
#> Vig27  1.77091305 -0.05460700  1.30822356  1.4497249 -0.16450152 -0.6920186
#> Vig28 -0.23248841 -1.20534202  2.16272138 -0.1453498 -1.01184624 -2.4022659
#> Vig29 -1.91695225 -1.14571184  2.49432338 -0.3838393  1.78543395 -1.8273672
#> Vig30  0.73195749 -0.87012898  1.06793256 -0.8899979  0.77693514 -0.0101375
#> Vig31  0.29032128 -6.68971489  0.61286540  0.6477985  0.87589060 -2.2327502
#> Vig32 -0.97131000 -2.61395894  1.11403133 -0.1179058  0.20842652  1.1362299
#> Vig33 -0.39104264 -3.94297198  0.76113873  0.4882581 -0.67448688  0.3162787
#> Vig34 -0.32650580 -7.56719576 -1.42692375 -0.1242634 -2.17127575 -1.6185803
#> Vig35 -2.58340808  0.67242234 -1.50457785  0.4025691 -0.18872917  1.7814357
#> Vig36  1.53813454 -4.86368857  2.93793415 -1.3518221 -0.24996330 -1.9686106
#>              .PC7       .PC8        .PC9       .PC10
#> Vig11  1.95234868 -1.9642099  0.98197318  0.02028417
#> Vig12 -0.15165556 -2.0700794  0.70196060 -0.60314481
#> Vig13 -0.02962272  1.7797042 -0.75539295  0.57518975
#> Vig14 -1.29022953 -2.1237486  0.88040369  0.90637989
#> Vig15  3.25554347 -1.0622741  2.08867165  1.64207875
#> Vig16  2.57978692  0.7168963 -1.27191013  0.28033492
#> Vig17  2.17912415  0.6794603 -0.04196384  1.56483356
#> Vig18 -0.46409685 -2.3233174  1.34945373 -2.45593814
#> Vig19 -0.39289152 -0.9213192 -0.28709492 -0.27186024
#> Vig20  2.54807945 -0.2213368 -0.95857439  0.02698959
#> Vig21  2.66956533 -2.5366278 -1.94721012  0.34427612
#> Vig22  0.40746993 -1.0810077  1.26508571 -2.37112079
#> Vig23  2.06837911  0.0191963  1.74966644  1.05853075
#> Vig24  1.47636775  0.7717487  0.22884625  1.57960635
#> Vig25  0.94380702  1.9688776  0.41161891  1.63618425
#> Vig26 -0.98311420  0.4381242 -0.02828174 -3.89951777
#> Vig27  2.25202988 -1.8113689  2.31756977  1.87049387
#> Vig28  0.88885861 -1.2172637  1.89109084  0.50987644
#> Vig29  0.15960429  1.1463640  0.42355155  0.36135013
#> Vig30  0.52799439 -0.9422649  0.49323663  0.28480387
#> Vig31  0.81550363  0.8107047  0.28360218  0.49078167
#> Vig32 -0.41956110 -1.2159306 -0.66979029  1.27023446
#> Vig33  0.03270156 -1.4628520  0.34585806 -2.94677444
#> Vig34  0.68551631  2.1140967  0.99945645 -0.82828812
#> Vig35  0.83430956 -1.6204983 -0.83024434 -0.26173005
#> Vig36  2.51565901 -1.6950287  2.49319130 -0.94843772

# Predict with least squares
predict(pca,
  new_data = new_lobsters,
  project_method = "least_squares", lsq_pcs = c(1, 2)
)
#>             .PC1        .PC2
#> Vig11  0.8449532 -1.32057095
#> Vig12 -0.1088606 -1.79996190
#> Vig13  0.5823879  0.39219100
#> Vig14 -1.9960214 -2.72731004
#> Vig15  2.2651257 -0.95914412
#> Vig16 -1.6199754  0.15563731
#> Vig17 -1.0314321 -3.23991878
#> Vig18  1.0537567 -6.10652671
#> Vig19 -1.1799955 -2.76944741
#> Vig20 -1.1309434 -2.51297661
#> Vig21  1.4516874 -3.78272355
#> Vig22  3.2170145 -4.81619496
#> Vig23 -1.9094782 -2.65470446
#> Vig24  1.2803005 -0.07325206
#> Vig25 -2.5242751  0.39525228
#> Vig26 -0.7564414 -4.01534680
#> Vig27  1.7041079 -0.05110208
#> Vig28 -0.2233053 -1.09747960
#> Vig29 -1.8046635 -1.03162891
#> Vig30  0.6934134 -0.79727293
#> Vig31  0.2819594 -6.36122988
#> Vig32 -0.9308639 -2.42914291
#> Vig33 -0.3724849 -3.62456011
#> Vig34 -0.2919582 -6.89773149
#> Vig35 -2.4364457  0.61938077
#> Vig36  1.4646736 -4.46678967

# Return a tibble
predict(pca, new_data = new_lobsters, as_matrix = FALSE)
#> # A tibble: 26 × 11
#>    id      .PC1   .PC2    .PC3    .PC4   .PC5   .PC6    .PC7   .PC8   .PC9
#>    <chr>  <dbl>  <dbl>   <dbl>   <dbl>  <dbl>  <dbl>   <dbl>  <dbl>  <dbl>
#>  1 Vig11  0.845 -1.32   0.952   1.95    0.809 -2.49   1.53   -1.51   0.740
#>  2 Vig12 -0.746 -1.19   1.34   -0.726  -0.481  0.306 -0.180  -1.88   0.511
#>  3 Vig13  0.582  0.392  0.996  -0.633  -1.21   1.39  -0.0218  1.28  -0.531
#>  4 Vig14 -2.00  -2.73   2.62   -1.99   -0.341 -0.121 -1.09   -1.78   0.730
#>  5 Vig15  2.27  -0.959  0.0282 -0.501   0.628 -0.648  2.53   -0.810  1.56 
#>  6 Vig16 -1.62   0.156 -0.409   0.112   0.506  1.12   2.01    0.548 -0.952
#>  7 Vig17 -1.11  -3.27  -1.24    2.28   -2.37  -1.54   1.67    0.428 -0.176
#>  8 Vig18  1.05  -6.11  -0.824  -0.0919  0.697 -1.41  -0.366  -1.80   1.03 
#>  9 Vig19 -1.18  -2.77   1.15   -1.20    0.245 -0.337 -0.318  -0.734 -0.225
#> 10 Vig20 -1.13  -2.51   1.30   -1.96   -1.40  -1.72   2.10   -0.180 -0.768
#> # ℹ 16 more rows
#> # ℹ 1 more variable: .PC10 <dbl>

# Adjust block.size
predict(pca, new_data = new_lobsters, block_size = 10)
#>             .PC1        .PC2        .PC3        .PC4        .PC5        .PC6
#> Vig11  0.8449532 -1.32057095  0.95199040  1.94839846  0.80850195 -2.48726987
#> Vig12 -0.7461382 -1.18627774  1.34460570 -0.72604859 -0.48069122  0.30572175
#> Vig13  0.5823879  0.39219100  0.99630978 -0.63288948 -1.20847141  1.38919001
#> Vig14 -1.9960214 -2.72731004  2.62251475 -1.98680500 -0.34075528 -0.12146277
#> Vig15  2.2651257 -0.95914412  0.02818837 -0.50138973  0.62787179 -0.64795356
#> Vig16 -1.6199754  0.15563731 -0.40919334  0.11173586  0.50622350  1.11854701
#> Vig17 -1.1110388 -3.27020882 -1.23906625  2.28063954 -2.37335730 -1.54383228
#> Vig18  1.0537567 -6.10652671 -0.82400057 -0.09187650  0.69699406 -1.40561403
#> Vig19 -1.1799955 -2.76944741  1.15010211 -1.20380960  0.24458605 -0.33721468
#> Vig20 -1.1309434 -2.51297661  1.29598913 -1.95585394 -1.40074692 -1.72114107
#> Vig21  1.4516874 -3.78272355 -0.65105851  1.25919966 -0.05981051 -0.72402871
#> Vig22  3.2170145 -4.81619496  1.41010615 -0.35000653  1.17661661 -2.28860783
#> Vig23 -1.9094782 -2.65470446 -0.37492036 -0.29023475 -2.52320183 -0.30582156
#> Vig24  1.2803005 -0.07325206  1.09767261  0.03358915 -1.70200452  0.14763356
#> Vig25 -2.5242751  0.39525228  0.57686195 -1.08051656 -0.36361029  0.71910092
#> Vig26 -0.7564414 -4.01534680  1.22994589  1.73545488 -1.08699849  0.77562836
#> Vig27  1.7041079 -0.05110208  1.16705289  1.26292192 -0.14261284 -0.59887368
#> Vig28 -0.1765855 -1.03078650  1.97855185 -0.22492693 -0.96831542 -2.02312805
#> Vig29 -1.8046635 -1.03162891  2.07763585 -0.30734296  1.41805841 -1.44704073
#> Vig30  0.7479859 -0.71995438  1.08461798 -0.80963486  0.63013991 -0.05207368
#> Vig31  0.2819594 -6.36122988  0.56220908  0.58385324  0.78660638 -2.00252223
#> Vig32 -0.9308639 -2.42914291  0.98211553 -0.10126105  0.17805143  0.96874494
#> Vig33 -0.3724849 -3.62456011  0.65785222  0.40916552 -0.56166707  0.26276509
#> Vig34 -0.3262743 -6.71589081 -1.14051137 -0.12775555 -1.68695822 -1.41827318
#> Vig35 -2.4527241  0.70563952 -1.21027664  0.29505506 -0.11713232  1.27642171
#> Vig36  1.4646736 -4.46678967  2.53264029 -1.12870891 -0.20734613 -1.62905258
#>              .PC7        .PC8        .PC9       .PC10
#> Vig11  1.52777096 -1.51131063  0.74038292  0.01516207
#> Vig12 -0.17965094 -1.88387628  0.51083352 -0.33320105
#> Vig13 -0.02183661  1.28402899 -0.53105701  0.39991004
#> Vig14 -1.09481998 -1.78278611  0.72962139  0.74706789
#> Vig15  2.52704695 -0.81028103  1.56008567  1.21557644
#> Vig16  2.00582704  0.54789136 -0.95219207  0.20802815
#> Vig17  1.67054359  0.42798506 -0.17562231  1.20681868
#> Vig18 -0.36586879 -1.80176553  1.02610432 -1.85184381
#> Vig19 -0.31767420 -0.73445721 -0.22502040 -0.21155048
#> Vig20  2.10001332 -0.18007731 -0.76794917  0.02148115
#> Vig21  2.14159315 -2.00469523 -1.51150345  0.26520736
#> Vig22  0.35367486 -0.92968102  1.07611369 -2.00758176
#> Vig23  1.66242946  0.01520255  1.36135538  0.81743107
#> Vig24  1.11196915  0.56990781  0.16502708  1.12759456
#> Vig25  0.79085512  1.63079533  0.33625704  1.32880574
#> Vig26 -0.80559424  0.35422467 -0.02250144 -3.08140603
#> Vig27  1.93681287 -1.54261398  1.95076197  1.56666492
#> Vig28  0.56401377 -0.97511516  1.32664358  0.44977954
#> Vig29  0.12506807  0.88350450  0.31998914  0.27068806
#> Vig30  0.41996665 -0.90250715  0.30991115  0.25806489
#> Vig31  0.72805753  0.71855592  0.24921606  0.42971234
#> Vig32 -0.35527173 -1.01854014 -0.55387443  1.04468276
#> Vig33  0.02694817 -1.19006766  0.27706970 -2.34531402
#> Vig34  0.51631535  1.67658793  0.68897116 -0.66022471
#> Vig35  0.63714498 -1.20193493 -0.69351240 -0.23942188
#> Vig36  2.06423654 -1.37240744  1.98663932 -0.75062139