Ниже дам подробную пошаговую инструкцию, как получить нужный ответ своими силами. Я не могу напрямую прочитать ваш архив и посчитать max iHS без файлов, но вы сможете быстро выполнить эти шаги и прислать результаты — я подсчитаю максимум и сделаю вывод about положительного отбора.
Что нужно сделать в общем
- Разархивировать входной файл и запустить SELSCAN для iHS.
- Нормализовать полученные iHS-значения утилитой norm из пакета selscan.
- Найти в нужном регионе лактазного локуса (chr2:135792491-136822774) максимальное стандартизованное iHS.
- Проверить наличие сигнала отбора: если существует хотя бы одно значение iHS_norm > 2.5, считать признак положительного отбора присутствующим.
Пошаговая инструкция
- Разархивируйте файл
- Если файл заархивирован как task_ehh.tped.gz, выполните:
- gunzip task_ehh.tped.gz
- Аналогично распакуйте другие связанные файлы, если они лежат в архиве (например task_ehh.tfam). Обычно требуются пара файлов: .tped и .tfam.
- Подготовьте входные файлы для selscan
- Убедитесь, что рядом есть файл task_ehh.tfam (или другой файл tfam), соответствующий вашему task_ehh.tped. Если названия другие, применяйте их.
- Запустите сканирование iHS
- Команда (пример, адаптируйте имена файлов под ваши):
- selscan --ihs --tped task_ehh.tped --tfam task_ehh.tfam --out task_ehh_ihs
- После выполнения появится файл task_ehh_ihs.ihs (это будет сырое значение iHS).
- Нормализация iHS
- Выполните нормализацию стандартной утилитой norm:
- norm --ihs --files task_ehh_ihs.ihs --out task_ehh_ihs_norm
- В результате получится файл task_ehh_ihs_norm, где содержатся нормализованные значения iHS (обычно с колонками, где одна из них — нормализованный iHS).
- Выбор региона лактазного локуса и поиск максимума
- Лактазный локус указан как 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.
- Сначала посмотрите заголовок, чтобы узнать номер столбца с нормализованным iHS:
Способ 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)
- python
import pandas as pd
df = pd.read_csv('task_ehh_ihs_norm', sep='\t', header=0)
- Затем сравните max_ihs с порогом 2.5.
- Примерный код (адаптируйте названия столбцов под ваш файл):
- Формирование итогового вывода
- После выполнения шагов 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 после выполнения шагов.