孟德尔随机化分析1: 连锁不平衡(Linkage Disequilibrium, LD)

1. 什么是连锁不平衡(LD)?

连锁不平衡(Linkage Disequilibrium,LD)是指在基因组中,两个或多个SNP(单核苷酸多态性)位点在一个群体中的等位基因分布不符合期望的独立分布。也就是说,某些等位基因倾向于一起遗传,而不是独立分配。这种现象通常由于以下原因造成:
? 物理距离:距离较近的SNPs更可能在同一条染色体上传递,形成较强的LD。
? 选择压力:一些特定的基因型可能提供某种生物学优势,导致某些SNP频繁出现在同一代体中。
? 遗传漂变:基因型的随机变动也可能影响LD的形成。

简而言之,LD反映了基因组中的遗传标记(例如SNP)之间的关联程度

LD-1

2. 连锁不平衡的意义

连锁不平衡(LD)在很多遗传学研究中扮演着关键角色,尤其在基因组关联研究(GWAS)、表型遗传学和复杂疾病研究中有广泛的应用:
? GWAS研究:大多数GWAS是通过检测基因组范围内的SNP与疾病或性状的关联来寻找致病基因。由于LD效应,通常无法直接识别某些SNP的致病基因,而是通过“标记效应”间接推测疾病相关基因。也就是说,某些SNP位点与某个基因或者功能区有较强的LD,这些SNP作为代理标记可以帮助找到潜在的致病基因。
? 基因功能研究:LD帮助我们理解不同基因型如何共同作用,揭示遗传变异的相关性和其与疾病的关联。
? 遗传历史与种群结构:LD可以帮助分析一个种群的遗传历史,了解不同群体间的基因流动和分布模式。

3. 评估LD效应的流程

3.1 选择研究的SNP和区域

首先需要选择感兴趣的SNP和它们所在的基因组区域。你可以选择全基因组的SNP(GWAS研究),也可以选择与某个特定基因、表型或疾病相关的区域。
? 全基因组SNP选择:包括与疾病、表型相关的SNP,或者通过GWAS识别出的候选SNP。
? 特定基因或区域SNP选择:可以选择一个特定的基因或功能区域,评估其中的SNP如何与其他SNP产生LD。

3.2 获取样本基因型数据

这些数据通常是VCF(Variant Call Format)文件或者PLINK格式(PED/MAP文件)

1)1000 Genomes Project:提供全球不同种群的基因型数据

# 下载每个染色体单独的VCF文件
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr1.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr2.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr3.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr4.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr5.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr6.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr7.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr8.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr9.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr10.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr11.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr12.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr13.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr14.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr15.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr16.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr17.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr18.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr19.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr20.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr21.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chr22.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chrX.phase3_shapeit2_mvncall_integrated_v1c.20130502.genotypes.vcf.gz
$ wget https://ftp.1000genomes.ebi.ac.uk/vol1/ftp/release/20130502/ALL.chrY.phase3_integrated_v2b.20130502.genotypes.vcf.gz


? 1000 Genomes Project Phase 3 数据集 是1000 Genomes计划发布的第三阶段数据集,提供了来自不同种群的完整基因组序列数据,包括大约2500个个体,涵盖了全球范围内多个种群。Phase 3数据集是迄今为止最全面的公共基因组数据之一,适用于全基因组关联研究(GWAS)、群体遗传学、SNP功能注释等多种生物信息学研究。数据集包含以下信息:
??????? 2500+个体,代表了26种群,包括欧洲、亚洲、非洲和美洲等不同地区的人群。
??????? 全基因组数据:约为2,500,000个SNP变异,覆盖了大部分常见变异(即MAF>5%)。
??????? 样本来源:数据来自多个人群,代表了人类基因组的多样性。
??????? VCF格式:数据以VCF(Variant Call Format)文件提供,方便用于后续的分析

2)HapMap Project:提供了不同种群的SNP数据

# 这里下载hapmap数据
$ wget https://ftp.ncbi.nlm.nih.gov/hapmap/phase_3/hapmap3_r1_b36_fwd.qc.poly.tar.bz2
$ tar -xvjf hapmap3_r1_b36_fwd.qc.poly.tar.bz2
$ mkdir hapmap3_r1_b36_fwd
$ mv hapmap3_r1_b36_fwd* hapmap3_r1_b36_fwd/

$ ls hapmap3_r1_b36_fwd/
## hapmap3_r1_b36_fwd.ASW.qc.poly.recode.map  hapmap3_r1_b36_fwd.JPT.qc.poly.recode.ped
## hapmap3_r1_b36_fwd.ASW.qc.poly.recode.ped  hapmap3_r1_b36_fwd.LWK.qc.poly.recode.map
## hapmap3_r1_b36_fwd.CEU.qc.poly.recode.map  hapmap3_r1_b36_fwd.LWK.qc.poly.recode.ped
## hapmap3_r1_b36_fwd.CEU.qc.poly.recode.ped  hapmap3_r1_b36_fwd.MEX.qc.poly.recode.map
## hapmap3_r1_b36_fwd.CHB.qc.poly.recode.map  hapmap3_r1_b36_fwd.MEX.qc.poly.recode.ped
## hapmap3_r1_b36_fwd.CHB.qc.poly.recode.ped  hapmap3_r1_b36_fwd.MKK.qc.poly.recode.map
## hapmap3_r1_b36_fwd.CHD.qc.poly.recode.map  hapmap3_r1_b36_fwd.MKK.qc.poly.recode.ped
## hapmap3_r1_b36_fwd.CHD.qc.poly.recode.ped  hapmap3_r1_b36_fwd.TSI.qc.poly.recode.map
## hapmap3_r1_b36_fwd.GIH.qc.poly.recode.map  hapmap3_r1_b36_fwd.TSI.qc.poly.recode.ped
## hapmap3_r1_b36_fwd.GIH.qc.poly.recode.ped  hapmap3_r1_b36_fwd.YRI.qc.poly.recode.map
## hapmap3_r1_b36_fwd.JPT.qc.poly.recode.map  hapmap3_r1_b36_fwd.YRI.qc.poly.recode.ped

? map文件:包含SNP的位置信息,包括染色体号、SNP名称、基因组位置等。
? ped文件:包含每个样本的基因型数据(伪基因型数据可用于LD分析)。

3.3 计算LD矩阵

3.3.1 安装Plink 1.9(Ubuntu)

# 下载
$ wget http://s3.amazonaws.com/plink1-assets/plink_linux_x86_64_20230116.zip

# 解压文件
$ unzip plink_linux_x86_64_20230116.zip

# 将 Plink 添加到系统路径
$ sudo mv plink /usr/local/bin/
$ sudo chmod +x /usr/local/bin/plink

# 验证安装
$ plink --version
## PLINK v1.90b7 64-bit (16 Jan 2023)

3.3.2 LD 独立性计算

1)计算SNP之间的LD矩阵(vcf文件 - 1000 genomes)

像1000 Genomes这样的大样本量数据,通??梢远許NP进行一些筛选,避免不必要的计算。常见的阈值包括:
? MAF(最小等位基因频率): 0.05(5%)。过滤掉较低频率的变异可以减少噪声,并确保分析的SNP在种群中有足够的多样性。你也可以根据具体情况调整为0.01(1%)或更高。
? 缺失率(Genotype Missing Rate): 一般建议将缺失率设置为5%-10%。即,如果一个SNP的缺失率大于这个值,可以将其排除。较高的缺失率会影响LD计算的准确性
? 距离阈值: 如果你对较长的连锁不平衡关系(例如基因座之间的LD)感兴趣,可以设置较长的距离,如10kb、50kb、甚至100kb。较短的LD窗口适合研究基因区域或热点。
??????? 10kb:常用于寻找基因附近的连锁不平衡。
??????? 50kb或100kb:适合全基因组范围内的大范围LD分析

$ plink --vcf ALL.chr1.phase3_shapeit2_mvncall_integrated_v5b.20130502.genotypes.vcf.gz --maf 0.05 --geno 0.05 --ld-window-kb 50 --r2 --out ld_matrix_chr1

$ head ld_matrix_chr1.ld
## CHR_A         BP_A SNP_A  CHR_B         BP_B SNP_B           R2
##      1        11008    .      1        11012    .            1
##      1        13116    .      1        13118    .            1
##      1        14599    .      1        14604    .            1
##      1        15903    .      1        30923    .     0.292527
##      1        30923    .      1        52238    .     0.263645
##      1        30923    .      1        55164    .     0.274706
##      1        49298    .      1        49554    .     0.236693
##      1        49298    .      1        52238    .     0.312385
##      1        49298    .      1        55164    .     0.288708

2)计算SNP之间的LD矩阵(ped/map文件 - hapmap)

