АвторТема: yFarseerWeb - Web-приложение для отрисовки карт таксономического разнообразия  (Прочитано 4227 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Daemon2017Автор темы

  • Сообщений: 2159
  • Страна: ru
  • Рейтинг +1045/-18
  • Y-ДНК: R1a-Y35174
  • мтДНК: V7-a2a2a2b*
Добрый вечер, соратники!

Работа ТК и varang, проделанная в области кластеризации SNP, представленных среди славянских популяций, на основе их географической частоты, (http://forum.molgen.org/index.php/topic,3628.msg489823.html#msg489823) и Web-карта hprovyn, выводящая географическую частоту SNP (https://phylogeographer.com/scripts/heatmap.php), вдохновили меня на изучение JS и создание логического продолжения моей прошлой наработки - yFarseer'а (http://forum.molgen.org/index.php/topic,12629.msg486512.html#msg486512).

Репозиторий: https://github.com/Daemon2017/yFarseerWeb
Само приложение: https://daemon2017.github.io/yFarseerWeb/



Задумка осталась старой: режем планету на равные шестиугольники и считаем разнообразие выбранного SNP внутри каждого из них - чем больше разных дочерних SNP в шестиугольнике, тем больше вероятность того, что именно в этом шестиугольнике находится прародина выбранного SNP (критерий разнообразия). Единственное отличие - данные о степени разнообразия каждого шестиугольника сохраняются не в HTML-файл, а в NoSQL БД, откуда они извлекаются уже на стороне потребителя.

Чем yFarseerWeb лучше yFarseer'а?
+ на одной карте можно расположить множество SNP - сейчас это количество ограничено 10. Можно поднять порог, но проблема заключается в ограниченности количества контрастных цветов - чем больше будет градиентов, тем меньше они будут отличаться друг от друга;
+ можно посчитать корреляцию Пирсона для выбранных SNP - сейчас это количество ограничено 25. Поднять порог - не проблема, но работать будет только на больших экранах;
+ нормально отображается на любых устройствах, включая мобильные;
+ если где-то допущена ошибка, то ее достаточно исправить в БД 1 раз для всех пользователей.

Чем yFarseerWeb хуже yFarseer'а?
- нет возможности отрисовать то, какие именно SNP есть в конкретном шестиугольнике. Т.е. мы знаем, что в шестиугольнике уровень разнообразия =3, но не знаем, какая комбинация SNP в нем: A+B+C или A+C+D.

Пока что нет возможности выбирать между обычным набором данных, где присутствуют только те данные, которые 100% подтверждены NGS или одиночным тестированием SNP, и расширенным набором данных, где присутствуют еще и данные, полученные на основе STR с помощью машинного обучения. Это вызвано тем, что изначально я хотел брать только данные о протестированных из YFull, т.к. они размещены под лицензией CC-BY и имеют 100% подтверждение NGS, но оказалось, что мне недостает API YFull, а потрошить их древо - это кощунство, так что пришлось перестраиваться на ходу. Думаю, что эта возможность появится в ближайшие недели.

Через URL можно передавать следующие свойства:
&snps=R-Z92,R-CTS1211 - SNP через запятую;
&lat=55 - широта;
&lng=10 - долгота;
&zoom=3 - близость к поверхности;
&threshold=3 - порог яркости (0-10): при пороге =4, шестиугольники с разнообразием 1-3 будут иметь такую же яркость, как шестиугольники с разнообразием 4.
Пример: https://daemon2017.github.io/yFarseerWeb/?snps=R-Z92,R-CTS1211&lat=55&lng=10&zoom=3&threshold=3

В настоящий момент, в БД есть 100+ SNP: если каких-то недостает, то дайте знать - построю :)
« Последнее редактирование: 05 Ноябрь 2020, 19:27:33 от Daemon2017 »

Оффлайн Daemon2017Автор темы

  • Сообщений: 2159
  • Страна: ru
  • Рейтинг +1045/-18
  • Y-ДНК: R1a-Y35174
  • мтДНК: V7-a2a2a2b*
Глянул корреляцию по разнообразию этих же SNP:


Получилось вот так:


Сильной корреляции нигде не вижу, но кое-что есть. Впрочем, не исключено, что что-то не так на стороне моего кода - надо подумать над нормализацией и пр.  ::)
Под кое-что я подразумеваю:
R-YP414 + I-Y4882 = 0.37
R-FT5104 + I-BY128 = 0.33
R-YP593 + I-Y4882 = 0.28
R-YP515 + I-Y4882 = 0.28
https://daemon2017.github.io/yFarseerWeb/?snps=R-FT5104,R-YP414,R-YP515,I-Y4882&lat=50&lng=24&zoom=5&threshold=5
« Последнее редактирование: 05 Ноябрь 2020, 19:26:38 от Daemon2017 »

