はじめに
あめましておめでとうございます. 2026年の元旦、風邪と共に目覚めました.
最高で最強な2026年元旦が、最悪なふとん寝たきり生活になったのはなにが原因だったのか?
ふざけんなよという逆恨みではないですが、Fitbitバイタルデータをつかって、感染の兆候がなかったかをAIをつかって分析しようと思いました.
Fitbitバイタルデータによる感染検出
まずは風邪の早期検出に使えそうな指標を調査.
- SpO2(血中酸素飽和度): 呼吸器感染症の研究1によると、SpO2は感染初期の重要な指標とされている
- HRV(心拍変動): 心拍変動は免疫系のストレス指標として研究されている2:
- 呼吸数: 気道感染の指標として知られている:
- 炎症により呼吸数が増加
- 皮膚温:
- 環境温度の影響が非常に大きい
- 単独での評価は困難
- 安静時心拍数
- 発熱時に上昇するとされているが個人差が大きい
- 運動、ストレス、睡眠の質など多要因の影響を受ける
シナリオとしては、まずは感染直後にSpO2に異常が現れる. 続いて、感染後24-72時間にHRV低下、呼吸数上昇. 発症半日前に、深部体温上昇、皮膚温上昇、心拍数上昇.
個別ケース分析
environments
- 分析期間: 2025年12月18日〜2026年1月1日
- ベースライン: 2025年11月18日〜12月17日(30日間)
- データソース: Fitbit API
- 分析ツール: Python 3.x, pandas, matplotlib, numpy
使用したデータ
Fitbitから以下のバイタルデータを取得した:
| 指標 | 説明 |
|---|---|
| HRV (Heart Rate Variability) | 心拍変動。自律神経系のストレス指標 |
| SpO2 | 血中酸素飽和度。呼吸器系の健康指標 |
| 皮膚温 | ベースラインからの相対温度 |
| 安静時心拍数 | 通常、発熱時に上昇 |
| 呼吸数 | 1分間の呼吸回数 |
異常値検出アルゴリズム
標準化スコア(z-score)を計算し、ベースラインからの偏差を評価した。
z_score = (current_value - baseline_mean) / baseline_std
if abs(z_score) > 1.5:
# 軽度の異常
if abs(z_score) > 2.0:
# 重度の異常
バイタルデータに現れた風邪の兆候
症状発現前の約2週間のデータを詳細に分析した結果、段階的な免疫応答のパターンが浮かび上がった。
12月27-28日: SpO2の異常な低下
| 日付 | SpO2 | ベースライン | 偏差 | z-score |
|---|---|---|---|---|
| 12/27 | 94.3% | 96.7% | -2.4% | -4.0σ |
| 12/28 | 94.8% | 96.7% | -1.9% | -3.2σ |
これが決定的な証拠だった。
SpO2(血中酸素飽和度)が2%以上低下するのは、健康な人では異常だ。標準化スコアで見ると-4.0σ——これは統計的にほぼありえない水準の低下である。
12月31日: 本格的な免疫応答の開始(症状の1日前)
ここで、明確な免疫応答のサインが出現した。
| 指標 | 実測値 | ベースライン | z-score |
|---|---|---|---|
| HRV | 29.1ms | 35.9ms | -1.5σ |
| 呼吸数 | 16.6回/分 | 15.1回/分 | +3.0σ |
HRVの低下
HRV(心拍変動)が急激に低下した。これは自律神経系がストレス状態にあることを示す信頼性の高い指標だ。環境要因の影響を受けにくく、免疫系が活性化すると一貫して低下する。
呼吸数の増加
同時に、呼吸数が+3.0σ増加。これは気道への影響が本格化している証拠だ。
この時点で、まだ自覚症状はゼロだった。
1月1日: 症状発現
そして、元旦の朝——37.2度の発熱と喉の痛みで目が覚めた。
| 指標 | 実測値 | ベースライン | z-score |
|---|---|---|---|
| HRV | 26.4ms | 35.9ms | -2.0σ |
| 皮膚温 | +2.1°C | -0.2°C | +2.9σ |
| 呼吸数 | 16.0回/分 | 15.1回/分 | +1.6σ |
複数の指標が同時に異常値を示した。これが全身性の免疫応答、すなわち「症状発現」のサインだ。
感染タイミングの推定
潜伏期間からの逆算
症状発現日(1/1)と最も早期の兆候(12/27)から逆算すると、潜伏期間は5-6日。
| ウイルス | 潜伏期間 | 適合度 |
|---|---|---|
| RSウイルス | 4-6日 | ⭐⭐⭐ 高 |
| インフルエンザ | 1-4日 | ⭐⭐ 中 |
| コロナウイルス(普通感冒) | 2-4日 | ⭐⭐ 中 |
| ライノウイルス | 1-3日 | ⭐ 低 |
RSウイルスの可能性が最も高いと推定された。
SpO2低下のタイミングから推定
SpO2低下は感染後12-48時間で出現することが知られている。12/27にSpO2が94.3%に低下していたことから、感染は12/26または12/27と推定される。
行動履歴との照合
感染リスクの高かった活動を振り返ってみた:
- 12/26-28: 2泊3日の瞑想リトリート参加(咳をしている参加者あり)
- 密閉空間での長時間接触
12/26または12/27の集団活動での感染が最も可能性が高いと結論づけた。
結論: 推定感染日
感染日: 2025年12月26日または12月27日
感染源: 屋内集団活動(咳をしている人からのエアロゾル感染)
潜伏期間: 5-6日間
推定ウイルス: RSウイルス(最有力)
回復の指標トラッキング
さて、感染日とその原因を特定できたので、あとは休息して回復を待つだけだ. どのような状態だと、回復できたといえるのか、これも指標があるのか調べてみたところ、感染検出と同じ指標がベースラインに戻ればいいらしい.
- HRV(心拍変動): 免疫系ストレスの解消、自律神経系の正常化
- SpO2(血中酸素飽和度): 呼吸器系の回復
- 安静時心拍数: 炎症反応の消失
- 呼吸数: 気道の正常化
- 皮膚温: 発熱の完全な消失
- 睡眠の質: 回復プロセスの全体的評価
特にHRVとSpO2は客観性が高く、自覚症状がなくなっても免疫系が完全に回復していない場合を検出できる. もちろん深部体温が平熱に戻ることも重要.
おわりに
Fitbitのバイタルデータを遡及的に分析することで、症状発現の5日前に風邪の兆候を検出できることが示された。
そもそも、何十年も生きていたわたしの今までのの知識だと、体温計で熱が37度あるところから風邪にかかったと思っていた. しかし、実際にはSpO2やHRVに予兆が現れるということがおもしろいと思った.
風邪をひいたが、転んでもただでは立ち上がらない. この苦しみをクリエイティブに乗り越えて学びを得た. 逆恨みの原因推定ではない.
注: 本記事は個人的な実験と分析に基づくものであり、医学的アドバイスではありません。体調に不安がある場合は、医療機関を受診してください。
-
Early Detection of Silent Hypoxia in Covid-19 Pneumonia Using Smartphone Pulse Oximetry (2020) - COVID-19患者におけるSpO2モニタリングの有用性を示した研究。スマートフォンベースのパルスオキシメータが医療グレード機器と96-99%の相関を示した。 ↩︎
-
Heart rate variability and inflammation: A meta-analysis of human studies (Williams et al., 2019) - 51の研究をメタ分析し、HRVと炎症マーカーの負の相関を確認。HRVが免疫系のバイオマーカーとして活用できることを示した。 ↩︎