def get_ld_tables(snps, ld_radius=100, ld_window_size=0):
"""
Calculates LD tables, and the LD score in one go...
"""
ld_dict = {}
m,n = snps.shape
print m,n
ld_scores = sp.ones(m)
ret_dict = {}
for snp_i, snp in enumerate(snps):
# Calculate D
start_i = max(0, snp_i - ld_radius)
stop_i = min(m, snp_i + ld_radius + 1)
X = snps[start_i: stop_i]
D_i = sp.dot(snp, X.T) / n
r2s = D_i ** 2
ld_dict[snp_i] = D_i
lds_i = sp.sum(r2s - (1-r2s) / (n-2),dtype='float32')
#lds_i = sp.sum(r2s - (1-r2s)*empirical_null_r2)
ld_scores[snp_i] =lds_i
ret_dict['ld_dict']=ld_dict
ret_dict['ld_scores']=ld_scores
if ld_window_size>0:
ref_ld_matrices = []
for i, wi in enumerate(range(0, m, ld_window_size)):
start_i = wi
stop_i = min(m, wi + ld_window_size)
curr_window_size = stop_i - start_i
X = snps[start_i: stop_i]
D = sp.dot(X, X.T) / n
ref_ld_matrices.append(D)
ret_dict['ref_ld_matrices']=ref_ld_matrices
return ret_dict
评论列表
文章目录