• タグ別アーカイブ: JMP超入門
  • 見習うべきは台湾ではないか?

    Amzonでは,日常必需品の発送を優先しているとかで,先日,岩波新書編集部がTweetされてましたけど,書籍のような生活必需品でないものの在庫切れが目立ってきているようです.拙著も,現在両方とも在庫切れになっていて,『統計的問題解決入門』の方は,しばらく前から入荷時期未定になっていました.絶版になったわけではなく,実は,目出度く第3刷が増刷されたばかりなのです.流通が止まっている今は仕方ありませんね.連休中に勉強したいという方は,オーム社の直販を利用してくださいとのことです.第二刷では色々修正入れましたが,今回は大きな修正はありません.とはいえ,何点か変更した箇所もありますので,そのうちこの場でお知らせいたします.

    さて,今週は,先週の続きとしてAppleのMobility Trends Reportsを使って各国の比較をしてみたいと思います.


    最初に,データはAppleの特設サイトからCSVをダウンロードしてください.ここでは4月23日付けのデータを使います.先週と同じ手順でテータテーブルを作成してください.今回は,「国ごとの比較」という目的が明確なのでデータの層別化を先に実施します.具体的には「taransition_type_」の「walking」と 「geo_type_」の「country/region」のみ 取り出します.「transit」は欠けている国が多いので「walking」のみを対象としました.「driving」の方が外れ値が少ないのですが,国によって道路事情がかなり違うので,人間の活動の基本である「walking」を対象としました.何れにしても,「driving」もほぼ同じ挙動を示しているので問題はないと判断しています.更に,今回は国同士を比較したいので,「geo_type_」の「country/region」のみを抜き出します.

    そのためには「データフィルタ」で「geo_type_」と「taransition_type_」を選択して『追加』し,それぞれ「walking」「country/region」をcontrolキーを押しながら選択します.(Macではcommandキーを押します.)そして,サブセットとして別テーブルにすると63行のテーブルができるはずです.そこから「geo_type_」列と「taransition_type_」列は削除しても構いませんが,後日そのデータを見たときに,「geo_type_」と「taransition_type_」とが固定されていることがわかるように,「非表示,除外」しておく方が無難です.次に,先週と同じように「列の積み重ね」で全ての日にちの列を積み重ねます.「region」列には国の名前が入っているので,更にこれを基準として分割します.これで分析できるデーブルになりました.この次に何をやりますか?

    実は答えはありません.とにかく色々やるのが一番なのですが,自分の好きな「データ分析の周回コース」を確立しておくといいです.このデータでは,変数の正体がわかっているし,それぞれの分布はそれほど重要ではないので,いきなり多変量解析に着手してもいいと思います.因みにヒストグラムを描けば,個々の国のMobilityの度数がダブルピークとして観察できます.私の場合は,先ずは「多変量の相関」でしょうか.その上で「相関のクラスタリング」で大まかに多変量間の相関を見ます.

    どの国も活動量が時間経過とともに下がってきているという傾向は同じなので,この図のようにそれぞれはほぼ正の相関を示します.その中でも他と状況が異なっている国々が白っぽく表示されています.因みに,この図では「カラーテーマ」を「発散」の「寒色>暖色」に変更しています.完全相関の場合の色が「JMP標準』よりも濃いので,おそらく色弱の方にはこの方が見やすいはずです.

    試しに,「主成分分析」もやってみますが,やはり全体の傾向が同じなので,第一主成分のパワーが大きく(84.4%)なります.この図に示した4カ国が他と挙動が大多数の国と異なっています.日本は,対多数の中に埋もれてしまっていますが,青い矢印で示したように,第一,第二主成分の平面には乗らずやはり,少し異なった挙動と示しています.成分3が日本らしさになっているようですが,これが何を意味するのか..

    主成分分析では,何かありそうだと直観的に感じれば十分です.この違いを後続する分析で確認していきます.例えば「階層型クラスター分析」はとてもわかりやすい手法です.そのためには,今のテーブルを「転置」する必要があります.それには『転置する列』に全ての国を,『ラベル』に「日付」を割り当てて『OK』です.クラスター分析の設定は,すぐ分かると思いますので省略します.デフォルトではクラスターは7つに分割されますので,赤三角から「クラスターの保存」をしておきます.「クラスターの色分け」もしておきましょうか.

    非常に特徴的な国が見つかりましたか?因みにそれぞれのクラスターの平均の「Mobility」を折れ線グラフで描いたのが冒頭のグラフです.このグラフを参考にして,各クラスターの特徴を上げていきます.

    クラスター1(対岸の火事だったのが,飛び火して現在もロックダウン継続中)
    代表国はフランス,イタリア,この中には,ほぼ収束に向かっているニュージーランドもあります.

    クラスター2 (やはり対岸の火事と思ったか,えらい活動的だったのが数日の間に活動停止の事態に.現在もロックダウン継続中)
    代表国はスペイン.

    クラスター3 (早くから活動停止で延焼を阻止,現在も継続中)
    ここには,香港,韓国,シンガポールの3つの国しかありません.いずれの国もうまくやっていると評価されていますが,シンガポールでは外国人労働者の感染が増えて再度感染が数増えている状況です.何れにしても,うまくやってこれたのは早い段階から活動を抑えたことに加え,これらの国では日本ではできない人権侵害が功を奏したとも言えます.それを恐れた精神的なロックダウンの影響がこのクラスターのMobilityに出ているのではないでしょうか.日本の法体制のもとではこれらの国を手本にすることはできません.

    クラスター4(大丈夫なの?完全に活動停止中.)
    マカオは異彩を放っていますね.メディアがどこどこどこの国をお手本にすべきとか言ってますが,マカオこそコロナ対策では最もうまくいっている国です.おそらく,中国という国を良く知っているからこそ早い段階で対策ができたのだろうと思っています.ただ,人口も高々70万足らずの国で,産業構造も全く異なるので日本が手本とするのは難しいところです.

    クラスター5と6(対岸の火事が飛び火して活動を下げていったけど,徐々に活動開始に向かっている.)
    似ているので5と6はまとめましたが,代表国はクラスター6がロシア,オーストラリア,6がアメリカ,イギリス,ドイツといった国々です.イギリスは当初から集団免疫に言及していましたし,スウェーデンもこの戦略です.この先どうなっていきますでしょうか.

    クラスター7(何考えてんだ?)
    ここには日本と台湾しかないですが,基本的に活動量はあまり急激には下がっていません.台湾はうまくやっていると思っていたので意外でしたが,やはり中国という国を良く知っているので早い段階で独自の対策を立てられたのかなと.因みに日本と台湾を比べるとこんな感じです.

    日本は三連休中日をピークとするMobolityの増加が特徴的ですね.気が緩んだとか言われてますが,通常の週末とは変わりません.むしろ,その前後で周期が乱れていることに特徴があります.おそらく外出自粛要請を予期した,買い物に出かけた人々の影響でしょうか.日本は災害が多いこともあって,どうも私たちはアワアワしすぎのような気がします.この点,台湾は周期が乱れていないのが見事です.3月28日のピークが少しシフトしてますが,おそらく翌日の青年節(旧革命先烈紀念日)の影響でしょうか.私たち日本も台湾を見習ってもっと冷静に行動すべきではないか.そう思いましたけれど,皆さんならこのデータをどう考察しますか?機会があれば,同じデータを前にJMPユーザーでオンラインミーティングもしたいですね.

    もちろん,これは現時点での結果です.時間経過とともにまた別のクラスターを形成するはずです.今後の成り行きをデータをもとに注視していきたいと思います.

    それではまた.


  • 名古屋では外出自粛要請が無視されているのか?

    外出自粛要請の週末,いかがお過ごしでしょうか.自転車で遠乗りするには良い季節にはなってきましたが,ここ当面は控えて家に籠ることにしました.人と接触するわけではありませんが,事故でも起こせば医療リソースに負担をかけることになります.現時点では,最も避けるべき行動と判断しました.こんなときは,自宅でもできるデータ分析も趣味で良かったと思っています.最近では色々と不安な情報に振り回される毎日ですが,そんな中でもデータ分析の力を発揮して,少なくとも自分だけは正しい意思決定をしていこうと,そう考えています.皆様も,その結果をご家族や同僚など身近な人と共有して,できるだけ易しく説明してみることをお勧めします.その過程で,拙著でも強調した「視覚化」と「可視化」の違いが体感できるはずです.

    本日の記事も,基本的にJMP初心者を対象としますが,上級者の皆様とはグラフの背景を一緒に楽しんでまいりましょう.趣味のデータ分析はネタ探しから始めます.趣味ともなると電車内の広告を見てもネタになりますが,昨今ではとにかくネタには事欠きません.メディアリテラシーが身についてくると,データソースが定かでなければ,そもそも読むに値しない情報ということがわかってきますが,最近はソースが明確になっているものも多いようです.そこで,先ずは信頼できるメディアに掲載されているグラフを自分で描いてみることをお勧めします.例えば,最近こんな記事を目にしました.

    新型コロナの外出自粛要請を最も無視しているのは名古屋、アップルの移動データ解析サイトから判明

    データの出典もリンクされているので,それだけは良心的な記事と思います.

    このグラフをJMPで描いてみると,確かに名古屋のMobilityは他の都市よりも大きいようです.果たして名古屋では自粛要請が無視されているのでしょうか.このことを,JMPで確認してみます.データはAppleの特設サイトMobility Trends ReportsからCSVをダウンロードします.ここでは昨日ダウンロードしたデータを使いますが,このデータは毎日更新されているので皆さんは最新のデータをお使いください.それでは以下にグラフ作成の手順を書いていきますが,その前にどうすればいいのかを考えてみてください.

    1.ほとんどの場合,CSVは右クリックでJMPから開くのが一番早いです.特にこのような英語のデータは問題がないことが多いです.日本語のデータでは,文字化けするものもたまにありますが,その場合は,CSVを一度エクセルで開いて保存することで回避できることがあります.
    2.データがどのようにレイアウトされているかを眺めるのが次のステップです.それぞれの日付が列名になっていることがポイントですね.横軸を日付に取ってグラフを描くには,列として積み重ねたいところです.この段階で「データフィルタ」して日本の各都市のデータだけ抜き出してもいいのですが,せっかく世界各地データが記載されているので,ここでフィルタリングしてしまうのはもったいない.そこで,先にテーブルメニューから「列の積み重ね」を実施します.「2020-01-13」列以降のすべての列を『積み重ねる列』に指定して『OK』です.積み重ねない列は『すべて保持』になっていることは確認してください.
    3.「データ」列にはすべての国名や都市名ののMobilityが繋がっているので,これを分割するのですが,このデータでは注意が必要です.おそらくその地域の事情によるのだと思うのですが「taransportation_type」のうち「transit」がない地域があるのです.このデータでは,「region」の最初の「Albania」がそうです.「列の分割」は単純に列の先頭のパターンを見て,それを分割基準に採用するので,このままでは「transit」のデータが抜け落ちてしまいます.このような場合,先頭にダミーデータを付加したり,一度データを「taransportation_type」のそれぞれでフィルタリングして作成したテーブルを『結合(Join)』する手があります.「列の分割」で『基準となる列』に「region」の他に「transportation_type」を追加してもいいです.あるいは,同じ地域では「taransportation_type」間の相関が大きいので平均を採用してもいいかもしれませんし,どれか1つの「taransportation_type」を代表にとって考察してもいいでしょう.今の場合,特に日本では交通機関の利用状況に関心があるので,「transit」だけを抜き出して比較することにします.

    4.ということで「データフィルタ」で「transit」を選択して,赤三角から「サブセットの表示」して,このサブセットを「列の分割」します.設定が難しいとよく質問受けるのですが,何を分割したいのかを考えれば大丈夫です.今の場合Mobolityを国や都市毎に分割していくので,「データ」を『基準となる列』に,「region」を『分割する列』に割り当てて『OK』します.このとき「積み重ね」と違って「残りの列」は『すべて除去』がデフォルトになっていることに注意してください.『選択』にチェックを入れて,リストから「ラベル」を選択して,『選択されている列をすべて保持』をクリックしてから『OK』します.こうしてすべてのグラフ作成の元となるテーブルができたので,これを保存しておきます.
    5.それでは,日本の各都市のMobilityを比較してみます.「グラフビルダー 」でXゾーンに「ラベル」をドロップしてください.ここではデフォルトのままでいきますが,適宜変数名は変更して構いません.Yゾーンにはリストから日本の各都市を選択すればいいのですが,92列もあるのでリストの赤三角から「フィルタの表示」をするといいでしょう.この検索ボックスは文字の並びがキーとなるので「to」と打つと「Tokyo」だけでなく「Boston」なども一緒に検索されるので注意してください.「Tokyo」をYゾーンにドロップしたら,それ以外の都市を選択してYゾーンのグラフ内側の六角形の追加ゾーンにドロップしていきます.仕上げに『折れ線』ボタンをクリックすれば,冒頭に掲げたグラフになります.このグラフでは,X軸の「軸ラベル」を調整して文字が見えるように表示していますが,ラベルが間引かれていることには注意してください.

    確かに名古屋は,他と比べてMobilityが大きいようですが,そもそも「transit」が何を計測しているのか今一つ不明なので,何かを結論するのは危険です.例えば,東京と福岡では交通状況も違いますよね.東京では通勤に車を使うのはごく一部の人に限られていますし,バスでの移動はDriveになるのか,等々.いろいろな疑問は後日調べることにしましょうか.それよりも,自分で描いてみれば,このMobilityは1月13日を100%とした相対的な数値であることに気づくはずです.まだこの時期はコロナの気配は感じつつも自らの行動を制限するような状況ではなかったと思います.最初の日本での感染者が1月16日で,10人を超えたのが1月30日です.そこで,その翌日の1月31日を基準にしてこのグラフを描き直してみます.

    それには「東京」列を作成して,計算式 (:Tokyo / 128.14) * 100を入れます.以下同様にして作成したのがこの図です.

    随分印象が違いますよね.もちろん,どちらのグラフも基準が異なるだけで間違いではありません.重要なことは基準は意識的に選択できるということです.ですから,ここにデータ可視化の落とし穴があるのです.何よりも注意したいのは,私たちが意識せずに基準を選んでいる場合です.データを可視化したつもりで,正しい情報が得られないとだけでなく,こうして得られた間違った情報からの呪縛はとても強いので,この後に様々な弊害をもたらします.メディアの場合,意図的に間違ったグラフを描いて視聴者を誘導するというよりも,自分で自分に騙されて大騒ぎしているという場合もあります.更には,データの視覚化では,このように意図的に「名古屋は自粛無視している」という説得材料とすることも可能だということにも注意が必要です.

    多いこみで失敗することは誰にもあると思います.私の経験で言えば,特許を書いていて,最後の最後までロジックが破綻していることに気付かず,それまで明細書に費やした数日間がすべて無駄になったことも一回ではありません.最初の思いつきにとらわれることの怖さ,それを客観的にデータを見ることとで学べたと思っています.

    来週はこのデータを使って,別の分析をしてみようと考えています.

    それでは,また来週.

    日本や他の国はもちろんですが,ニューヨークの古き友人たちが早く安心して暮らせるようになりますように.


  • こういうときこそデータ分析しよう

    本日はこの記事に掲載されている図をJMP超入門として作成してみます.
    ここにきて「新型コロナ」の日本人感染者が爆発的に増えているワケ

    ここ暫くはあまり楽しくないネタになってしまいそうですが,どんなデータでもJMPで楽しくデータ分析してこの状況を乗り越えたいと思います.

    さて,この記事の要点は,コロナウィルスには二種類あって,そのうちの強毒株がヨーロッパで猛威を振るっているとの説を根拠に,3月24日前後にヨーロッパからの帰国者に感染が発見され,それをきっかけとして日本に感染が蔓延していったという論が展開されています.確かに図3を見る限りでは,ここに何かしらの要因があることが示唆されています.この方の言うように帰国者かもしれませんが,それを裏付けるデータは示されていません.その他にも,巷で噂されているように,ちょうどその日に決まった東京オリンピックの延期とも関係があるかもしれません.他にも,潜伏期間は1-14日で平均的には5日と言われているので,三連休で各地で賑わったことの影響もありそうです.それは脇に置いて,この図3をJMPで再現してみます.

    まずはデータから.データは,この前も使ったジャッグジャパンさんのcsvを使います.左上のcsvのリンクからダウンロードしてください.このcsvは整っているので,JMPで直接開いてOKです.さて,このデータから図3のグラフを書くにはどうしたらよいでしょうか.東京都の感染者数と日付の片対数グラフを書いて対数であてはめてみればいいのです.基本的に前回と同じ手順でいいのですが,少し考えてみてください.

    このテーブルのどの変数を使えばいいのかを最初に考えます.図3の検証が目的なので,日付けは「確定日」としておきます.「確定日」と「感染日」には数日のバイアスがあるので目的によっては注意が必要です.更に「居住都道府県」が東京である感染者数を東京都の感染者数とします.さて,このテーブルからどのようにすれば東京の累積感染者数の列を作れるでしょうか.テーブルメニューから「要約」すればいいのはすぐわかったと思います.「確定日」を『グループ化』に,そして「居住都道府県」を『サブグループ化』して『OK』です.

    「N(東京都)」列ができるので,列名を右クリックして「計算式列の新規作成>行>累積和」で「累積[N(東京都)]」列を作成してください.因みに,累積列は「統計」のところにある「Col Cumulative Sum」の計算式を使ってもいいです.興味があれば,他の都道府県も累積しておいてください.因みに「行数」列は日本全国の感染者数です.ここではこの全国と,押さえ込みが早い段階でうまくいったとされる北海道を累積しておきます.岩手県の方以外は,皆さんがお住いの都道府県を加えてみてください.

    データには外国居住者の列もできているはずです.このタイミングなので,おそらく海外からの帰国者と考えられます.多くはありませんが,合計すると昨日の時点で148名なので,これらの列を全て選択して,計算式列の新規作成の「組み合わせ>和」でまとめて,これも累計しておきます.「中華人民共和国」と「南アフリカ」を忘れないようにしてください.全部で11列あります.次に,あてはめ線の傾きに意味を持たせるために「確定日」を全国の感染者数が累計で100人を超えた2月21日を起点とした日にちを示す「Day」列を作成します.この処理は前回やったので覚えていますね.計算式は,Date Difference( 21Feb2020, :確定日, “Day” ) です.

    さて,この次にどうするかわかりますか?

    「列の積み重ね」で累計した列を積み重ねます.ここで初心者が躓くことが多いようです.グラフ不作成に迷ったら積み重ねる,と覚えておいてください.そして「二変量の関係」で「データ」を『Y』に「Day」を『X』に割り当てます.散布図のY軸のスケールを「対数」に変えます.これだけだとわかりにくいのでラベルを表示させます.そのためには,変数名を書き換えてもいいのですが,その変数の定義がわからなくなってしまうので「ラベル」列を再コード化した方が便利です.例えば,「累積[N(行数)]」を「日本」とします.「値の置換」にするのを忘れずに.それから,「ラベル」列と一番下に並ぶ最新日の行の全てを「ラベルあり」にします.散布図に現れるラベルはドラッグできますから,見やすい位置に移動させてください.

    いよいよ直線をあてはめます.片対数になっているので,赤三角から「その他のあてはめ」を選んで「自然対数」のラジオボタンをクリックしてください.このデータには0がありますからアラームが出ますが,それはスルーします.こうして得られたあてはめ線はデータ全体をあてはめていますので,「ローカルデータフィルタ」で「ラベル」を選択し,ついでに「Day」も『AND』して「Day」の上下限をそれぞれ0と9にして,あてはめ線の区間を10日間にしておきます.そうしたら,commandキー(すいませんWindowsはcontrolキーだったかな?)を押しながら「ラベル」の「東京都」をクリックします.

    はい,それでは「Day」のスライダーの真ん中を持って(手のひらのアイコンがちゃんと5本指になっているのを確認してから)左右にゆっくり動かしてみてください.あてはめ線の傾きが変わるのがよくわかるはずです.このとき,デフォルトではフィルタされた部分だけがズームされるので,今の場合は先に「Day」軸の下限を例えば-10にしておくと,スケールが固定されるというJMPの動作の特徴を覚えておくとよいでしょう.「表示」のチェックも外してください.こんな感じになればOKです.できましたか?

    因みに,冒頭に掲げたようにこのグラフはグラフビルダーでも描けますが,少なくともJMP14では対数の当てはめができないので「二変量の関係」を使いました.

    このグラフには冒頭のグラフと同じく,参考までにECDCからダウンロードしたイタリアのデータも載せておきました.ECDC (European Centre for Disease Prevention and Control:欧州疾病予防管理センター)は,スウェーデンのストックホルムに本部がある2005年にEUの伝染病の予防の専門機関として設立されました.このデータを使う場合は,「dateRep」の表示形式を『日付>m/d/y』に変えることに注意してください.必要な国をデータフィルタしてサブセット作ることをお勧めします.累積[cases]がその国の感染者数になります.後は,テーブルを「連結」すればいいのですが,このとき「一致しない行も含める」のところの「主テーブル」「結合するテーブル」の両方にチェックしてください.

    スライダーを動かしてイタリアの最新の状況を見てみると,
    Log(データ) = 10.246591 + 0.0334785*Day
    なので,爆発当初の
    Log(データ) = 3.1934324 + 0.4630768*Day
    と比べればかなり治まってきてますね.ありがたいことです.

    一方,東京のDay31から40までのあてはめ線は
    Log(データ) = 0.4262745 + 0.1494678*Day
    なので,イタリアの最新よりも傾きが大きいという状況です.これが今後イタリアの初期のようになっていくのか.それとも,北海道(最近また少し増えてきたのが心配ですが)のDay30から39まで
    Log(データ) = 4.7546329 + 0.0105227*Day
    の程度に落ち着いていくのか,見守っていきたいと思います.

    こういうと他人事のように聞こえるかもしれません.もちろん,やるべきことはやった上で,データによって客観的にリスクを見守ることが,デマに踊らされず,マスコミに煽られずに,私たちの精神を落ち着かせる一番の特効薬なのだ.そう考えています.

    それでは皆様もお大事に.本日はこれまで.


  • A型人間はコロナにかかりやすいのか?

    冒頭から如何わしいタイトルで恐縮です.血液型と性格の関係がどうこうという話ではないのでご容赦ください.様々なデマ情報も飛び交っている昨今では,それら情報の裏を取るという必要があり,ここのところ色々な文献を読みまくっています.311の当時を思い出す状況です.あのときも随分と勉強しました.このときの蓄えがなければ,おそらく『JMPではじめる統計的問題解決入門』は執筆していなかったかもしれません.p46の「ネ申エクセルの話」というコラムにも当時のことを書いていますけど,あの頃色々と勉強したことが集積していって,それが書籍として実態化したように思います.

    さて,ここのところコロナをネタにしていて,先週は気がひけるとまで書いたもののの,今週も懲りずにコロナネタです.データ分析の上達には自分に興味のある題材をとるのが一番なので,3月18日の中央日報日本語版の記事から本日の題材をとります.「中国感染者2000人の血液型見るとA型がO型に比べて感染に脆弱」この原著論文はmedRxivで簡単に探せました.著者はJiao Zhaoその他です.Relationship between the ABO Blood Group and the COVID-19 Susceptibility

     

    まずこの論文はプレプレスで査読前ですから,その点ご注意ください.内容は,題名が示すように,血液型とコロナウィルス感染症の罹患との関連を研究したものです.結論から言うと,A型が掛かりやすくO型が掛かりにくいとのことです.血液型性格診断は,ニセ科学の代名詞のように言われているのですが,科学的には一部の疾病とは関連性が報告されています.このへんの説明はこの記事にも書かれています.手洗いの習慣が感染と関係あるという前提のもと,一般的に言われているA型とO型の性格が仮に正しいとすれば,A型の方が感染しにくいはずです.感染しやすいという性質が遺伝的,後天的に性格を形成していくという可能性もあるので,因果関係は何とも言えませんけど.因みに,米国の黒人は確か80%以上がA型だったと記憶しているので,この研究が正しければ人種間で感染率に有意差があるはずです.とはいえ,血液型と感染しやすさには多少の関連性はあるのかもしれませんが,おそらくその他の要因に埋もれてしまってしまっていると推察します.統計学的には有意差があっても,医学的,社会学的にそれが意味があるとは限りません.いずれにせよ,血液型性格判断は遊びを超えると害悪しかないのでご注意を.

    心理学,医学的な解釈はさておいて,このブログでは初心者向けにこの原著論文の統計分析をJMPでフォローしてみます.先ずはデータテーブルを作成してください.「BT」(Blood Type)列と「Infected」列,それに度数を入れる「f」列を新規作成してください.最初の2つの変数は名義尺度で,カテゴリーはそれぞれ(A,B,AB,O)と(Yes,No)とでもしときます.その上で,それぞれの人数をテーブルに手入力します.「Infected」が「No」にはControlled caseを入れることになります.ついでに検定で必要になるので,「再コード化」でA型以外を非A型,O型以外を非O型とした列「BT2」「BT3」も新規に作成しておきます.このようになりましたでしょうか.

    原著論文では,両側カイ二乗検定で統計的な有意性を示しています.統計処置にSPSSとSTATAを使ったと書いてありますが,これをJMPでフォローするにはどうすればよいでしょうか?考えてみてください.

    「一変量の分布」から「割合の検定」を実施するのが1つの手です.この場合,Controlled caseから算出した「仮説割合」を記入する必要があります.『完了』をクリックすれば,レポートの「Pearson」のところに通常のカイ二乗値を使った結果が出力されます.結果は冒頭に示した通りです.とはいえ,これでは原著論文の「オッズ比」が出力されません.そこで「二変量の関係」を使います.

    最初にA型の人が感染しやすいことを検証するために,先ほど「再コード化」した「BT2」列を使います.『Y』に「Infected」,『X』に「BT2」,『度数』に「f」を割り当てて『OK』です.このブログで何回も出てきた「モザイク図」が出力され,このような2×2のクロス表であれば,デフォルトでレポートには「Fisherの正確検定」も出力されます.

    2×2以外に「Fisherの正確検定」を拡張する手法があるのですが,これはJMP Proには実装されていたように思います.(手元にJMP Proがないので記憶が定かでなく,もしかしたら間違いかもしれません.)このため,ここではB,AB,O,を非Aとまとめたのです.とにかく,このレポートに書いてある通り,<0.001で有意性ありということは確認できました.

    2×2であれば,「オッズ比」も赤三角から出力できます.ですが,出力値は0.781849と論文に掲載されている値と違います.これはどうしてでしょうか?そもそもオッズ比とは,ある疾病の罹患を二群(実験群と対照群)で比較する際の,医療統計分野でよく使われる指標です.オッズ比が1ならば,罹患のしやすさは両群で同じで,1より大きければ実験群は罹患しやすく,1より小さいときは,逆に罹患しにくいことを意味します.

    例えば,この論文ではコロナウィルス感染症に関する危険因子として血液型がA型であることのリスクがどれだけ高いかを評価したいのです.罹患群1775名中でA型は670名であり,一方,健常群(制御群)は3694名で,そのうちA型は1188名でした.このときのオッズ比は次のようになります.
    感染者A型/感染者非A型 / 健常者A型/健常者非A型
    =670/1105 / 1188/2506
    =1.279
    このことは,コロナウィルス感染症の罹患者ではA型が出現する確率は健常者よりも1.279倍大きい,すなわちA型の人は感染するリスクが1.279倍高いということです.

    さて,JMPは上記の定義は計算式として記述されているだけです.仮説を踏まえて,どの数値が実験群でリスク因子は何か,ということを理解してテーブルに入力するのは私たちの仕事です.JMPでは,名義尺度の変数の値はアスキーコード順に並ぶのがデフォルトです.このため,上記ではオッズ比の逆数が出力されていたわけです.正しい解釈のためには,「BT2」の「列情報」で『列プロパティ』をプルダウンして「値の順序」を選び,出現したパネルで「非A」を選択し『上へ移動』してから『OK』する必要があります.その上で赤三角から「やり直し>分析のやり直し」をどうぞ.

    これでオッズ比が95%信頼区間とともに表示できました.この結果は原著論文とも一致しています.O型が感染しにくいという検定も「BT3」列を使って同様に実施できるので確認してみてください.

    今日はここまで.それではまた.


  • 災難に逢ふ時節には災難に逢ふがよく候

    先週予告したように,本日は新型コロナウィルス感染者の状況を中国,イタリアと比較しようと考えていました.ですが,イタリアの状況がデータを取るまでもなく酷くなってきていて,指数関数のグラフを見るに忍びないので,変更させてください.自転車と万年筆を愛する自分にとって,イタリアは特別な国なのです.(中国ならいいのかと言われれば,もちろん,そんなわけではないですよ.)ただ,どうしても気が乗らないのです.今年のジロは中止でしょうね...

    そもそもコロナウィルスをブログ題材にするのにも気が引けるように思えてきました.自分に興味のあるデータ分析の対象として扱っているだけなのですが,明らかに,ここ最近のビュー数は多くなっているので,コロナウィルスというキーワードが影響しているのかも知れません.日常生活でもコロナコロナで気疲れしているだろうJMPユーザーにこの場でも,コロナを思い出させるのも申し訳ないかな,そう考えています.

    こういうときの心構えとして頭に浮かぶのが,良寛さん71歳のとき,死者が1400名にも及んだという「三条の大震」に遭遇して家族を失った友人に送った手紙での一節です.

    「災難に逢、時節には災難に逢がよく候。死ぬ時節には死ぬがよく候。是はこれ災難をのがるゝ妙法にて候。」東郷豊治編(1959)『良寛全集』,東京創元社

    ブログのタイトルにした,この有名なお見舞いの言葉は,良寛さんの私的なものであったことに注意する必要があります.その意味は公式サイト?にお任せして,この精神に通じるFeynman先生の言葉を紹介しておきます.
    Don’t use your energy to worry!
    Use your energy to believe, to create, to learn, to think, and to grow.

    ということで,このブログでコロナウィルスを取り上げるのは.あくまでも私たちがともに成長するためと考えていただければ幸いです.そもそも,ビュー数を稼ぐ必要はないので,マスコミとは立場が違うという事情もあります.一連の報道では,マスコミが不安を煽っていることが指摘されていますが,これは今回に限ったことではありません.「放射能がくる」などと表紙に書いた週刊誌も過去にありました.

    とはいえ,マスコミがこう書くのは,それが仕事だからです.彼,彼女らの仕事は真実を伝えるのでも,民意を代表するのでもなく,収入を得るためです.例えば,東洋経済ONLINEの青沼さんの記事「パンデミック迫る「新型コロナ感染」の非常事態」を私が勝手にタイトルをつければ,最後に良いことを言われているので,「「新型コロナ感染」いまできることは、他人を思いやる本当の意味での“忖度”」としたいところです.ですが,ABテストでどちらのクリック数が増えるかは,自明ですよね.実際,この類のテストは既にあちこちでやられているので,自然とクリックしてもらえるタイトルになってしまうのです.ようするに,私たちがマスコミに煽られているのではなく,私たちがマスコミを煽らせているのです.トイレットペーパーの件でも根っこは同じです.

    少し脱線してしまいました.時間の制約から本日はデータの取得は省略して,少し前にダウンロードしておいたデータを使ってネットで出回ってる回復率と死亡率のグラフをJMPで視覚化してみます.因みに,WHOのデータをもとにしたデータがKaggleから入手できます.先日紹介した「感染者数マップ」は製作者の了解を得ているのですが,このデータをここに紹介して良いのか?一瞬悩みましたが,ここにあります.このような,国ごとの「感染者数」「回復者数」「死亡者数」が日付入りのデータが手元にあるとして,さて,どういうグラフを描きますか?少し考えてみてください.

    このグラフの性質から誰かに見せることも多いかも知れません.時間が非常に大きい意味を持ち,国というインデックスのある多次元データなので「バブルチャート」にしてみると面白いですね.普段あまり使うことのないグラフなので,この機会に使い方を覚えておきたいものです.これがバブルプロットの設定画面です.

    「二変量の関係」では,目的変数と説明変数を意識することは重要ですが,「バブルプロット」ではモデリングを意識することはあまりないので,『Y』と『X』はどのように割り当ててもいいかと思います.バブルプロットは視覚化のグラフでもあるので,ここでは見る人にインパクトを与えるように,上向きに重大な変化を示すという工夫をしています.「死亡数/感染者数」を『Y』「回復者数/感染者数」を『X』に取り,それを対数目盛りで表示することにします.「Date」はこのデータ取得時の3月9日までの日付です.サイズは感染者数をそれぞれの人口で割った感染者密度である「感染率」です.オリジナルのデータにはないので,Wikiからデータを取って新規作成しています.(やり方は『JMPではじめるデータサイエンス』のp85の練習07と同じです.)

    WHOのデータでは国以下の詳細な領域に分かれているので,このデータでも「Province/State」「Country/Region」という変数で分かれています.それを「要約」で新規列「Country」にまとめ,さらにそれを「再コード化」で「国」にしました.その上で,「Country」をコード『ID』,「国」を『色』に割り当てています.こうするとグラフ上のラベルは英語で,凡例は日本語で表示できます.因みに既にパンデミック状態なので,「ローカルデータフィルター」をかけて,感染者数が多い国のみ表示しています.この例ではまだ,国の数が多いのでメリットは感じられませんが,色数が少なければラベルは英語でスマートに見せ,凡例のみ日本語にするのも面白い使い方ですね.

    完成したバブルプロットはこのようになります.JMPのラベルは「選択ツール」ではコピーできないのですが,実際のグラフでは「Country」がラベルとなってバブルの中央に表示されます.

    言葉だけではうまく伝わらないので,インタラクティブHTMLに発行してみました.

    このグラフ

    グラフの下のプレイボタンを押してみてください.JMP14の画面では,部分的にしかサポートされていないと書かれていましたが,問題なく変換できているようです.このグラフをどう解釈するか,あるいはこのグラフをどう人に見せるか,については皆様にお任せします.

    先日,このブログを紹介しても良いかとSAS社から聞かれたので,どうぞとお答えしたのですけれど,少々懸念していることがあります.自著のサポートブログとしてひっそりと続けているこのブログですが,実は自らのJMPスキルの鍛錬の場でもあるのです.とにかく時間をかけないで手早くデータ分析する練習をしています.クライアントの前でモタモタ分析するのは恰好悪いですから.本日の例では人口データの取得を含めて約10分です.このため,結果の見た目がジョボいのは否めません.このブログを見て,JMPってこんなことしかできないのか,と思われては申し訳ないなと思っています.一度でもJMPを使ったことがある人ならば,そんなことはないとお分かりになるはずですが,これからJMPを始めるという方はこの点をご容赦いただければと思います.

    それでは,本日はこれまで.


  • 「JMP超入門」はじめました

    このブログに来て頂いているということは,基本的に『JMPではじめる』シリーズの読者の方々と思います.少しはお役に立っていますでしょうか?中には,なかなか時間が取れずに積ん読状態になっている方もいらっしゃるかもしれません.そこで,これからJMPを学ぼうと思っている方のために,記事カテゴリーに「JMP超入門」を加え,連載をしていくことにしました.それというのも,ここしばらくは在宅勤務や出張のキャンセルなどでいつもより時間がある方が多いと思うからです.私も今は時間があるので,こういうことができます.

    いきなり春休みに突入した小中高生には,民間企業が提供するいりいろな自宅学習支援のコンテンツが無料解放されています.(売り物なのだから当たり前と言われれば,そうなのですが,)わかってもらおうという努力が伝わる素晴らしいものがたくさんあります.例えば,「子供の科学 無料公開特設サイト」の「なぜ感染する!? ミクロの脅威が見えてくるウイルスの世界へGO!」という特集記事(2016年12月号)はお勧めします.自然免疫は獲得免疫との違いを正しく知るだけでも,今の状況で,正しい行動を判断するための良い指針となるはずです.

    文科省も,自宅学習を支援する様々なサービスを「臨時休業期間における学習支援コンテンツポータルサイト(子供の学び応援サイト)」にまとめています.その中に紹介されているサイトを見て回ったのですが,お役所主導のサイトは,例えばこのブログでも紹介したことがある統計局の「なるほど統計学園高等部」など,誰向けなのかわからないものが多いですね. 3DCGのキャラというオブラートにくるんではいますが,中身はいわゆる統計学の教科書の内容です.これを見て統計学が好きになる高校生がどれだけいるのか.最近は,統計学を教えるという機会も増えているので,反面教師という意味では参考になりました.

    さて,冒頭に書いたように,このブログでも,これからJMPを学習するという方のために,超初心者用のコンテンツを(時間があるときは)書いていきます.操作の詳細は『JMPではじめるデータサイエンス』を参照して頂くとして,そこに書ききれなかったことなども解説していきます.今回は,新型コロナウィルス感染症の状況をJMPで見る手順を学習します.

    最初に何を知りたいのかを明確にします.本日は,日本国内の感染者数の増加を中国の初期の状況と比べて,都市封鎖にまで至る可能性があるのかを判断したいとしておきます.そのためのデータをどこから探せば良いかを考えることが次のステップです.日毎の日本での感染者数が必要となります.このデータは公式サイト?からも拾えますが,CSVでファイルを提供して下さっている方がいますので,それを使います.都道府県別新型コロナウイルス感染者数マップ(ジャッグジャパン株式会社提供)の左上にCSVというリンクがあるので,それをクリックすればCSVファイル「COVID-19.csv」がダウンロードできます.

    最初にやることは,ファイルオープンです.このファイルはCSVですから,いきなりJMPで開いてもいいですが,もしもオリジナルデータがエクセルのファイルであれば,まずエクセルで開いて,どのようなデータ構造になっているか確認することが重要です.JMPテーブルへの変換の過程で,必須の情報が抜け落ちたりすることもあります.エクセルウィザードの設定を決めるためにも,特に何行目から何行目までが変数の属性を記述しているかを確認してください.

    幸いこのファイルは,JMPでひらけば直ちに分析に着手できます.まず,テーブルの中身をチェックします.それには「列ビューア」が便利です.「FIeld2」以降の列(おそらく予備フィールド)には何も書かれていないことなどが即座にわかります.これらの列は削除しても構いませんが,今回はこのままにしておきます.データ前処理についての詳細は『JMPではじめるデータサイエンス』を参照してください.

    次にデータ分析の目的から,必要な変数を探します.このとき最終的なグラフをイメージするといいです.横軸は「発症日」でもいいかもしれませんが,欠測値が多いので「確定日」にしましょうか.縦軸ですが,今の目的には,日毎の累積感染者数が知りたいところですが,このテーブルには見つかりません.どうすればいいか考えてみてください.

    わかりましたか?「要約」を使います.「確定日」を『グループ』,「通し」を『統計量』のプルダウンから「最大値」にすればOKです.出力されるテーブルの「行数」を「感染者数」に,「最大値(通し)」を「累積患者数」に書き換えます.これでグラフは描けますが,「確定日」のままでは他国との比較がしにくいので,特定の日からの日数としたいところです.データを見ると1月24日を起点とするのが良さそうです.さて,この日からの日数を計算するにはどうすれば良いでしょうか.

    JMP 9から計算式の「日付時間」に「Date Difference」関数が追加されているので,これを使います.この関数の引数は,開始日付,終了日付,以外に「intervalName」「alignment」の4つです.最後の引数はデフォルトでは表示されませんが,ここでは使わない(デフォルトの設定でいい)ので,次のように設定してください.開始日付に「24Jan2020」,「終了日付」に「確定日」列,そして「intervalName」に「”Day”」を指定すれば1日を単位とした時間差が計算できます.因みに,1904年の1月1日からの秒数で時間差が計算されているはずですが,これはMacintoshの仕様と同じですね.JMPのMがMacintoshであることの名残かもしれません.

    「Day」列を新規作成して,上記の計算式を入れると1行目は-9になります.この行は「非表示かつ除外」しておきます.後はお楽しみのグラフを描く作業です.「グラフビルダー」でもいいですが「二変量の関係」から「その他の当てはめ」で「Yの変換」を「自然対数」にしたのがこのグラフです.

    このグラフにラベルを入れるのは簡単です.最初の点を右クリックして「行ラベル」,「確定日」列を右クリックして「ラベルあり/ラベルなし」とすればいいのです.デフォルトのラベルの位置は見にくいのでドラッグして適当なところに移動させてください.

    時間が来たので本日はこれまでとしますが,次回はこの結果を他国と比較してみたいと思います.結果を先に示しますと,冒頭のグラフが中国とイタリア,日本を比較したものです.このグラフのレンジでは中国は振り切れています.PCR検査をしていないからだという指摘もありますが,それを踏まえても日本のはよくやっていると思いませんか?特に医療関係者のご尽力には感謝以外の言葉は見当たりません.

    因みに,私はといえば,こういうときこそ慌てず騒がず,今できることをやるべきと考え,To Doリストにずっと残っていたPythonの2系から3系への移行に着手しています.この機会に Jupytor Notebookを試しましたが,いいですねこれ.JMP関連でも,JSLをちゃんと勉強したり,JMP Proの新機能を検証したり,やることはたくさんあります.

    それではまた.