PyMetaAnalysis 0.1.0__tar.gz → 0.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/.github/workflows/release.yml +1 -0
  2. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/CHANGELOG.md +23 -0
  3. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/CITATION.cff +5 -3
  4. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/PKG-INFO +31 -21
  5. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/README.md +29 -19
  6. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/getting-started.md +4 -3
  7. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/guides/generic-effects.md +17 -10
  8. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/guides/input-data.md +3 -1
  9. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/guides/provenance-reporting.md +4 -0
  10. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/guides/r-interoperability.md +13 -1
  11. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/index.md +5 -3
  12. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/limitations.md +2 -3
  13. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/reference/api.md +8 -2
  14. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/releasing.md +4 -4
  15. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/pyproject.toml +1 -1
  16. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/_version.py +1 -1
  17. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/api.py +85 -12
  18. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/data.py +66 -24
  19. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/reporting.py +7 -0
  20. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/test_api.py +84 -0
  21. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/test_documentation.py +10 -0
  22. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/test_properties.py +32 -0
  23. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/test_release_readiness.py +17 -0
  24. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/test_reporting.py +26 -0
  25. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/test_subgroups.py +26 -0
  26. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tools/check_release.py +1 -1
  27. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tools/inspect_distribution.py +1 -0
  28. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/.github/workflows/ci.yml +0 -0
  29. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/.github/workflows/pages.yml +0 -0
  30. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/.gitignore +0 -0
  31. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/CONTRIBUTING.md +0 -0
  32. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/LICENSE +0 -0
  33. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/SECURITY.md +0 -0
  34. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/benchmarks/README.md +0 -0
  35. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/benchmarks/benchmark_core.py +0 -0
  36. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/adr/0001-optional-matplotlib.md +0 -0
  37. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/adr/0002-statistical-policy.md +0 -0
  38. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/citation.md +0 -0
  39. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/development.md +0 -0
  40. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/guides/binary-outcomes.md +0 -0
  41. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/guides/continuous-outcomes.md +0 -0
  42. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/guides/method-selection.md +0 -0
  43. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/guides/plotting.md +0 -0
  44. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/guides/sensitivity-analysis.md +0 -0
  45. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/guides/zero-events.md +0 -0
  46. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/installation.md +0 -0
  47. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/methods/statistical-methods.md +0 -0
  48. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/reference/report-schema.md +0 -0
  49. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/reference/results.md +0 -0
  50. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/stylesheets/extra.css +0 -0
  51. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/docs/validation.md +0 -0
  52. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/examples/README.md +0 -0
  53. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/examples/quickstart.ipynb +0 -0
  54. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/mkdocs.yml +0 -0
  55. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/__init__.py +0 -0
  56. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/binary_api.py +0 -0
  57. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/config.py +0 -0
  58. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/continuous_api.py +0 -0
  59. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/effect_sizes/__init__.py +0 -0
  60. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/effect_sizes/binary.py +0 -0
  61. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/effect_sizes/continuous.py +0 -0
  62. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/estimators/__init__.py +0 -0
  63. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/estimators/inverse_variance.py +0 -0
  64. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/estimators/mantel_haenszel.py +0 -0
  65. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/estimators/tau2.py +0 -0
  66. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/exceptions.py +0 -0
  67. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/heterogeneity.py +0 -0
  68. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/plotting/__init__.py +0 -0
  69. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/plotting/_utils.py +0 -0
  70. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/plotting/forest.py +0 -0
  71. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/plotting/funnel.py +0 -0
  72. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/plotting/subgroup_forest.py +0 -0
  73. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/provenance.py +0 -0
  74. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/py.typed +0 -0
  75. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/results.py +0 -0
  76. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/sensitivity.py +0 -0
  77. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/src/meta_analyze/subgroups.py +0 -0
  78. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/reference/README.md +0 -0
  79. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/reference/binary_input.csv +0 -0
  80. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/reference/binary_metafor.json +0 -0
  81. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/reference/binary_sparse_input.csv +0 -0
  82. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/reference/continuous_input.csv +0 -0
  83. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/reference/continuous_metafor.json +0 -0
  84. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/reference/generate_binary_metafor.R +0 -0
  85. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/reference/generate_continuous_metafor.R +0 -0
  86. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/reference/generate_generic_metafor.R +0 -0
  87. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/reference/generate_workflow_metafor.R +0 -0
  88. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/reference/generic_input.csv +0 -0
  89. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/reference/generic_metafor.json +0 -0
  90. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/reference/workflow_input.csv +0 -0
  91. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/reference/workflow_metafor.json +0 -0
  92. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/test_binary.py +0 -0
  93. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/test_continuous.py +0 -0
  94. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/test_estimators.py +0 -0
  95. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/test_funnel_plot.py +0 -0
  96. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/test_numerical_stability.py +0 -0
  97. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/test_plotting.py +0 -0
  98. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/test_r_references.py +0 -0
  99. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/test_reference_results.py +0 -0
  100. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tests/test_sensitivity.py +0 -0
  101. {pymetaanalysis-0.1.0 → pymetaanalysis-0.2.1}/tools/execute_notebooks.py +0 -0
