Wir haben bisher immer nur Daten unserer Person verwendet um Vorhersagen zu treffen. Das macht Sinn, da die Daten der Person gut die Besonderheiten ihrer Art zu denken widerspiegeln. Zum Beispiel könnte man bei jemandem mit atypischer rechts-lateraler Sprache wahrscheinlich nicht so leicht die Sprachaktivität aus den Daten anderer Menschen dekodieren, von denen vielleicht 90% linkslateralisiert sind. Ein anderer Grund warum wir mit dem Training auf Basis unserer eigenen Daten gut abschneiden könnten ist, dass unsere Aufgaben nicht unbedingt typisch für einen bestimmten kognitiven Prozess sein müssen. So haben wir gesehen, dass unsere Aufgabe an Gesichter zu denken eher autobiographische Gedächtnisfunktionen wiederspiegeln könnte, als die typische visuelle Wahrnehmung von Gesichtern.

Trotzdem gibt es auch Vorteile eines Vorgehens, bei dem wir die Daten anderer Menschen verwenden, um die Daten unserer Versuchsperson zu dekodieren. Die Vorteile ergeben sich gerade aus den mit dieser Aufgabe verbundenen Schwierigkeiten:

Was individuelle Besonderheiten der Person angeht, so wissen wir nicht, wie repräsentativ die Daten vom Untersuchungstag auch für andere Tage sind. Müdigkeit, Nervosität, Drogenkonsum (Koffein), unbequemes Liegen, Scannerparameter wie Auflösung,TR etc. werden mit Sicherheit alle "Besonderheiten" in die Daten einführen, die eine Woche später wieder anders sind.

Was Besonderheiten der Aufgabe angeht, schauen wir uns die Rolle, die eine große Datenbank wie Neurosynth dabei spielen könnten, nächste Woche an.

Wir machen uns eine Liste mit allen unseren Hirnbildern


In [1]:
import os

In [2]:
imgList = ['../training/%s'%x for x in os.listdir('../training/')]; imgList.sort()

Wir benutzen Neurosynth als Aktivierungstemplates


In [3]:
keywords = ['face','navigation','sensorimotor','dmn','language']

In [4]:
from nilearn import image, datasets, input_data, plotting

In [5]:
import seaborn as sns
import matplotlib.pylab as plt
%matplotlib inline

In [6]:
for keyword in keywords:
    plotting.plot_stat_map('../ns/%s_specificity_z_FDR_0.01.nii.gz' % keyword,title=keyword)
    plt.show()



In [7]:
nsList = ['../ns/%s_specificity_z_FDR_0.01.nii.gz' % keyword for keyword in keywords ]

In [8]:
masker = input_data.NiftiMasker(mask_img='../masks/MNI152_T1_2mm_brain_mask.nii.gz').fit()

In [9]:
import pandas as pd

In [10]:
roiDf = pd.DataFrame(masker.transform(nsList),index=keywords)

In [11]:
roiDf


Out[11]:
0 1 2 3 4 5 6 7 8 9 ... 228473 228474 228475 228476 228477 228478 228479 228480 228481 228482
face -0.0 -0.0 0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 ... 0.0 0.0 -0.0 -0.0 -0.0 0.0 -0.0 -0.0 0.0 -0.0
navigation -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 -0.0 0.0 ... -0.0 -0.0 -0.0 0.0 0.0 0.0 -0.0 0.0 0.0 0.0
sensorimotor 0.0 -0.0 -0.0 0.0 0.0 0.0 0.0 -0.0 -0.0 -0.0 ... 0.0 0.0 0.0 0.0 0.0 -0.0 0.0 -0.0 0.0 -0.0
dmn 0.0 0.0 0.0 -0.0 -0.0 0.0 -0.0 -0.0 0.0 0.0 ... -0.0 -0.0 -0.0 0.0 0.0 0.0 -0.0 0.0 0.0 0.0
language 0.0 0.0 0.0 0.0 -0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 -0.0 0.0 0.0 -0.0 -0.0 -0.0 0.0

5 rows × 228483 columns


In [12]:
for roi in roiDf.index:
    thisData = roiDf.ix[roi]
    thisImg = masker.inverse_transform(thisData)
    plotting.plot_stat_map(thisImg,title=roi)
    plt.show()


