Christoph Budziszewski commited on 2009-08-06 18:02:56
Zeige 5 geänderte Dateien mit 67 Einfügungen und 15 Löschungen.
git-svn-id: https://svn.discofish.de/MATLAB/spmtoolbox/SVMCrossVal@205 83ab2cfd-5345-466c-8aeb-2b2739fb922d
... | ... |
@@ -0,0 +1,18 @@ |
1 |
+function [KI_u,KI_o,PROZ]=ki_bin(Z,N,alpha) |
|
2 |
+% Berechnet Konfidenzintervall f�r Binomialverteilte Zufallsvariable |
|
3 |
+% Aufruf: [KI_u,KI_o,PROZ]=ki_bin(Z,N,alpha); |
|
4 |
+% Z (zB 5) von insgesamt N (zB 20) Beobachtungen mit Merkmalsauspr�gung x, |
|
5 |
+% und damit N-Z Beobachtungen des Alternativmerkmals y. |
|
6 |
+% alpha: Schranken des Konfidenzintervalls (z.B. 0.05 entspricht 95% Vertrauensbereich). |
|
7 |
+% �bergibt in KI_u die untere in KI_o die obere Vertrauensgrenze, |
|
8 |
+% PROZ ist der Anteil des Merkmals x bezogen auf alle Beobachtungen in Prozent. |
|
9 |
+ |
|
10 |
+ |
|
11 |
+PROZ=Z/N; |
|
12 |
+alpha=alpha/2; |
|
13 |
+KI_u=(Z+1)*finv(alpha,2*(Z+1),2*(N-Z))/(N-Z+(Z+1)*finv(alpha,2*(Z+1),2*(N-Z))); |
|
14 |
+KI_o=Z/(Z+(N-Z+1)*finv(alpha,2*(N-Z+1),2*Z)); |
|
15 |
+ |
|
16 |
+end |
|
17 |
+ |
|
18 |
+ |
... | ... |
@@ -81,7 +81,7 @@ switch task |
81 | 81 |
out.header.classDef = classDef; |
82 | 82 |
|
83 | 83 |
|
84 |
- out.subjectdata = fbs_load_mask(model.baseDir,subjects); |
|
84 |
+ out.subjectdata = fbs_load_mask(getBaseDir(model),subjects); |
|
85 | 85 |
|
86 | 86 |
% if(size(subjects,2)>1) |
87 | 87 |
% display(sprintf('No BATCH Support for Searchlight!')); |
... | ... |
@@ -92,7 +92,7 @@ switch task |
92 | 92 |
fbsargs.timeline = timeLine; |
93 | 93 |
fbsargs.classes = classDef; |
94 | 94 |
fbsargs.mask = mask; |
95 |
- fbsargs.basedir = model.baseDir; |
|
95 |
+ fbsargs.basedir = getBaseDir(model); |
|
96 | 96 |
fbsargs.sessionList = 1:3; |
97 | 97 |
fbsargs.eventList = classDef.eventMatrix; |
98 | 98 |
fbsargs.psthOpts = psthOpts; |
... | ... |
@@ -26,52 +26,64 @@ nTrials = getNTrials(psth); |
26 | 26 |
axis([psthStart psthEnd 0 100]) |
27 | 27 |
xlabel('time [sec]'); |
28 | 28 |
ylabel('decode performance [%]'); |
29 |
- |
|
29 |
+plottime= tic; |
|
30 | 30 |
switch type |
31 | 31 |
case 'psth' |
32 | 32 |
plotPSTH(psth,psthStart,psthEnd); |
33 |
+ |
|
33 | 34 |
case 'simple' |
34 | 35 |
plotDecodePerformanceWithSE(frameStart,frameEnd,decodePerformance) |
36 |
+ |
|
37 |
+ plot([psthStart psthEnd],[chanceLevel chanceLevel],'k:'); |
|
38 |
+ plotBinConfidenceIntervall(psthStart,psthEnd,nTrials,0.05,chanceLevel/100,'--'); |
|
39 |
+ plotBinConfidenceIntervall(psthStart,psthEnd,nTrials,0.01,chanceLevel/100,'-.'); |
|
40 |
+ plotBinConfidenceIntervall(psthStart,psthEnd,nTrials,0.001,chanceLevel/100,':'); |
|
41 |
+ |
|
35 | 42 |
case 'class performance' |
36 | 43 |
plotClassPerformance(frameStart,frameEnd,decodePerformance,nClasses) |
44 |
+ |
|
45 |
+ plot([psthStart psthEnd],[chanceLevel chanceLevel],'k:'); |
|
46 |
+ plotBinConfidenceIntervall(psthStart,psthEnd,nTrials,0.05,chanceLevel/100,'--'); |
|
47 |
+ plotBinConfidenceIntervall(psthStart,psthEnd,nTrials,0.01,chanceLevel/100,'-.'); |
|
48 |
+ plotBinConfidenceIntervall(psthStart,psthEnd,nTrials,0.001,chanceLevel/100,':'); |
|
37 | 49 |
case 'x-subject-val' |
38 | 50 |
for c = 1:nSubjects |
39 | 51 |
plot(frameStart:frameEnd, decodePerformance(:,c) ,[colorChooser(mod(c,nSubjects)+3) '-']); |
40 | 52 |
end |
41 | 53 |
plotDecodePerformanceWithSE(frameStart,frameEnd,decodePerformance) |
42 |
- end |
|
43 | 54 |
|
44 | 55 |
plot([psthStart psthEnd],[chanceLevel chanceLevel],'k:'); |
56 |
+ plotBinConfidenceIntervall(psthStart,psthEnd,nTrials,0.05,chanceLevel/100,'--'); |
|
57 |
+ plotBinConfidenceIntervall(psthStart,psthEnd,nTrials,0.01,chanceLevel/100,'-.'); |
|
58 |
+ plotBinConfidenceIntervall(psthStart,psthEnd,nTrials,0.001,chanceLevel/100,':'); |
|
45 | 59 |
|
46 |
- plotBinConfidenceIntervall(psthStart,psthEnd,nTrials,0.05,chanceLevel/100,'r'); |
|
47 |
- plotBinConfidenceIntervall(psthStart,psthEnd,nTrials,0.01,chanceLevel/100,'g'); |
|
48 |
- |
|
60 |
+ end |
|
61 |
+toc(plottime); |
|
49 | 62 |
hold off; |
50 | 63 |
|
51 |
-% setTitle(f,header,decode,subjectData); |
|
52 |
- |
|
53 | 64 |
end |
54 | 65 |
|
55 | 66 |
function plotBinConfidenceIntervall(pStart,pEnd,nTrials,alpha,limit,color) |
56 | 67 |
[pLevel Z] = rev_ki_bin(nTrials,alpha,limit); |
57 | 68 |
[lower upper proz] = ki_bin(Z,nTrials,alpha); |
58 | 69 |
|
59 |
- plot([pStart pEnd],[pLevel*100 pLevel*100],[color ':']); |
|
60 |
- |
|
61 |
- plot([pStart pEnd],[lower*100 lower*100],[color '-.']); |
|
62 |
- plot([pStart pEnd],[upper*100 upper*100],[color '-.']); |
|
70 |
+ plot([pStart pEnd],[pLevel*100 pLevel*100],[color 'k']); |
|
71 |
+% plot([pStart pEnd],[lower*100 lower*100],[color 'k']); |
|
72 |
+% plot([pStart pEnd],[upper*100 upper*100],[color 'k']); |
|
63 | 73 |
end |
64 | 74 |
|
65 | 75 |
function n = getNTrials(psth) |
66 |
-nSubjects = size(psth,2); |
|
76 |
+nOverallConditions = size(psth,2); |
|
67 | 77 |
|
68 | 78 |
n = 0; |
69 |
-for ns = 1:nSubjects |
|
79 |
+for ns = 1:nOverallConditions |
|
70 | 80 |
nClasses = size(psth{ns},2); |
71 | 81 |
for nc = 1:nClasses |
72 | 82 |
n = n + size(psth{ns}{nc},1); |
73 | 83 |
end |
74 | 84 |
end |
85 |
+n=n/(nOverallConditions/nClasses); |
|
86 |
+ |
|
75 | 87 |
end |
76 | 88 |
|
77 | 89 |
function plotClassPerformance(frameStart,frameEnd,decodePerformance,nClasses) |
... | ... |
@@ -104,7 +116,9 @@ PSTH_AXIS_MAX = 2; |
104 | 116 |
psthData = nanmean(psth{voxel}{label}); |
105 | 117 |
end |
106 | 118 |
PSTH_AXIS_MAX = max(PSTH_AXIS_MAX,nanmax(psthData)); |
119 |
+ PSTH_AXIS_MIN = min(PSTH_AXIS_MIN,nanmin(psthData)); |
|
107 | 120 |
plot(psthStart:psthEnd,psthData,[colorChooser(voxel), lineStyleChooser(label)]); |
121 |
+% plot(psthStart:psthEnd,psthData,[lineStyleChooser(voxel), colorChooser(label)]); |
|
108 | 122 |
end |
109 | 123 |
end |
110 | 124 |
end |
... | ... |
@@ -0,0 +1,20 @@ |
1 |
+function [PROZ Z] = rev_ki_bin(N,alpha,KI_u) |
|
2 |
+% rausbekommen ab wie vielen (hypothetischen) Beobachtungen einer Klasse |
|
3 |
+% (f�r ein gegebenes N, dh alle trials/Cross-Validations) das |
|
4 |
+% Konfidenzintervall f�r die decode performance f�r diese Klasse den |
|
5 |
+% 50%-Wert (also chance) gerade noch umschliesst (dh. KI_u=50%). Der |
|
6 |
+% zugeh�rige PROZ wert w�rde dann die Schwelle fetlegen, die geplottet |
|
7 |
+% werden soll. Decode werte �ber dieser Schwelle w�ren dann mit 95% |
|
8 |
+% Sicherheit signifikant. |
|
9 |
+ |
|
10 |
+ |
|
11 |
+Z = 0; |
|
12 |
+KI_low = 0; |
|
13 |
+% tic |
|
14 |
+while KI_low < KI_u && (Z+1)< N |
|
15 |
+ Z = Z + 1; |
|
16 |
+ KI_low = ki_bin(Z,N,alpha); |
|
17 |
+end |
|
18 |
+% toc |
|
19 |
+PROZ = Z/N; |
|
20 |
+end |
|
0 | 21 |
\ No newline at end of file |