درباره ترسیم گراف با پکیج iGraph و سایتهای رسم شبکه های زیستی
ممکن است اولین بار که نام گراف را میشنویم، به یاد نمودار بیفتیم. اما گراف مفهوم دیگری داشته و معنای یک نتورک یا شبکه را دارد. در زیستشناسی نیز با تحلیلی کار میکنیم که به network biology، network medicine یا آنالیز نتورک در زیستشناسی معروف است. برای تحلیل این اطلاعات نیاز به ترسیم گراف داریم.
برای ترسیم گراف نیاز به استفاده از ابزار مختلفی داریم. اولین کاری که میتوانیم انجام دهیم، به کار بردن یک قلم و کاغذ برای کشیدن آن چیزی است که در ذهن داریم! برای شروع میتوانیم چندین ژن را به عنوان گره قرار دهیم و ارتباط بیانی ژنها را با خطی مشخص کنیم. یعنی زمانی که یک ژن بیانش زیاد میشود، ژن دیگر نیز به همین منوال بیانش زیاد شود و یا به اصطلاح کورلیشن یا همبستگی داشته باشند.
برای اینکه ارتباط ژنها با یکدیگر را بدانید از چه چیزی استفاده میکنید؟ یک راه برای این کار این است که همبستگی بین ژنها را محاسبه کنید و سپس بر اساس مقادیری که به دست آوردهاید، ژنهایی که با یکدیگر همبستگی بالایی دارند را جدا کنید و ترسیم گراف را انجام دهید.
همانطور که به نظر میرسد، برای رسم شبکه های زیستی ما در ابتدا نیاز به یک ماتریس داریم که برای ترسیم گراف به آن نیاز داریم. این ماتریس به ماتریس مجاورت یا adjacency matrix میگویند. این ماتریس در حقیقت یک نقشه راه برای کشیدن ماتریس است. ستونها و ردیفها همان نود یا گرههای گراف ما هستند که ارتباط بین آنها مقادیر درون ماتریس هستند.
در یک گراف بدون جهت، زمانی که دو نود با یکدیگر در اتباط باشند، مقدار درون جدول یک میشود که نشانگر ارتباط دو نود ستون و ردیف است. در شکل زیر چند مثال از این مورد را مشاهده میکنید که برای ترسیم گراف مد نظر خود از یک ماتریس مجاورت استفاده کرده است.
با همین رویکرد میتوانیم ماتریس مجاورت را برای ترسیم گراف مختلفی مانند جهتدار و وزندار تغییر دهیم. اگر گراف شما وزندار باشد، مقادیری که درون جدول قرار میگیرد، دیگر یک و صفر نیستند. (یعنی دیگر این مقادیر بولین نیستند که تنها بگویند ارتباط وجود دارد یا نه) در اصل وزن یک یال بین دو نود را نشان میدهند. پس میتوان گفت ماتریس حاصل از بررسی کورلیشن در شبکه همبیانی یک گراف وزندار خواهد بود. دقت کنید زمانی که یک نود، یک یال بر روی خودش دارد، مقدار آن در قطر قرار میگیرد. چرا؟ چون در قطر ارتباط هر نود با خودش نمایش داده میشود و گاهی ممکن است ما برای تحلیل گراف این مقدار را صفر کنیم.
ما یک گراف را به کمک این ماتریس میتوانیم رسم کنیم. یا اصلا میتوانیم یک لیست از یالها داشته باشیم. یعنی یک لیست از دودوییها که نمایانگر دو نودی هستند که با یکدیگر یال دارند. این روش نمایشی نیز میتواند برای ترسیم گراف مورد استفاده قرار بگیرد. مثلا: {(node1, node2), (node1, node3), (node3, node4)}
برای اینکه بتوانیم گرافها را با بهرهوری بالایی رسم کنیم، میتوانیم از ابزار مختلفی استفاده کنیم. فقط شما نیاز دارید گراف را ابتدا به زبان ریاضی کدنویسی کنید. منظور از کدنویسی همین استفاده از ماتریس مجاورت یا استفاده از هر روشی دیگری برای ترسیم گراف است.
پس از این قدم شما به کمک پکیج iGraph که درون زبان برنامهنویسی پایتون یا R توسعه داده شده است، گراف خود را رسم کنید و حتی اجزای آن را به فراخور گراف خود تغییر دهید. مثلا اندازه نودها را بر اساس درجه رسم کنید. کشیدن یک گراف به شما این امکان را میدهد که نه تنها آن را با کمک الگوریتمهای مختلف تحلیل کنید، بلکه از حالت عددی و جدولی صرف خارج کنید و بیانی از آن داشته باشید که به چشم قابل دیدن باشد.
تحلیل توپولوژی یک گراف میتواند شامل موارد زیر در شکل باشد. به طور مثال، مرکزیت در گراف معانی مختلفی دارد، اما هدف اصلی آن این است که شما بخشی از گراف را پیدا کنید که جریان اطلاعاتی در آن بیشترین باشد. نودی که مرکزیت بالایی دارد، محل عبور اطلاعات بین نودهای دیگر است. در یک تعریف میتوانیم نودی را مرکز بنامیم که از بقیه نودها فاصله کمی دارد. در تعریف دیگر، نود مرکزی، گرهی است که با نودهای مهمی در ارتباط باشد و از این طریق وزن بالایی بگیرد. پس با ترسیم گراف میتوانید درکی از ساختار شبکه پیدا کنید.
سایتهای مختلفی نیز برای رسم شبکه های زیستی وجود دارد که با تکیه بر دیتابیسهای خود برای ترسیم گراف زیستی مورد استفاده قرار میگیرند. از این سایتها میتوانید به STRING اشاره کرد. این سایت یکی از مهمترین ابزارها در زمینه سیستم بیولوژی و مطالعات ارتباطات پروتئینی است. شما با وارد کردن توالی پروتئین یا نام یک پروتئین میتوانید شبکهای از ارتباطات آن پروتئین با دیگر پروتئینها پیدا کنید. نودها در این گراف پروتئین بوده و یالها نوع ارتباط بین پروتئینها هستند که میتوانند به اندازههای مختلفی قابل اعتماد باشند.
با وارد کردن تعدادی از ژنهای مورد مطالعه در سایت genes2network، میتوانید ارتباط بین این ژنها با یکدیگر را رسم کنید. سایت دیگری مانند lists2network وجود دارد که میتواند انواع شبکههای زیستی مانند PPI network، شبکه همبیانی ژنی، GRN را ترکیب کند و خروجی نهایی را بر اساس این دادهها به شما ارائه کند.
سایت دیگری به نام expression2kinase، دیتای به دست آمده از transcription factors, proteins, kinases را با هم ترکیب میکند تا بتواند یک دید کلی از بیان ژنهای موجود در لیست ژنی بدهد. دسته ژنی که برای ترسیم گراف وارد این سایت میکنید، باید ژنهایی باشند که بیان متفاوتی داشته باشد یا به اصطلاح differentially expressed باشند. سایت Sets2Networks نیز از شما جدولی از ستهای ژنی را گرفته و گراف ارتباطی آن را رسم میکند.
فرمتی که به آن وارد میکنید باید Gene Matrix Transposed files یا gmt باشد. این فرمت در سایت اصلی توضیح داده شده است، اما به صورت کلی ردیفها لیستهای ژنی بوده و ستونها نیز سمبلهای ژنی هستند.
لزومی ندارد که همه ستهای ژنی تعداد ژنهای برابر داشته باشند یا همگی ژنها در آنها حضور داشته باشند. ترسیم گراف به کمک این سایت به شما کمک میکند دیدگاهی از ارتباط دسته ژنهای مختلف حاضر در این ماتریس gmt داشته باشید. پس همیشه نیاز نیست که با یک فرمت مخصوص ماتریس را بنویسیم. تنها کافی است که سوال خود را به زبان کامپیوتر طراحی کنیم و سپس با کدنویسی نتورک را رسم کنیم.