By Tingting, 30 June, 2026
Forums

一、定义

eQTL(Expression Quantitative Trait Locus,表达数量性状位点)是指基因组上能够定量调控基因表达水平(mRNA表达量)的遗传变异位点,绝大多数为单核苷酸多态性(SNP)。分为顺式和反式。

顺式 eQTL(cis-eQTL):位于目标基因附近(通常为转录起始位点上下游 1 Mb 范围内),直接调控目标基因的表达(如通过改变启动子、增强子等调控元件影响转录)。
反式 eQTL(trans-eQTL):位于距离目标基因较远(如 >1 Mb 或不同染色体)的位点,通过间接方式(如调控转录因子等)影响目标基因的表达。

二、步骤

首先,生成表达量文件。其次,对基因进行筛选。

最后进行关联分析。

# ===================== 【测试版】eQTL 单个基因关联分析 =====================
# 完全沿用你原来的参数、格式、逻辑
PREFIX="142samples_chr1-11_merged_ped_final"
PHENO_FILE="./eqtl_expression_matrix.txt"   # 你的表达矩阵
OUTPUT_DIR="./eqtl_test_single"

# 创建输出目录
mkdir -p ${OUTPUT_DIR}

# 备份原始.fam文件(只做一次)
if [ ! -f "${PREFIX}.fam.original" ]; then
    cp ${PREFIX}.fam ${PREFIX}.fam.original
fi

# 获取.fam的ID顺序
cut -f1 ${PREFIX}.fam.original > fam_ids.txt

# ==========================================
# 【只跑 1 个基因:第 2 列(第一个基因)】
# ==========================================
gene_col=2
echo "========================================="
echo "测试:运行 第1个基因 eQTL 分析..."

# 提取这个基因的表达量(样本ID + 表达值)
cut -f1,${gene_col} ${PHENO_FILE} > test_gene.txt

# 1. 从原始.fam恢复
cp ${PREFIX}.fam.original ${PREFIX}.fam

# 2. 按.fam顺序重排表型值
awk 'NR==FNR {pheno[$1]=$2; next} {print $1, pheno[$1]}' \
    test_gene.txt fam_ids.txt > pheno_reordered.txt

# 3. 更新表型到.fam的第6列
awk 'BEGIN{OFS="\t"} 
    NR==FNR {pheno[$1]=$2; next} 
    {$6=($1 in pheno ? pheno[$1] : -9); print}' \
    pheno_reordered.txt \
    ${PREFIX}.fam > temp.fam
mv temp.fam ${PREFIX}.fam

# 4. 运行GEMMA(和你原来代码完全一样)
echo "  运行GEMMA分析(使用亲缘关系矩阵)..."
/bin/gemma-0.98.5-linux-static-AMD64 \
  -bfile ${PREFIX} \
  -k ${PREFIX}_gemma_kinship.cXX.txt \
  -lmm 4 \
  -miss 1.0 \
  -maf 0.05 \
  -hwe 0.000001 \
  -outdir ${OUTPUT_DIR} \
  -o test_gene1

if [ $? -eq 0 ] && [ -f "${OUTPUT_DIR}/test_gene1.assoc.txt" ]; then
  echo "  ✓ 测试基因 运行成功!"
  echo "  结果文件: ${OUTPUT_DIR}/test_gene1.assoc.txt"
else
  echo "  ✗ 测试基因 运行失败"
  if [ -f "${OUTPUT_DIR}/test_gene1.log.txt" ]; then
    tail -5 ${OUTPUT_DIR}/test_gene1.log.txt
  fi
fi

# 恢复原始.fam文件
cp ${PREFIX}.fam.original ${PREFIX}.fam
rm -f test_gene.txt pheno_reordered.txt fam_ids.txt

echo "========================================="
echo "✅ eQTL 单基因测试完成!"
#测试成功
awk 'NR==1 || $13 < 1e-5' test_gene1.assoc.txt > sig_all.txt
evm.TU.PTG000013L.42 #测试,测试完成,脚本运行