Skip to main content

Probabilistic Model Specification

NimbusSDK provides pre-built probabilistic models powered by RxInfer.jl, a reactive message passing framework for efficient Bayesian inference. In the Python SDK these models are also the heads behind Personalizer(head=...) — see Personalizer & Middleware.
Nimbus Models Available:
  • NimbusLDA - Fast, shared covariance (Python + Julia); default Personalizer(head="lda")
  • NimbusQDA - Flexible, class-specific covariances (Python + Julia); Personalizer(head="qda")
  • NimbusSoftmax - Non-Gaussian static model (Python only); Personalizer(head="softmax")
  • NimbusProbit - Non-Gaussian static model (Julia only)
  • NimbusSTS - Stateful adaptive model (Python only; classical / streaming path)
For detailed implementation, see the individual model pages above.

Start Here

Personalizer & Middleware

Python product path: frozen trunk → Bayesian head → BrainState.

Bayesian LDA

Default Personalizer head (head="lda") and fast classical baseline.

Bayesian QDA

Class-specific covariance; Personalizer(head="qda").

Bayesian STS

Adaptive stateful modeling for non-stationarity.

Model Architecture

The static models (LDA, QDA, Softmax, Probit) are built on factor graphs with reactive message passing:

Factor Graphs

Factor graphs represent the joint probability distribution: p(class,data)=p(class)p(dataclass)p(\text{class}, \text{data}) = p(\text{class}) \cdot p(\text{data}|\text{class}) Components:
  1. Prior: p(class)p(\text{class}) - uniform or learned class probabilities
  2. Likelihood: p(dataclass)p(\text{data}|\text{class}) - Gaussian (LDA/QDA) or a non-Gaussian classifier (Softmax/Probit)
  3. Posterior: p(classdata)p(\text{class}|\text{data}) - computed via message passing

Reactive Message Passing

RxInfer.jl uses reactive programming for efficient inference:
Benefits:
  • Incremental processing: Process data chunks as they arrive
  • Low latency: 10-25ms per chunk
  • Memory efficient: Constant memory usage
  • Real-time capable: Streaming inference without buffering

Model Comparison


BCI Paradigm Applications

Motor Imagery

Recommended Model: Bayesian LDA (NimbusLDA) Motor imagery classes are typically well-separated in CSP feature space, making NimbusLDA ideal:
  • 2-class (left/right hand): 75-90% accuracy
  • 4-class (hands/feet/tongue): 70-85% accuracy
  • Inference: 10-15ms per trial
  • ITR: 15-25 bits/minute
Why NimbusLDA?
  • Fast inference for real-time control
  • Shared covariance assumption holds well
  • Lowest data requirements
See Basic Examples - Motor Imagery for implementation. Recommended Model: Bayesian QDA (NimbusQDA) P300 target and non-target ERPs have overlapping distributions, requiring flexible modeling:
  • Binary detection: 85-95% accuracy (with averaging)
  • Inference: 15-25ms per epoch
  • ITR: 10-20 bits/minute
Why NimbusQDA?
  • Class-specific covariances capture ERP morphology
  • Better for overlapping distributions
  • Handles individual differences
See Basic Examples - P300 Detection for implementation.

SSVEP (Steady-State Visual Evoked Potential)

Recommended Model: NimbusLDA or NimbusQDA
  • 4-target: 85-95% accuracy, use NimbusLDA
  • 6+ target: 80-90% accuracy, use NimbusQDA
  • Inference: 10-20ms per trial
  • ITR: 30-50 bits/minute
Model Selection:
  • NimbusLDA: For 2-4 targets with well-separated frequencies
  • NimbusQDA: For 6+ targets with overlapping harmonics
See Advanced Applications for deployment patterns and model-combination guidance.

Paradigm Comparison

New: Use NimbusSTS (Python-only) for sessions >30 minutes or when you observe accuracy degradation over time. It’s the only model that explicitly handles temporal drift and non-stationarity.

Advanced Techniques

Hyperparameter Optimization

Use grid search or Bayesian optimization to find optimal hyperparameters:
See Python SDK - sklearn Integration for more tuning examples.

Cross-Subject Transfer Learning

Train on multiple subjects for better generalization:

Ensemble Methods

Combine multiple models for improved robustness:

Confidence Calibration

Ensure predicted probabilities match actual accuracy:

Model Limitations

General Limitations:
  • Static models: No built-in temporal dynamics (use preprocessing for temporal features)
  • Supervised only: Require labeled training data
  • Fixed structure: Cannot modify factor graph structure at runtime
Model-Specific:
  • NimbusLDA: Assumes Gaussian distributions with shared covariance, linear decision boundaries
  • NimbusQDA: Assumes Gaussian distributions with class-specific covariances, higher overfitting risk with limited data
  • NimbusSoftmax / NimbusProbit: May require more training data than LDA/QDA for complex tasks

Troubleshooting

Symptoms: High training accuracy, low test accuracySolutions:
  • Increase mu_scale (stronger regularization)
  • Use cross-validation for hyperparameter tuning
  • Collect more training data
  • Apply ensemble methods
Symptoms: Good within-subject, poor across-subject performanceSolutions:
  • Train on multi-subject data
  • Increase regularization (mu_scale)
  • Normalize features consistently
  • Use subject-specific calibration
Symptoms: Model biased toward majority classSolutions:
  • Use class weighting
  • Apply SMOTE or other resampling
  • Adjust decision threshold
  • Use stratified cross-validation

Next Read

NimbusLDA

Fast, shared covariance classifier

NimbusQDA

Flexible, class-specific covariances

NimbusSTS (Python)

Adaptive, for non-stationary data

NimbusSoftmax (Python)

Non-Gaussian static classification

NimbusProbit (Julia)

Non-Gaussian static classification

Basic Examples

Compact Python and Julia recipes

Advanced Applications

Calibration, adaptation, hybrid systems

Development Philosophy: Nimbus provides battle-tested, production-ready models (NimbusLDA, NimbusQDA, NimbusSoftmax (Py), NimbusProbit (Jl), NimbusSTS (Py)) that are proven effective for BCI applications. These models cover the majority of BCI use cases with fast inference, uncertainty quantification, and online learning. NimbusSTS adds adaptive capabilities for non-stationary data and long-duration sessions.