dndsml

Оцените синонимичные и несинонимичные уровни замены с помощью метода максимального правдоподобия

Синтаксис

[Dn, Ds, Like] = dndsml(SeqNT1, SeqNT2)
[Dn, Ds, Like] = dndsml(SeqNT1, SeqNT2, ...'GeneticCode', GeneticCodeValue, ...)
[Dn, Ds, Like] = dndsml(SeqNT1, SeqNT2, ...'Verbose', VerboseValue, ...)

Входные параметры

SeqNT1, SeqNT2Последовательности нуклеотида. Введите вектор символов, строку или структуру с полем Sequence.
GeneticCodeValueСвойство задать генетический код. Введите Номер кода, вектор символов или строку с Кодовым названием из таблицы Genetic Code. Если вы используете Кодовое название, можно обрезать его до первых двух символов. Значением по умолчанию является 1 или Standard.
VerboseValueСвойство управлять отображением кодонов, рассмотренных в вычислениях и их переводах аминокислоты. Выбором является true или false (значение по умолчанию).

Совет

Задайте true, чтобы использовать это отображение, чтобы вручную проверить выравнивание кодона двух входных последовательностей. Присутствие кодонов остановки (*) в переводе аминокислоты может указать, что SeqNT1 и SeqNT2 не выравниваются кодоном.

Выходные аргументы

Dn Несинонимичный уровень (уровни) замены.
DsСинонимичный уровень (уровни) замены.
LikeВероятность оценки уровней замены.

Описание

[Dn, Ds, Like] = dndsml(SeqNT1, SeqNT2) оценивает синонимичные и несинонимичные уровни замены между двумя гомологичными последовательностями, SeqNT1 и SeqNT2, с помощью метода Goldman-яна (1994). Этот метод максимального правдоподобия оценивает явную модель для замены кодона, которая составляет смещение уровня перехода/трансверсии и смещение частоты основы/кодона. Затем это использует модель, чтобы исправить синонимичные и несинонимичные количества, чтобы составлять несколько замен на том же сайте. Метод максимального правдоподобия подходит лучше всего, когда объем выборки является значительным (больше, чем 100 основ) и когда сравниваемые последовательности могут иметь смещения уровня перехода/трансверсии и смещения частоты основы/кодона.

dndsml возвращается:

  • DN Несинонимичный уровень (уровни) замены.

  • Ds Синонимичный уровень (уровни) замены.

  • Like — Вероятность этой оценки.

Этот анализ:

  • Принимает, что последовательности нуклеотида, SeqNT1 и SeqNT2, выравниваются кодоном, то есть, не имейте сдвигов кадра.

    Совет

    Если ваши последовательности не выравниваются кодоном, используйте функцию nt2aa, чтобы преобразовать их в последовательности аминокислот, используйте функцию nwalign, чтобы глобально выровнять их, то используйте функцию seqinsertgaps, чтобы восстановить соответствующие выровненные кодоном последовательности нуклеотида. Для примера смотрите Оценку синонимичные и несинонимичные уровни замены между двумя последовательностями нуклеотида с помощью метода максимального правдоподобия.

  • Исключает любые неоднозначные символы нуклеотида или кодоны, которые включают разрывы.

  • Рассматривает количество кодонов в короче двух последовательностей нуклеотида.

Внимание

Если SeqNT1 и SeqNT2 являются слишком короткими или слишком расходящимися, насыщение может быть достигнуто, и dndsml возвращает NaN s и предупреждающее сообщение.

[Dn, Ds, Like] = dndsml(SeqNT1, SeqNT2, ...'PropertyName', PropertyValue, ...) вызывает dnds с дополнительными свойствами, которые используют имя свойства / пары значения свойства. Можно задать одно или несколько свойств в любом порядке. Каждый PropertyName должен быть заключен в одинарные кавычки и нечувствительный к регистру. Это имя свойства / пары значения свойства следующие:

[Dn, Ds, Like] = dndsml(SeqNT1, SeqNT2, ...'GeneticCode', GeneticCodeValue, ...) вычисляет синонимичные и несинонимичные уровни замены с помощью заданного генетического кода. Введите Номер кода, вектор символов или строку с Кодовым названием из таблицы Genetic Code. Если вы используете Кодовое название, можно обрезать его до первых двух символов. Значением по умолчанию является 1 или Standard.