Unsere Daten


In [13]:
import pandas as pd
import numpy as np

In [14]:
def makeBigDf(imgList,masker):
    bigDf = pd.DataFrame()
    for img in imgList:
        thisName = img.split('/')[-1].split('.')[0]
        cond,num,content = thisName.split('_')
        cont = '%s_%s' % (num,content)
        thisDf = pd.DataFrame(masker.transform(img))
        thisDf.index = [[cond],[cont]]
        bigDf = pd.concat([bigDf,thisDf])
    bigDf.sort_index(inplace=True)
    return bigDf

In [15]:
blockDf = makeBigDf(imgList,masker)

In [16]:
blockDf


Out[16]:
0 1 2 3 4 5 6 7 8 9 ... 228473 228474 228475 228476 228477 228478 228479 228480 228481 228482
gesichter 004_familie -0.337221 -0.261674 -0.447705 -0.463183 -0.410195 -0.209978 -0.467983 -0.179902 -0.146382 -0.283267 ... 0.443091 0.415172 -0.414201 -0.350355 -0.631173 -0.548540 -0.289649 -0.312467 -0.667211 0.334980
007_freunde 0.406736 0.427125 0.015802 0.134407 0.305661 0.070573 -0.014745 -0.009336 0.323053 -0.108315 ... -0.439404 -0.553024 -0.124930 -0.116874 -0.357078 -0.434355 -0.109235 -0.062723 0.474404 0.006037
013_filmschauspieler -0.803729 -0.765207 0.315829 -0.335106 -0.513710 -0.082571 -0.106495 0.246092 -0.396495 0.568196 ... 0.506601 0.406768 0.289646 0.202073 0.422239 0.304816 0.109086 0.117631 0.292299 -0.526256
016_sportler 0.416349 0.372681 0.368322 0.256957 0.355814 0.063601 0.113855 0.186303 -0.079155 0.138917 ... -0.233419 -0.180934 -0.257343 -0.184866 -0.068706 0.369057 -0.223277 -0.174788 0.344361 -0.133903
024_serienschauspieler 0.130858 -0.027075 -0.214070 0.041683 -0.042501 0.020814 -0.019151 -0.082066 0.213199 -0.660027 ... 0.319231 0.350637 0.012141 0.034614 -0.028108 -0.040869 -0.080968 -0.095500 -0.046216 -0.511421
029_politiker 0.344705 0.118515 -0.089767 0.536890 0.395393 0.698425 0.522923 0.587002 0.795767 0.454165 ... 0.197231 0.266032 0.417864 0.438855 0.276662 -0.261912 0.446085 0.431760 0.869040 0.309828
033_dozenten 0.278460 0.138843 -0.074483 -0.319463 -0.136159 -0.096159 -0.419019 -0.358823 0.488836 -0.676586 ... -0.301472 -0.345687 0.385090 0.314069 0.294158 0.069575 0.286474 0.324261 -0.062754 -0.130282
036_lehrer -0.436396 -0.250727 0.840851 -0.930371 -0.639776 -1.256952 -0.930674 -0.885923 -0.766854 0.069137 ... -0.124638 -0.254612 -0.064079 -0.016419 0.052191 0.124466 -0.146933 -0.050340 0.481717 -0.345760
042_familie 0.008166 0.106999 0.300277 0.359707 0.356488 0.440021 0.437569 0.433993 0.284156 -0.061572 ... 0.014928 0.185333 -0.076358 -0.120372 -0.095861 0.001652 -0.096293 -0.046287 -0.295077 -0.354954
047_freunde -0.133380 -0.201361 0.026851 -0.025188 -0.132026 -0.202095 -0.019499 -0.188516 -0.021345 -0.405760 ... -0.337775 -0.742476 0.547333 0.472447 0.524680 0.200375 0.544872 0.469492 -0.434571 0.192825
homewalk 003_jahnplatz -0.409870 -0.343361 0.178760 -0.154857 -0.232968 -0.063932 -0.025020 0.159877 -0.171550 0.194858 ... -0.532017 -0.455194 0.307881 0.244219 0.376502 0.337429 0.364752 0.349885 0.538878 0.093103
008_kesselbrink -0.525955 -0.532538 0.320622 -0.216594 -0.350180 0.235780 -0.066592 0.022987 0.516531 0.305696 ... -0.298803 -0.460416 -0.172361 -0.185763 -0.249623 -0.182323 -0.195874 -0.183713 -0.216766 -0.029275
011_strassenbahn 0.027584 0.157118 -0.403917 -0.314847 -0.105826 -0.443969 -0.377999 -0.349177 -0.085605 -0.282466 ... 0.291232 0.324741 0.101186 0.166912 0.306251 0.360841 0.194876 0.250614 0.175127 0.273850
017_bahnhof -0.056431 -0.060108 0.103397 -0.234649 -0.114347 -0.188430 -0.241191 -0.160747 0.422091 -0.095319 ... -0.073428 0.017965 -0.224480 -0.265435 -0.331531 -0.327518 -0.314656 -0.287454 -0.424370 -0.253449
022_schule 0.081708 0.126733 0.112864 -0.253421 -0.009427 -0.298094 -0.349017 -0.137322 -0.119680 -0.102159 ... -0.268834 -0.277370 -0.182087 -0.140703 0.235059 0.703101 -0.236038 -0.135113 0.592416 -0.046317
026_kriche 0.730507 0.578703 0.119718 1.370857 1.179201 1.462877 1.312192 1.044466 0.149197 0.297637 ... 0.141648 0.317376 -0.186509 -0.199411 -0.250717 -0.098651 -0.168475 -0.182249 -0.084539 -0.266496
032_keller -0.083324 -0.182674 -0.455861 -0.145466 -0.299387 -0.219437 -0.124778 -0.329209 0.590673 -0.534111 ... 0.132048 -0.235456 -0.509746 -0.510646 -0.186337 0.637460 -0.380374 -0.470963 -0.290472 0.301639
038_spaziergang 0.174782 0.180183 -0.170454 0.051832 0.114741 -0.238111 -0.063010 0.134000 -0.606505 0.348208 ... -0.319066 -0.553556 0.504256 0.589678 0.418099 -0.168614 0.484859 0.563034 0.246576 -0.254558
041_kiel -0.716268 -0.597343 0.383187 -0.751187 -0.705613 -0.607957 -0.629566 -0.515610 -0.503385 -0.037202 ... 0.357494 0.303081 -0.568322 -0.560039 -0.490039 0.081135 -0.564635 -0.579707 -0.369865 -0.065283
049_universitaet -0.095154 -0.263741 -0.714585 0.450920 0.047355 1.019811 0.551017 0.489336 0.608833 0.445495 ... 0.143609 0.383577 0.176087 0.227687 0.271903 0.134877 0.261267 0.200505 0.401861 0.124698
motorik 005_badminton 0.232851 0.211707 0.175249 -0.179907 0.076884 -0.050457 -0.265970 -0.406270 0.493109 -0.141047 ... -0.635927 -0.563301 -0.384829 -0.342009 -0.263857 0.084798 -0.392515 -0.329216 -0.292936 -0.163350
010_tennis 0.323449 0.174717 -0.318922 0.865977 0.457627 0.722038 0.932142 0.364668 -0.524497 -0.481846 ... 0.070987 0.095108 0.571918 0.528728 0.329039 -0.350764 0.446746 0.442980 0.080408 -0.288918
015_schwimmen -0.410231 -0.373177 -0.214435 -0.214162 -0.303867 -0.210464 -0.103506 0.067290 -0.570921 -0.286619 ... 0.079878 -0.010318 -0.137541 -0.113880 -0.050068 0.164233 -0.046086 -0.040924 0.036553 0.176412
020_fussball -0.365402 -0.422123 -0.290296 -0.161451 -0.343772 0.053270 -0.075389 0.013820 -0.152493 0.318030 ... 0.594689 0.455466 -0.032270 -0.065117 0.046672 0.083378 -0.074568 -0.086709 -0.375037 0.069431
025_hochsprung 0.032260 0.165307 -0.162336 -0.339263 -0.100707 -0.508803 -0.419831 -0.130000 0.169362 0.103759 ... -0.475024 -0.131129 -0.002033 -0.041835 -0.172121 -0.345293 -0.031735 0.033362 0.111341 -0.004117
030_klettern 0.020211 0.275559 -0.274090 -0.645532 -0.212419 -0.496181 -0.713368 -0.263389 -0.205988 -0.075558 ... -0.181546 -0.165390 -0.373466 -0.384398 -0.493817 -0.369103 -0.465451 -0.513533 0.273007 -0.410428
035_huerdenlauf -0.468492 -0.304414 0.137848 -0.559517 -0.484426 -0.813805 -0.518463 -0.641944 -0.826426 -0.227505 ... 0.250249 0.218114 0.079615 0.057944 0.559816 0.964901 0.200625 0.220499 0.159540 0.547536
040_schiessen 0.004247 -0.077519 0.377906 -0.433605 -0.292551 -0.646244 -0.515722 -0.201799 0.154176 0.259831 ... -0.232960 -0.615455 -0.184053 -0.156549 0.028771 0.284645 -0.398579 -0.280503 -0.397322 -0.818105
045_seilspringen 0.639702 0.419227 0.176122 0.643087 0.672581 0.494666 0.566787 0.484409 0.414286 -0.134841 ... 0.364670 0.581089 -0.721790 -0.740954 -0.626297 0.069834 -0.731013 -0.690032 0.337064 0.153180
050_jonglieren 1.045404 0.929000 -0.349999 1.053862 1.104148 1.294850 0.906982 0.846011 0.497378 -0.203473 ... -0.049633 0.437206 0.214113 0.181021 0.114799 -0.267358 0.217406 0.211187 0.949270 0.433105
ruhe 001_ruhe 0.383816 0.345413 -0.421839 0.204600 0.230265 -0.073908 0.122603 0.289140 0.011597 0.049500 ... 0.014464 0.256656 0.629287 0.590772 0.789121 0.574669 0.533667 0.620215 0.615700 -0.159222
009_ruhe 0.210772 0.154903 0.267624 0.232909 0.227331 0.280061 0.280691 0.351995 0.521984 -0.175853 ... 0.611566 0.518476 -0.361706 -0.430084 -0.458026 -0.206665 -0.480777 -0.483706 -0.105201 -0.333356
014_ruhe -0.099611 -0.071073 0.516288 0.742223 0.354413 1.081108 0.923743 0.589734 -0.183732 -0.394247 ... 0.201334 0.007111 -0.181221 -0.115874 -0.095231 0.116927 -0.021265 -0.063904 0.084409 0.631477
019_ruhe -0.369821 -0.354001 0.156842 0.201624 -0.084399 0.443783 0.387601 -0.004454 -0.070905 0.307691 ... 0.197551 -0.077811 0.277868 0.324685 0.474175 0.405352 0.425692 0.374434 -0.012385 0.234292
023_ruhe 0.800571 0.898288 0.118228 0.316837 0.705255 -0.187614 0.110642 0.024046 -0.360135 0.019336 ... -0.275942 -0.199018 -0.196182 -0.174374 -0.279763 -0.084294 -0.150076 -0.210346 0.266883 0.079461
027_ruhe -0.130931 -0.234287 -0.026871 0.475138 0.178086 0.594430 0.586600 0.245624 -0.080494 -0.036675 ... -0.253499 0.087937 0.221711 0.201801 0.317874 0.323874 0.218876 0.220270 0.498147 0.125834
031_ruhe 0.130246 0.095390 0.111923 0.096132 0.105898 0.213741 0.060902 0.142142 0.426118 0.292464 ... 0.306418 -0.058911 0.134915 0.103156 0.193099 0.118243 0.039011 0.105636 -0.601638 -0.228599
037_ruhe 0.308245 0.640333 0.609075 -0.406202 0.198728 -0.557748 -0.535704 -0.525742 -0.357080 -0.214035 ... 0.136496 -0.135642 0.208915 0.228597 0.300530 0.243928 0.170931 0.154792 -0.400179 0.162120
043_ruhe 0.026456 0.217737 0.629468 -0.139371 0.156006 -0.088707 -0.155534 0.084867 -0.464380 -0.253272 ... 0.288889 0.538831 -0.700157 -0.669552 -0.802287 -0.376630 -0.615632 -0.712266 -0.515382 -0.189023
046_ruhe -0.534401 -0.471226 0.334531 -0.261650 -0.351299 -0.262179 -0.214535 -0.118875 -0.395744 -0.581603 ... -0.249616 -0.312781 -0.040624 -0.043203 0.055275 0.229006 -0.051724 0.029009 -0.536256 -0.004313
sprache 002_tiere 0.377199 0.371269 0.208753 0.294844 0.395827 0.026933 0.206279 -0.110995 0.045970 0.079998 ... -0.017695 0.015863 -0.508888 -0.517526 -0.668577 -0.464403 -0.468524 -0.593403 -0.274354 0.142895
006_werkezeuge 0.079687 0.169097 -0.180427 -0.336351 -0.157972 -0.652245 -0.482499 -0.678666 -0.224248 0.336352 ... 0.118225 0.162922 0.257627 0.265941 0.225942 -0.148755 0.355512 0.267041 -0.647619 0.206836
012_staedte -0.241019 -0.297598 0.307364 0.160643 -0.038029 0.160712 0.289005 0.356091 -0.189405 0.343708 ... 0.044270 -0.136614 -0.035533 -0.012529 0.121437 0.308475 -0.047547 -0.090998 0.108996 -0.063455
018_laender -0.154996 -0.147946 -0.474708 -0.483925 -0.400554 -0.390972 -0.550732 -0.596405 0.227735 0.240044 ... -0.046943 0.003052 0.225830 0.204139 0.020934 -0.378807 0.279349 0.230002 -0.171350 0.363191
021_berufe 0.085977 -0.023571 0.044882 0.334655 0.099600 0.450021 0.405041 0.081512 0.431298 0.219184 ... -0.299041 -0.228003 0.298125 0.233525 0.020482 -0.447570 0.284133 0.267646 -0.444779 0.043760
028_obst -0.344076 -0.413111 -0.984599 -0.113261 -0.468942 -0.149668 -0.059332 0.128950 -0.219897 0.263412 ... 0.266972 0.516810 -0.054380 0.010053 -0.242401 -0.580577 0.062587 0.053277 -0.079985 0.344948
034_kleidung -0.406813 -0.589992 -0.170627 0.043201 -0.332579 0.123406 0.185489 0.235377 0.439301 -0.224769 ... -0.440151 -0.539595 -0.174927 -0.165292 -0.153815 -0.055530 -0.032270 -0.177495 -0.368034 0.711146
039_gemuese -0.142082 0.120061 0.073976 -0.146874 -0.022732 -0.403559 -0.109959 -0.677285 -0.374344 0.317515 ... -0.033584 0.193256 0.439587 0.415362 -0.067902 -0.821976 0.394284 0.451309 0.511446 -0.248711
044_moebel -0.035064 0.176548 -0.059665 -0.041317 0.031542 -0.243272 -0.049137 -0.011710 -0.456509 0.477127 ... 0.166500 0.273007 0.434616 0.351672 0.184827 -0.244755 0.183570 0.278610 -0.321290 -0.768939
048_farben 0.079452 -0.229015 -0.568590 -0.143852 -0.343691 -0.183350 -0.134797 -0.188793 0.519810 0.558333 ... -0.150649 -0.455223 -0.091526 0.027744 -0.011006 0.006710 0.049517 0.003469 0.127276 0.245461