Оффлайн varang

  • Сообщений: 5364
  • Страна: fi
  • Рейтинг +1823/-8
    • Проект "R1a-Y417 & Subclades" (M458>L1029>YP417)
  • Y-ДНК: R1a-L1029-A14777
  • мтДНК: H2a1
Тут YP1137, видимо, ошибочно. Это YP1337 под L260.

Оффлайн Daemon2017Автор темы

  • Сообщений: 2159
  • Страна: ru
  • Рейтинг +1045/-18
  • Y-ДНК: R1a-Y35174
  • мтДНК: V7-a2a2a2b*
Тут YP1137, видимо, ошибочно. Это YP1337 под L260.

Перестроил: https://daemon2017.github.io/yFarseerWeb/?snps=I-Y18331,I-Y4882,I-PH908,I-Z17855,I-BY128,I-Y4460,R-YP4647,R-YP263,R-Z92,R-YP417,R-CTS1211,R-YP619,R-YP1703,R-FT5104,R-Y4135,R-YP515,R-YP1337,R-YP414,R-YP416,R-YP593

У YP1337 какая-то корреляция только с племянниками: R-YP256->R-YP254->R-FT5104 (0.35) и R-YP256->R-YP254->R-YP414 (0.33)

Оффлайн grimsvotn

  • Some things in life are too complicated to explain in any language © Murakami
  • Сообщений: 6390
  • Страна: ru
  • Рейтинг +1771/-1
  • Потомок Морры
    • R-L1280 haplogroup project
  • Y-ДНК: R-Y220521 (RU-BY), Russian-Belorussian borderline cluster
  • мтДНК: T1a1y1 G4820A (RU-UA), Russian-Ukrainian lineage
Здравствуйте!

Посмотрите, пожалуйста, есть ли в Вашей БД следующие снипы:
R-L1280, R-FGC11555, R-YP4850, R-FGC11627, R-Y5647, R-YP611, R-YP387, R-YP3989, R-FGC19283, R-YP1448, R-YP1701, R-FGC19273, R-YP6061, R-Y87248, R-YP6502, R-BY133561

Жирным шрифтом плюс подчеркивание выделен узел (L1280),просто жирным - основные даунстримы.

Оффлайн varang

  • Сообщений: 5364
  • Страна: fi
  • Рейтинг +1823/-8
    • Проект "R1a-Y417 & Subclades" (M458>L1029>YP417)
  • Y-ДНК: R1a-L1029-A14777
  • мтДНК: H2a1
У YP417 получается наибольшая близость с YP1337<L260<R и Z17855<I2a1. Остальные мимо.

Оффлайн Daemon2017Автор темы

  • Сообщений: 2159
  • Страна: ru
  • Рейтинг +1045/-18
  • Y-ДНК: R1a-Y35174
  • мтДНК: V7-a2a2a2b*
Здравствуйте!

Посмотрите, пожалуйста, есть ли в Вашей БД следующие снипы:
R-L1280, R-FGC11555, R-YP4850, R-FGC11627, R-Y5647, R-YP611, R-YP387, R-YP3989, R-FGC19283, R-YP1448, R-YP1701, R-FGC19273, R-YP6061, R-Y87248, R-YP6502, R-BY133561

Жирным шрифтом плюс подчеркивание выделен узел (L1280),просто жирным - основные даунстримы.

Добрый день!

Глянул - жирные есть, остальных нет - поставил строиться: думаю, что в течение часа будет готово.
UPD 1.00MSK: готово. Но парочка SNP не была построена, т.к. или отсутствует в древе FTDNA, или в древе FTDNA у нее нет потомков - не по чему считать разнообразие.

У YP417 получается наибольшая близость с YP1337<L260<R и Z17855<I2a1. Остальные мимо.

