⚠️ Medical disclaimer

WeatherOrNot is an informational tool only. It is not a medical device, does not provide diagnoses, and is not a substitute for professional medical advice, diagnosis, or treatment. Risk scores, sensitivity percentages, and personal multipliers are statistical estimates derived from self-reported data and publicly available weather information. They reflect patterns in your own logged history and should not be used to make clinical decisions without consulting a qualified healthcare provider.

Individual results vary. Correlation does not imply causation. The model accuracy metrics shown in the app describe how well your historical weather data predicts your historical symptom scores — they do not predict future health outcomes.

How WeatherOrNot works

WeatherOrNot builds a personal weather sensitivity profile by correlating the weather conditions at the time you log a symptom rating with the score you reported. Over time, this produces a statistical picture of which weather patterns tend to coincide with better or worse days for you individually.

All computation runs against your own logged data only. No data is pooled across users to produce your personal profile.

1. Symptom score (1–5)

Each log entry captures a self-reported score on a 1–5 integer scale:

ScoreLabelMeaning
1GreatMinimal or no symptoms; functioning well
2GoodMild symptoms; manageable day
3OkayModerate symptoms; some limitation
4PoorSignificant symptoms; meaningful limitation
5RoughSevere symptoms; significant impairment

Higher scores represent worse symptom days. All statistical analysis treats score as a continuous numeric variable (1.0–5.0) rather than an ordered category.

2. Weather snapshot at log time

When you log a symptom with location enabled, the app captures the current weather conditions at your coordinates via the Open-Meteo API. The following variables are stored per rating:

VariableUnitSource
temp_f°FOpen-Meteo surface temperature
pressure_inhginHgOpen-Meteo surface pressure (msl), converted from hPa
risk_score0–100WeatherOrNot composite risk score (see §3)

Ratings logged without location do not have a weather snapshot and are excluded from correlation analysis (they still count toward period averages and stage progression).

3. Base weather risk score (0–100)

The base risk score is a composite index computed from current weather conditions, specifically tuned for dysautonomia / POTS sensitivity research. It is computed as a weighted sum of normalized weather factors:

// Pseudocode — actual weights tuned empirically

risk_score =

w1 × pressureAnomaly

+ w2 × diurnalTempSwing

+ w3 × humidityStress

+ w4 × heatIndex

+ w5 × rapidPressureChange // 3-hour delta

+ w6 × stormProximity

clamped to [0, 100]

The base risk score represents population-level POTS weather risk. It does not account for individual sensitivity — that is what the personal multiplier (§5) adjusts for.

4. Pearson correlation coefficient

For each weather variable X and your symptom scores Y, the app computes the Pearson product-moment correlation coefficient r:

r(X, Y) = Σ[(xᵢ − x̄)(yᵢ − ȳ)]

──────────────────────────

√[Σ(xᵢ − x̄)² · Σ(yᵢ − ȳ)²]

Where and ȳ are the means of X and Y respectively. The result is a value between −1 and +1:

r = −1
Perfect inverse
r = 0
No correlation
r = +1
Perfect positive

For pressure, a negative r is expected (lower pressure → higher symptom score). For base risk score, a positive r is expected. The sensitivity % shown in the app converts r to a 0–100 scale:

// For variables where lower value = worse (e.g. pressure):

sensitivity% = clamp(−r × 100, 0, 100)


// For variables where higher value = worse (e.g. risk score):

sensitivity% = clamp(r × 100, 0, 100)

A minimum of 10 ratings with weather snapshots is required before correlation is computed. Fewer than 4 data points in either variable returns null (shown as "—").

5. Personal risk multiplier

The personal multiplier describes how much more (or less) weather-sensitive you are compared to the assumed population average. It is computed as:

// r_user: Pearson(risk_score, symptom_score) for this user

// r_baseline: assumed population average correlation = 0.30

// (based on published POTS weather sensitivity literature)


multiplier = clamp(r_user / r_baseline, 0.50, 2.50)

MultiplierInterpretation
< 0.95Less weather-sensitive than average
0.95–1.05About average weather sensitivity
1.05–1.30Slightly more sensitive than average
> 1.30Significantly more sensitive than average

The baseline correlation of 0.30 is a conservative estimate. As more research is published on POTS and weather sensitivity, this value may be updated. The multiplier is applied to the base risk score when generating personalised risk estimates on the main weather screen.

6. Model accuracy (R²)

Model accuracy is reported as R² (the coefficient of determination), computed as the square of the Pearson correlation between base risk score and your symptom scores:

R² = r(risk_score, symptom_score)²

R² represents the proportion of variance in your symptom scores that is statistically explained by the base weather risk score. An R² of 0.40 means that 40% of the variation in your symptom scores on logged days is associated with weather risk variation.

R² does not imply that weather causes your symptoms. Many other factors (sleep, stress, hydration, activity) influence symptom scores and are not captured in the weather model.

7. Data quality stages

The app tracks a data quality stage to communicate how reliable the correlations are:

StageTriggerCorrelation reliability
Bootstrapping< 14 total ratingsInsufficient — no correlations shown
Learning14–49 total ratingsEmerging — treat as directional only
Calibrated50+ total ratingsReliable for general pattern detection

These thresholds are intentionally conservative. Pearson correlation becomes statistically meaningful only with sufficient sample size. The app does not report p-values or confidence intervals; users and clinicians should treat all correlation values as exploratory rather than confirmatory.

8. Logging cooldowns

To preserve data integrity and prevent duplicate entries from skewing averages, the app enforces a minimum gap between ratings for the same period:

PeriodCooldownRationale
Morning6 hoursOne representative morning assessment per day
Evening6 hoursOne representative evening assessment per day
Post-meal2 hoursMinimum interval between distinct meals
Flare1 hourAllows frequent capture during acute episodes

These limits are enforced server-side and cannot be bypassed by the client.

9. Limitations & known caveats

  • Self-report bias: symptom scores reflect subjective perception and may be influenced by expectation, mood, or recall.
  • Single weather snapshot: each rating captures weather at one moment. Conditions may have changed significantly during the day.
  • Confounding variables: sleep quality, hydration, stress, medications, and activity level all affect symptoms and are only partially captured via the context tags.
  • Small sample sizes: for most users, the Calibrated stage (50+ ratings) is the minimum for directional confidence. Clinical-grade insight would require hundreds of observations.
  • Population baseline assumption: the r = 0.30 baseline correlation used to anchor the personal multiplier is an estimate. Individual baselines vary and this figure may be revised as more research becomes available.
  • No humidity capture (current): humidity is not currently stored at log time. This limits the humidity sensitivity bar, which is derived from the base risk score rather than direct measurement.
  • Causality: statistical correlation between weather and symptoms does not establish that weather causes symptom changes.

10. Reproducibility

The full correlation implementation is available in lib/correlation.ts in the WeatherOrNot codebase. Clinicians or researchers who wish to verify the calculations can review or reproduce the Pearson computation against any exported CSV data set (available from the Provider Report feature).

If you believe there is an error in the methodology or wish to suggest improvements, please contact us at hello@weatherornot.app.

WeatherOrNot Methodology v1.0 · Last updated March 2026

This document is provided for transparency and does not constitute medical or scientific publication.

← Back to dashboard
Advertisement
v1.0.2