50 rows × 228483 columns


In [17]:
blockDf.shape


Out[17]:
(50, 228483)

Ohne Kreuzvalidierung

Neurosynth ist ja sowieso von unseren Daten unabhängig


In [18]:
def makeMetric(roiDf,blockDf):
    return pd.DataFrame( np.corrcoef(roiDf,blockDf)[5:,:5], index=blockDf.index, columns=roiDf.index )

In [19]:
myCorrDf = makeMetric(roiDf,blockDf)

In [20]:
myCorrDf


Out[20]:
face navigation sensorimotor dmn language
gesichter 004_familie 0.042188 0.007935 0.097732 -0.016912 0.031290
007_freunde -0.048056 0.000076 -0.016726 0.074117 0.013978
013_filmschauspieler 0.006064 -0.055930 -0.056071 0.043267 -0.068250
016_sportler 0.023721 -0.067740 -0.052727 0.021963 0.020450
024_serienschauspieler 0.007071 0.013547 0.042720 -0.015684 0.016212
029_politiker -0.031065 -0.031835 -0.072105 0.124114 0.029476
033_dozenten -0.006784 -0.072775 -0.014385 0.049318 0.034811
036_lehrer -0.012848 0.007574 0.001561 0.019676 0.038168
042_familie 0.027192 -0.042724 -0.005495 -0.008445 0.006553
047_freunde -0.008753 -0.001025 -0.037007 0.055762 -0.012423
homewalk 003_jahnplatz -0.030792 -0.015948 -0.073654 0.099744 0.024365
008_kesselbrink -0.021080 0.090013 0.055765 -0.015168 0.016165
011_strassenbahn 0.025518 0.094675 -0.024564 0.030142 -0.037932
017_bahnhof 0.000779 0.120624 -0.003285 0.004068 -0.002975
022_schule 0.000490 0.066212 0.003551 -0.021928 -0.055930
026_kriche 0.019938 0.099588 -0.020159 0.016746 -0.071294
032_keller -0.022757 0.078454 0.025610 -0.035474 -0.009282
038_spaziergang -0.058250 0.074331 0.066649 -0.070166 -0.040353
041_kiel 0.001267 0.107555 -0.021694 0.000839 0.019682
049_universitaet -0.023751 0.101975 -0.009804 0.045716 -0.064640
motorik 005_badminton -0.003878 -0.002796 0.073155 -0.025442 0.022005
010_tennis 0.037878 -0.027663 0.070765 -0.051828 -0.024720
015_schwimmen 0.009697 0.010650 0.071914 -0.062861 -0.038466
020_fussball 0.023572 0.010196 0.030042 0.011972 -0.018087
025_hochsprung -0.013784 0.012287 0.052220 -0.011062 0.001438
030_klettern 0.013211 0.030612 0.073292 -0.030985 -0.018800
035_huerdenlauf -0.003891 -0.044428 -0.006827 0.031271 -0.003612
040_schiessen 0.041312 -0.045269 0.053445 0.022919 0.004240
045_seilspringen 0.016590 -0.042544 0.130450 0.046055 -0.014422
050_jonglieren 0.025533 -0.015738 0.053240 -0.008611 -0.014738
ruhe 001_ruhe 0.025938 -0.007476 -0.005919 -0.008205 -0.052562
009_ruhe 0.012024 -0.075504 0.006100 0.044408 0.018611
014_ruhe -0.021670 -0.032375 -0.058448 0.060758 -0.052895
019_ruhe -0.009725 -0.031961 -0.023468 0.007340 -0.053548
023_ruhe -0.004987 -0.078676 -0.026542 -0.008700 0.022134
027_ruhe 0.035494 -0.047114 0.036443 0.014954 0.006271
031_ruhe -0.007087 -0.038929 -0.078995 0.010439 -0.024219
037_ruhe -0.040733 -0.024521 -0.011883 -0.006579 -0.014771
043_ruhe 0.005507 -0.005320 -0.048014 0.015478 -0.036957
046_ruhe -0.013192 -0.019448 -0.061395 -0.005055 -0.059644
sprache 002_tiere -0.036804 0.008024 -0.032519 -0.063901 -0.005320
006_werkezeuge 0.031486 -0.005801 -0.007737 -0.069303 0.075512
012_staedte -0.029242 0.001846 -0.091854 0.018929 0.027910
018_laender -0.012746 -0.030060 0.072072 -0.083493 0.054833
021_berufe 0.008744 0.011143 -0.102217 0.038282 0.083575
028_obst 0.005873 -0.009397 0.034119 -0.095446 0.064755
034_kleidung 0.024715 -0.055867 -0.029581 -0.035382 0.049745
039_gemuese 0.015828 -0.010047 0.003879 -0.022942 0.058588
044_moebel 0.008326 0.001087 -0.038266 -0.057138 -0.001087
048_farben 0.009505 -0.022954 -0.024641 -0.071292 0.109070