Ага :(
Добавил выделение ячейки цветом в зависимости от коэффициента корреляции (10 градаций):

Немного вырвиглазно, но свою задачу решает. R1a и I2a более-менее пересекаются только в 2 случаях:
« Последнее редактирование: 06 Ноябрь 2020, 00:56:56 от Daemon2017 »

Оффлайн grimsvotn

  • Some things in life are too complicated to explain in any language © Murakami
  • Сообщений: 6390
  • Страна: ru
  • Рейтинг +1771/-1
  • Потомок Морры
    • R-L1280 haplogroup project
  • Y-ДНК: R-Y220521 (RU-BY), Russian-Belorussian borderline cluster
  • мтДНК: T1a1y1 G4820A (RU-UA), Russian-Ukrainian lineage
По L1280 и его даунстримам получается примерно так:


Оффлайн Daemon2017Автор темы

  • Сообщений: 2159
  • Страна: ru
  • Рейтинг +1045/-18
  • Y-ДНК: R1a-Y35174
  • мтДНК: V7-a2a2a2b*
Добавил подсказку-автозавершалку имени SNP, которая выдает список (не более 10 шт.) подходящих SNP, имеющихся в БД, если введено >=3 символов имени SNP.
Т.е. R-Z..., I-C...., C-Y... и т.д. Ожидаю, что это упростит как проверку SNP на наличие в БД, так и поиск интересующего SNP.

Оффлайн Daemon2017Автор темы

  • Сообщений: 2159
  • Страна: ru
  • Рейтинг +1045/-18
  • Y-ДНК: R1a-Y35174
  • мтДНК: V7-a2a2a2b*
Обратил внимание, что если считать корреляцию для 2 SNP (A+B) и для 3 SNP (A+B+C), то коэффициент корреляции A+B будет отличаться, чего быть не может! Полез в код, нашел ошибку, исправил - теперь корреляция неизменна и вменяема. Положительная корреляция I+R есть только тут: https://daemon2017.github.io/yFarseerWeb/?snps=R-CTS1211,I-Y4882,I-PH908 Ну и в предке обоих I - https://daemon2017.github.io/yFarseerWeb/?snps=R-CTS1211,I-Y3548
Также, добавил нормализацию - получилось вот так:
« Последнее редактирование: 07 Ноябрь 2020, 12:48:49 от Daemon2017 »

Оффлайн Daemon2017Автор темы

  • Сообщений: 2159
  • Страна: ru
  • Рейтинг +1045/-18
  • Y-ДНК: R1a-Y35174
  • мтДНК: V7-a2a2a2b*
За последние 2 недели сделал ряд доработок имеющегося функционала:
* добавил переключатель между 2 БД: основной и расширенной машинным обучением (в ней пока только 1 SNP);
* добавил кнопку, по которой можно получить ссылку на текущую карту, например: https://daemon2017.github.io/yFarseerWeb/?lat=53.93021986394&lng=50.62500000000001&zoom=4&isExtended=false&threshold=1&snps=R-Z92%2CR-CTS1211%2CI-CTS10228
* добавил возможность оффлайн доступа к SNP, если в ходе текущей сессии он уже запрашивался: в метро и прочих местах с непостоянной сетью весьма удобно
* исправил ошибку работы с сетью: при некоторых условиях, вместо 1 запроса отправлялось аж 100
* увеличил максимальное число SNP в инструменте Корреляция с 25 до 50
* добавил прокрутку в таблицу Корреляции - теперь ее выход за границы экрана не создает проблем для просмотра правой и нижней части SNP
* добавил возможность сортировки столбцов в таблице Корреляции

Оффлайн Daemon2017Автор темы

  • Сообщений: 2159
  • Страна: ru
  • Рейтинг +1045/-18
  • Y-ДНК: R1a-Y35174
  • мтДНК: V7-a2a2a2b*
Добавил новый инструмент: Призму - в отличие от обычной карты, отображающей разнообразие SNP в точке с помощью насыщенности одного цвета, призмовая карта выделяет разные группы дочерних SNP с помощью разных цветов. Обратите внимание, что инструмент обрабатывает только 1-й SNP в списке, а остальные игнорирует!

На примере R-CTS1211:
1) с помощью обычной карты видно, что на Западе Польши + внутри Карпат (группа А) уровень разнообразия такой же (=2), как и на Востоке Польши + в Прибалтике (группа В);
2) с помощью Призмы видно, что в случае (А) этот уровень достигается из-за одновременного наличия SNP Y35+YP343, а в случае (B) - из-за SNP Y35+FT92022.

