본문 바로가기
약물

[약물] 약물의 유사도 확인하기, ECFP 실습, R package이용

by 인포메틱스 2020. 12. 10.
반응형

 

이전에 포스팅하였던 내용인 약물의 ECFP를 계산하고 tanimoto coefficient 유사도를 찾는 실습을 해보고자 합니다.

 

R을 이용한 분석이고 추후에 python에 대한 분석도 올릴 예정입니다.

 

패키지로는 Rcpi, rcdk package를 이용하겠습니다.

 

최근 ChemmineR package가 나오긴 했지만, 주로 많이 사용하는 package를 사용하도록 하겠습니다.

 (ChemmineR에는 ECFP 계산하는게 없는것 같네요..)

 

참고로 rcdk는 install.packages 를 이용하면되고, Rcpi의 경우 Bioconductor를 이용(BiocManager::install)해서 설치를 해야합니다.

 

그리고 주의점은 rcdk, Rcpi의 경우 뭔가 설치하는데 예민한것 같습니다.(설치가 쉽지가 않네요.. rJAVA, R버전에 따라 잘되고 안되고 하네요)

 

실습을 하려다보니 , 20201210 현재 R 4.0.2버전에서 바로바로 설치가 안되네요. (linux version)

 

오늘 실습의 목적은 탈모약으로 유명한 아보다트의 주성분 두타스테레이드와 프로페시아의 주성분인 피나스테레이드유사성을 확인해보려고 합니다.

 

Dutasteride - pubchem출처
Finasteride - pubchem출처

 

탈모약을 겉으로 보았을 경우 정말 유사해 보입니다. 실제로 ECFP를 이용해서 유사도를 구할때도 유사하게 나오는지 확인해보도록하겠습니다.

 

ECFP를 계산하기 위해선 sdf file이 필요합니다. 먼저 rcdk package를 이용하여 molecule을 불러옵니다.

 

 load.molecule의 경우 ulr을 이용해서 바로 불러올 수 있습니다. url의 경우 pubchem에서 찾아 왔습니다.

 

duta=load.molecules('https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/CID/6918296/record/SDF/?record_type=2d&response_type=save&response_basename=Structure2D_CID_6918296')
fina=load.molecules('https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/CID/57363/record/SDF/?record_type=2d&response_type=save&response_basename=Structure2D_CID_6918296')

# 구조 파악!
class(duta) # list
length(duta) # 1개
class(duta[[1]]) # jobjRef, rJava .. 몰라.. 이런거.. 요런타입도 있었네..
names(duta[[1]]) # 리스트안에 duta에서 어떤이름으로 존재하는지 확인해보기

 

후에 ECFP를 계산을 바로 할건데  Rcpi package를 이용할겁니다. 그런데 여기서 input이 list로 넣으면 돌아가지 않기 때문에 리스트 안에 데이터를 바로 넣을 것입니다.

 

duta_ecfp1<-extractDrugExtended(duta) # error!!

# 1이 있는 위치를 숫자로 표시
duta_ecfp<-extractDrugExtended(duta[[1]]) # input
fina_ecfp<-extractDrugExtended(fina[[1]])

# 전체 0,1의 값들을 보여줌
duta_ecfp<-extractDrugExtendedComplete(duta[[1]])
fina_ecfp<-extractDrugExtendedComplete(fina[[1]])

 

위에서 extractDrugExtended, extractDrugExtendedComplete의 차이는 1의 위치로 나타내는가, 혹은 0,1로 나타내는가 입니다.

 

ECFP의 특징중에 하나가 binary의 길이를 조절이 가능하다고 하였는데, 변경하기 위해서는 size를 추가로 해서 변경해주시면 됩니다.

 

duta_ecfp<-extractDrugExtended(duta[[1]],size = 2000))
fina_ecfp<-extractDrugExtended(fina[[1]],size = 2000))


duta_ecfp<-extractDrugExtendedComplete(duta[[1]],size = 2000)
fina_ecfp<-extractDrugExtendedComplete(fina[[1]],size = 2000)

 

tanimoto coefficient의 경우 Rcpi에서 calcDrugFPSim()으로 계산이 가능합니다.

 

# 대략적으로 분석할때, binary size = 100
duta_ecfp<-extractDrugExtended(duta[[1]],size=100)
fina_ecfp<-extractDrugExtended(fina[[1]],size=100)
calcDrugFPSim(duta_ecfp,fina_ecfp,metric = 'tanimoto')
duta_ecfp<-extractDrugExtendedComplete(duta[[1]],size=100)
fina_ecfp<-extractDrugExtendedComplete(fina[[1]],size=100)
calcDrugFPSim(duta_ecfp,fina_ecfp,metric = 'tanimoto',fptype = 'complete')

# default로 분석할때, binary size 1024
duta_ecfp<-extractDrugExtended(duta[[1]])
fina_ecfp<-extractDrugExtended(fina[[1]])
calcDrugFPSim(duta_ecfp,fina_ecfp,metric = 'tanimoto')
duta_ecfp<-extractDrugExtendedComplete(duta[[1]])
fina_ecfp<-extractDrugExtendedComplete(fina[[1]])
calcDrugFPSim(duta_ecfp,fina_ecfp,metric = 'tanimoto',fptype = 'complete')

# 자세하게 분석할때, binary size = 2000
duta_ecfp1<-extractDrugExtended(duta[[1]],size = 2000)
fina_ecfp1<-extractDrugExtended(fina[[1]],size = 2000)
calcDrugFPSim(duta_ecfp1,fina_ecfp1,metric = 'tanimoto')
duta_ecfp1<-extractDrugExtendedComplete(duta[[1]],size = 2000)
fina_ecfp1<-extractDrugExtendedComplete(fina[[1]],size = 2000)
calcDrugFPSim(duta_ecfp1,fina_ecfp1,metric = 'tanimoto',fptype = 'complete')

 

위와 같이 진행했을때,  결과값은 아래와 같습니다.

 

binary size 100 1024 2000
Tainoto coefficient 0.8607595 0.6409091 0.6304348

 

대략적으로 분석을 하면 유사도가 높게 나오지만 뭔가 세분화해서 분석할경우 유사도가 조금 떨어진다라고 나오게 됩니다.

(저도 처음 이 두약물로 실습을 했는데 의외의 결과... 좀더 높게 유사도가 나올줄 알았는데)

 

오늘은 ECFP를 계산하고 tanimoto coefficient를 이용하여 두 약물의 유사도를 확인해보는 실습을 해보았습니다.

 

기회가 된다면 python RDkit을 이용한 분석도 올리도록 하겠습니다.

 


 

유익하셨다면 주변 아무 광고 클릭 부탁드립니다.

 

728x90
반응형

댓글