Rを使った体調の予測~うつ日記の活用~
体調は良くはなっているものの、波があって、朝起きてみたら調子が悪くて起き上がれないって時もたまにあります。
予め体調の変化が予測できれば、仕事の予定をずらすとか、予め最低限は終わらせておくとか、休養を多めに取って体調の波を小さくするなど、対策を取ることができるはずです。
前回は体調の変化を可視化して、周期性がありそうなことがわかりました。
今回は、うつ日記にたまってきたデータを用いて、体調の予測ができないか試してみることにしました。
予測の問題と考えた場合、データを予測する対象と、予測するための手掛かりとに分ける必要があります。
予測する対象は、目的変数と呼ばれるのですが、例えば体調の悪さにということになります。
手掛かりは、説明変数と呼ばれますが、今回は、仕事の負荷や出来事、曜日や天候なんかになります。
○体調の悪さを表すデータ(目的変数になるようなもの)
・調子の良い悪い 5段階の整数
・憂鬱感 3段階の整数
・不安感 3段階の整数
・気が重い 3段階の整数
・つらい、しんどい 3段階の整数
・倦怠感 3段階の整数
・気力 5段階の整数
・日中の眠気 4段階の整数
・早く目が覚める 有無の2値
・朝起きられない 3段階の整数
・頭痛 3段階の整数
・腹痛 3段階の整数
・活動具合 4段階の整数
体調の良い悪いや気力のようなものは、プラスとマイナスがあるため段階数が多くなっています。
○調子の悪さを予測する手掛かりになりそうなデータ(説明変数として使えそうなもの)
・仕事をした 6段階の整数
・つぶやき、日記のデータ 文字列
・起床時間 時刻
・就寝時間 時刻
・簡単な活動内容 文字列
・曜日 7つのカテゴリデータ
・処方箋のデータ 薬の種類と量
・天気 幾つかのカテゴリデータ
・気温 実数
・湿度 パーセント
・気圧 整数
・風速 実数
・風向 0~359の整数
・雲の割合 パーセント
・体調を記録した時の緯度と経度 0~359の実数
Rで簡単に使えそうだったので、ARIMAモデルを用いて、予測を行ってみます。
まずはベースラインとして、体調の良い悪いの過去のデータのみから、未来の体調の良い悪いをどの程度予測できるか試してみます。
3月1日~7月11日 のデータを、3月1日(1日目)~6月2日(94日目)とそれ以降に分けて、6月2日までのデータでモデルを作成し、その後の39日の体調を予測できるか試してみました。
とりあえずは、auto.arimaという関数を使って、予測モデルを作ってみました。
以下のコマンドで予測モデルを作成しました。
library(forecast)
feel <- read.table(“feel5.txt”)
model <- auto.arima(feel, ic=“aic", trace=T, stepwise=F, approximation=F, start.p=0, start.q=0, start.P=0, start.Q=0)
以下のコマンドで予測結果を取得しました。
forecast(model, level = c(50,95), h = 39)
モデルのパラメータは(1,0,0)になったが、予測が良くないみたいでした。
自分の体調の波は、18日周期があるみたいでしたので、今度はauto.arimaに頼らず、適当にパラメータを決めて、モデルを作成してみました。
以下のコマンドで予測モデルを作成しました。
model <- arima(feel, order=c(18,0,1))
こうして作ったモデルで39日間の予測をして、実際の体調と比較してみたところ、上がり下がりの傾向が結構一致しているようでした。
○実測の特徴
・101日目に凄く悪い
・118日~120日の間、凄く悪い
○予測結果の特徴
・100日目で最も悪く、101日目もかなり悪い
・その後回復して、111日目で一旦落ちて、回復
・119日目に向けて落ちて、120日目は一旦上がり121日目に少し落ちてから上がる
まぁ、元々規則性が強かったってのはあるけど、傾向は結構予測できている感じ。
この方法による予測がある程度参考になるとして、私の明日からの体調はいったいどうなるのか、予測してみました。
これによると、今週は金曜まで比較的低調で、木曜日に特に調子が悪くなるとのことです。
なんか、今週の占いみたいな感じがしてきましたが。
これを見ながら、一週間を過ごしてみました。
結果はと言うと、微妙です。
木曜日の体調は、良くはけど、凄く悪いってほどでもなく、どちらかと言えば悪いというぐらいでした。
まぁ、水曜日よりは悪くなっていましたので、調子の上がり下がりの傾向で言えば当たってると言えなくもないのかもしれません。
金曜日には少し回復しましたし。
まぁ、元々、体調の良い悪いのデータだけで予測するのは無理があるとは思ってたんですけどね。
途中で処方も変わってますし。
ここをベースラインとして、他のデータと組み合わせることで、どこまで精度を上げられるかですね。
他のデータを組み合わせるためには、Rの使い方ももっと勉強しないといけません。
それはそれとして、予測結果をもっと簡単に出せるようにしたいです。
うつ日記に、データをサーバへ送る機能を追加したい。
家のパソコンをWebサーバにして、WebAPIを作って予測結果を返すようにすれば、気軽に予測を出して、1日ごとに予測精度を評価できますね。
ということで、今後の課題は、以下のような感じになります。
・体調の良い悪い以外のデータも活用して予測精度を上げること。
・ARIMAモデルのパラメータをもっとちゃんと決めて最適化すること。
・アプリに予測用のサーバとデータをやり取りする機能を実装すること。
うつ日記 ~うつを克服するための日記~
https:/