Skip to main content

Statistical analysis tools for medical device FDA 510(k) submissions

Project description

MedDevStats

Statistical analysis tools for medical device FDA 510(k) submissions.

Overview

MedDevStats is a Python package providing comprehensive statistical methods for analyzing medical device data in accordance with FDA CDRH requirements for 510(k) submissions. It includes tools for equivalence testing, method comparison, performance evaluation, and validation studies.

Features

Statistical Methods

  • Equivalence Testing

    • Two One-Sided Tests (TOST) procedure
    • Confidence interval approach
    • Equivalence margin calculations
  • Agreement Analysis

    • Bland-Altman analysis
    • Passing-Bablok regression
    • Deming regression
    • Lin's concordance correlation coefficient
  • Performance Metrics

    • Sensitivity and specificity with confidence intervals
    • ROC analysis with AUC
    • Confusion matrix metrics
    • Diagnostic accuracy measures
  • Validation Studies

    • Method comparison studies
    • Precision studies (repeatability/reproducibility)
    • Linearity studies
    • Stability analysis

Installation

pip install meddevstats

Quick Start

import numpy as np
from meddevstats import (
    equivalence_test,
    bland_altman_analysis,
    sensitivity_specificity,
    method_comparison
)

# Equivalence testing
test_device = np.random.normal(100, 10, 50)
reference_device = np.random.normal(98, 10, 50)

result = equivalence_test(
    test_data=test_device,
    reference_data=reference_device,
    margin=5.0,
    alpha=0.05
)

print(f"Devices are equivalent: {result['equivalent']}")
print(f"Mean difference: {result['mean_difference']:.2f}")

# Bland-Altman analysis
ba_result = bland_altman_analysis(
    method1=test_device,
    method2=reference_device,
    confidence_level=0.95
)

print(f"Bias: {ba_result['bias']:.2f}")
print(f"Limits of agreement: ({ba_result['loa_lower']:.2f}, {ba_result['loa_upper']:.2f})")

# Diagnostic accuracy
y_true = np.array([1, 0, 1, 1, 0, 1, 0, 0, 1, 1])
y_pred = np.array([1, 0, 1, 0, 0, 1, 1, 0, 1, 1])

metrics = sensitivity_specificity(y_true, y_pred)
print(f"Sensitivity: {metrics['sensitivity']:.2%}")
print(f"Specificity: {metrics['specificity']:.2%}")

FDA 510(k) Submission Support

This package is designed to support statistical analyses commonly required for FDA 510(k) submissions:

Substantial Equivalence Testing

  • Compare test device to predicate device
  • Calculate confidence intervals for differences
  • Assess clinical agreement

Method Comparison Studies

  • Validate new methods against reference standards
  • Multiple regression methods (Passing-Bablok, Deming)
  • Comprehensive agreement analysis

Performance Evaluation

  • Diagnostic accuracy metrics
  • ROC curve analysis
  • Confusion matrix with confidence intervals

Validation Studies (CLSI Guidelines)

  • Precision studies (EP05-A3)
  • Linearity studies (EP06-A)
  • Method comparison (EP09-A3)
  • Stability studies

Documentation

For detailed documentation, visit https://meddevstats.readthedocs.io/

Examples

Equivalence Testing for 510(k)

from meddevstats import equivalence_test, equivalence_margin_calculation

# Calculate appropriate margin based on clinical difference
reference_historical = np.random.normal(100, 8, 100)
margin = equivalence_margin_calculation(
    reference_data=reference_historical,
    clinical_difference=5.0,
    method="clinical"
)

# Perform equivalence test
result = equivalence_test(
    test_data=test_measurements,
    reference_data=reference_measurements,
    margin=margin,
    alpha=0.05,
    test_type="two_one_sided"
)

if result['equivalent']:
    print("Test device is substantially equivalent to predicate device")

Method Comparison Study

from meddevstats import method_comparison

# Define acceptance criteria
criteria = {
    "bias_limit": 5.0,
    "loa_limit": 15.0,
    "ccc_limit": 0.95
}

# Perform comprehensive comparison
comparison = method_comparison(
    reference=reference_method,
    test=new_method,
    acceptance_criteria=criteria,
    methods=["bland_altman", "passing_bablok", "deming"]
)

print(f"Overall acceptable: {comparison['overall_acceptable']}")

Precision Study

from meddevstats import precision_study

# Analyze repeatability
repeatability = precision_study(
    measurements=repeated_measurements,
    study_type="repeatability",
    acceptance_cv=0.05
)

print(f"CV: {repeatability['cv']:.2%}")
print(f"Acceptable: {repeatability['acceptable']}")

# Analyze reproducibility
reproducibility = precision_study(
    measurements=all_measurements,
    groups=day_labels,
    study_type="reproducibility",
    acceptance_cv=0.10
)

print(f"Within-day CV: {reproducibility['within_cv']:.2%}")
print(f"Between-day CV: {reproducibility['between_cv']:.2%}")
print(f"Total CV: {reproducibility['total_cv']:.2%}")

Requirements

  • Python >= 3.8
  • NumPy >= 1.20.0
  • SciPy >= 1.7.0
  • Pandas >= 1.3.0
  • Matplotlib >= 3.3.0
  • Seaborn >= 0.11.0
  • Statsmodels >= 0.12.0
  • Scikit-learn >= 0.24.0

Contributing

Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Disclaimer

This software is intended for research and development purposes. While designed to support FDA 510(k) submissions, users are responsible for ensuring their analyses meet all regulatory requirements. Always consult with regulatory experts and FDA guidance documents for your specific submission needs.

Citation

If you use MedDevStats in your research or regulatory submissions, please cite:

MedDevStats: Statistical Analysis Tools for Medical Device FDA 510(k) Submissions
https://github.com/yourusername/meddevstats

Support

For questions, issues, or feature requests, please:

Regulatory References

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

meddevstats-0.1.0.tar.gz (23.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

meddevstats-0.1.0-py3-none-any.whl (23.3 kB view details)

Uploaded Python 3

File details

Details for the file meddevstats-0.1.0.tar.gz.

File metadata

  • Download URL: meddevstats-0.1.0.tar.gz
  • Upload date:
  • Size: 23.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for meddevstats-0.1.0.tar.gz
Algorithm Hash digest
SHA256 32851963b6b54a3c8ededdcf792d2e001cba872a2bfad4e1d5dad2c0f3d5f07a
MD5 473b74f3cf1c22174d7aaa75e37615c6
BLAKE2b-256 b229c1d25e0ff845ee2a3bf4839abda052e35f97f115afccafd95c8f0c4ade81

See more details on using hashes here.

File details

Details for the file meddevstats-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: meddevstats-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 23.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for meddevstats-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ced1803d0c1157c716f5c06d3ae6d909fe1c1819639f5c253da026757f225018
MD5 f608c455ce6549817daa36f24efde6f5
BLAKE2b-256 1056a9bfa80f8ebb37f811b537e8f20b2271fa74f02bf18d92a56428ca09b2f9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page