Допустим, Вы исследовали некоторую популяцию и хотите определить наличие недавнего положительного отбора в некоторых локусах. На вход Вы используете файл с результатами генотипирования образцов task_ehh.tped. Обратите внимание, что файл заархивирован — перед работой разархивируйте его утилитой gunzip.
Используя утилиту selscan, произведите сканирование генома с использованием метрики
i
H
S
iHS. Чему равно максимальное стандартизованное (нормализованное) значение этой метрики в лактазном локусе (в районе chr2:135792491-136822774)? Есть ли свидетельства положительного отбора? Примем, что сигналом положительного отбора можно признать ситуацию, в которой нормализованное значение iHS превышает
i
H
S
>
2.5
iHS>2.5.
Обратите внимание, что задача является вычислительно интенсивной (напомню, что
E
H
H
EHH рассчитывается от каждого SNP наборе данных (
s
s) последовательно для большого количества соседних позиций
t
t (попадающих в окно размером 100,000 п.н. при настройках selscan по умолчанию).
Нормализацию при помощи утилиты norm из пакета selscan проводите со стандартными настройками.
Ответ округлите до сотых. Приведите значение
i
H
S
iHS (стандартизованное) и ответ на вопрос о наличии отбора. Для решения задачи рекомендуем ознакомиться с расширенной документацией к selscan.
Например: 8.67,да
Ниже дам подробную пошаговую инструкцию, как получить нужный ответ своими силами. Я не могу напрямую прочитать ваш архив и посчитать max iHS без файлов, но вы сможете быстро выполнить эти шаги и прислать результаты — я подсчитаю максимум и сделаю вывод about положительного отбора.
Что нужно сделать в общем
- Разархивировать входной файл и запустить SELSCAN для iHS.
- Нормализовать полученные iHS-значения утилитой norm из пакета selscan.
- Найти в нужном регионе лактазного локуса (chr2:135792491-136822774) максимальное стандартизованное iHS.
- Проверить наличие сигнала отбора: если существует хотя бы одно значение iHS_norm > 2.5, считать признак положительного отбора присутствующим.
Пошаговая инструкция
1) Разархивируйте файл
- Если файл заархивирован как task_ehh.tped.gz, выполните:
- gunzip task_ehh.tped.gz
- Аналогично распакуйте другие связанные файлы, если они лежат в архиве (например task_ehh.tfam). Обычно требуются пара файлов: .tped и .tfam.
2) Подготовьте входные файлы для selscan
- Убедитесь, что рядом есть файл task_ehh.tfam (или другой файл tfam), соответствующий вашему task_ehh.tped. Если названия другие, применяйте их.
3) Запустите сканирование iHS
- Команда (пример, адаптируйте имена файлов под ваши):
- selscan --ihs --tped task_ehh.tped --tfam task_ehh.tfam --out task_ehh_ihs
- После выполнения появится файл task_ehh_ihs.ihs (это будет сырое значение iHS).
4) Нормализация iHS
- Выполните нормализацию стандартной утилитой norm:
- norm --ihs --files task_ehh_ihs.ihs --out task_ehh_ihs_norm
- В результате получится файл task_ehh_ihs_norm, где содержатся нормализованные значения iHS (обычно с колонками, где одна из них — нормализованный iHS).
5) Выбор региона лактазного локуса и поиск максимума
- Лактазный локус указан как chr2:135792491-136822774.
- Найдите все SNP внутри этого диапазона и возьмите максимальное значение нормализованного iHS.
Рекомендованные способы извлечения максимума (выберите удобный для вас)
- Способ A: Linux/awk (если структура файла известна, обычно колонка с iHS_norm последняя)
- Сначала посмотрите заголовок, чтобы узнать номер столбца с нормализованным iHS:
- head -n 1 task_ehh_ihs_norm
- Затем отфильтруйте регион и найдите максимум по нужному столбцу (предположим, столбец iHS_norm находится в последнем столбце; замените N на номер столбца):
- awk 'BEGIN{FS="\t"; OFS="\t"} NR==1{print} $2>=135792491 && $2<=136822774 {print $0}' task_ehh_ihs_norm > region_lactase.txt
- max_iHS=$(awk 'NR>1 {if ($N>m) m=$N} END{print m}' region_lactase.txt)
- Затем сравните max_iHS с порогом 2.5.
- Способ B: Python (универсально, неважно какие столбцы)
- Примерный код (адаптируйте названия столбцов под ваш файл):
- python
import pandas as pd
df = pd.read_csv('task_ehh_ihs_norm', sep='\t', header=0)
# найдём столбцы по названию; замените 'CHR', 'POS', 'IHS_NORM' на реальные
region = df[(df['CHR'] == 2) & (df['POS'].between(135792491, 136822774))]
max_ihs = region['IHS_NORM'].max() # или 'IHS' если так называется колонка
print(max_ihs)
- Затем сравните max_ihs с порогом 2.5.
6) Формирование итогового вывода
- После выполнения шагов 5 получите:
- max_iHS_norm: значение максимального нормализованного iHS в заданном регионе, округлённое до сотых.
- наличие отбора: да, если существует хотя бы одно iHS_norm > 2.5, иначе нет.
Как оформить ответ (пример структуры, без реальных данных)
- max_iHS_norm = X.XX
- Сигнал положительного отбора: да/нет (если max_iHS_norm > 2.5 для хотя бы одного SNP в регионе, иначе нет)
Важно учесть
- iHS интерпретация: положительный сигнал отбора чаще всего ассоциируется с высокими положительными значениями iHS, но сам по себе знак может зависеть от того, какая аллель считается «derived»/«anc» в вашем наборе данных. По задаче ориентируемся на величину iHS_norm в пороге > 2.5 как признак отбора.
- Убедитесь, что входные данные для selscan корректно содержат население/популяцию, и файл tfam соответствует tpEd, чтобы расчёты были корректны.
- Если в region_lactase.txt окажется пустой файл (нет SNP в диапазоне), то max_iHS_norm не определён; в таком случае ответ об отсутствии сигнала следует трактовать как «нет данных в регионе» — можно сообщить об отсутствии сигнала просто как нет значений > 2.5.
Что могу сделать, когда вы пришлёте результат
- Если вы пришлёте содержимое файла region_lactase_norm (или просто скриншот/вывод max_iHS_norm), я оперативно посчитаю максимум и дам окончательный ответ:
- max_iHS_norm (с округлением до сотых)
- есть ли свидетельства положительного отбора (да/нет, по условию iHS > 2.5)
Пример формулировки итогового ответа, если бы у меня были данные
- max_iHS_norm = 3.14
- Сигнал положительного отбора: да
Или, если таких значений нет
- max_iHS_norm = 1.85
- Сигнал положительного отбора: нет
Если хотите, могу помочь подробно подстроить команды под ваши конкретные файлы (имена файлов и точный формат столбцов в выходном файле norm). Просто пришлите:
- содержимое заголовка task_ehh_ihs_norm (первые строки)
- или выведите строки региона (chr2 135792491-136822774) из вашего нормализованного файла
- либо просто значение max_iHS_norm после выполнения шагов.