plot_timecourse()
now requires facets and mappings to be explicitly stated during the call, rather than added afterwards. This allows it to use weighted averages when required.plot_timecourse.eeg_tfr()
now defaults to no baseline correction, and takes atype
argument for baseline type to be specified.- Added new
plot_gfp()
function for calculating and plotting Global Field Power. topoplot()
now supports plotting of multiple timepoints - pass a list of times to thetime_lim
argument.topoplot()
now supports custom fill titles through thefill_title
argument, and automatically switches where necessary (e.g. now says "Power mV^2"). Fill titles are now also centred.browse_data.eeg_ICA()
now provides the option to select components for rejection, and returns a character vector of selected components.- Recoded
browse_data()
to usebslib
for styling. view_ica()
now allows you to select components for rejection, to double-click on topographies to inspect them individually, and to return cleaned data.eeg_average()
now supports averaging over conditions ineeg_evoked
fileseeg_average()
now records weights - the number of epochs that went into an average - and uses those in subsequent steps where possible foreeg_epochs
/eeg_evoked
/eeg_tfr
objects.compute_tfr()
now has an argumenttrim_edges
which allows users to switch off automatic removal of epoch edges after transformation. Defaults to TRUE.rm_baseline()
now adds a record of the baseline period- Changed logic of
eeg_combine.eeg_epochs()
. Now checks for duplicate epochs directly usingepoch
,participant_id
andrecording
, and only corrects when there are duplicates. This meansrecording
andparticipant_id
have to be matching acrosseeg_epochs
objects for the timing correction to be applied.
- Recoded
faster_epochs()
to no longer usedata.table
. - added
parse_cycles()
function for use duringcompute_tfr()
- Using
electrode_locations()
on adata.frame
would return a data frame with the electrode names in full upper case. Now returns with the electrodes in their original case. eeg_evoked
objects should now contain reference information.ar_for_ica
file started, moving some functions fromartefact_rejection.R
select_times
prevented from converting single column data.frames to vectors after subsetting.plot_timecourse.eeg_tfr
now correctly uses thefreq_range
parameter.- Improvements to internal processing logic in
view_ica()
to improve performance. import_raw(..., fast_bdf = TRUE)
will now discard Annotations rather than fail to import BDF files with Annotations.- removed dependency on
Matrix
- now usingqr()$rank
inrun_ICA
rather than usingMatrix::rankMatrix()
to determine rank of input signals. - Added numerous
dropped_aes
variables to the customggplot2
stat_
functions for compatibility withggplot2 3.4.0
. - Replaced
size
aesthetic withlinewidth
for compatibility withggplot2 3.4.0
. - Lots of minor code style improvements
- Deprecated function
iir_filt
removed - Refactored
run_ICA
and adopted faster SOBI methods - Used internal legendre polynomial function and removed
pracma
dependency - Used internal whitening methods in
sobi_ICA
and removedwhitenening
dependency
- Add
imax
method torun_ICA()
. This allows use of theinfomax
ICA algorithm from theinfomax
package, which is a reimplementation of the extended-Infomax algorithm used in theEEGLAB
Matlab toolbox. erp_scalp()
andinteractive_scalp()
should now appropriately use channel locations included in the data.- More informative messages when using
compute_tfr()
. plot_tfr()
now applies baseline correction on a single-trial basis where possible, which may show different results when using non-linear baseline correction (e.g.divide
ordB
)topoplot()
now allows you to provide multiple component numbers when plotting from aneeg_ICA
object, and will automatically produce an appropriately facetted plot.topoplot()
now has ak
parameter to control the smoothing when usingmethod = "gam"
.- added additional
demo_spatial
data from a spatial cueing experiment. plot_difference()
function added for plotting ERP difference waves. Only currently handles two levels.- Added
hanning
taper support forcompute_tfr
. Note that the scaling factors used for allcompute_tfr
calculations have been adjusted, so the exact numerical values returned will change. However, this is just a scaling factor - the relative distances between values remained unchanged. ar_FASTER()
has experimental support foreeg_group
objects when those objects areeeg_evoked
groups. It does not perform rejection but reports how many times each participants data breaks a threshold for a number of measures.import_raw()
defaultparticipant_id
is now changed toNA
instead ofcharacter(1)
, to promote better use witheeg_combine()
.eeg_combine()
will now refuse to combine objects whereparticipant_id
is missing (i.e. isNA
), and warn when combining objects with the previous default value "". This is to prevent accidentally treating data from different participants as being from the same participant.topoplot()
now provides informative messages about the head radius used for plotting. The default calculation ofr
when usinginterp_limit = "head"
has changed and should now be set at the outermost electrode's position + a 10% buffer. Smallerr
can be set manually.- added
get_participant_id
,set_participant_id
,get_recording
andset_recording
to interact with theepochs
metadata in eacheegUtils
object. eeg_combine()
handleseeg_tfr()
objects better, now returns an error when trying to combine single-trial data.plot_timecourse()
now handleseeg_tfr()
objects.
erp_scalp()
andinteractive_scalp()
now use cleaner evaluation of thecolour
argument usingrlang
- Fixed adding CSD as new reference when using
compute_csd()
- When using a scaling number of cycles in
compute_tfr()
, they will now also use thespacing
parameter to determinelog
orlinear
scaling. - Fixed bug with
eeg_average()
used onc("eeg_group", "eeg_tfr")
objects. - Fixed bug with incorrect number of epochs calculated when epoching
eeg_data
objects if there were multiple "target" triggers appearing in an epoch. - Fixed error with
erp_raster()
whenanat_order == FALSE
- new
epoch_queries
file for functions for setting and getting theepochs
structure - new
check_items
file for functions that check for consistency of various structures eeg_combine()
witheeg_tfr()
no longer drops single dimensions, which was causing issues when there was only one channel or epoch in the object.plot_timecourse.eeg_tfr
now correctly passes baseline period torm_baseline()
filter.eeg_tfr()
was sometimes dropping single dimensions when usingabind::asub()
, now fixed
- Added log spaced frequencies to
compute_tfr()
, with the newspacing
argument.plot_tfr
automatically detects the spacing and plots the figure appropriately. - Added
na.rm
option toerp_image()
to either keep or plot trials with NA values due to smoothing. By default they'll be removed. - Added more informative messages for
compute_psd()
.
- Some minor documentation fixes.
plot_tfr()
error when selecting a specific frequency range fixed.- Switched to new style of
vdiffr
tests - fixed
erp_image()
smoothing over time instead of epochs.
- added support for
EEGLAB
.set files saved in newer Matlab file formats. - changed first argument of
eeg_filter()
todata
instead of.data
- added some more informative user messages for importing data and adding electrode locations.
erp_image()
now supportseeg_tfr
objects.
- When combining three or more continuous
eeg_data
objects,eeg_combine()
would substantially undercorrect the timing of events in the third file - this is now fixed. groups
parameter fortopoplot()
now correctly passed for all types of object.stat_tests.R
file removed, will be reimplemented elsewhere- Long standing issues with import of channel locations from EEGLAB files hopefully fixed...
rm_baseline()
foreeg_evoked
no longer usesdata.table
as.data.frame.eeg_evoked()
handles grouped data better.import_set()
now handles all EEGLAB formats better.
ar_eogcor
now has abipolarize
argument which can be set to false when the HEOG/VEOG channels are already bipolarized.- added some new
ggplot2
based functions for topoplotting and adding contoursstat_scalpcontours()
geom_topo()
now has contours- added errors with when attempting to use
compute_psd
orcompute_tfr
oneeg_group
objects. compute_tfr()
now works better witheeg_evoked
objects that contain multiple conditions.
eeg_reference
now handles multiple reference channels better on rereferencingget_scalpmap
handleseeg_ICA
components better when there are channels with no locations- Travis-CI removed.
cart_to_spherical
coord flipping bug fixed (hopefully...)filter
now converts to tibble internally and does not coercesignals
to a vector when there is only one channel.- added copyright info to
summary_contour
file eeg_combine.eeg_evoked
made to behave more consistently when creating grouped data- all
as.data.frame()
functions moved todf_converters.r
IMPORTANT: There have been some changes to the logic of the topoplot()
that may make their appearance quite different. Specifically, these changes are to the way the underlying interpolation grid is calculated and to how things like the diameter of the cartoon head is calculated. These changes often lead to different minimum or maximum amplitudes across the image, and thus changes in the appearance of the plot due to different scales- don't be alarmed!
epoch_data
baseline correction now defaults to no baseline correction- Added
filter
method foreeg_tfr
objects fit_glm()
overhauled. Now far faster and allows specification of models using standard R formulae.- New
eeg_lm
class introduced for output offit_glm()
. plot_butterfly.eeg_lm()
method addedas.data.frame()
methods have been added foreeg_lm
objects.view_ica()
Shiny viewer foreeg_ICA
andeeg_decomp
objects added.view_artefacts()
Shiny viewer for channel and epoch stats added.plot_timecourse()
now takes a mapping argument, which allows use ofggplot2
aes()
mappingseeg_average.eeg_tfr()
now follows behaviour of othereeg_average()
methods in respecting theepochs
structure.compute_itc()
added for computing inter-trial coherence fromeeg_tfr
objects.cols
added toeeg_average.eeg_tfr
eeg_combine.tfr_average()
added to handle pre-averagedeeg_tfr
objectscompute_tfr()
now allows non-constant number of cyclescompute_tfr()
now uses a different scaling factor, so raw units should now be microvolts-squared.- added
import_erplab()
function plot_timecourse()
now allows CIs foreeg_group
objects.
plot_tfr()
now always drops NA/NaN values and averages appropriately over electrodes and conditions.import_set()
handles continuous EEG data from EEGLAB much better- Now using
whitening
package for whitening before SOBI ICA select_epochs
foreeg_ICA
objects fixed to correctly remove epochs fromsignals
- added tests for
filter.eeg_ICA
andfilter.eeg_tfr
- fixed
filter.eeg_data
andfilter.eeg_evoked
select_elecs
foreeg_ICA
now correctly removes components from the unmixing matrix- switched back to using
left_join
fromdplyr
in thetag_events
function as an easy fix for sorting of events when tagging. - fixed odd interaction between
select()
andvalidate_channels()
that reordered channel names inchan_info
eeg_decomp
now doing better job of filtering forssd
method- various
tibble
related warnings and errors cleaned up. method = "gam"
should now yield sensible results forgeom_topo()
run_ICA()
andeeg_decomp()
methods now return components ordered by percent variance explained (high to low)- removed scaling of components in SOBI ICA method
browse_data().eeg_ica
grid res reducedeeg_reference().eeg_epochs
was always average referencing, now fixed.- cleaner code in
topoplot()
for biharmonic smooth compute_psd()
now demeans individual segments when doing Welch FFT; also no longer errors when only one segment per channeleeg_tfr()
internal structure modified to keep 4 dimensions even after averaging, for consistencystat_summary_by_fill()
added to do averaging for raster plots effectively.convert_tfr()
now properly returns converted dataimport_raw()
fix for Brain Vision Analyzer files with date fields in the markers- added
version
field to most objects
- Default settings for Infomax ICA changed to be similar to EEGLAB/Fieldtrip.
- Faster reading of bdf implemented. Old behaviour can be retained using
fast_bdf = FALSE
parameter toimport_raw()
eeg_combine
now supports combining lists.eeg_reference
now supportseeg_epochs
andeeg_evoked
objects.
plot_butterfly
should now be faster again.- Much faster reader for BDF implemented.
eeg_filter
addeddemean
parameter so that removing channel/epoch means during filtering is now optional. Defaults to TRUE.- Added artefact detection options for ICA objects
ar_acf()
checks for low autocorrelationar_chanfoc()
checks for excessive channel focality (e.g. components that load mostly on one channel)ar_trialfoc()
checks for trial focality (components that load mostly on a few trials)ar_eogcor()
checks for correlation with EOG channels
topoplot
plotting radius logic alteredcompute_csd
now useseeg_reference
rather thanreref_eeg
- Unmixing matrix for SSD decompositions fixed.
compute_tfr
reworked to be faster.- Faster baseline correction implemented using Rcpp.
- Padding now used during
compute_tfr
, which greatly improves speed/accuracy; units may change but this is a change in scaling factor. epoch_data
now uses a more robust way of determining time limits/samples to include in each epoch that no longer fails at some combinations of time limit and sampling rateeeg_average
returns objects of class(eeg_evoked
,eeg_epochs
)- Updated R requirement to >= 3.2.0
- Updated rlang requirement to >= 0.4.0
compute_psd
fix for single segment data- updated use of
nest
andunnest
in keeping withtidyr 1.0.0
as.data.frame.eeg_tfr()
now fixed to output correctly
- Behaviour of
as.data.frame
methods changed.cond_label
parameter is deprecated- Information from the new
epochs
structure is now automatically added to the data.frame
tag_epochs
function added for labellingrun_ICA
now includes thefICA
package version offastica
, and now supports running PCA before ICA.apply_ICA
function added to remove ICA components.- Behaviour of
select_times()
changed to use exact supplied times rather than finding nearest times in the data. - Some wrappers around
dplyr
functions added:select()
now works for selecting electrodes fromeeg_data
andeeg_epochs
objects.filter()
filters by time points or epochs fromeeg_data
andeeg_epochs
objects.mutate()
adds columns to thesignals
fromeeg_data
andeeg_epochs
objects.
topoplot()
now has agroups
parameter that allows the possibility of facetting by event labels.- more Biosemi montages added
events()
function added to easily access and modify the events structure of alleegUtils
objects.channels()
function added to easily access and modify the chan_info structure of alleegUtils
objects.epochs()
function added to access and modify epochs structure.ar_eogreg()
function added for removing eye movement activity using regression.eeg_filter()
function added for a unified method of filtering using either FIR or IIReeg_filter()
supports use of multiple threads/cores through thefuture
package.iir_filt()
will be deprecated
geom_topo()
extension forggplot2
added. Allows plotting of a topographical scalp maps using standardggplot2
functions.- Default
grid_res
for topography related plots increased to 200.
data.table
now used in the following functions internally:reref_eeg()
iir_filt()
eeg_FASTER()
reref_eeg()
now correctly excludes electrodes as requested.iir_filt()
now correctly respects epoch boundaries.- New field
epochs
added toeeg_data
andeeg_epochs
objects. chan_info
changes to make chan_info consistent across systems.- Corrected scaling factor for PSD
eeg_combine
now checks and fixeseeg_data
timing consistencyeeg_tfr
objects now use differently organised underlying matrices.eeg_ICA
fixed unmixing matrices, which were transposed.
topoplot()
now has a scaling parameter to scale the size of any lines or markers drawn on the plot.plot_tfr()
function now useable, with baseline correction also added.rm_baseline()
now handleseeg_tfr
objects.as.data.frame()
method added foreeg_tfr
objects.compute_tfr()
function now available for use with Morlet wavelets.plot_psd()
now allows changing of FFT parameters (e.g. number of FFT points, segment length)- Data selectors added for
eeg_tfr
objects (e.g.select_elecs()
)
plot_timecourse()
overhauled to be S3 method.plot_butterfly()
reworked internally to be more efficientrm_baseline()
simplified internally, reworked to use matrices; split to separate file.select_elecs()
now works foreeg_evoked
objectseeg_decomp
function in progress for performing SSD analyses- Various methods added for TFR analyses
topoplot()
improvements internally. Now offers potential for facetting.- Some
dplyr
functions implemented internally for some objects.
topoplot()
added highlights parameter to allow specific electrodes to be highlighted.run_ICA()
now offers extended Infomax and Fastica thanks to theica
packageplotly
is now a "suggested" package rather than a dependencyplot_psd()
function added to calculate and plot the PSD foreeg_epochs
andeeg_data
objectsplot_tfr()
function added to handleeeg_tfr
objects.erp_image()
now works witheeg_ICA
objects- Generic print methods added for
eeg_epochs
andeeg_data
compute_tfr()
function added to performed TFA oneeg_epochs
epoch_data()
now warns if some events are not found rather than stops. Only stops if no events are found.
reref_eeg()
- correctly excludes multiple named electrodes (i.e. passed as characters rather than numbers), where it previously silently failed.
- no longer records the reference data in the
ref_data
field
tf_morlet
recoded to be called internallycompute_psd()
- recoded to call
welch_fft()
in order to support possibility of different FFT methods. - now drops the DC component (frequency 0)
- recoded to call
welch_fft()
internal function addedeeg_downsample()
now makes sure epoch length is a multiple of the downsampling factor to avoid problems with timing jittererp_image()
is now an S3 methodrun_ICA()
- now returns source activations as a "signals" data frame, with component names
- now returns correct unmixing matrix
compute_csd()
- added.
- computation of g-matrix and h-matrix refactored, spherical spline calculation altered accordingly
compute_tfr()
- added
eeg_FASTER()
now properly selects electrodes and epochs for removal
as.data.frame.eeg_epochs()
now has acond_labels
parameter to select epochs with specific events and add the event label as an additional column.as.data.frame()
methods now drop thesample
column.as.data.frame.eeg_ICA()
now has acond_labels
parameter to select epochs with specific events and add the event label as an additional column.reref_eeg()
now removes reference channels from the data.eeg_FASTER()
- FASTER artefact rejection method now (mostly) implemented (experimental).
plot_butterfly()
somedplyr
use removed.run_ica()
refactored SOBI method, JADE dependency removed.montage_check()
command parses montage info when passed toelectrode_locations()
label_check()
added to help parse event labelsproc_events()
added to help parse event labels duringselect_epochs()
callstopoplot()
now tries to average/select across time/epochs before converting to long data, less memory useselect_elecs()
also removes electrodes from chan_infoselect_epochs()
fixed bug whereevents
andtimings
were inconsistent when usingkeep = FALSE
- Electrode/channel related functions (other than selection) now moved to
channel_management.r
- New default electrode locations (347 locations in the 10-05 layout) provided
eeg_evoked()
class introduced to hold ERPSeeg_ICA()
class introduced to hold ICA decompositionseeg_average()
function to calculate averages (e.g. ERPs) fromeeg_epochs
objectsas.data.frame.eeg_evoked()
introduced to handle conversion of eeg_evoked objects to data frames.
compute_psd()
function development, converted to S3method.topoplot()
properly checks for existing chan_info ineeg_data
objectsplot_timecourse()
andplot_butterfly()
modified to deal witheeg_evoked
objects.plot_butterfly()
updated to better handle data framestopoplot.eeg_ICA()
added to make topolots from ICA componentsrm_baseline()
reworked as S3 method and to be faster and much less memory intensive.plot_butterfly()
converted to S3 method.- Initial commits for addition of Morlet wavelet time-frequency analysis
- Initial commits for statisical comparisons added
eeg_downsample()
function added to downsample EEG data by an integer factor.tag_events()
function added to give labels to event codes.list_events()
added to display unique event codes and their associated labels.select_epochs()
now allows selection of epochs by event code or event label.erp_raster()
- plot ERPs across the scalp as an ERP imageeeg_combine()
- combine multipleeeg_data
oreeg_epochs
objects into one
eeg_epochs()
now also handles downsampled data appropriately.select_times()
no longer leaves "epoch" column ineeg_epochs
objects.topoplot()
now calls a separate function (gam_topo()
) to create GAM smoothsbrowse_data()
major speed-ups, no longer converts to long format until necessary. Converted to S3method.interactive_scalp()
fixed plotting of individual electrodes
interp_elecs()
function to perform spherical spline interpolation of individual electrodeseeg_ar_thresh()
simple absolute value thresholding addedplot_electrodes()
Produces a 2D or interactive 3D plot of electrode locations
iir_filt()
now also filters reference channelsload_set()
command added to load EEGLAB .set files
-
Converted
select_times()
to an S3 generic methodselect_times.eeg_data
select_times.eeg_epochs
-
Converted
iir_filt()
to an S3 generic methodiir_filt.eeg_data
iir_filt.eeg_epochs
- Added a
NEWS.md
file to track changes to the package.