In [21]:
plt.figure(figsize=(12,20))
sns.heatmap(myCorrDf,annot=True)
plt.show()


Entscheidungsregel (winner takes all)


In [22]:
def makeCorrPred(myCorrDf):
    d = {}
    # da die Namen der neurosynth-Regionen und unserer Bedingungen nicht
    # übereinstimmen, müssen wir hier erlären, welche neurosynth-Karte
    # jeweils als richtige Antwort zählt
    roiNameDict = {'face':'gesichter','navigation':'homewalk','sensorimotor':'motorik','dmn':'ruhe','language':'sprache'}
    # wir gehen durch jede Zeile
    for cond,num in myCorrDf.index:
        # wir wählen diese Zeile aus
        thisDf = myCorrDf.ix[cond].ix[num]
        # wir wählen die Spalte mit dem höhsten Wert aus
        winner = thisDf.idxmax()
        # wir schreiben einen eintrag mit folgenden infos:
        # real : die tatsächliche bedingung (aus der zeile)
        # winner: die spalte mit der höchsten korrelation
        # hit: wir fragen, ob real und winner identisch sind (kann wahr oder falsch sein)
        winnerTranslated = roiNameDict[winner]
        d[num] = {'real':cond, 'winner':winnerTranslated,'hit':cond==winnerTranslated}
        
    # wir packen das ganze in eine tabelle, die wir nett formatieregn
    predDf = pd.DataFrame(d).T
    predDf.index = [predDf['real'],predDf.index]
    predDf.sort_index(inplace=True)
    # wir rechnen aus, in wie viel prozent der Fälle wir richig lagen
    percentCorrect = np.mean( [int(x) for x in predDf['hit']] )*100
    
    return predDf,percentCorrect

