I have always had a big doubt about the methodology used for ERP classification in BCI2000, specifically for P3Speller tasks, but now it is really important to me know how it works.
When I accessed to "Association.cpp" (MostLikelyTarget function) and checked how the system determines what the selected target is, I realized that it computes a kind of scores that determine the probability of selecting each matrix item. For example, for a 5x3 matrix, I would get something like this (for a certain selected character):
Thus, the selected item would be the one that provides the maximum score of all, in this case, the 12th item. But, what are those scores? how are they computed? I guess it needs to have some relationship with the "log-likelihood ratio" that is mentioned here: http://www.bci2000.org/wiki/index.php/P ... Task_Classi->first i->second
Item 1: -53.3382
Item 2: 850.717
Item 3: -313.426
Item 4: 45.4439
Item 5: 170.787
Item 6: 305.532
Item 7: 529.658
Item 8: -61.687
Item 9: 366.503
Item 10: 375.406
Item 11: -61.6867
Item 12: 1055.33 <- This would be the selected one
Item 13: 626.591
Item 14: 734.276
Item 15: -420.557
According to what I know, P3Speller uses SWLDA for classificating each stimulus. In order to do that, the system sets a window, typically between 0 and 800 ms prior to each intensification, and downsamples the stimuli signals to a decimating frequency. For illustration purposes, let's consider that our final stimuli signals are composed of 16 samples x 8 channels. Considering that we used 15 sequences and our matrix is composed of 8 rows and colums (5x3 size), we have a 120 stimuli (8 rows&cols x 15 sequences) x 128 features (16 samples x 8 channels) matrix of data for one single character.
What is the methodology used in this system? I would think that the matrix is fed to an SWLDA classifier. Obviously, the classifier would have been previously trained for computing its own weight vector and for selecting up to 60 features instead of 128. In that case, SWLDA would return a 120x1 vector of scores that indicates the euclidean distance of every stimulus of belonging to class 1 (presence of ERP). But, if that is the case, how the system turns the 120x1 LDA score vector into the final 15x1 log-likelihood score?
An intuitive approach would be accumulating the evidence of the repeated stimuli over sequences. So, summing all the stimuli LDA scores that belongs to the same row and column would return a 8x1 vector containing the likelihood of ERP presence in each row&col... But, how can turn those 8x1 vector into a 15x1 vector that details the likelihood of each character? Is it just a combinaton of every row and column scores? For instance,
I think that it is more complicated than that. Considering 15 sequences and LDA score values ranging from -1 to 1, the final item score value range of this approach would be [-30,30], and I am getting values around 1000...
Thanks in advance,
Víctor.