[Dn, Ds, Like] = dndsml(SeqNT1, SeqNT2, ...'Verbose', VerboseValue, ...) управляет отображением кодонов, рассмотренных в вычислениях и их переводах аминокислоты. Выбором является true или false (значение по умолчанию).

Совет

Задайте true, чтобы использовать это отображение, чтобы вручную проверить выравнивание кодона двух входных последовательностей, SeqNT1 и SeqNT2. Присутствие кодонов остановки (*) в переводе аминокислоты может указать, что SeqNT1 и SeqNT2 не выравниваются кодоном.

Примеры

свернуть все

Этот пример показывает, как оценить синонимичные и несинонимичные уровни замены между двумя последовательностями нуклеотида, которые не выравниваются кодоном с помощью метода максимального правдоподобия.

Этот пример использует две последовательности нуклеотида, представляющие человеческий ген HEXA (инвентарный номер: NM_000520) и мышь ген HEXA (инвентарный номер: AK080777).

Если у вас есть живое интернет-соединение, можно использовать функцию getgenbank, чтобы получить информацию о последовательности из репозитория данных NCBI и загрузить данные в MATLAB®.

humanHEXA = getgenbank('NM_000520');
mouseHEXA = getgenbank('AK080777');

Для вашего удобства MATLAB обеспечивает эти две последовательности в следующем матовом файле. Обратите внимание на то, что данные в общедоступных базах данных часто обновляются и курируются, и результаты в этом примере могут немного отличаться, если вы используете последние данные.

load hexosaminidase.mat

Извлеките области кодирования от двух последовательностей нуклеотида.

humanHEXA_cds = featureparse(humanHEXA,'feature','CDS','Sequence',true);
mouseHEXA_cds = featureparse(mouseHEXA,'feature','CDS','Sequence',true);

Выровняйте последовательности аминокислот, преобразованные от последовательностей нуклеотида.

[sc,al] = nwalign(nt2aa(humanHEXA_cds),nt2aa(mouseHEXA_cds),'extendgap',1);

Используйте функцию seqinsertgaps, чтобы скопировать разрывы от выровненных последовательностей аминокислот до их соответствующих последовательностей нуклеотида, таким образом выравнивание кодона их.