@@ -116,6 +116,7 @@ jobs:
116
116
  - name: Create release
117
117
  env:
118
118
  GH_TOKEN: ${{ github.token }}
119
+ GH_REPO: ${{ github.repository }}
119
120
  run: |
120
121
  args=("$GITHUB_REF_NAME" dist/* release-benchmark.json --verify-tag --generate-notes)
121
122
  version="${GITHUB_REF_NAME#v}"
@@ -6,6 +6,29 @@ Changes planned for the next release accumulate under `Unreleased`.
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 0.2.1 - 2026-07-17
10
+
11
+ ### Fixed
12
+
13
+ - README documentation and repository links use absolute URLs so they resolve
14
+ correctly when the project description is rendered on PyPI.
15
+
16
+ ## 0.2.0 - 2026-07-16
17
+
18
+ ### Added
19
+
20
+ - generic `meta_analysis()` accepts either sampling variances or standard
21
+ errors, with explicit validation and auditable conversion provenance.
22
+
23
+ ### Changed
24
+
25
+ - package author metadata identifies the project maintainer directly.
26
+
27
+ ### Fixed
28
+
29
+ - GitHub Release creation receives explicit repository context in tag-driven
30
+ release jobs.
31
+
9
32
  ## 0.1.0 - 2026-07-15
10
33
 
11
34
  ### Added
@@ -5,9 +5,11 @@ message: >-
5
5
  title: PyMetaAnalysis
6
6
  type: software
7
7
  authors:
8
- - name: PyMetaAnalysis contributors
9
- version: 0.1.0
10
- date-released: 2026-07-15
8
+ - family-names: Ding
9
+ given-names: Zhaobo
10
+ email: ding.zb@yahoo.com
11
+ version: 0.2.1
12
+ date-released: 2026-07-17
11
13
  repository-code: https://github.com/ZhaoboDing/PyMetaAnalysis
12
14
  url: https://zhaoboding.github.io/PyMetaAnalysis/
13
15
  license: MIT
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyMetaAnalysis
3
- Version: 0.1.0
3
+ Version: 0.2.1
4
4
  Summary: A pandas-first, auditable meta-analysis library for Python
5
5
  Project-URL: Documentation, https://zhaoboding.github.io/PyMetaAnalysis/
6
6
  Project-URL: Source, https://github.com/ZhaoboDing/PyMetaAnalysis
7
7
  Project-URL: Issues, https://github.com/ZhaoboDing/PyMetaAnalysis/issues
8
8
  Project-URL: Changelog, https://github.com/ZhaoboDing/PyMetaAnalysis/blob/main/CHANGELOG.md
9
- Author: PyMetaAnalysis contributors
9
+ Author-email: Zhaobo Ding <ding.zb@yahoo.com>
10
10
  Maintainer-email: Zhaobo Ding <ding.zb@yahoo.com>
11
11
  License-Expression: MIT
12
12
  License-File: LICENSE
@@ -51,7 +51,7 @@ Description-Content-Type: text/markdown
51
51
 
52
52
  [![CI](https://github.com/ZhaoboDing/PyMetaAnalysis/actions/workflows/ci.yml/badge.svg)](https://github.com/ZhaoboDing/PyMetaAnalysis/actions/workflows/ci.yml)
53
53
  [![Documentation](https://github.com/ZhaoboDing/PyMetaAnalysis/actions/workflows/pages.yml/badge.svg)](https://zhaoboding.github.io/PyMetaAnalysis/)
54
- [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
54
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/ZhaoboDing/PyMetaAnalysis/blob/main/LICENSE)
55
55
 
56
56
  PyMetaAnalysis is an early-stage, pandas-first Python library for conventional
57
57
  study-level meta-analysis. It accepts DataFrames, NumPy arrays, and ordinary
@@ -115,7 +115,7 @@ subgroup differences.
115
115
 
116
116
  | Input | Effects | Pooling/models |
117
117
  | --- | --- | --- |
118
- | Effect + sampling variance | Generic | Common/random inverse variance |
118
+ | Effect + sampling variance or standard error | Generic | Common/random inverse variance |
119
119
  | Two-group events + totals | OR, RR, RD | Common MH OR/RR; common/random IV |
120
120
  | Two-group means + SDs + sizes | MD, Hedges' g | Common/random inverse variance |
121
121
 
@@ -124,6 +124,10 @@ and DerSimonian-Laird tau-squared estimators. Mean confidence intervals support
124
124
  the normal default plus unmodified and safeguarded Hartung-Knapp variants.
125
125
  Eligible random-effects fits include an HTS prediction interval.
126
126
 
127
+ Generic analyses accept exactly one of `variance=` or `standard_error=`.
128
+ Standard errors are squared internally and the conversion is recorded in the
129
+ result provenance.
130
+
127
131
  Sparse binary behavior is explicit: study-level and Mantel-Haenszel continuity
128
132
  corrections are separate, relative-effect double-zero/double-all rows remain
129
133
  visible as exclusions, and RD exposes
@@ -174,18 +178,18 @@ are descriptive small-study-effect diagnostics, not proof of publication bias.
174
178
  The complete documentation is published at
175
179
  [zhaoboding.github.io/PyMetaAnalysis](https://zhaoboding.github.io/PyMetaAnalysis/).
176
180
 
177
- - [Installation](docs/installation.md)
178
- - [Getting started](docs/getting-started.md)
179
- - [Input data and row decisions](docs/guides/input-data.md)
180
- - [Generic](docs/guides/generic-effects.md), [binary](docs/guides/binary-outcomes.md), and [continuous](docs/guides/continuous-outcomes.md) guides
181
- - [Choosing methods](docs/guides/method-selection.md) and [statistical formulas](docs/methods/statistical-methods.md)
182
- - [Sensitivity analysis](docs/guides/sensitivity-analysis.md) and [plotting](docs/guides/plotting.md)
183
- - [Public API](docs/reference/api.md), [result objects](docs/reference/results.md), and [report schema](docs/reference/report-schema.md)
184
- - [Validation strategy](docs/validation.md) and [scope/limitations](docs/limitations.md)
185
- - [Citation guidance](docs/citation.md)
186
- - [R `meta`/`metafor` mapping](docs/guides/r-interoperability.md)
187
-
188
- An executable [end-to-end notebook](examples/quickstart.ipynb) uses synthetic
181
+ - [Installation](https://zhaoboding.github.io/PyMetaAnalysis/installation/)
182
+ - [Getting started](https://zhaoboding.github.io/PyMetaAnalysis/getting-started/)
183
+ - [Input data and row decisions](https://zhaoboding.github.io/PyMetaAnalysis/guides/input-data/)
184
+ - [Generic](https://zhaoboding.github.io/PyMetaAnalysis/guides/generic-effects/), [binary](https://zhaoboding.github.io/PyMetaAnalysis/guides/binary-outcomes/), and [continuous](https://zhaoboding.github.io/PyMetaAnalysis/guides/continuous-outcomes/) guides
185
+ - [Choosing methods](https://zhaoboding.github.io/PyMetaAnalysis/guides/method-selection/) and [statistical formulas](https://zhaoboding.github.io/PyMetaAnalysis/methods/statistical-methods/)
186
+ - [Sensitivity analysis](https://zhaoboding.github.io/PyMetaAnalysis/guides/sensitivity-analysis/) and [plotting](https://zhaoboding.github.io/PyMetaAnalysis/guides/plotting/)
187
+ - [Public API](https://zhaoboding.github.io/PyMetaAnalysis/reference/api/), [result objects](https://zhaoboding.github.io/PyMetaAnalysis/reference/results/), and [report schema](https://zhaoboding.github.io/PyMetaAnalysis/reference/report-schema/)
188
+ - [Validation strategy](https://zhaoboding.github.io/PyMetaAnalysis/validation/) and [scope/limitations](https://zhaoboding.github.io/PyMetaAnalysis/limitations/)
189
+ - [Citation guidance](https://zhaoboding.github.io/PyMetaAnalysis/citation/)
190
+ - [R `meta`/`metafor` mapping](https://zhaoboding.github.io/PyMetaAnalysis/guides/r-interoperability/)
191
+
192
+ An executable [end-to-end notebook](https://github.com/ZhaoboDing/PyMetaAnalysis/blob/main/examples/quickstart.ipynb) uses synthetic
189
193
  data to demonstrate analysis, provenance, reporting, sensitivity, and plotting.
190
194
 
191
195
  Build the complete site locally with:
@@ -203,16 +207,22 @@ edge cases, and committed R `metafor` reference fixtures. CI covers Python
203
207
  distribution builds.
204
208
 
205
209
  This is independent cross-software validation, not a formal external
206
- statistical audit. See [validation](docs/validation.md) for exact coverage.
210
+ statistical audit. See
211
+ [validation](https://zhaoboding.github.io/PyMetaAnalysis/validation/) for exact
212
+ coverage.
207
213
 
208
214
  ## Contributing
209
215
 
210
- See [CONTRIBUTING.md](CONTRIBUTING.md) and the full
211
- [development guide](docs/development.md). Statistical changes require formula
216
+ See
217
+ [CONTRIBUTING.md](https://github.com/ZhaoboDing/PyMetaAnalysis/blob/main/CONTRIBUTING.md)
218
+ and the full
219
+ [development guide](https://zhaoboding.github.io/PyMetaAnalysis/development/).
220
+ Statistical changes require formula
212
221
  documentation, boundary tests, and an independent comparison where available.
213
222
 
214
- Security-sensitive reports should follow [SECURITY.md](SECURITY.md).
223
+ Security-sensitive reports should follow
224
+ [SECURITY.md](https://github.com/ZhaoboDing/PyMetaAnalysis/blob/main/SECURITY.md).
215
225
 
216
226
  ## License
217
227
 
218
- [MIT](LICENSE)
228
+ [MIT](https://github.com/ZhaoboDing/PyMetaAnalysis/blob/main/LICENSE)
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![CI](https://github.com/ZhaoboDing/PyMetaAnalysis/actions/workflows/ci.yml/badge.svg)](https://github.com/ZhaoboDing/PyMetaAnalysis/actions/workflows/ci.yml)
4
4
  [![Documentation](https://github.com/ZhaoboDing/PyMetaAnalysis/actions/workflows/pages.yml/badge.svg)](https://zhaoboding.github.io/PyMetaAnalysis/)
5
- [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/ZhaoboDing/PyMetaAnalysis/blob/main/LICENSE)
6
6
 
7
7
  PyMetaAnalysis is an early-stage, pandas-first Python library for conventional
8
8
  study-level meta-analysis. It accepts DataFrames, NumPy arrays, and ordinary
@@ -66,7 +66,7 @@ subgroup differences.
66
66
 
67
67
  | Input | Effects | Pooling/models |
68
68
  | --- | --- | --- |
69
- | Effect + sampling variance | Generic | Common/random inverse variance |
69
+ | Effect + sampling variance or standard error | Generic | Common/random inverse variance |
70
70
  | Two-group events + totals | OR, RR, RD | Common MH OR/RR; common/random IV |
71
71
  | Two-group means + SDs + sizes | MD, Hedges' g | Common/random inverse variance |
72
72
 
@@ -75,6 +75,10 @@ and DerSimonian-Laird tau-squared estimators. Mean confidence intervals support
75
75
  the normal default plus unmodified and safeguarded Hartung-Knapp variants.
76
76
  Eligible random-effects fits include an HTS prediction interval.
77
77
 
78
+ Generic analyses accept exactly one of `variance=` or `standard_error=`.
79
+ Standard errors are squared internally and the conversion is recorded in the
80
+ result provenance.
81
+
78
82
  Sparse binary behavior is explicit: study-level and Mantel-Haenszel continuity
79
83
  corrections are separate, relative-effect double-zero/double-all rows remain
80
84
  visible as exclusions, and RD exposes
@@ -125,18 +129,18 @@ are descriptive small-study-effect diagnostics, not proof of publication bias.
125
129
  The complete documentation is published at
126
130
  [zhaoboding.github.io/PyMetaAnalysis](https://zhaoboding.github.io/PyMetaAnalysis/).
127
131
 
128
- - [Installation](docs/installation.md)
129
- - [Getting started](docs/getting-started.md)
130
- - [Input data and row decisions](docs/guides/input-data.md)
131
- - [Generic](docs/guides/generic-effects.md), [binary](docs/guides/binary-outcomes.md), and [continuous](docs/guides/continuous-outcomes.md) guides
132
- - [Choosing methods](docs/guides/method-selection.md) and [statistical formulas](docs/methods/statistical-methods.md)
133
- - [Sensitivity analysis](docs/guides/sensitivity-analysis.md) and [plotting](docs/guides/plotting.md)
134
- - [Public API](docs/reference/api.md), [result objects](docs/reference/results.md), and [report schema](docs/reference/report-schema.md)
135
- - [Validation strategy](docs/validation.md) and [scope/limitations](docs/limitations.md)
136
- - [Citation guidance](docs/citation.md)
137
- - [R `meta`/`metafor` mapping](docs/guides/r-interoperability.md)
138
-
139
- An executable [end-to-end notebook](examples/quickstart.ipynb) uses synthetic
132
+ - [Installation](https://zhaoboding.github.io/PyMetaAnalysis/installation/)
133
+ - [Getting started](https://zhaoboding.github.io/PyMetaAnalysis/getting-started/)
134
+ - [Input data and row decisions](https://zhaoboding.github.io/PyMetaAnalysis/guides/input-data/)
135
+ - [Generic](https://zhaoboding.github.io/PyMetaAnalysis/guides/generic-effects/), [binary](https://zhaoboding.github.io/PyMetaAnalysis/guides/binary-outcomes/), and [continuous](https://zhaoboding.github.io/PyMetaAnalysis/guides/continuous-outcomes/) guides
136
+ - [Choosing methods](https://zhaoboding.github.io/PyMetaAnalysis/guides/method-selection/) and [statistical formulas](https://zhaoboding.github.io/PyMetaAnalysis/methods/statistical-methods/)
137
+ - [Sensitivity analysis](https://zhaoboding.github.io/PyMetaAnalysis/guides/sensitivity-analysis/) and [plotting](https://zhaoboding.github.io/PyMetaAnalysis/guides/plotting/)
138
+ - [Public API](https://zhaoboding.github.io/PyMetaAnalysis/reference/api/), [result objects](https://zhaoboding.github.io/PyMetaAnalysis/reference/results/), and [report schema](https://zhaoboding.github.io/PyMetaAnalysis/reference/report-schema/)
139
+ - [Validation strategy](https://zhaoboding.github.io/PyMetaAnalysis/validation/) and [scope/limitations](https://zhaoboding.github.io/PyMetaAnalysis/limitations/)
140
+ - [Citation guidance](https://zhaoboding.github.io/PyMetaAnalysis/citation/)
141
+ - [R `meta`/`metafor` mapping](https://zhaoboding.github.io/PyMetaAnalysis/guides/r-interoperability/)
142
+
143
+ An executable [end-to-end notebook](https://github.com/ZhaoboDing/PyMetaAnalysis/blob/main/examples/quickstart.ipynb) uses synthetic
140
144
  data to demonstrate analysis, provenance, reporting, sensitivity, and plotting.
141
145
 
142
146
  Build the complete site locally with:
@@ -154,16 +158,22 @@ edge cases, and committed R `metafor` reference fixtures. CI covers Python
154
158
  distribution builds.
155
159
 
156
160
  This is independent cross-software validation, not a formal external
157
- statistical audit. See [validation](docs/validation.md) for exact coverage.
161
+ statistical audit. See
162
+ [validation](https://zhaoboding.github.io/PyMetaAnalysis/validation/) for exact
163
+ coverage.
158
164
 
159
165
  ## Contributing
160
166
 
161
- See [CONTRIBUTING.md](CONTRIBUTING.md) and the full
162
- [development guide](docs/development.md). Statistical changes require formula
167
+ See
168
+ [CONTRIBUTING.md](https://github.com/ZhaoboDing/PyMetaAnalysis/blob/main/CONTRIBUTING.md)
169
+ and the full
170
+ [development guide](https://zhaoboding.github.io/PyMetaAnalysis/development/).
171
+ Statistical changes require formula
163
172
  documentation, boundary tests, and an independent comparison where available.
164
173
 
165
- Security-sensitive reports should follow [SECURITY.md](SECURITY.md).
174
+ Security-sensitive reports should follow
175
+ [SECURITY.md](https://github.com/ZhaoboDing/PyMetaAnalysis/blob/main/SECURITY.md).
166
176
 
167
177
  ## License
168
178
 
169
- [MIT](LICENSE)
179
+ [MIT](https://github.com/ZhaoboDing/PyMetaAnalysis/blob/main/LICENSE)
@@ -20,9 +20,10 @@ See [installation](installation.md) for all extras and development checks.
20
20
 
21
21
  ## 2. Prepare a DataFrame
22
22
 
23
- The generic API expects one effect estimate and one strictly positive sampling
24
- variance per study. A standard error is not a variance; square it before using
25
- it as `variance=`.
23
+ The generic API expects one effect estimate and either a strictly positive
24
+ sampling variance or standard error per study. Supply `variance=` or
25
+ `standard_error=`; standard errors are squared internally and recorded in
26
+ provenance.
26
27
 
27
28
  ```python
28
29
  import pandas as pd
@@ -1,8 +1,8 @@
1
1
  # Generic effects
2
2
 
3
3
  Use `meta_analysis()` when each study already has an effect estimate and its
4
- sampling variance. This is the generic inverse-variance workflow; it does not
5
- calculate an outcome-specific effect size.
4
+ sampling variance or standard error. This is the generic inverse-variance
5
+ workflow; it does not calculate an outcome-specific effect size.
6
6
 
7
7
  The pooling, tau-squared, confidence-interval, prediction-interval, and
8
8
  heterogeneity equations are specified under
@@ -49,22 +49,29 @@ result = ma.meta_analysis(
49
49
  All array-like arguments must be one-dimensional and have equal lengths.
50
50
  Generated row labels start at zero when no study labels are supplied.
51
51
 
52
- ## Variance, not standard error
52
+ ## Variance or standard error
53
53
 
54
- `variance=` must contain finite, strictly positive sampling variances. Convert
55
- reported standard errors explicitly:
54
+ Supply exactly one of `variance=` or `standard_error=`. Both must contain
55
+ finite, strictly positive values. A reported standard-error column can be used
56
+ directly:
56
57
 
57
58
  ```python
58
- data["vi"] = data["standard_error"] ** 2
59
+ result = ma.meta_analysis(
60
+ data,
61
+ effect="yi",
62
+ standard_error="standard_error",
63
+ )
59
64
  ```
60
65
 
61
- Do not pass confidence-interval widths or study sample variances unless they
62
- have first been converted to the sampling variance of the effect estimate.
66
+ PyMetaAnalysis squares standard errors internally, retains both uncertainty
67
+ columns in the study table, and records the conversion in provenance. Do not
68
+ pass confidence-interval widths or study sample standard deviations as
69
+ standard errors; they describe different quantities.
63
70
 
64
71
  ## Missing values
65
72
 
66
- The default `missing="raise"` rejects missing effects or variances. To
67
- retain incomplete rows as structured exclusions:
73
+ The default `missing="raise"` rejects missing effects or values in the selected
74
+ uncertainty input. To retain incomplete rows as structured exclusions:
68
75
 
69
76
  ```python
70
77
  result = ma.meta_analysis(
@@ -30,6 +30,8 @@ result = ma.meta_analysis(
30
30
 
31
31
  Column names must exist. Array-like inputs may be mixed with DataFrame columns,
32
32
  but every array must contain exactly one value for every DataFrame row.
33
+ Generic analyses require exactly one uncertainty input: `variance=` or
34
+ `standard_error=`.
33
35
 
34
36
  ## Array-like inputs
35
37
 
@@ -38,7 +40,7 @@ Lists, tuples, pandas Series, and one-dimensional NumPy arrays are accepted:
38
40
  ```python
39
41
  result = ma.meta_analysis(
40
42
  effect=[0.1, 0.3, -0.2],
41
- variance=[0.02, 0.04, 0.03],
43
+ standard_error=[0.14, 0.20, 0.17],
42
44
  study=["A", "B", "C"],
43
45
  )
44
46
  ```
@@ -38,6 +38,10 @@ document.
38
38
  Each `TransformationRecord` has a stable name, resolved parameters, and the
39
39
  original row IDs it affected.
40
40
 
41
+ Generic analyses supplied through `standard_error=` record a
42
+ `standard_error_to_variance` transformation for every non-missing standard
43
+ error that was squared before fitting.
44
+
41
45
  Binary analyses record:
42
46
 
43
47
  - the OR, RR, or RD effect-size transformation and its scales;
@@ -139,7 +139,19 @@ rma.uni(
139
139
  ```
140
140
 
141
141
  The corresponding R `meta` configuration starts from standard errors rather
142
- than variances:
142
+ than variances. PyMetaAnalysis can accept that uncertainty column directly as
143
+ `standard_error=`; no manual squaring step is required:
144
+
145
+ ```python
146
+ result = ma.meta_analysis(
147
+ studies,
148
+ effect="yi",
149
+ standard_error="sei",
150
+ model="random",
151
+ tau2_method="REML",
152
+ ci_method="hartung_knapp_adhoc",
153
+ )
154
+ ```
143
155
 
144
156
  ```r
145
157
  metagen(
@@ -82,9 +82,11 @@ lists unsupported methods explicitly.
82
82
 
83
83
  ## Project status
84
84
 
85
- PyMetaAnalysis 0.1.0 is the initial public release and has not undergone a
86
- formal external statistical audit. Pin the package version for consequential
87
- work and independently check important analyses. See the repository
85
+ PyMetaAnalysis 0.2.1 fixes documentation and repository links in the PyPI
86
+ project description. Version 0.2.0 added direct generic standard-error input
87
+ to the initial public analysis scope. The project has not undergone a formal
88
+ external statistical audit. Pin the package version for consequential work
89
+ and independently check important analyses. See the repository
88
90
  [changelog](https://github.com/ZhaoboDing/PyMetaAnalysis/blob/main/CHANGELOG.md)
89
91
  and [contribution guide](development.md). For manuscripts and archived
90
92
  analyses, see [citing PyMetaAnalysis](citation.md).
@@ -27,8 +27,7 @@ deferred functionality explicit.
27
27
  - multilevel, multivariate, network, dose-response, diagnostic-accuracy, or
28
28
  individual-participant-data meta-analysis;
29
29
  - robust variance estimation or dependent-effect clustering;
30
- - single proportions, incidence rates, correlations, survival outcomes, or
31
- generic standard-error input helpers;
30
+ - single proportions, incidence rates, correlations, or survival outcomes;
32
31
  - Knapp-Hartung variants beyond the two documented choices;
33
32
  - alternative prediction-interval methods;
34
33
  - formal funnel-asymmetry, trim-and-fill, selection-model, or publication-bias
@@ -70,7 +69,7 @@ workflow must version those artifacts separately.
70
69
 
71
70
  ## Stability and review status
72
71
 
73
- The package version is currently `0.1.0`. Public APIs and serialized schemas
72
+ The package version is currently `0.2.1`. Public APIs and serialized schemas
74
73
  may change during the 0.x series. Pin versions in analysis environments and
75
74
  inspect changelog/schema updates before upgrading.
76
75
 
@@ -47,7 +47,8 @@ ma.meta_analysis(
47
47
  data=None,
48
48
  *,
49
49
  effect,
50
- variance,
50
+ variance=None,
51
+ standard_error=None,
51
52
  study=None,
52
53
  subgroup=None,
53
54
  model="random",
@@ -66,7 +67,8 @@ Fits generic study effects using inverse-variance pooling.
66
67
  | --- | --- |
67
68
  | `data` | Optional DataFrame used by string-valued input selectors |
68
69
  | `effect` | Study effect column or array on a consistent model scale |
69
- | `variance` | Finite, strictly positive sampling variances—not standard errors |
70
+ | `variance` | Finite, strictly positive sampling variances |
71
+ | `standard_error` | Finite, strictly positive standard errors, squared internally |
70
72
  | `study` | Optional label column/array; defaults to index or row number |
71
73
  | `subgroup` | Optional subgroup column/array |
72
74
  | `model` | `"common"` or `"random"` |
@@ -77,6 +79,10 @@ Fits generic study effects using inverse-variance pooling.
77
79
  | `atol` | Strictly positive iterative-estimator tolerance |
78
80
  | `max_iter` | Positive iterative-estimator iteration limit |
79
81
 
82
+ Supply exactly one of `variance` or `standard_error`. The selected argument
83
+ supports the same DataFrame-column and array-like conventions as `effect`.
84
+ Standard-error conversion is recorded in result provenance.
85
+
80
86
  ## `meta_binary()`
81
87
 
82
88
  ```text
@@ -44,7 +44,7 @@ and its
44
44
  `CITATION.cff`. Hatchling reads the package version dynamically from
45
45
  `_version.py`.
46
46
  4. Move the relevant `CHANGELOG.md` entries from `Unreleased` to a dated
47
- heading such as `## 0.1.0 - 2026-07-15`.
47
+ heading such as `## X.Y.Z - YYYY-MM-DD`.
48
48
  5. Run the complete validation suite.
49
49
 
50
50
  The local consistency check is:
@@ -56,7 +56,7 @@ python tools/check_release.py
56
56
  For a proposed tag, add:
57
57
 
58
58
  ```console
59
- python tools/check_release.py --tag v0.1.0
59
+ python tools/check_release.py --tag vX.Y.Z
60
60
  ```
61
61
 
62
62
  The tag check rejects development versions, version mismatches, and releases
@@ -90,8 +90,8 @@ commit:
90
90
  ```console
91
91
  git switch main
92
92
  git pull --ff-only
93
- git tag -a v0.1.0 -m "PyMetaAnalysis 0.1.0"
94
- git push origin v0.1.0
93
+ git tag -a vX.Y.Z -m "PyMetaAnalysis X.Y.Z"
94
+ git push origin vX.Y.Z
95
95
  ```
96
96
 
97
97
  The release workflow then:
@@ -11,7 +11,7 @@ requires-python = ">=3.10"
11
11
  license = "MIT"
12
12
  license-files = ["LICENSE"]
13
13
  authors = [
14
- { name = "PyMetaAnalysis contributors" },
14
+ { name = "Zhaobo Ding", email = "ding.zb@yahoo.com" },
15
15
  ]
16
16
  maintainers = [
17
17
  { name = "Zhaobo Ding", email = "ding.zb@yahoo.com" },
@@ -1,3 +1,3 @@
1
1
  """Single source of truth for the package version."""
2
2
 
3
- __version__ = "0.1.0"
3
+ __version__ = "0.2.1"