分子相似性:
相似性原理(similar property principle)指出,总体相似的分子应具有相似的生物活性。
相似性评估
化合物的指纹对于使用计算机考虑化合物的相似性是必需的。已经提出了各种评估方法,但是最常用的评估方法称为“ Tanimoto系数 ”。使用以下等式从两个分子A和B的位阵列指纹计算Tanimoto系数:
代码语言:javascript复制#===========================================================================
#===========================================================================
rm(list=ls())
library(tibble)
library(tidyr)
set.seed(1234)
options(stringsAsFactors = F)
library(dplyr)
library(rcdk)
setwd('D:\SCIwork\F29\lianxishuju')
library(data.table)
library(plyr)
library(Hmisc)#加载包
#读取数据
data <- read.csv('train.csv', header = T)
SMILES <- data$SMILES
head(data)
# SMILES
# 1 [H][C@]12CCCN1CC1=C(C2)C2=C(C=C(OC)C(OC)=C2)C2=C1C=CC(OC)=C2
# 2 COC1=CC2=C(C=C1)C1=C(CC3CCCN3C1)C1=C2C=C(OC)C(OC)=C1
# 3 COC1=CC2=C(C=C1)C1=C(CN3CCCC3C1)C1=C2C=C(OC)C(OC)=C1
# 4 COC1=CC2=C(C=C1OC)C1=C(C=C(OC)C(OC)=C1)C1=C2CC2CCCN2C1
# 5 COC1=CC2=C(C=C1OC)C1=C(C=C(OC)C(OC)=C1)C(=C2)C(O)=O
# 6 COC1=CC2=C(C=C1OC)C1=C(C=C(OC)C(OC)=C1)C(=C2)C(=O)C1=CC=CN1
#计算分子指纹
mols1 <- parse.smiles(SMILES)
fps <- lapply(mols1, get.fingerprint, type='extended')
fp.sim <- fingerprint::fp.sim.matrix(fps, method='tanimoto')
#计算Tanimoto系数
sim_matrix <- as.data.frame(fp.sim)
names(sim_matrix) <- paste0('mol', 1:195)
rownames(sim_matrix) <- paste0('mol', 1:195)
#矩阵整理
flattenCorrMatrix <- function(cormat) {
ut <- upper.tri(cormat)
df <- data.frame( row = rownames(cormat)[row(cormat)[ut]],
column = rownames(cormat)[col(cormat)[ut]],
cor =(cormat)[ut])
df}
#得到相似度高的分子
sim_dt <- flattenCorrMatrix(sim_matrix)
sim_dt <- subset(sim_dt, sim_dt$cor > 0.7)
#
# #计算1-Tanimoto系数
# fp.dist <- 1 - fp.sim
# fp.dist <- as.data.frame(fp.dist)
#
#
# #计算Tanimoto系数
# dis_matrix <- as.data.frame(fp.dist)
# names(dis_matrix) <- paste0('mol', 1:195)
# rownames(dis_matrix) <- paste0('mol', 1:195)
#
#
# #得到相似度低的分子
# dis_dt <- flattenCorrMatrix(dis_matrix)
# dis_dt <- subset(dis_dt, dis_dt$cor > 0.9)
#