Skip to content
Snippets Groups Projects
Commit 86be9369 authored by Bertrand Servin's avatar Bertrand Servin
Browse files

Add paper

parent 06e0fe5d
No related branches found
No related tags found
1 merge request!1V0.2
project:
type: manuscript
execute:
freeze: auto
format:
html:
toc: true
comments:
hypothesis: true
docx: default
jats: default
pdf:
classoption: [12pt]
geometry:
- top=30mm
- left=25mm
- right=25mm
- bottom=25mm
keep-tex: true
template-partials:
- title.tex
include-in-header:
text: |
\usepackage[noblocks]{authblk}
\renewcommand*{\Authsep}{, }
\renewcommand*{\Authand}{, }
\renewcommand*{\Authands}{, }
\renewcommand\Affilfont{\small}
paper/figures/Figure1.png

174 KiB

paper/figures/Figure2.png

201 KiB

paper/figures/Figure3.png

357 KiB

---
title: 'SelNeTime: a python package inferring effective population size and selection intensity from genomic time series data'
tags:
- Python
- population genetics
- genomic time series
- Hidden Markov Models
- Beta with Spikes distribution
authors:
- name: Mathieu Uhl
orcid: 0009-0005-1635-8271
affil-id: 1,3
affiliation:
- ref: 1
- ref: 3
# (Multiple affiliations must be quoted)
- name:
given: Miguel
family: Navascués
dropping-particle: de
orcid: 0000-0001-8342-6047
affil-id: 1
#equal-contrib: true # (This is how you can denote equal contributions between multiple authors)
affiliation:
- ref: 1
- name: Simon Boitard
orcid: 0000-0002-2499-5052
equal-contrib: true
corresponding: true # (This is how to denote the corresponding author)
affil-id: 1
affiliation:
- ref: 1
- name: Bertrand Servin
orcid: 0000-0001-5141-0913
equal-contrib: true
affil-id: 2
affiliation:
- ref: 2
affiliations:
- name: CBGP, Université de Montpellier, CIRAD, INRAE, IRD, Institut Agro Montpellier, Montpellier, France
id: 1
- name: GenPhySE, Université de Toulouse, INRAE, INPT, Castanet-Tolosan, France
id: 2
- name: CEFE, CNRS, Montpellier, France
id: 3
date: today
bibliography: paper.bib
csl: pci.csl
---
# Summary
Genomic samples collected from a single population over several
generations provide direct access to the genetic diversity changes
occurring within a specific time period. This provides information
about both demographic and adaptive processes acting on the population
during that period. A common approach to analyze such data is to model
observed allele counts in finite samples using a Hidden Markov model
(HMM) where hidden states are true allele frequencies over time
(/i.e./ a trajectory). The HMM framework allows to compute the full
likelihood of the data, while accounting both for the stochastic
evolution of population allele frequencies along time and for the
noise arising from sampling a limited number of individuals at
possibly spread out generations. Several such HMM methods have been
proposed so far, differing mainly in the way they model the transition
probabilities of the Markov chain. Following @par2019, we consider
here the Beta with Spikes approximation, which avoids the
computational issues associated to the Wright-Fisher model while still
including fixation probabilities, in contrast to other standard
approximations of this model like the Gaussian or Beta
distributions. To facilitate the analysis and exploitation of genomic
time series data, we present an improved version of @par2019 's
approach, denoted SelNeTime, whose computation time is drastically
reduced and which accurately estimates effective population size in
addition to the selection intensity at each locus. This method is
implemented in a user friendly python package, which also allows to
easily simulate genomic time series data under a user-defined evolutionary
model and sampling design.
# Introduction
One limitation of most population genetic analyses is to use data from
a single time point, the present. The genetic diversity observed in
this single sample is very informative about past population history,
but it integrates the effect of many evolutionary processes acting on
a large time-scale, which may be hard to clearly separate. For
instance, selection constraints acting on a given locus often
fluctuate along time as a result of environmental changes, and such
complex and changing processes are difficult to reconstruct from the
observation of the resulting genetic diversity at a single recent time
point. In contrast, the study of samples collected at several
different generations allows to directly measure changes in the
genetic diversity of populations, informing about the evolutionary
processes acting on that specific time period. Such genomic time
series arise in different contexts and time scales, such as the
monitoring of wild or domestic populations [@boi2023], experimental
evolution [@lon2015] or ancient DNA [@fag2019] studies.
A common approach to analyze genomic time series data is to model
observed allele frequencies using a Hidden Markov model (HMM) ; this
approach allows computing the full likelihood of the data, while
accounting both for the stochastic evolution of population allele
frequencies along time, under the combined effects of demography and
selection, and for the noise arising from sampling a limited number of
individuals at different generations [@bol2008]. Several such HMM
methods have been proposed so far, differing mainly in the way they
model the transition probabilities of the Markov chain. Indeed, while
the Wright-Fisher (WF) model appears as a natural choice to model
these transitions, it leads to transition matrices whose dimension is
equal to the population size so it is limited in practice to small
populations. Among the various approximations (e.g. Gaussian, Beta)
that have been proposed to overcome this issue, the Beta with Spikes
(BwS) distribution [@tat2015] was pointed out by @par2019 as
particularly promising, because it combines a continuous (Beta)
density with discrete fixation probabilities in 0 and 1. These
features allow accurate estimations for a large range of demographic
and selective parameters [@par2019], while previous methods were
either impossible to run in large populations or inaccurate for some
parts of the parameter space (small populations, strong selection).
However, the current implementation of this method, compareHMM
[@compareHMM], considers a fixed effective population size provided by
the user, assuming that this parameter is known or has been previously
estimated from another software. Besides, it was initially implemented
as a test tool comparing different approximations of the Wright-Fisher
model in the context of genomic time series analyses, not as a real
package to be used by a large community. In particular, it was not
optimized to analyze very large data sets such as those typically
found in the genomics era.
With the objective of improving on these several limitations, the
SelNeTime package provides a user friendly and computationaly
efficient implementation of @par2019's method, allowing to estimate
effective population size and selection from genomic time series and
to simulate such data in order to easily test the expected performance
of the approach under custom sampling designs.
# Important features
## Estimation of effective population size
Given an observed temporal sequence of sampled allele counts
$\mathbf{Y}_i$ at a given locus $i$, the HMM approach described in
@par2019 can evaluate the (exact) likelihood $P(\mathbf{Y}_i|N,s_i)$
for any values of the effective population size $N$ and of the
selection intensity $s_i$. As indicated in the notations, $s_i$ is a
locus specific parameter, because selective contraints typically
differ between loci. In contrast, $N$ reflects the demography of the
population so a single value applies to the whole genome. Considering
$p$ loci assumed to be independent (which almost holds in practice if
these loci are taken sufficiently far away from each other) and
neglecting in first approximation the effect of selection at each of
these loci, SelNeTime computes the likelihood of $N$ as $$
P(\mathbf{Y}_1,\dots,\mathbf{Y}_p|N)=\prod_{i=1}^p
P(\mathbf{Y}_i|N,s_i=0) $$ and finds the Maximum Likelihood Estimator
(MLE) of $N$, i.e. the value of $N$ maximizing the above formula.
![Estimation of the effective population size for 100 datasets, using SelNeTime or NB [@nb]. Each dataset includes 1000 loci and 10 sampling times $t=1\dots10$ (red) or $t=1,10,\dots,100$ (blue). Allele frequency trajectories at each locus were simulated under the Wright-Fisher model with $N=100$, $s=0$ and an initial allele frequency $\pi_0=0.5$. 30 alleles were observed at each sampled generation.](figures/Figure1.png){#fig-nb}
Using computer simulations, we checked that this approach provides
accurate estimates of $N$, as illustrated in @fig-nb. As a comparison,
we estimated $N$ for the same data with the method of @hui2015,
implemented in the NB package [@nb], which is based on a continuous
Beta approximation of allele frequency transitions. Interestingly,
both methods performed equally well for short sampling time intervals
($dt=1$) but the accuracy of NB was reduced for larger time intervals
($dt=10$); this is consistent with the higher probability of fixation
events, which are not accounted in the method of @hui2015, when $dt$
increases, illustrating the advantage of the BwS approximation.
## Estimation of selection intensity at a given locus
![Estimation of the selection intensity for 1000 loci using SelNeTime. Allele frequency trajectories at each locus were simulated under the Wright-Fisher model with $N=100$, $s=0$ (purple) or $s=0.1$ (yellow) and an initial allele frequency $\pi_0=0.5$. 30 alleles were observed at 10 sampling times $t=1\dots10$.](figures/Figure2.png){#fig-sel}
Once the effective population size $N$ has been estimated, SelNeTime
estimates the selection intensity at each locus $i$ using the same
approach as @par2019, i.e. optimizing $P(\mathbf{Y}_i|N,s_i)$ over
different values of $s_i$ in order to find the MLE of this
parameter. This leads to unbiased estimations of the selection
intensity (@fig-sel), as already explored in details by @par2019 for a
large range of parameter values and various sampling designs.
## Improved computation time
Another important improvement of SelNeTime compared to the inital
implementation of the BwS approach in @compareHMM concerns the
computation time, which was reduced using two main actions. First, the
continuous density of the distribution was discretized when building
the transition matrices (with a controlled bin width), allowing this
continuous part of the distribution to be analyzed exactly in the same
way as the discrete probability mass points in 0 and 1. Second, matrix
computations performed at each iteration of the HMM forward algorithm
were vectorized, taking advantage of the Numpy library
[@harris2020array] to efficiently handle different loci or parameter
values in a single operation.
As an illustration, @tbl-computetime shows the computation time
required to analyze a time series of 10 samples of 30 alleles each,
with a sampling time interval of $dt=10$ generations and a number of
loci varying from 100 to 10000.
| Nb. loci | @compareHMM, estimation of $s$ | SelNeTime, estimation of $s$ | SelNeTime, estimation of $N$ |
|:-------:|:--------:|:----------:|:----------:|
| 100 | 39.27s | 28.7s | 6.12s |
| 1000 | 360.01s | 36.21s | 14.23s |
| 10000 | 3530.47s | 96.95s | 87.83s |
: Computation times of CompareHMM and SelNeTime {#tbl-computetime}
For 100 loci, SelNeTime runs in approximately the same time as
@compareHMM, but the relative performance of SelNeTime improves
quickly when the number of loci increases. Actually, the time to
compute all transition matrices, which is the first step of both
SelNeTime and @compareHMM analyses, is independent of the number of
loci (but it depends on the sampling design). This part of the
analysis took approximately 28s for SelNeTime in this example, which
was of the same order as @compareHMM, but after this the time spent
per locus was far lower with SelNeTime (approx. 0.007s) than with
@compareHMM (approx. 0.35s).
## Comparison with the Wright-Fisher model
While SelNeTime computes by default HMM transitions using the BwS
distribution, it might occasionaly be useful to compute them based on
the WF model, in particular to evaluate the impact of the BwS
approximation on inference quality. Although this is numerically
possible only for small population sizes (not more than a few
hundreds), we included one option to do this in the program. For a
true population size of $N=100$, we could for instance check that
using the BwS or the WF model had very limited impact on the inference
of either effective population size or selection (@fig-wf). A more
detailed comparison between the estimations obtained by the BwS and WF
distributions can be found in @par2019, but only for selection
inference.
![Comparing of SelNeTime estimations based on the Beta with Spikes and the Wright-Fisher model. Left: MLE of effective population size for 100 datasets of 1000 loci each. (B) MLE of $s$ for 1000 loci. The two panels show the estimations obtained using the WF (x axis) or the BwS (y axis) model on the same data, which were simulated under the Wright-Fisher model with $N=100$ $s=0$ (Left and Right, purple) or $s=0.1$ (Right, yellow) and initial allele frequencies $\pi_0=0.5$. 30 alleles were observed at 10 sampling times $t=1,10\dots100$.](figures/Figure3.png){#fig-wf}
## Simulation of datasets
As already observed in @par2019 and several other studies on the
subject, the estimation accuracy of effective population size or
selection depends on both the true evolutionary parameters of the
population under study ($N$ and $s$) and the sampling design of
observed data (number and size of observed samples, time intervals
between samples). In order to help researchers plan future
experiments, or interprete the results obtained for a specific
dataset, SelNeTime includes a simulator of observed allele frequency
trajectories. Simulations can easily be tunned using either a yaml
file or command line options and output data at a format that can
directly be analyzed with other SelNeTime commands. Notably, this
simulator was used to generate the data underlying the figures and
tables of this study.
# Acknowledgments
This study has recieved the support of the Occitanie Regional Council’s program 'Key challenge BiodivOc'.
We are also grateful to the genotoul bioinformatics platform Toulouse Occitanie
(Bioinfo Genotoul, https://doi.org/10.15454/1.5572369328961167E12) for providing computing resources.
# References
::: {#refs}
:::
@Article{ harris2020array,
title = {Array programming with {NumPy}},
author = {Charles R. Harris and K. Jarrod Millman and St{\'{e}}fan J.
van der Walt and Ralf Gommers and Pauli Virtanen and David
Cournapeau and Eric Wieser and Julian Taylor and Sebastian
Berg and Nathaniel J. Smith and Robert Kern and Matti Picus
and Stephan Hoyer and Marten H. van Kerkwijk and Matthew
Brett and Allan Haldane and Jaime Fern{\'{a}}ndez del
R{\'{i}}o and Mark Wiebe and Pearu Peterson and Pierre
G{\'{e}}rard-Marchant and Kevin Sheppard and Tyler Reddy and
Warren Weckesser and Hameer Abbasi and Christoph Gohlke and
Travis E. Oliphant},
year = {2020},
month = sep,
journal = {Nature},
volume = {585},
number = {7825},
pages = {357--362},
doi = {10.1038/s41586-020-2649-2},
publisher = {Springer Science and Business Media {LLC}},
url = {https://doi.org/10.1038/s41586-020-2649-2}
}
@article{boi2021,
title={Gene banks as reservoirs to detect recent selection: the example of the Asturiana de los Valles bovine breed},
author={Boitard, Simon and Paris, Cyriel and Sevane, Natalia and Servin, Bertrand and Bazi-Kabbaj, Kenza and Dunner, Susana},
journal={Frontiers in genetics},
volume={12},
year={2021},
publisher={Frontiers Media SA}
}
@article{boi2023,
title={Whole-genome sequencing of cryopreserved resources from French Large White pigs at two distinct sampling times reveals strong signatures of convergent and divergent selection between the dam and sire lines},
author={Boitard, Simon and Liaubet, Laurence and Paris, Cyriel and F{\`e}ve, Katia and Dehais, Patrice and Bouquet, Alban and Riquet, Juliette and Mercat, Marie-Jos{\'e}},
journal={Genetics Selection Evolution},
volume={55},
number={1},
pages={13},
year={2023},
publisher={Springer}
}
@article{bol2008,
author = "Bollback, Jonathan P. and York, Thomas L. and Nielsen, Rasmus",
journal = "Genetics",
localfile = "Source/Estimation of 2Nes from temporal allele frequency data - Bollback (2008).pdf",
title = "{Estimation of $2N_es$ from temporal allele frequency data}",
x-color = "#009966",
year = "2008"
}
@misc{compareHMM,
author = {Paris, Cyriel and Servin, Bertrand and Boitard, Simon},
title = {compareHMM},
year = {2019},
publisher = {GitHub},
journal = {GitHub repository},
url = {https://github.com/CyrielParis/compareHMM}
}
@article{fag2019,
author = "{Fages Antoine} and {Hangh{\o}j Kristian} and {Khan Naveed} and {Gaunitz Charleen} and {Seguin-Orlando Andaine} and {Leonardi Michela} and {McCrory Constantz Christian} and {Gamba Cristina} and {Al-Rasheid Khaled A.S.} and {Albizuri Silvia} and {Alfarhan Ahmed H.} and {Allentoft Morten} and {Alquraishi Saleh} and {Anthony David} and {Baimukhanov Nurbol} and {Barrett James H.} and {Bayarsaikhan Jamsranjav} and {Benecke Norbert} and {Bern{\'a}ldez-S{\'a}nchez Elo{\'i}sa} and {Berrocal-Rangel Luis} and {Biglari Fereidoun} and {Boessenkool Sanne} and {Boldgiv Bazartseren} and {Brem Gottfried} and {Brown Dorcas} and {Burger Joachim} and {Crub{\'e}zy Eric} and {Daugnora Linas} and {Davoudi Hossein} and Peter, de Barros Damgaard and Mar{\'i}a, de los {\'A}ngeles de Chorro y de Villa-Ceballos and {Deschler-Erb Sabine} and {Detry Cleia} and {Dill Nadine} and Maria, do Mar Oom and {Dohr Anna} and {Ellingv{\aa}g Sturla} and {Erdenebaatar Diimaajav} and {Fathi Homa} and {Felkel Sabine} and {Fern{\'a}ndez-Rodr{\'i}guez Carlos} and {Garc{\'i}a-Vi{\~n}as Esteban} and {Germonpr{\'e} Mietje} and {Granado Jos{\'e} D.} and {Hallsson J{\'o}n H.} and {Hemmer Helmut} and {Hofreiter Michael} and {Kasparov Aleksei} and {Khasanov Mutalib} and {Khazaeli Roya} and {Kosintsev Pavel} and {Kristiansen Kristian} and {Kubatbek Tabaldiev} and {Kuderna Lukas} and {Kuznetsov Pavel} and {Laleh Haeedeh} and {Leonard Jennifer A.} and {Lhuillier Johanna} and {Liesau von Lettow-Vorbeck Corina} and {Logvin Andrey} and {Lõugas Lembi} and {Ludwig Arne} and {Luis Cristina} and {Arruda Ana Margarida} and {Marques-Bonet Tomas} and {Matoso Silva Raquel} and {Merz Victor} and {Mijiddorj Enkhbayar} and {Miller Bryan K.} and {Monchalov Oleg} and {Mohaseb Fatemeh A.} and {Morales Arturo} and {Nieto-Espinet Ariadna} and {Nistelberger Heidi} and {Onar Vedat} and {P{\'a}lsd{\'o}ttir Alb{\'i}na H.} and {Pitulko Vladimir} and {Pitskhelauri Konstantin} and {Pruvost M{\'e}lanie} and {Rajic Sikanjic Petra} and {Rapan Pape\v{s}a Anita} and {Roslyakova Natalia} and {Sardari Alireza} and {Sauer Eberhard} and {Schafberg Renate} and {Scheu Amelie} and {Schibler J{\"o}rg} and {Schlumbaum Angela} and {Serrand Nathalie} and {Serres-Armero Aitor} and {Shapiro Beth} and {Sheikhi Seno Shiva} and {Shevnina Irina} and {Shidrang Sonia} and {Southon John} and {Star Bastiaan} and {Sykes Naomi} and {Taheri Kamal} and {Taylor William} and {Teegen Wolf-R{\"u}diger} and {Trbojevi{\'c} Vuki\v{c}evi{\'c} Tajana} and {Trixl Simon} and {Tumen Dashzeveg} and {Undrakhbold Sainbileg} and {Usmanova Emma} and {Vahdati Ali} and {Valenzuela-Lamas Silvia} and {Viegas Catarina} and {Wallner Barbara} and {Weinstock Jaco} and {Zaibert Victor} and {Clavel Benoit} and {Lepetz S{\'e}bastien} and {Mashkour Marjan} and {Helgason Agnar} and {Stef{\'a}nsson K{\'a}ri} and {Barrey Eric} and {Willerslev Eske} and {Outram Alan K.} and {Librado Pablo} and {Orlando Ludovic}",
issn = "0092-8674",
journal = "Cell",
number = "6",
pages = "1419--1435.e31",
publisher = "Elsevier",
title = "{Tracking Five Millennia of Horse Management with Extensive Ancient Genome Time Series}",
volume = "177",
year = "2019"
}
@article{hui2015,
author = "Hui, Tin-Yu J. and Burt, Austin",
issn = "0016-6731",
journal = "Genetics",
number = "1",
pages = "285--293",
publisher = "Genetics",
title = "{Estimating Effective Population Size from Temporally Spaced Samples with a Novel, Efficient Maximum-Likelihood Algorithm}",
volume = "200",
year = "2015"
}
@article{lon2015,
title={Elucidating the molecular architecture of adaptation via evolve and resequence experiments},
author={Long, Anthony and Liti, Gianni and Luptak, Andrej and Tenaillon, Olivier},
journal={Nature Reviews Genetics},
volume={16},
number={10},
pages={567--582},
year={2015},
publisher={Nature Publishing Group UK London}
}
@article{mal2015,
author = "Malaspinas, Anna-Sapfo",
journal = "Molecular Ecology",
month = nov,
number = "1",
pages = "24--41",
title = "{Methods to characterize selective sweeps using time serial samples: an ancient DNA perspective}",
volume = "25",
year = "2015"
}
@misc{nb,
author = {"Hui, Tin-Yu J."},
title = {NB: Maximum Likelihood method in estimating effective population size from genetic data},
year = {2014},
publisher = {CRAN},
journal = {CRAN repository},
url = {https://cran.r-project.org/web/packages/NB}
}
@article{par2019,
title={Inference of selection from genetic time series using various parametric approximations to the Wright-Fisher model},
author={Paris, Cyriel and Servin, Bertrand and Boitard, Simon},
journal={G3: Genes, Genomes, Genetics},
volume={9},
number={12},
pages={4073--4086},
year={2019},
publisher={Oxford University Press}
}
@article{tat2015,
author = "Tataru, Paula and Bataillon, Thomas and Hobolth, Asger",
doi = "10.1534/genetics.115.179606",
eprint = "https://www.genetics.org/content/201/3/1133.full.pdf",
issn = "0016-6731",
journal = "Genetics",
number = "3",
pages = "1133--1141",
publisher = "Genetics",
title = "{Inference under a wright-fisher model using an accurate beta approximation}",
url = "https://www.genetics.org/content/201/3/1133",
volume = "201",
year = 2015
}
<?xml version="1.0" encoding="utf-8"?>
<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" default-locale="en-US" demote-non-dropping-particle="sort-only">
<info>
<title>Peer Community Journal - PCI</title>
<id>http://www.zotero.org/styles/peer-community-journal</id>
<link href="http://www.zotero.org/styles/molecular-ecology" rel="self"/>
<link href="http://www.zotero.org/styles/ecology-letters" rel="template"/>
<link href="http://www.wiley.com/bw/submit.asp?ref=0962-1083&amp;site=1" rel="documentation"/>
<author>
<name>Xiaodong Dang</name>
<email>dangxdong@gmail.com</email>
</author>
<contributor>
<name>Johan Asplund</name>
<email>asplundj@gmail.com</email>
</contributor>
<contributor>
<name>David Kaplan</name>
<email>david.kaplan@ird.fr</email>
</contributor>
<contributor>
<name>Thomas Guillemaud</name>
<email>thomas.guillemaud@inrae.fr</email>
</contributor>
<category citation-format="author-date"/>
<category field="biology"/>
<issn>1365-294X</issn>
<issn>0962-1083</issn>
<updated>2021-09-23T13:46:03+00:00</updated>
<rights>This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/</rights>
</info>
<macro name="editor-translator">
<names variable="editor translator" prefix=" (" delimiter=", " suffix=")">
<name initialize-with="" delimiter=", "/>
<label form="short" prefix=", " text-case="capitalize-first" suffix="," strip-periods="true"/>
</names>
</macro>
<macro name="author">
<names variable="author">
<name name-as-sort-order="all" sort-separator=" " initialize-with="" delimiter=", "/>
<!--TO DO: add delimiter-precedes-et-al="never" with csl 1.0.1-->
<label form="short" prefix=" (" suffix=".)" text-case="capitalize-first" strip-periods="true"/>
<et-al font-style="italic"/>
<substitute>
<names variable="editor"/>
<names variable="translator"/>
<text macro="title"/>
</substitute>
</names>
</macro>
<macro name="author-short">
<names variable="author">
<name form="short" and="symbol" delimiter=", " initialize-with=". "/>
<substitute>
<names variable="editor"/>
<names variable="translator"/>
<choose>
<if type="bill book graphic legal_case legislation motion_picture report song" match="any">
<text variable="title" form="short" font-style="italic"/>
</if>
<else>
<text variable="title" form="short" quotes="true"/>
</else>
</choose>
</substitute>
</names>
</macro>
<macro name="title">
<choose>
<if type="bill book graphic legal_case legislation motion_picture report song" match="any">
<text variable="title" font-style="italic"/>
</if>
<else>
<text variable="title"/>
</else>
</choose>
</macro>
<macro name="publisher">
<group delimiter=", ">
<text variable="publisher"/>
<text variable="publisher-place"/>
</group>
</macro>
<citation collapse="year-suffix" et-al-min="3" et-al-use-first="1" et-al-subsequent-min="3" et-al-subsequent-use-first="1" disambiguate-add-year-suffix="true" disambiguate-add-names="true">
<sort>
<key variable="issued"/>
<key variable="author"/>
</sort>
<layout prefix="(" suffix=")" delimiter="; ">
<group delimiter=", ">
<text macro="author-short"/>
<date variable="issued">
<date-part name="year"/>
</date>
<group>
<label variable="locator" suffix="." form="short" strip-periods="true"/>
<text variable="locator" prefix=" "/>
</group>
</group>
</layout>
</citation>
<bibliography hanging-indent="true" et-al-min="300" et-al-use-first="3" entry-spacing="0" line-spacing="2">
<sort>
<key macro="author-short"/>
<key variable="issued"/>
</sort>
<layout>
<text macro="author" suffix=" "/>
<date variable="issued" prefix="(" suffix=")">
<date-part name="year"/>
</date>
<choose>
<if type="bill book graphic legal_case legislation motion_picture report song" match="any">
<group suffix=".">
<text macro="title" prefix=" "/>
<text macro="editor-translator" prefix=" "/>
</group>
<text prefix=" " suffix="." macro="publisher"/>
</if>
<else-if type="thesis" match="any">
<group suffix=".">
<text macro="title" prefix=" " suffix="."/>
<text variable="genre" prefix=" " suffix=" Thesis."/>
<text prefix=" " macro="publisher"/>
</group>
</else-if>
<else-if type="chapter paper-conference" match="any">
<text macro="title" prefix=" "/>
<group prefix=".">
<group prefix=" In:" suffix="">
<text variable="container-title" font-style="italic" prefix=" " suffix=" "/>
<text variable="collection-title" prefix=" " suffix="."/>
<names variable="editor translator" prefix=" (" delimiter=", " suffix=")">
<label form="short" text-case="lowercase" suffix=" " strip-periods="true"/>
<name name-as-sort-order="all" sort-separator=" " initialize-with="" delimiter=", " delimiter-precedes-last="never"/>
</names>
<group suffix=".">
<label variable="page" form="short" prefix=", " suffix=". " strip-periods="true"/>
<text variable="page" suffix=""/>
<text macro="publisher" prefix=". " suffix="."/>
</group>
</group>
</group>
</else-if>
<else>
<group suffix=".">
<text macro="title" prefix=" "/>
<text macro="editor-translator" prefix=" "/>
</group>
<group prefix=" " suffix=".">
<text variable="container-title" font-style="italic"/>
<group prefix=", ">
<text variable="volume" font-weight="bold"/>
</group>
<text variable="page" prefix=", "/>
</group>
</else>
</choose>
<text variable="DOI" prefix=". https://doi.org/"/>
</layout>
</bibliography>
</style>
\ No newline at end of file
$if(title)$
\title{$title$$if(thanks)$\thanks{$thanks$}$endif$}
$endif$
$if(subtitle)$
\subtitle{$subtitle$}
$endif$
$for(by-author)$
\author$if(it.metadata.affil-id)$[$it.metadata.affil-id$]$endif${$it.name.literal$}
$endfor$
$if(by-affiliation)$
$for(by-affiliation)$
\affil[$it.id$]{$it.name$}
$endfor$
$endif$
\date{$date$}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment