搜索
查看: 2180|回复: 2

绘图时稀释SNP的策略分享

[复制链接]

5

主题

22

帖子

172

积分

注册会员

Rank: 2

积分
172
发表于 2017-3-23 21:51:48 | 显示全部楼层 |阅读模式
本帖最后由 hyacz 于 2017-3-24 15:02 编辑

最近在做可视化的时候遇到了一个问题,一条染色体上31wSNP,如果都画出来的话比较消耗资源。在GAPIT里面发现了一个稀释SNP的方法,贴出来分享给大家:

[AppleScript] 纯文本查看 复制代码
`GAPIT.Pruning` <-
function(values,DPP=5000){
#Object: To get index of subset that evenly distribute
#Output: Index
#Authors: Zhiwu Zhang
# Last update: May 28, 2011 
##############################################################################################
#No change if below the requirement
if(length(values)<=DPP)return(c(1:length(values)))
  
#values= log.P.values
values=sqrt(values)  #This shift the weight a little bit to the low building.

#Handler of bias plot
rv=runif(length(values))
values=values+rv
values=values[order(values,decreasing = T)]

theMin=min(values)
theMax=max(values)
range=theMax-theMin
interval=range/DPP

ladder=round(values/interval)
ladder2=c(ladder[-1],0)
keep=ladder-ladder2
index=which(keep>0)


return(index)
}#end of GAPIT.Pruning 


下面是我自己改写的python3版本的:

[Python] 纯文本查看 复制代码
import numpy as np

def pruning(values: np.array, dpp=5000):
    if len(values) <= dpp:
        return range(len(values))
    # This shift the weight a little bit to the low building.
    values = np.sqrt(values)
    # Handler of bias plot
    rv = np.random.uniform(size=len(values))
    values += rv
    values[::-1].sort()

    the_min = np.min(values)
    the_max = np.max(values)
    the_range = the_max - the_min
    interval = the_range / dpp

    ladder = np.round(values/interval)
    ladder2 = np.append(ladder[1:], 0)
    keep = ladder - ladder2
    index = [i for i, k in enumerate(keep) if k > 0]

    return index

回复

使用道具 举报

0

主题

8

帖子

140

积分

注册会员

Rank: 2

积分
140
发表于 2017-3-24 12:59:51 | 显示全部楼层
请问大概时啥原理?
没太看明白....
回复 支持 反对

使用道具 举报

5

主题

22

帖子

172

积分

注册会员

Rank: 2

积分
172
 楼主| 发表于 2017-3-24 14:19:05 | 显示全部楼层
本帖最后由 hyacz 于 2017-3-24 14:41 编辑
银色麦穗 发表于 2017-3-24 12:59
请问大概时啥原理?
没太看明白....

0. 输入values = -log10(p), p为N维向量 (!注意values必须是从大到小排序的)
1. values 求平方根
2. 产生服从均匀分布的一个N维向量
3. values = 1. + 2.
4. 对 values 从大到小排序
4. 将 values 映射到 0-dpp 的区间
5. 将映射后的向量左移一个元素,最后补一个0
6. 4. 和 5. 的结果相减,取其中不为零的元素的index

前4步都是在处理数据,然后做映射,然后每一个阶梯只留第一个值。数据处理的部分写了注释,我的理解是这是张老师的策略,并不是非得这么处理,换别的处理方法能达到这个目的也可以。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树    

GMT+8, 2019-2-21 22:53 , Processed in 0.028470 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.