humanHEXA_aligned = seqinsertgaps(humanHEXA_cds,al(1,:))
humanHEXA_aligned = 
'atgacaagctccaggctttggttttcgctgctgctggcggcagcgttcgcaggacgggcgacggccctctggccctggcctcagaacttccaaacctccgaccagcgctacgtcctttacccgaacaactttcaattccagtacgatgtcagctcggccgcgcagcccggctgctcagtcctcgacgaggccttccagcgctatcgtgacctgcttttcggttccgggtcttggccccgtccttacctcacagggaaacggcatacactggagaagaatgtgttggttgtctctgtagtcacacctggatgtaaccagcttcctactttggagtcagtggagaattataccctgaccataaatgatgaccagtgtttactcctctctgagactgtctggggagctctccgaggtctggagacttttagccagcttgtttggaaatctgctgagggcacattctttatcaacaagactgagattgaggactttccccgctttcctcaccggggcttgctgttggatacatctcgccattacctgccactctctagcatcctggacactctggatgtcatggcgtacaataaattgaacgtgttccactggcatctggtagatgatccttccttcccatatgagagcttcacttttccagagctcatgagaaaggggtcctacaaccctgtcacccacatctacacagcacaggatgtgaaggaggtcattgaatacgcacggctccggggtatccgtgtgcttgcagagtttgacactcctggccacactttgtcctggggaccaggtatccctggattactgactccttgctactctgggtctgagccctctggcacctttggaccagtgaatcccagtctcaataatacctatgagttcatgagcacattcttcttagaagtcagctctgtcttcccagatttttatcttcatcttggaggagatgaggttgatttcacctgctggaagtccaacccagagatccaggactttatgaggaagaaaggcttcggtgaggacttcaagcagctggagtccttctacatccagacgctgctggacatcgtctcttcttatggcaagggctatgtggtgtggcaggaggtgtttgataataaagtaaagattcagccagacacaatcatacaggtgtggcgagaggatattccagtgaactatatgaaggagctggaactggtcaccaaggccggcttccgggcccttctctctgccccctggtacctgaaccgtatatcctatggccctgactggaaggatttctacatagtggaacccctggcatttgaaggtacccctgagcagaaggctctggtgattggtggagaggcttgtatgtggggagaatatgtggacaacacaaacctggtccccaggctctggcccagagcaggggctgttgccgaaaggctgtggagcaacaagttgacatctgacctgacatttgcctatgaacgtttgtcacacttccgctgtgaattgctgaggcgaggtgtccaggcccaacccctcaatgtaggcttctgtgagcaggagtttgaacagacctga'
mouseHEXA_aligned = seqinsertgaps(mouseHEXA_cds,al(3,:))
mouseHEXA_aligned = 
'atggccggctgcaggctctgggtttcgctgctgctggcggcggcgttggcttgcttggccacggcactgtggccgtggccccagtacatccaaacctaccaccggcgctacaccctgtaccccaacaacttccagttccggtaccatgtcagttcggccgcgcaggcgggctgcgtcgtcctcgacgaggcctttcgacgctaccgtaacctgctcttcggttccggctcttggccccgacccagcttctcaaataaacagcaaacgttggggaagaacattctggtggtctccgtcgtcacagctgaatgtaatgaatttcctaatttggagtcggtagaaaattacaccctaaccattaatgatgaccagtgtttactcgcctctgagactgtctggggcgctctccgaggtctggagactttcagtcagcttgtttggaaatcagctgagggcacgttctttatcaacaagacaaagattaaagactttcctcgattccctcaccggggcgtactgctggatacatctcgccattacctgccattgtctagcatcctggatacactggatgtcatggcatacaataaattcaacgtgttccactggcacttggtggacgactcttccttcccatatgagagcttcactttcccagagctcaccagaaaggggtccttcaaccctgtcactcacatctacacagcacaggatgtgaaggaggtcattgaatacgcaaggcttcggggtatccgtgtgctggcagaatttgacactcctggccacactttgtcctgggggccaggtgcccctgggttattaacaccttgctactctgggtctcatctctctggcacatttggaccggtgaaccccagtctcaacagcacctatgacttcatgagcacactcttcctggagatcagctcagtcttcccggacttttatctccacctgggaggggatgaagtcgacttcacctgctggaagtccaaccccaacatccaggccttcatgaagaaaaagggcttt---actgacttcaagcagctggagtccttctacatccagacgctgctggacatcgtctctgattatgacaagggctatgtggtgtggcaggaggtatttgataataaagtgaaggttcggccagatacaatcatacaggtgtggcgggaagaaatgccagtagagtacatgttggagatgcaagatatcaccagggctggcttccgggccctgctgtctgctccctggtacctgaaccgtgtaaagtatggccctgactggaaggacatgtacaaagtggagcccctggcgtttcatggtacgcctgaacagaaggctctggtcattggaggggaggcctgtatgtggggagagtatgtggacagcaccaacctggtccccagactctggcccagagcgggtgccgtcgctgagagactgtggagcagtaacctgacaactaatatagactttgcctttaaacgtttgtcgcatttccgttgtgagctggtgaggagaggaatccaggcccagcccatcagtgtaggctgctgtgagcaggagtttgagcagacttga'

Оцените синонимичные и несинонимичные уровни замен выровненных кодоном последовательностей нуклеотида и также отобразите кодоны, рассмотренные в вычислениях и их переводах аминокислоты.