In [23]:
corrPredDf,corrPcCorrect = makeCorrPred(myCorrDf)

In [24]:
corrPredDf


Out[24]:
hit real winner
real
gesichter 004_familie False gesichter motorik
007_freunde False gesichter ruhe
013_filmschauspieler False gesichter ruhe
016_sportler True gesichter gesichter
024_serienschauspieler False gesichter motorik
029_politiker False gesichter ruhe
033_dozenten False gesichter ruhe
036_lehrer False gesichter sprache
042_familie True gesichter gesichter
047_freunde False gesichter ruhe
homewalk 003_jahnplatz False homewalk ruhe
008_kesselbrink True homewalk homewalk
011_strassenbahn True homewalk homewalk
017_bahnhof True homewalk homewalk
022_schule True homewalk homewalk
026_kriche True homewalk homewalk
032_keller True homewalk homewalk
038_spaziergang True homewalk homewalk
041_kiel True homewalk homewalk
049_universitaet True homewalk homewalk
motorik 005_badminton True motorik motorik
010_tennis True motorik motorik
015_schwimmen True motorik motorik
020_fussball True motorik motorik
025_hochsprung True motorik motorik
030_klettern True motorik motorik
035_huerdenlauf False motorik ruhe
040_schiessen True motorik motorik
045_seilspringen True motorik motorik
050_jonglieren True motorik motorik
ruhe 001_ruhe False ruhe gesichter
009_ruhe True ruhe ruhe
014_ruhe True ruhe ruhe
019_ruhe True ruhe ruhe
023_ruhe False ruhe sprache
027_ruhe False ruhe motorik
031_ruhe True ruhe ruhe
037_ruhe True ruhe ruhe
043_ruhe True ruhe ruhe
046_ruhe True ruhe ruhe
sprache 002_tiere False sprache homewalk
006_werkezeuge True sprache sprache
012_staedte True sprache sprache
018_laender False sprache motorik
021_berufe True sprache sprache
028_obst True sprache sprache
034_kleidung True sprache sprache
039_gemuese True sprache sprache
044_moebel False sprache gesichter
048_farben True sprache sprache

In [25]:
print "%i%% richtige Vorhersagen!" % corrPcCorrect


68% richtige Vorhersagen!

In [26]:
corrPredDf['correct'] = [int(x) for x in corrPredDf['hit']]
condPredDf = (corrPredDf.groupby(level=0).mean()*100).T

In [27]:
plt.figure(figsize=(8,4))
sns.barplot(data=condPredDf); plt.ylim(0,100); plt.ylabel('% correct');
plt.axhline(20,color='k',linewidth=1,linestyle='dashed')
plt.show()