# 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
```bash
pip install meddevstats
```
## Quick Start
```python
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/](https://meddevstats.readthedocs.io/)
## Examples
### Equivalence Testing for 510(k)
```python
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
```python
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
```python
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](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:
- Open an issue on [GitHub Issues](https://github.com/yourusername/meddevstats/issues)
- Check the [documentation](https://meddevstats.readthedocs.io/)
- Contact the maintainers
## Regulatory References
- [FDA 510(k) Premarket Notification](https://www.fda.gov/medical-devices/premarket-submissions/premarket-notification-510k)
- [Statistical Guidance on Reporting Results from Studies Evaluating Diagnostic Tests](https://www.fda.gov/regulatory-information/search-fda-guidance-documents/statistical-guidance-reporting-results-studies-evaluating-diagnostic-tests-guidance-industry-and-fda)
- [CLSI Guidelines](https://clsi.org/) for method validation
Raw data
{
"_id": null,
"home_page": null,
"name": "meddevstats",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "Your Name <your.email@example.com>",
"keywords": "medical device, FDA, 510k, statistics, biostatistics, clinical validation, equivalence testing, method comparison, CDRH",
"author": null,
"author_email": "Your Name <your.email@example.com>",
"download_url": "https://files.pythonhosted.org/packages/b2/29/c1d25e0ff845ee2a3bf4839abda052e35f97f115afccafd95c8f0c4ade81/meddevstats-0.1.0.tar.gz",
"platform": null,
"description": "# MedDevStats\n\nStatistical analysis tools for medical device FDA 510(k) submissions.\n\n## Overview\n\nMedDevStats 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.\n\n## Features\n\n### Statistical Methods\n\n- **Equivalence Testing**\n - Two One-Sided Tests (TOST) procedure\n - Confidence interval approach\n - Equivalence margin calculations\n\n- **Agreement Analysis**\n - Bland-Altman analysis\n - Passing-Bablok regression\n - Deming regression\n - Lin's concordance correlation coefficient\n\n- **Performance Metrics**\n - Sensitivity and specificity with confidence intervals\n - ROC analysis with AUC\n - Confusion matrix metrics\n - Diagnostic accuracy measures\n\n- **Validation Studies**\n - Method comparison studies\n - Precision studies (repeatability/reproducibility)\n - Linearity studies\n - Stability analysis\n\n## Installation\n\n```bash\npip install meddevstats\n```\n\n## Quick Start\n\n```python\nimport numpy as np\nfrom meddevstats import (\n equivalence_test,\n bland_altman_analysis,\n sensitivity_specificity,\n method_comparison\n)\n\n# Equivalence testing\ntest_device = np.random.normal(100, 10, 50)\nreference_device = np.random.normal(98, 10, 50)\n\nresult = equivalence_test(\n test_data=test_device,\n reference_data=reference_device,\n margin=5.0,\n alpha=0.05\n)\n\nprint(f\"Devices are equivalent: {result['equivalent']}\")\nprint(f\"Mean difference: {result['mean_difference']:.2f}\")\n\n# Bland-Altman analysis\nba_result = bland_altman_analysis(\n method1=test_device,\n method2=reference_device,\n confidence_level=0.95\n)\n\nprint(f\"Bias: {ba_result['bias']:.2f}\")\nprint(f\"Limits of agreement: ({ba_result['loa_lower']:.2f}, {ba_result['loa_upper']:.2f})\")\n\n# Diagnostic accuracy\ny_true = np.array([1, 0, 1, 1, 0, 1, 0, 0, 1, 1])\ny_pred = np.array([1, 0, 1, 0, 0, 1, 1, 0, 1, 1])\n\nmetrics = sensitivity_specificity(y_true, y_pred)\nprint(f\"Sensitivity: {metrics['sensitivity']:.2%}\")\nprint(f\"Specificity: {metrics['specificity']:.2%}\")\n```\n\n## FDA 510(k) Submission Support\n\nThis package is designed to support statistical analyses commonly required for FDA 510(k) submissions:\n\n### Substantial Equivalence Testing\n- Compare test device to predicate device\n- Calculate confidence intervals for differences\n- Assess clinical agreement\n\n### Method Comparison Studies\n- Validate new methods against reference standards\n- Multiple regression methods (Passing-Bablok, Deming)\n- Comprehensive agreement analysis\n\n### Performance Evaluation\n- Diagnostic accuracy metrics\n- ROC curve analysis\n- Confusion matrix with confidence intervals\n\n### Validation Studies (CLSI Guidelines)\n- Precision studies (EP05-A3)\n- Linearity studies (EP06-A)\n- Method comparison (EP09-A3)\n- Stability studies\n\n## Documentation\n\nFor detailed documentation, visit [https://meddevstats.readthedocs.io/](https://meddevstats.readthedocs.io/)\n\n## Examples\n\n### Equivalence Testing for 510(k)\n\n```python\nfrom meddevstats import equivalence_test, equivalence_margin_calculation\n\n# Calculate appropriate margin based on clinical difference\nreference_historical = np.random.normal(100, 8, 100)\nmargin = equivalence_margin_calculation(\n reference_data=reference_historical,\n clinical_difference=5.0,\n method=\"clinical\"\n)\n\n# Perform equivalence test\nresult = equivalence_test(\n test_data=test_measurements,\n reference_data=reference_measurements,\n margin=margin,\n alpha=0.05,\n test_type=\"two_one_sided\"\n)\n\nif result['equivalent']:\n print(\"Test device is substantially equivalent to predicate device\")\n```\n\n### Method Comparison Study\n\n```python\nfrom meddevstats import method_comparison\n\n# Define acceptance criteria\ncriteria = {\n \"bias_limit\": 5.0,\n \"loa_limit\": 15.0,\n \"ccc_limit\": 0.95\n}\n\n# Perform comprehensive comparison\ncomparison = method_comparison(\n reference=reference_method,\n test=new_method,\n acceptance_criteria=criteria,\n methods=[\"bland_altman\", \"passing_bablok\", \"deming\"]\n)\n\nprint(f\"Overall acceptable: {comparison['overall_acceptable']}\")\n```\n\n### Precision Study\n\n```python\nfrom meddevstats import precision_study\n\n# Analyze repeatability\nrepeatability = precision_study(\n measurements=repeated_measurements,\n study_type=\"repeatability\",\n acceptance_cv=0.05\n)\n\nprint(f\"CV: {repeatability['cv']:.2%}\")\nprint(f\"Acceptable: {repeatability['acceptable']}\")\n\n# Analyze reproducibility\nreproducibility = precision_study(\n measurements=all_measurements,\n groups=day_labels,\n study_type=\"reproducibility\",\n acceptance_cv=0.10\n)\n\nprint(f\"Within-day CV: {reproducibility['within_cv']:.2%}\")\nprint(f\"Between-day CV: {reproducibility['between_cv']:.2%}\")\nprint(f\"Total CV: {reproducibility['total_cv']:.2%}\")\n```\n\n## Requirements\n\n- Python >= 3.8\n- NumPy >= 1.20.0\n- SciPy >= 1.7.0\n- Pandas >= 1.3.0\n- Matplotlib >= 3.3.0\n- Seaborn >= 0.11.0\n- Statsmodels >= 0.12.0\n- Scikit-learn >= 0.24.0\n\n## Contributing\n\nContributions 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.\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Disclaimer\n\nThis 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.\n\n## Citation\n\nIf you use MedDevStats in your research or regulatory submissions, please cite:\n\n```\nMedDevStats: Statistical Analysis Tools for Medical Device FDA 510(k) Submissions\nhttps://github.com/yourusername/meddevstats\n```\n\n## Support\n\nFor questions, issues, or feature requests, please:\n- Open an issue on [GitHub Issues](https://github.com/yourusername/meddevstats/issues)\n- Check the [documentation](https://meddevstats.readthedocs.io/)\n- Contact the maintainers\n\n## Regulatory References\n\n- [FDA 510(k) Premarket Notification](https://www.fda.gov/medical-devices/premarket-submissions/premarket-notification-510k)\n- [Statistical Guidance on Reporting Results from Studies Evaluating Diagnostic Tests](https://www.fda.gov/regulatory-information/search-fda-guidance-documents/statistical-guidance-reporting-results-studies-evaluating-diagnostic-tests-guidance-industry-and-fda)\n- [CLSI Guidelines](https://clsi.org/) for method validation\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Statistical analysis tools for medical device FDA 510(k) submissions",
"version": "0.1.0",
"project_urls": {
"Bug Tracker": "https://github.com/yourusername/meddevstats/issues",
"Changelog": "https://github.com/yourusername/meddevstats/blob/main/CHANGELOG.md",
"Documentation": "https://meddevstats.readthedocs.io/",
"Homepage": "https://github.com/yourusername/meddevstats",
"Repository": "https://github.com/yourusername/meddevstats.git"
},
"split_keywords": [
"medical device",
" fda",
" 510k",
" statistics",
" biostatistics",
" clinical validation",
" equivalence testing",
" method comparison",
" cdrh"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "1056a9bfa80f8ebb37f811b537e8f20b2271fa74f02bf18d92a56428ca09b2f9",
"md5": "f608c455ce6549817daa36f24efde6f5",
"sha256": "ced1803d0c1157c716f5c06d3ae6d909fe1c1819639f5c253da026757f225018"
},
"downloads": -1,
"filename": "meddevstats-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f608c455ce6549817daa36f24efde6f5",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 23296,
"upload_time": "2025-09-07T00:14:31",
"upload_time_iso_8601": "2025-09-07T00:14:31.798727Z",
"url": "https://files.pythonhosted.org/packages/10/56/a9bfa80f8ebb37f811b537e8f20b2271fa74f02bf18d92a56428ca09b2f9/meddevstats-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b229c1d25e0ff845ee2a3bf4839abda052e35f97f115afccafd95c8f0c4ade81",
"md5": "473b74f3cf1c22174d7aaa75e37615c6",
"sha256": "32851963b6b54a3c8ededdcf792d2e001cba872a2bfad4e1d5dad2c0f3d5f07a"
},
"downloads": -1,
"filename": "meddevstats-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "473b74f3cf1c22174d7aaa75e37615c6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 23584,
"upload_time": "2025-09-07T00:14:33",
"upload_time_iso_8601": "2025-09-07T00:14:33.276139Z",
"url": "https://files.pythonhosted.org/packages/b2/29/c1d25e0ff845ee2a3bf4839abda052e35f97f115afccafd95c8f0c4ade81/meddevstats-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-07 00:14:33",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "yourusername",
"github_project": "meddevstats",
"github_not_found": true,
"lcname": "meddevstats"
}