$ plink --ped hapmap3_r1_b36_fwd.ASW.qc.poly.recode.ped --map hapmap3_r1_b36_fwd.ASW.qc.poly.recode.map --r2 --out ASW_ld_matrix
## PLINK v1.90b7 64-bit (16 Jan 2023)             www.cog-genomics.org/plink/1.9/
## (C) 2005-2023 Shaun Purcell, Christopher Chang   GNU General Public License v3
## Logging to ASW_ld_matrix.log.
## Options in effect:
##   --map hapmap3_r1_b36_fwd.ASW.qc.poly.recode.map
##   --out ASW_ld_matrix
##   --ped hapmap3_r1_b36_fwd.ASW.qc.poly.recode.ped
##   --r2
## 
## 1031695 MB RAM detected; reserving 515847 MB for main workspace.
## .ped scan complete (for binary autoconversion).
## Performing single-pass .bed write (1536247 variants, 71 people).
## --file: ASW_ld_matrix-temporary.bed + ASW_ld_matrix-temporary.bim +
## ASW_ld_matrix-temporary.fam written.
## 1536247 variants loaded from .bim file.
## 71 people (34 males, 37 females) loaded from .fam.
## Using up to 127 threads (change this with --threads).
## Before main variant filters, 42 founders and 29 nonfounders present.
## Calculating allele frequencies... done.
## Total genotyping rate is 0.997421.
## 1536247 variants and 71 people pass filters and QC.
## Note: No phenotypes present.
## --r2 to ASW_ld_matrix.ld ... done.

# 筛选 LD 独立的 SNP(设置窗口大小、步长以及LD阈值)
$ plink --ped hapmap3_r1_b36_fwd.ASW.qc.poly.recode.ped --map hapmap3_r1_b36_fwd.ASW.qc.poly.recode.map --indep-pairwise 50 5 0.2 --out ASW_independent_snps
## PLINK v1.90b7 64-bit (16 Jan 2023)             www.cog-genomics.org/plink/1.9/
## (C) 2005-2023 Shaun Purcell, Christopher Chang   GNU General Public License v3
## Logging to ASW_independent_snps.log.
## Options in effect:
##   --indep-pairwise 50 5 0.2
##   --map hapmap3_r1_b36_fwd.ASW.qc.poly.recode.map
##   --out ASW_independent_snps
##   --ped hapmap3_r1_b36_fwd.ASW.qc.poly.recode.ped
## 
## 1031695 MB RAM detected; reserving 515847 MB for main workspace.
## .ped scan complete (for binary autoconversion).
## Performing single-pass .bed write (1536247 variants, 71 people).
## --file: ASW_independent_snps-temporary.bed + ASW_independent_snps-temporary.bim
## + ASW_independent_snps-temporary.fam written.
## 1536247 variants loaded from .bim file.
## 71 people (34 males, 37 females) loaded from .fam.
## Using 1 thread (no multithreaded calculations invoked).
## Before main variant filters, 42 founders and 29 nonfounders present.
## Calculating allele frequencies... done.
## Total genotyping rate is 0.997421.
## 1536247 variants and 71 people pass filters and QC.
## Note: No phenotypes present.
## Pruned 103568 variants from chromosome 1, leaving 19572.
## Pruned 105698 variants from chromosome 2, leaving 18970.
## Pruned 87087 variants from chromosome 3, leaving 16126.
## Pruned 78517 variants from chromosome 4, leaving 14764.
## Pruned 79325 variants from chromosome 5, leaving 14816.
## Pruned 82737 variants from chromosome 6, leaving 15076.
## Pruned 67637 variants from chromosome 7, leaving 13220.
## Pruned 68564 variants from chromosome 8, leaving 12531.
## Pruned 57207 variants from chromosome 9, leaving 10939.
## Pruned 66070 variants from chromosome 10, leaving 12373.
## Pruned 63843 variants from chromosome 11, leaving 11562.
## Pruned 61148 variants from chromosome 12, leaving 11933.
## Pruned 46762 variants from chromosome 13, leaving 9418.
## Pruned 40394 variants from chromosome 14, leaving 8081.
## Pruned 36951 variants from chromosome 15, leaving 7940.
## Pruned 38910 variants from chromosome 16, leaving 8369.
## Pruned 32492 variants from chromosome 17, leaving 7676.
## Pruned 36530 variants from chromosome 18, leaving 7664.
## Pruned 21909 variants from chromosome 19, leaving 5481.
## Pruned 31394 variants from chromosome 20, leaving 6745.
## Pruned 17156 variants from chromosome 21, leaving 3715.
## Pruned 17288 variants from chromosome 22, leaving 4217.
## Pruned 45787 variants from chromosome 23, leaving 7410.
## Pruned 337 variants from chromosome 25, leaving 271.
## Pruned 51 variants from chromosome 26, leaving 16.
## Pruning complete.  1287362 of 1536247 variants removed.
## Marker lists written to ASW_independent_snps.prune.in and
## ASW_independent_snps.prune.out .