Сейчас прикручиваю к Призме всплывашку, в которой будет отображаться список SNP, присутствующих в точке, где расположен курсор. Как только закончу, можно будет считать, что единственное преимущество настольной версии над вебовской ("нет возможности отрисовать то, какие именно SNP есть в конкретном шестиугольнике. Т.е. мы знаем, что в шестиугольнике уровень разнообразия =3, но не знаем, какая комбинация SNP в нем: A+B+C или A+C+D.") будет нивелировано, а значит можно будет выпилить из кода все, что обслуживает настольную версию :)

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


« Последнее редактирование: 21 Февраль 2021, 21:28:00 от Daemon2017 »

Оффлайн Daemon2017Автор темы

  • Сообщений: 2159
  • Страна: ru
  • Рейтинг +1045/-18
  • Y-ДНК: R1a-Y35174
  • мтДНК: V7-a2a2a2b*
Сейчас прикручиваю к Призме всплывашку, в которой будет отображаться список SNP, присутствующих в точке, где расположен курсор. Как только закончу, можно будет считать, что единственное преимущество настольной версии над вебовской ("нет возможности отрисовать то, какие именно SNP есть в конкретном шестиугольнике. Т.е. мы знаем, что в шестиугольнике уровень разнообразия =3, но не знаем, какая комбинация SNP в нем: A+B+C или A+C+D.") будет нивелировано, а значит можно будет выпилить из кода все, что обслуживает настольную версию :)

Так и не смог прикрутить всплывашку для всей карты: что-то где-то делаю не так, а где - не понимаю  :(
Как временное решение, прицепил всплывашку на цветные квадраты: теперь, при использовании инструмента Dispersion, там перечисляются все SNP, находящиеся в дисперсионной группе.
На примере R-Z92:
красный - группа из 1 SNP: Y4459
фиолетовый - группа из 1 SNP: Z685
синий -  группа из 2 SNP: Z685+Y4459
зеленый - группа из 1 SNP: BY100539
Единственное ограничение: SNP не может иметь больше 10 дисперсионных групп, т.к. я прописал только 10 контрастных градиентов. Впоследствии попробую найти еще цвета поконтрастнее и ослабить это ограничение.


Дальше хочу увеличить число SNP в БД и забабахать инструмент, который бы строил карту миграции. Для частотного критерия такие инструменты есть, а вот для критерия разнообразия - нет :)

Оффлайн Daemon2017Автор темы

  • Сообщений: 2159
  • Страна: ru
  • Рейтинг +1045/-18
  • Y-ДНК: R1a-Y35174
  • мтДНК: V7-a2a2a2b*
Распилил функционал таблиц корреляции надвое: корреляция по распространению (CorrelationAll - учитывает все точки, в которых встречается один из SNP) и по уровню (CorrelationIntersect - учитывает только те точки, в которых ненулевое значение имеют оба SNP).

Также, доработал мобильный режим - теперь с телефона можно хоть как-то, но пользоваться  ;D

Оффлайн Daemon2017Автор темы

  • Сообщений: 2159
  • Страна: ru
  • Рейтинг +1045/-18
  • Y-ДНК: R1a-Y35174
  • мтДНК: V7-a2a2a2b*
Некоторые SNP имеют тучу групп разнообразия, которые еще и перемешаны между собой, например: https://daemon2017.github.io/yFarseerWeb/?lat=48.81417&lng=23.16972&zoom=4&isExtended=false&threshold=9&snps=I-S20602&mode=dispersion

Понять, где находятся 3 группы с максимальным уровнем разнообразия - это прям отдельная дисциплина на приеме у окулиста  ;D


Добавил возможность жмакать по квадратам слева вверху и отщёлкивать неинтересные группы. Для примера, результат оставления только 3 групп разнообразия, имеющих максимальный (3) уровень разнообразия:
I-Y4460,I-Y3548,I-Y18331
I-Z17855,I-Y4460,I-Y3548
I-Z17855,I-Y4460,I-Y18331
Сразу становится ясно, что SNP какой-то южный - именно там представлены все 4 субклада и все 3 группы разнообразия.

 

© 2007 Молекулярная Генеалогия (МолГен)

Внимание! Все сообщения отражают только мнения их авторов.
Все права на материалы принадлежат их авторам (владельцам) и сетевым изданиям, с которых они взяты.