Konektom - mapa wszystkich połączeń w mózgu. Human Connectome Project (2010 - National Institutes of Health) http://grants.nih.gov/grants/guide/rfa-files/rfa-mh-10-020.html Problemy: 1. Jak zidentyfikować połączenia? 2. Jak opisać połączenia w sposób ilościowy? 3. Jakie reguły rządzą rozwojem i ewolucją systemu połączeń w mózgu? 4. Czy można skorelować indywidualne różnice w połączeniach z cechami charakteru? 8.1 Podział kory mózgu na 47 pól wg. Korbiniana Brodmanna (1868-1918) http://spot.colorado.edu/~dubin/talks/brodmann/brodmann.html
Tkanka barwiona metodą Bodiana - widoczne czarno zabarwione aksony 8.2 Tkanka barwiona metodą Bodiana - widoczne czarno zabarwione aksony http://moon.ouhsc.edu/kfung/JTY1/Images/FNEWBS12-Bodian-MS.gif Barwienie metodą Kluwera-Barrery pozwala na uwidocznienie osłonek mielinowych www.bristol.ac.uk/ vetpath/cpl/lfbcv2.jpg
Joannes Gregorius Dusser de Barenne 1885-1940 od 1916 - strychninizacja jako alternatywa dla ekstyrpacji w badaniach nad lokalizacją funkcji w mózgu. 1936- 1940 - Dusser de Barenne i McCulloch publikują wyniki badań nad wykorzystaniem strychniny (strychninowa neuronografia) do badania struktury połączen w korze. Na dole po lewej - zapis ECG z kory somatosensorycznej przed i po podaniu strychniny - z charakterystycznymi iglicami strychninowymi (strychnine spikes). Po prawej - organizacja połączeń w korze czuciowej (Dusser de Barenne & McCulloch, 1938) 8.3 Joannes Gregorius Dusser de Barenne 1885-1940
Fink & Heimer, 1967 - degeneracja anterogradna 8.4 Fink & Heimer, 1967 - degeneracja anterogradna http://www.sci.uidaho.edu/med532/ degeneration_regeneration_mod1.htm Peroksydaza chrzanowa (HRP) - retrogradny transport aksonalny, reakcja HRP - DAB http://www.agr.nagoya-u.ac.jp/english2/image/labo/e2-3-4b.jpg
CoCoMac - internetowa baza połączeń w mózgu makaka: 8.7 CoCoMac - internetowa baza połączeń w mózgu makaka: http://cocomac.org/home.asp Baza CoCoMac została "zamrożona" po śmierci twórcy, Ralfa Kottera w 2010 r. Jej funkcje stopniowo przejmuje baza CoCoMac2: http://cocomac.g-node.org/drupal/ prowadzona przez German Neuroinformatics Node (G-Node): http://www.g-node.org/
8.12 Fragment macierzy połączeń z bazy CoCoMac2. Liczby oznaczają siłę połączeń, 0 - stwierdzony brak połączeń, - brak danych.
8.6 Obrazowanie dyfuzyjne (DTI - diffusion tensor imaging, DWI - diffusion-weighted imaging), wykorzystuje dyfuzję wody w tkance - może być wykorzystane do badania przebiegu włókien tworzących substancję białą w mózgu. Kubicki et al., 2007
8.17 Identyfikacja funkcjonalnej sieci w mózgu. Dane o zmianach aktywności w czasie w stanie spoczynku są gromadzone dla każdego voksela. Następnie dla każdej z par vokseli (16000) wylicza się korelację i sporządza macierz korelacji. (Joyce et al., 2010)
8.18 Macierz korelacji jest następnie binaryzowana, punktom powyżej progu binaryzacji przypisawana jest wartość 1, poniżej 0. Wartość progu jest ustalana w taki sposób, aby liczba węzłów w sieci była stała dla wszystkich badanych osób. Binaryzacja przekształca macierz korelacji w macierz sąsiedztwa, a to wystarcza do zdefiniowania grafu (sieci) (Joyce et al., 2010)
8.26 http://umcd.humanconnectomeproject.org/umcd/default/browse >1700 macierzy połączeń, dane z fMRI i dwMRI (diffusion weighted MRI), + informacje o wieku, płci, IQ i stanie zdrowia badanych (Brown et al., 2012)
8.30
8.31
C(p) i L(p) to odpowiednio średni współczynnik 9.26 Sieci typu małych światów. C(p) i L(p) to odpowiednio średni współczynnik gronowania i średnia długość najkrótszej ścieżki normalizowana w stosunku do sieci regularnej. p - poziom losowości. Watts D.J., Strogatz S.H. (1998) Collective dynamics of ‘small-world’ networks. Nature 393:440-442 (24 tys. cytacji)
Watts & Strogats, 1998 - przykłady sieci o cechach małych światów. 9.27 Watts & Strogats, 1998 - przykłady sieci o cechach małych światów. Aktorzy z bazy IMDB (internet Movie Database: http://www.imdb.com/, krawędź w tej sieci to wspólne występowanie w jednym filmie. W przypadku Caenorhabditis elegans węzłami były neurony (nicień ma 959 komórek, z tego 302 to komórki nerwowe), a krawędziami synapsy lub połączenia szczelinowe.
mozg1<-read. table("f:\\ADHD200_CC200_KKI_2026113_connectmat mozg1<-read.table("f:\\ADHD200_CC200_KKI_2026113_connectmat.txt", colClasses="numeric", header=FALSE) mozg2<-as.matrix(mozg1) mozg2_graf<-graph.adjacency(mozg2, mode="undirected",weighted=TRUE, diag=FALSE) plot(mozg2_graf) vcount(mozg2_graf) ecount(mozg2_graf) degree(mozg2_graf) transitivity(mozg2_graf) average.path.length(mozg2_graf) vcount(mozg2_graf) [1] 190 ecount(mozg2_graf) [1] 17746 degree(mozg2_graf) V1 V2 V3 V4 V5 V6 …… V190 189 189 189 189 189 189 …… 189 transitivity(mozg2_graf) [1] 1 average.path.length(mozg2_graf)
wagi<-sort(E(mozg2_graf)$weight) plot(wagi) >wagi [1] -8.946374e-01 -8.836431e-01 -8.832518e-01…….. ………………………………………………………………. [17951] 9.421743e-01 9.462882e-01 9.548570e-01….
prog = 0.8 mozg2<-as.matrix(mozg1) mozg3<-replace(mozg2, mozg2< -prog, 1) #lub -1 mozg4<-replace(mozg3, mozg3> prog, 1) mozg5<-replace(mozg4, mozg4 != abs(1), 0) mozg5_graf<-graph.adjacency(mozg5, mode="directed",weighted=NULL, diag=FALSE) >ecount(mozg5_graf) [1] 221 > transitivity(mozg5_graf) [1] 0.4821124 > average.path.length(mozg5_graf) [1] 3.661468
losowy_trans<-numeric(10) #puste wektory z 10 elementami Tworzymy losowy graf o takiej samej liczbie wierzchołków i krawędzi jak badany graf: losowy_trans<-numeric(10) #puste wektory z 10 elementami losowy_path<-numeric(10) for(i in 1:10){ losowy<-erdos.renyi.game(vcount(mozg5_graf), ecount (mozg5_graf), type="gnm", directed=FALSE, loops=FALSE) losowy_trans[i]<-transitivity(losowy) losowy_path[i]<-average.path.length(losowy) } losowy_trans [1] 0.08692194 0.08868663 0.08524652 0.08524775 0.08836327 0.09254097 [7] 0.08938147 0.08385903 0.08816610 0.09035602 losowy_path [1] 2.114843 2.115567 2.113339 2.117126 2.118129 2.117182 2.112281 2.110666 [9] 2.113450 2.110833
gamma<-transitivity(mozg5_graf)/mean(losowy_trans) gamma [1] 3.419987 lambda<-average.path.length(mozg5_graf)/mean(losowy_path) lambda [1] 1.48972 sigma<-gamma/lambda sigma [1] 2.29725 if(sigma>1.2){ print ("To mały świat") }else{ print ("to nie mały świat") } [1] "To mały świat" dla progu = 0.5 sigma - small world coefficient gamma = lambda = wsp.gronowania sieci rzeczywistej średni wsp. gronowania sieci losowych o takiej samej liczbie wierzchołków i krawędzi charakt. długość ścieżki sieci rzeczywistej średnia charakt.długość ścieżki sieci losowych o takiej samej liczbie wierzchołków i krawędzi
rm(list=ls()) library(igraph) mozg1<-read.table("f:\\mozg0connect.txt", colClasses="numeric", header=FALSE) # pusty wektor z progami progi<- c() #pusty wektor na wartości współczynnika małych światów sigma<-c() #pusty wektor na frakcję pozostawionych krawędzi edges_fract<-c() #pusty wektor na liczbę izolowanych wierzchołków v_isol<-c()
prog = mozg2<-as.matrix(mozg1) mozg3<-replace(mozg2, mozg2< -prog, 1) mozg4<-replace(mozg3, mozg3> prog, 1) mozg5<-replace(mozg4, mozg4 != abs(1), 0) mozg5_graf<-graph.adjacency(mozg5, mode="undirected",weighted=NULL, diag=FALSE) losowy_trans<-numeric(10) losowy_path<-numeric(10) for(j in 1:10){ losowy<-erdos.renyi.game(vcount(mozg5_graf), ecount(mozg5_graf), type="gnm", directed=FALSE, loops=FALSE) losowy_trans[j]<-transitivity(losowy) losowy_path[j]<-average.path.length(losowy) } gamma<-transitivity(mozg5_graf)/mean(losowy_trans) lambda<-average.path.length(mozg5_graf)/mean(losowy_path) progi<-c(progi, prog) v_isol<-c(v_isol, sum(degree(mozg5_graf)==0)) sigma<-c(sigma, gamma/lambda) edges_fract<-c(edges_fract, ecount(mozg5_graf)) #tworzymy ramkę danych wynik_small<-data.frame(progi, sigma, edges_fract, v_isol)
progi sigma edges_fract v_isol 1 0.00 0.9275771 17746 0 2 0.05 0.9824511 15866 0 3 0.10 1.0510888 14052 0 4 0.15 1.1252772 12282 0 5 0.20 1.2016197 10624 0 6 0.25 1.2925114 9086 0 7 0.30 1.4042186 7682 0 8 0.35 1.5438912 6302 0 9 0.40 1.6926395 5184 0 10 0.45 1.9535389 4088 0 11 0.50 2.3181362 3192 1 12 0.55 2.6864333 2376 4 13 0.60 3.3712011 1766 7 14 0.65 4.5960211 1264 16 15 0.70 6.9411926 878 33 16 0.75 26.4051305 552 59 17 0.80 66.5594794 344 80
Zmiany wartości współczynnika małych światów, liczby krawędzi i liczby izolowanych wierzchołków w zależności od przyjętego progu
stopnie<-degree(mozg5_graf) stopnie2<-sort(stopnie) V4 V158 V1 V35 V160 V49 V138 …………….. 1 1 2 2 3 4 4 ………… V23 V130 V140 V13 V48 91 91 91 92 92 #wektor z progiem na podstawie stopni rich_deg<-c() #wektor z liczbą wierzchołków w klubie rich_v<-c() #wektor z rich club coefficient rich_club_coeff<-c() stopien=85 #od 5 do 85 mozg6_graf<-induced.subgraph(mozg5_graf, which(stopnie>stopien)) rcc<-(2*ecount(mozg6_graf))/(vcount(mozg6_graf)*(vcount(mozg6_graf)-1)) rich_deg<-c(rich_deg, stopien) rich_v<-c(rich_v, vcount(mozg6_graf)) rich_club_coeff<-c(rich_club_coeff, rcc)
rich_deg rich_v rich_club_coeff 1 5 183 0.2232631 2 10 170 0.2519318 3 15 154 0.2923351 4 20 131 0.3652378 5 25 117 0.4241085 6 30 102 0.5070860 7 35 90 0.5862672 8 40 86 0.6161423 9 45 73 0.6974886 10 50 64 0.7624008 11 55 53 0.8410740 12 60 44 0.9048626 13 65 37 0.9609610 14 70 31 0.9784946 15 75 23 1.0000000 16 80 15 1.0000000 17 85 9 1.0000000
mozg7<-read. table("f:\\mozg7connect mozg7<-read.table("f:\\mozg7connect.txt", colClasses="numeric", header=FALSE) mozg7<-as.matrix(mozg7) mozg7_graf<-graph.adjacency(mozg7, mode="undirected",weighted=TRUE, diag=FALSE) nazwy1<-read.table("f:\\mozg7abbrevs.txt", header=FALSE) nazwy2<-as.vector(t(nazwy1)) koord1<-read.table("f:\\mozg7xyz.txt", header=FALSE) koord2<-as.matrix(koord1) V(mozg7_graf)$name<-nazwy2 V(mozg7_graf)$label<-V(mozg7_graf)$name rglplot(mozg7_graf, layout=koord2)
V(mozg7_graf)$name<-nazwy2 V(mozg7_graf)$label<-V(mozg7_graf)$name V(mozg7_graf)$size<-5*log(degree(mozg7_graf)) V(mozg7_graf)$color<-ifelse(degree(mozg7_graf)>20, "red", "lightgreen") E(mozg7_graf)[weight>100]$color="red" E(mozg7_graf)[weight>100]$width=2 E(mozg7_graf)[weight<=100]$color="lightblue" plot(mozg7_graf, layout=layout.random)
Krawędź to linia łącząca wierzchołki w grafie która 7.2 Krawędź to linia łącząca wierzchołki w grafie która nie ma określonego początku i końca. Graf zawierający same krawędzie nazywamy grafem nieskierowanym (niezorientowanym, undirected). deg (v8) = 3 v8 v6 v7 deg (v6)= 2 deg(v1)= 0 V1 deg (v4) = 1 v4 v5 v2 v3 wierzchołki sąsiadujące to wierzchołki połączone (incydentne z) tą samą krawędzią Stopień wierzchołka = liczba krawędzi z którymi jest on incydentny. Oznaczamy jako deg(vi)
Graf regularny - każdy wierzchołek ma taki sam stopień 7.3 Graf zupełny (pełny) - graf w którym każda para wierzchołków jest połączona krawędziami. Graf zupełny określa się czasem jako Kn, gdzie n to liczba wierzchołków K5 Graf regularny - każdy wierzchołek ma taki sam stopień
Rozmiar grafu = liczba wierzchołków = 8 7.4 Rozmiar grafu = liczba wierzchołków = 8 Rząd grafu = liczba krawędzi = 7 v8 v6 v7 v1 v4 v5 Graf rzadki (sparse) - graf z małą liczbą krawędzi. Graf gęsty (dense) - graf z liczbą krawędzi bliską tej w grafie pełnym. Gęstość grafu (density) - stosunek liczby krawędzi do największej możliwej liczby krawędzi v2 Najmniejszy możliwy rząd grafu = 0 (graf ma same wierzchołki) Największy możliwy rząd (graf pełny, bez pętli) = n(n-1)/2, gdzie n to liczba wierzchołków v3
7.9 Macierz sąsiedztwa (adjacency matrix) grafu nieskierowanego to macierz kwadratowa A = [aij]i,j ≤ n, której elementy aij określają liczbę krawędzi między wierzchołkami Xi i Xj. Dla grafów nieskierowanych macierz jest symetryczna. Dla grafów bez pętli macierz na przekątnej ma same zera V5 V3 v1 v2 v3 v4 v5 0 1 0 0 0 1 0 1 1 0 0 1 0 1 0 0 1 1 0 1 0 0 0 1 1 v1 v2 v3 v4 v5 V4 A = V1 V2
7.10 W macierzy sąsiedztwa grafu skierowanego elementy określają liczbę łuków wychodzących z wierzchołka Xi i biegnących do wierzchołka Xj. Macierz grafu skierowanego może być niesymetryczna. V5 V3 0 1 0 0 0 0 0 1 1 0 0 1 2 0 0 0 0 0 1 1 V4 A = V1 V2
Długość drogi (ścieżki) = liczba krawędzi (łuków) tworzących ścieżkę 7.14 Długość drogi (ścieżki) = liczba krawędzi (łuków) tworzących ścieżkę Odległość (geodesic distance) między wierzchołkami - długość najkrótszej ścieżki łączącej wierzchołki v1 Odległość między v1 i v10 = 7 v3 Mimośród (eccentricity) wierzchołka = odległość danego wierzchołka do najbardziej oddalonego wierzchołka w grafie Mimośród v1 = 8 (odległość do v11) v2 v4 v6 v5 v13 v12 v7 v8 v11 v9 v10
v1 Miary centralności (istotności, znaczenia, centrality) węzłów: 7.27 Miary centralności (istotności, znaczenia, centrality) węzłów: Centralność zależna od stopnia (degree centrality): CD(v1) = 4 Centralność zależna od bliskości (closeness centrality) - odwrotność sumy odległości danego węzła od pozostałych Centralność zależna od pośrednictwa (betweeness centrality) - stosunek liczby najkrótszych ścieżek zawierających dany węzeł do liczby wszystkich ścieżek Centralność zależna od wektora własnego (eigenvector centrality) - określa stopień powiązania z najbardziej istotnymi węzłami w sieci v1
7.28 1, 0.31, 0, 0.14 Wartości centralności dla przykładowych węzłów. Kolejno: centralność zależna od stopnia, bliskości, pośrednictwa i wektora własnego 2, 0.48, 0, 0.71 4, 0.61, 38, 0.97 5, 0.52, 27, 1 1, 0.34, 0, 0.21 1, 0.35, 0, 0.36
współczynnik gronowania dla zaznaczonego na niebiesko węzła, 7.29 Na rysunku na niebiesko lokalny współczynnik gronowania dla zaznaczonego na niebiesko węzła, a na czerwowono globalny współczynnik gronowania dla całego grafu 1 0,6 1 1/3 0,75 2/3 Współczynnik gronowania wierzchołka (local cluster coefficient) Ci = 2e/ki(ki-1), gdzie ki to stopień wierzchołka i, a e to liczba krawędzi między wierzchołkami sąsiadującymi z wierzchołkiem i. Gdy Ci = 1 to znaczy, że wierzchołek wraz z sąsiedztwem tworzy klikę. Globalny współczynnik gronowania - stosunek liczby trójkątów (zamkniętych tripletów) do łącznej liczby tripletów (zamkniętych lub otwartych). Triplet - grupa 3 połączonych węzłów.