$ head ASW_ld_matrix.ld
## CHR_A         BP_A       SNP_A  CHR_B         BP_B       SNP_B           R2
##      1       576058  rs28446478      1       742429   rs3094315     0.369231
##      1       576058  rs28446478      1       742584   rs3131972     0.328415
##      1       576058  rs28446478      1       744045   rs3131969     0.274376
##      1       576058  rs28446478      1       744197   rs3131967     0.211538
##      1       576058  rs28446478      1       750775   rs1048488      0.33172
##      1       576058  rs28446478      1       751010   rs3115850     0.379798
##      1       742429   rs3094315      1       742584   rs3131972     0.854868
##      1       742429   rs3094315      1       744045   rs3131969       0.7526
##      1       742429   rs3094315      1       744197   rs3131967     0.571979

4. LD值的解读

? r2 ≈ 0:两个SNP变异相对独立,不共享遗传信息。
? r2 ≈ 0.2 - 0.3:两个SNP之间存在弱的连锁不平衡,可能表明它们距离较远或者存在较强的重组。
? r2 ≈ 0.5 - 0.7:这类值表示中等强度的连锁不平衡,两个SNP之间可能有一定的共遗传关系,通常表明它们可能位于较为接近的基因组区域。
? r2 ≈ 0.8 - 1.0:表示非常强的连锁不平衡,两个SNP很可能位于同一个区域并共享相同的遗传变异,遗传学上可能视为“一个变异”。

5. hg19转hg38(1000 genomes)

# 合并 LD 矩阵文件
cat ld_matrix_chr*.ld > ld_matrix_all.ld

# 格式化并去除重复行(这里是将空格替换为制表符,并去除行首多余的制表符)
cat ld_matrix_all.ld | tr -s ' ' '\t' |sed 's/^\t//' > ld_matrix_all_tabbed.ld
# 删除了重复的行(每个染色体矩阵都有列名,重复)
sed 's/[[:space:]]*$//' ld_matrix_all_tabbed.ld | awk 'NR==1{print $0; next} !seen[$0]++' > ld_matrix_all_no_duplicates.ld

# 生成位置文件并进行 LiftOver
awk '{if (NR > 1) print "chr"$1"\t"$2"\t"$2+1"\t"NR-1}' ld_matrix_all_no_duplicates.ld > ld_positions_A.txt
awk '{if (NR > 1) print "chr"$4"\t"$5"\t"$5+1"\t"NR-1}' ld_matrix_all_no_duplicates.ld > ld_positions_B.txt

/data/shumin/software/LiftOver/liftOver ld_positions_A.txt /data/shumin/software/LiftOver/hg19ToHg38.over.chain.gz ld_positions_A_hg38.txt unmapped_A.txt
/data/shumin/software/LiftOver/liftOver ld_positions_B.txt /data/shumin/software/LiftOver/hg19ToHg38.over.chain.gz ld_positions_B_hg38.txt unmapped_B.txt

awk '{print $4"\t"$1"\t"$2}' ld_positions_A_hg38.txt > ld_positions_A_formatted.txt
awk '{print $4"\t"$1"\t"$2}' ld_positions_B_hg38.txt > ld_positions_B_formatted.txt

# 合并位置信息
join -1 1 -2 1 -t $'\t' ld_positions_A_formatted.txt ld_positions_B_formatted.txt > ld_positions_combined.txt

awk '{if (NR > 1) print NR-1"\t"$0}' ld_matrix_all_no_duplicates.ld > ld_matrix_all_no_duplicates_with_row.txt
join -1 1 -2 1 -t $'\t' ld_positions_combined.txt ld_matrix_all_no_duplicates_with_row.txt > ld_matrix_all_no_duplicates_hg38.ld

# 生成最终的 LD 矩阵文件
head -1 ld_matrix_all_tabbed.ld >> ld_matrix_all_hg38.ld
awk '{print $6"\t"$3"\t"$8"\t"$9"\t"$5"\t"$11"\t"$12}' ld_matrix_all_no_duplicates_hg38.ld > ld_matrix_all_hg38.ld
最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容