Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New feature: Store/report stats for bad data exclusion #78

Open
3 tasks
olafdimigen opened this issue Nov 1, 2019 · 2 comments
Open
3 tasks

New feature: Store/report stats for bad data exclusion #78

olafdimigen opened this issue Nov 1, 2019 · 2 comments

Comments

@olafdimigen
Copy link
Member

In M/EEG papers, it is common to report the number and/or percentage of rejected bad epochs (e.g. containing voltages exceeding peak-to-peak criteria) per condition. There are not yet standards on how to report this for deconvolution models . Currently, uf_continuousArtifactExclude provides screen output only, but this is not helpful for reporting. Some ideas:

  • Store contents of underlying structure eventwise in EEG structure (currently screen output only)
  • Only report/store rejection stats for event types that are actually in model formula
  • Add function to extracts/summarizes rejection stats in easily reportable way later (?)
@behinger
Copy link
Member

behinger commented Nov 4, 2019

  • Additional thoughts The amount of data going into an estimate of a single timepoint can vary widely within one event. I.e. Anna had the case were she had only 10 events, and happened to cut-off the at least the first 10 samples of each of the events (by data cleaning). Thereby EEG.event.Xdc was empty for some columns for that predictor (this is just an extreme example) and the (underspecified) model did not converge in 400 iterations.
    But I guess this is an additional complication we are not interested here?

  • Do you think this output should be an optional output of the function, e.g. [EEG, rejection] = ..., or saved as a field? We have so many fields already :-D

  • Currently we just put the rows of the matrix to 0 but do not save anything on what was removed. If we have an EEG.unfold.rejected field, we of course can just call a wrapper function (or format it in a legible way already in EEG.unfold.rejected.

@olafdimigen
Copy link
Member Author

To many fields?

One could introduce one subfield that stores miscellaneous descriptive statistics like this one. For example, EEGLAB has EEG.etc for that purpose, which is also used for some exotic stats by the EYE-EEG toolbox (e.g.: EEG.etc.someexoticstat).

What to report?

There are no standards yet how to report this. Some unstructured thoughts:
One could report, for example:

-- Number/proportion of events for which all points in the time-expansion window are "good" (completely clean "epochs")
-- Average number/proportion of surviving points within the time-expansion window, averaged across all temporal sampling points in window
-- What user will really need though, is that statistic split up by predictor level in case of categorical predictors, e.g. like this:

Model: y ~ 1 + cat(response_type)

Type: Response_onset
 with predictor_levels: 0 (correct response), 1 (incorrect response)
     
Stat:
Response_onset | level 0: 20 of 40 events with complete data (50%), on average 34.5 of 40 observations per sampling point in time-expansion window (84.4%)
Response_onset | level 1: 10 of 40 events with complete data (25%), on average 30.5 of 40 observations per sampling point in time-expansion window (74.4%)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants