Back to the main page.

# Bug 2514 - implement kappa truncated-svd for beamformer covariance inverse

Status | CLOSED FIXED |

Reported | 2014-03-26 12:40:00 +0100 |

Modified | 2019-04-01 08:56:28 +0200 |

Product: | FieldTrip |

Component: | inverse |

Version: | unspecified |

Hardware: | PC |

Operating System: | Mac OS |

Importance: | P5 minor |

Assigned to: | Jan-Mathijs Schoffelen |

URL: | |

Tags: | |

Depends on: | |

Blocks: | |

See also: |

## Robert Oostenveld - 2014-03-26 12:40:35 +0100

I had an discussion over email with Jukka Nenonen, who indicated that for MaxFiltered Elekta data it is desireable to have a user-configurable "kappa" parameter to do a truncated-svd in the inverse of the covariance for beamforming. Although most details are currently in the emails, I'll follow it up here in proper FieldTrip development style, CCing the people involved at Elekta.

## Robert Oostenveld - 2015-01-09 12:53:19 +0100

Reminder to myself: we just discussed this at the MEG-UK meeting, related to a presentation of Gary Green. Also, in the FT-SPM data analysis workshop we had 6 maxfiltered runs appended, which required a fix for the beamforming (see http://fieldtrip.fcdonders.nl/workshop/meg-uk-2015/fieldtrip-beamformer-demo). Having this cleanly implemented would make it easier to explain. Implementing this is not a lot of work.

## Robert Oostenveld - 2015-08-19 17:47:17 +0200

Lambda now allows for (fieldtrip/inverse/beamforing_dics) this, although I realise that it is not fully documented % it is difficult to give a quantitative estimate of lambda, therefore also % support relative (percentage) measure that can be specified as string (e.g. '10%') if ~isempty(lambda) && ischar(lambda) && lambda(end)=='%' ratio = sscanf(lambda, '%f%%'); ratio = ratio/100; lambda = ratio * trace(Cf)/size(Cf,1); end where in the end it is a number that is compared with the singular values. Kappa could be the same. But for kappa it is also a requirement to be able to specify the number of components to keep (or remove), i.e. a third type of specification. So perhaps it could be cfg.lambda or cfg.lambda = number cfg.lambda or cfg.lambda = xx% in percent, compared to largest eigenvalue cfg.lambda or cfg.lambda = xx# as a number, counting the number from the largest down So in effect cfg.lambda='100%’ and cfg.lambda=‘1#’ would be the same, i.e. in both cases cfg.lambda would be set to the largest eigenvalue.

## Jan-Mathijs Schoffelen - 2019-01-31 21:54:00 +0100

I have implemented ft_inv, and pushed this to the github repo. It supports various ways of computing an inverse, including - pinv after tikhonov regularization (FT's original only possibility) - truncated svd, based on a tolerance/kappa parameter - truncated svd, based on a tolerance/kappa parameter + 'winsorization' of the singular values below the threshold specified by lambda.