[nonsynSubRate,synSubRate] = dndsml(humanHEXA_aligned,mouseHEXA_aligned,'verbose',true)
DNDSML: 
Codons considered in the computations:
ATGACAAGCTCCAGGCTTTGGTTTTCGCTGCTGCTGGCGGCAGCGTTCGCAGGACGGGCGACGGCCCTCTGGCCCTGGCCTCAGAACTTCCAAACCTCCGACCAGCGCTACGTCCTTTACCCGAACAACTTTCAATTCCAGTACGATGTCAGCTCGGCCGCGCAGCCCGGCTGCTCAGTCCTCGACGAGGCCTTCCAGCGCTATCGTGACCTGCTTTTCGGTTCCGGGTCTTGGCCCCGTCCTTACCTCACAGGGAAACGGCATACACTGGAGAAGAATGTGTTGGTTGTCTCTGTAGTCACACCTGGATGTAACCAGCTTCCTACTTTGGAGTCAGTGGAGAATTATACCCTGACCATAAATGATGACCAGTGTTTACTCCTCTCTGAGACTGTCTGGGGAGCTCTCCGAGGTCTGGAGACTTTTAGCCAGCTTGTTTGGAAATCTGCTGAGGGCACATTCTTTATCAACAAGACTGAGATTGAGGACTTTCCCCGCTTTCCTCACCGGGGCTTGCTGTTGGATACATCTCGCCATTACCTGCCACTCTCTAGCATCCTGGACACTCTGGATGTCATGGCGTACAATAAATTGAACGTGTTCCACTGGCATCTGGTAGATGATCCTTCCTTCCCATATGAGAGCTTCACTTTTCCAGAGCTCATGAGAAAGGGGTCCTACAACCCTGTCACCCACATCTACACAGCACAGGATGTGAAGGAGGTCATTGAATACGCACGGCTCCGGGGTATCCGTGTGCTTGCAGAGTTTGACACTCCTGGCCACACTTTGTCCTGGGGACCAGGTATCCCTGGATTACTGACTCCTTGCTACTCTGGGTCTGAGCCCTCTGGCACCTTTGGACCAGTGAATCCCAGTCTCAATAATACCTATGAGTTCATGAGCACATTCTTCTTAGAAGTCAGCTCTGTCTTCCCAGATTTTTATCTTCATCTTGGAGGAGATGAGGTTGATTTCACCTGCTGGAAGTCCAACCCAGAGATCCAGGACTTTATGAGGAAGAAAGGCTTCGAGGACTTCAAGCAGCTGGAGTCCTTCTACATCCAGACGCTGCTGGACATCGTCTCTTCTTATGGCAAGGGCTATGTGGTGTGGCAGGAGGTGTTTGATAATAAAGTAAAGATTCAGCCAGACACAATCATACAGGTGTGGCGAGAGGATATTCCAGTGAACTATATGAAGGAGCTGGAACTGGTCACCAAGGCCGGCTTCCGGGCCCTTCTCTCTGCCCCCTGGTACCTGAACCGTATATCCTATGGCCCTGACTGGAAGGATTTCTACATAGTGGAACCCCTGGCATTTGAAGGTACCCCTGAGCAGAAGGCTCTGGTGATTGGTGGAGAGGCTTGTATGTGGGGAGAATATGTGGACAACACAAACCTGGTCCCCAGGCTCTGGCCCAGAGCAGGGGCTGTTGCCGAAAGGCTGTGGAGCAACAAGTTGACATCTGACCTGACATTTGCCTATGAACGTTTGTCACACTTCCGCTGTGAATTGCTGAGGCGAGGTGTCCAGGCCCAACCCCTCAATGTAGGCTTCTGTGAGCAGGAGTTTGAACAGACC
ATGGCCGGCTGCAGGCTCTGGGTTTCGCTGCTGCTGGCGGCGGCGTTGGCTTGCTTGGCCACGGCACTGTGGCCGTGGCCCCAGTACATCCAAACCTACCACCGGCGCTACACCCTGTACCCCAACAACTTCCAGTTCCGGTACCATGTCAGTTCGGCCGCGCAGGCGGGCTGCGTCGTCCTCGACGAGGCCTTTCGACGCTACCGTAACCTGCTCTTCGGTTCCGGCTCTTGGCCCCGACCCAGCTTCTCAAATAAACAGCAAACGTTGGGGAAGAACATTCTGGTGGTCTCCGTCGTCACAGCTGAATGTAATGAATTTCCTAATTTGGAGTCGGTAGAAAATTACACCCTAACCATTAATGATGACCAGTGTTTACTCGCCTCTGAGACTGTCTGGGGCGCTCTCCGAGGTCTGGAGACTTTCAGTCAGCTTGTTTGGAAATCAGCTGAGGGCACGTTCTTTATCAACAAGACAAAGATTAAAGACTTTCCTCGATTCCCTCACCGGGGCGTACTGCTGGATACATCTCGCCATTACCTGCCATTGTCTAGCATCCTGGATACACTGGATGTCATGGCATACAATAAATTCAACGTGTTCCACTGGCACTTGGTGGACGACTCTTCCTTCCCATATGAGAGCTTCACTTTCCCAGAGCTCACCAGAAAGGGGTCCTTCAACCCTGTCACTCACATCTACACAGCACAGGATGTGAAGGAGGTCATTGAATACGCAAGGCTTCGGGGTATCCGTGTGCTGGCAGAATTTGACACTCCTGGCCACACTTTGTCCTGGGGGCCAGGTGCCCCTGGGTTATTAACACCTTGCTACTCTGGGTCTCATCTCTCTGGCACATTTGGACCGGTGAACCCCAGTCTCAACAGCACCTATGACTTCATGAGCACACTCTTCCTGGAGATCAGCTCAGTCTTCCCGGACTTTTATCTCCACCTGGGAGGGGATGAAGTCGACTTCACCTGCTGGAAGTCCAACCCCAACATCCAGGCCTTCATGAAGAAAAAGGGCTTTACTGACTTCAAGCAGCTGGAGTCCTTCTACATCCAGACGCTGCTGGACATCGTCTCTGATTATGACAAGGGCTATGTGGTGTGGCAGGAGGTATTTGATAATAAAGTGAAGGTTCGGCCAGATACAATCATACAGGTGTGGCGGGAAGAAATGCCAGTAGAGTACATGTTGGAGATGCAAGATATCACCAGGGCTGGCTTCCGGGCCCTGCTGTCTGCTCCCTGGTACCTGAACCGTGTAAAGTATGGCCCTGACTGGAAGGACATGTACAAAGTGGAGCCCCTGGCGTTTCATGGTACGCCTGAACAGAAGGCTCTGGTCATTGGAGGGGAGGCCTGTATGTGGGGAGAGTATGTGGACAGCACCAACCTGGTCCCCAGACTCTGGCCCAGAGCGGGTGCCGTCGCTGAGAGACTGTGGAGCAGTAACCTGACAACTAATATAGACTTTGCCTTTAAACGTTTGTCGCATTTCCGTTGTGAGCTGGTGAGGAGAGGAATCCAGGCCCAGCCCATCAGTGTAGGCTGCTGTGAGCAGGAGTTTGAGCAGACT
Translations:
M  T  S  S  R  L  W  F  S  L  L  L  A  A  A  F  A  G  R  A  T  A  L  W  P  W  P  Q  N  F  Q  T  S  D  Q  R  Y  V  L  Y  P  N  N  F  Q  F  Q  Y  D  V  S  S  A  A  Q  P  G  C  S  V  L  D  E  A  F  Q  R  Y  R  D  L  L  F  G  S  G  S  W  P  R  P  Y  L  T  G  K  R  H  T  L  E  K  N  V  L  V  V  S  V  V  T  P  G  C  N  Q  L  P  T  L  E  S  V  E  N  Y  T  L  T  I  N  D  D  Q  C  L  L  L  S  E  T  V  W  G  A  L  R  G  L  E  T  F  S  Q  L  V  W  K  S  A  E  G  T  F  F  I  N  K  T  E  I  E  D  F  P  R  F  P  H  R  G  L  L  L  D  T  S  R  H  Y  L  P  L  S  S  I  L  D  T  L  D  V  M  A  Y  N  K  L  N  V  F  H  W  H  L  V  D  D  P  S  F  P  Y  E  S  F  T  F  P  E  L  M  R  K  G  S  Y  N  P  V  T  H  I  Y  T  A  Q  D  V  K  E  V  I  E  Y  A  R  L  R  G  I  R  V  L  A  E  F  D  T  P  G  H  T  L  S  W  G  P  G  I  P  G  L  L  T  P  C  Y  S  G  S  E  P  S  G  T  F  G  P  V  N  P  S  L  N  N  T  Y  E  F  M  S  T  F  F  L  E  V  S  S  V  F  P  D  F  Y  L  H  L  G  G  D  E  V  D  F  T  C  W  K  S  N  P  E  I  Q  D  F  M  R  K  K  G  F  E  D  F  K  Q  L  E  S  F  Y  I  Q  T  L  L  D  I  V  S  S  Y  G  K  G  Y  V  V  W  Q  E  V  F  D  N  K  V  K  I  Q  P  D  T  I  I  Q  V  W  R  E  D  I  P  V  N  Y  M  K  E  L  E  L  V  T  K  A  G  F  R  A  L  L  S  A  P  W  Y  L  N  R  I  S  Y  G  P  D  W  K  D  F  Y  I  V  E  P  L  A  F  E  G  T  P  E  Q  K  A  L  V  I  G  G  E  A  C  M  W  G  E  Y  V  D  N  T  N  L  V  P  R  L  W  P  R  A  G  A  V  A  E  R  L  W  S  N  K  L  T  S  D  L  T  F  A  Y  E  R  L  S  H  F  R  C  E  L  L  R  R  G  V  Q  A  Q  P  L  N  V  G  F  C  E  Q  E  F  E  Q  T  
M  A  G  C  R  L  W  V  S  L  L  L  A  A  A  L  A  C  L  A  T  A  L  W  P  W  P  Q  Y  I  Q  T  Y  H  R  R  Y  T  L  Y  P  N  N  F  Q  F  R  Y  H  V  S  S  A  A  Q  A  G  C  V  V  L  D  E  A  F  R  R  Y  R  N  L  L  F  G  S  G  S  W  P  R  P  S  F  S  N  K  Q  Q  T  L  G  K  N  I  L  V  V  S  V  V  T  A  E  C  N  E  F  P  N  L  E  S  V  E  N  Y  T  L  T  I  N  D  D  Q  C  L  L  A  S  E  T  V  W  G  A  L  R  G  L  E  T  F  S  Q  L  V  W  K  S  A  E  G  T  F  F  I  N  K  T  K  I  K  D  F  P  R  F  P  H  R  G  V  L  L  D  T  S  R  H  Y  L  P  L  S  S  I  L  D  T  L  D  V  M  A  Y  N  K  F  N  V  F  H  W  H  L  V  D  D  S  S  F  P  Y  E  S  F  T  F  P  E  L  T  R  K  G  S  F  N  P  V  T  H  I  Y  T  A  Q  D  V  K  E  V  I  E  Y  A  R  L  R  G  I  R  V  L  A  E  F  D  T  P  G  H  T  L  S  W  G  P  G  A  P  G  L  L  T  P  C  Y  S  G  S  H  L  S  G  T  F  G  P  V  N  P  S  L  N  S  T  Y  D  F  M  S  T  L  F  L  E  I  S  S  V  F  P  D  F  Y  L  H  L  G  G  D  E  V  D  F  T  C  W  K  S  N  P  N  I  Q  A  F  M  K  K  K  G  F  T  D  F  K  Q  L  E  S  F  Y  I  Q  T  L  L  D  I  V  S  D  Y  D  K  G  Y  V  V  W  Q  E  V  F  D  N  K  V  K  V  R  P  D  T  I  I  Q  V  W  R  E  E  M  P  V  E  Y  M  L  E  M  Q  D  I  T  R  A  G  F  R  A  L  L  S  A  P  W  Y  L  N  R  V  K  Y  G  P  D  W  K  D  M  Y  K  V  E  P  L  A  F  H  G  T  P  E  Q  K  A  L  V  I  G  G  E  A  C  M  W  G  E  Y  V  D  S  T  N  L  V  P  R  L  W  P  R  A  G  A  V  A  E  R  L  W  S  S  N  L  T  T  N  I  D  F  A  F  K  R  L  S  H  F  R  C  E  L  V  R  R  G  I  Q  A  Q  P  I  S  V  G  C  C  E  Q  E  F  E  Q  T  

Initial estimates: Kappa=3.301203, dn=0.093274, ds=0.518095, t=0.353716
ML estimates: Kappa=2.498253, omega(dn/ds)=0.185577, t=0.602465
nonsynSubRate = 0.0943
synSubRate = 0.5080

Ссылки

[1] Tamura, K. и Мэй, M. (1993). Оценка количества замен нуклеотида в области управления митохондриального DNA в людях и шимпанзе. Молекулярная биология и Эволюция 10, 512–526.

[2] Ян, Z. и Нильсен, R. (2000). Оценка синонимичных и несинонимичных уровней замены в соответствии с реалистическими эволюционными моделями. Молекулярная биология и Эволюция 17, 32–43.

[3] Goldman, N. и ян, Z. (1994). Основанная на кодоне модель замены нуклеотида на кодирующие белок последовательности DNA. Молекулярная масса Biol. Evol. 11 (5), 725–736.

Смотрите также

| |

Представлено до R2006a