Latest update on 2021年7月4日 (日) at 18:43:39.
【第597回】 R研究集会オンライン(2020年12月19日)
- 6:30起床。80.05 kg。一進一退。
- 浴槽に湯を貯めて入浴し,残り湯を使って洗濯機を回しながら朝食を済ませた。
- 洗濯物を干してから,統数研共同利用研究集会「データ解析環境Rの整備と利用2020」にZoomで参加。藤野先生,中野先生,開催ありがとうございます。以下,感想混じりのメモ。
- 中野先生がチャットにTidyverseSkepticを貼り付けられた。最初のところだけ斜め読みした感じでは,便利とか見やすいといって薦められることが多いtidyverseは,R初学者にとっては,むしろ学習の壁になっているという主旨のように思われる。ぼくもそう思う。
- 最初の演題は統数研の川崎さん「RS-Decomp」。R-Shiny-Decompの略。今日が本邦初公開とのこと。Decompとは一変量非定常時系列データを複数の要素時系列に分解するソフトとのこと。方法論はKitagawa G (1981) J Time Ser Anal, 2(2): 103-116.で,Fortran77のソースコードは統数研のTIMSAC 84 Part1にも載っている。RS-Decompは,そのRへの移植ということか? COVID-19のdailyの新規確定患者報告数データにも使えそうだが,季節調整が本来の主目的とのことだから,むしろ食中毒とか季節性インフルエンザの方が適しているのかも。yn=tn+sn+wn,wn~N(0, σ^2)と考えてynをトレンド成分tn,季節成分sn,不規則変動(ノイズ)wnに分解したいが,サンプルサイズTに対してパラメータが2T+1個あるので不適切問題。そこで時間方向に自然な制約として,平滑化事前分布を導入することで,実効パラメータ数を減らす。なるほど。DECOMP(1985)は分解要素の定常AR成分を含むこと,曜日効果にも対応していること,状態空間モデルゆえ欠測・予測に統一的対応がとれること,非定常成分の状態初期分散を厳密に初期化すること,が特徴。Web Decomp(佐藤整尚先生)が偉大な先駆者。decompをDLL化してS ver. 4からコールし,それをウェブのフロントエンドから操作するものだった。2006年にuseR! 2006で佐藤さん自身が発表している。が,最近,プラットフォームだったWindows 2008 Serverがサポート終了したので終了した。統数研はcranにtimsacパッケージを維持しているが,timsacに入っているdecomp関数のメンテをRS-Decompに反映することにした。統数研の時系列モデルとしては,2020年12月15日に北川源四郎『Rによる時系列モデリング入門』(TSSSパッケージの使い方説明を含む)が出たとのこと。操作デモを見せていただいたが,使いやすそうだった。ちなみに,北川先生のFortranコードは,以前は1万円くらいで売られていたが,今は公開されていて,webからダウンロードできるとのこと。
- 2番目の演題は徳島大学の学生さんの発表。服部さんが指導教員。USの大統領選挙で投票に影響した要因の分析。先行研究として,さまざまな地理的要因,人種(黒人は民主党支持,白人は地域によって傾向が異なる,Teigen et al. 2017)などの影響が指摘されてきた。今回の分析ではヒスパニックに注目。先行研究ではヒスパニックは民主党支持が多い,あるいは出身国によって異なる,違法移民への見方が世代や出身国によって異なるといった指摘がある。しかし,2004年の大統領選でヒスパニックの投票傾向を左右したのはモラルやテロ対策だった(Abrajano, 2008)。当時は銃乱射,移民への排他的政策,地球温暖化などが問題だった。2016年も社会不安はあったので同じ傾向ある? CCESというサイトから入手した2016年大統領選に参加した6万人のサンプルデータ(オープンデータ)をRで分析した(ただし,ヒスパニック,かつ欠損のないデータだけ使ったので,)。年齢など,さまざまな属性や要因も含まれている。銃規制への態度などは複数の賛成/反対質問への賛成の数を変数とした。目的変数は,トランプとヒラリーのどちらに投票したかの二値で,ロジスティック回帰(ステップワイズの変数選択)。人口密度データも別途作って結合した。結果としては,銃規制賛成なほど,移民に寛容なほど,環境保護傾向があるほど,人種差別の存在を認識しているほど,ヒラリーを支持していた。その他では,保守主義(どういう質問によるのか?)の人がトランプ支持,独身と離別した人はヒラリー支持。トランプ支持者が反知性主義という話は良くあるが,学歴は? と尋ねてみたら,ステップワイズの選択で残らなかったとのこと(疫学ではステップワイズは薦めないが,まあそれはそれとして)。ただし,指導教員の服部さんから補足コメントがあって,全人種でやると学歴は効いていて,大学・大学院卒が民主党支持だったとのこと。
- 3番目の演題は総務省統計研究研修所と独立行政法人統計センターの方々による,e-Stat APIを用いたスクレイピングについて。使い方の説明と,家計調査データを使った使用例。コードはここから入手できる。ただし,動かすには,e-Statへのユーザ登録をしてアプリケーションIDを発行して貰う必要がある。家計調査は全国約9000世帯に家計簿を付けて貰ったデータ。毎月調査だが,今回のデモでは,二人以上世帯の年次データを取得して分析。リクエストURLの中にデータID(statsDataId)が含まれている。RでのスクレイピングにはRCurlパッケージとjsonliteパッケージを用いる。RCurlパッケージのgetURL()関数にユーザIDやデータIDを含むURL文字列を与えでデータを取得し,jsonliteのfromJSON()関数でデータとして使えるリストに変換する。GET_STATS_DATA$STATISTICAL_DATAというリスト要素が,実際のデータを含むリストになっている。そのDATA_INF$VALUEがデータフレーム。属性コード6変数と統計数値は文字列として1変数。CLASS_INF$CLASS_OBJ$CLASSが属性情報の内容に対応。それらの情報を使って続きのデータを取り込まなくてはいけないし,ここから手作業でデータを取り出すのはメチャクチャ面倒くさいと思うので,むしろ普通の二次元表形式のデータフレーム(またはそのリスト)に自動変換する関数を書いてしまう方が良さそう。あ,もしかすると,この発表は,最後はそういう関数を作りましたということに帰着するのか? と思ったが,そうでもなかった。こうやって抽出したデータをクラスタリングしたという報告が,エストレーラに掲載予定とのこと。@は変数の頭に使えない文字というより,S4オブジェクトのスロットを意味するオペレータだよなあ。
- ここで昼休み。レトルトカレー掛け玄米ご飯とサツマイモで昼食を済ませた。サツマイモにメープルシロップというのも,なかなか美味い。
- 4番目はRとPythonの比較。これ,最近裏RjpWikiさんが連投しているネタと近いのか? 2015年useR!の思い出。スパース推定の本を書くのに際して,先にRコードを書いて,Python版も作る必要があったので移植したら3ヶ月掛かった。パッケージにすると中身を見なくなるのでスクラッチで書いた。コードはここで公開されている。LASSO推定などのスパース推定について,Stanford大学のFriedmanらが開発したglmnetやglassoはRパッケージとしてcranで公開されているが,Python版はLinuxでしか動かない。scikit-learnというボランティア開発のものはあるが,動作が本家と違うので怖くて使えないとのこと。RとPythonの比較。
- 5番目は谷村さん。共有でなくカメラでプレゼン。ObsStudioでも使っている? (いま気づいたが,たぶんこの方がZoomへの負荷は小さいので,木曜の全学の講義で,スライド転換がうまく動かなかったときに,これをやれば良かった!)Rでのカラーユニバーサルデザイン対応の話。最初は色覚異常についての説明。川端裕人『「色のふしぎ」と不思議な社会:2020年代の「色覚」原論』筑摩書房に載っているような話。PAとかの6パタンの説明は,谷村さんが示した表は大変わかりやすかった。色覚バリアフリーの作図ポイントとして,(1)配色をsafe colorに,(2)ハッチング併用,(3)境界線,(4)色区別がないと判別できない線を使わない,(5)色区別がないと判別できない凡例は使わない,(6)彩色面積を大きくする。まずはダメなグラフの例。rainbowカラーで境界線無しの帯グラフ(Rで普通に作ると境界線は付くが)とか,matplot()でtype="l"でcolだけで判別する折れ線グラフとか。barplot()では彩色とハッチングが両立しないのでadd=TRUEを使って重ね描きする。折れ線グラフはltyを使って線種も変える。色自体も変えられる。shadesパッケージにはdichromat()という関数があり,P型,D型,T型の人にどう見えるかがわかる。DescToolsパッケージのColToGray()関数ではグレースケールに変換できる(正解はないが)。monochromacyの人にもこれで良いかは不明。ではどういう色を使えばカラーユニバーサルなのか? というと,safe colorsetsを提供するパッケージが複数ある。今回はcolorBlindnessパッケージを紹介。Wong (2011)のcolorsetsを収録している。displayAvailablePalette(color="ivory")で使えるパレットが一覧でき,displayALlColors(safeColors, color="ivory")などとするとパレットが表示される。safe colorに色置換することもできる。colorBlindnessパッケージのreplacePlotColor()関数が使える。ただし引数がgrobクラスオブジェクトでなければならず,baseグラフィックではダメで,base2grobパッケージなどでgrobクラスオブジェクトに変換し,gridグラフィクスで描画しなくてはいけない。が,それだとまともに機能しているとは思えない結果になったので,最初からsafe colorのパレットを使う方が良い。palsパッケージのpal.safe()など,今日紹介された他にもいろいろあるなあ。R-4.0.0以降での変化という話があったが,palette("Okabe-Ito")が,色覚異常対応のために導入されたものらしい。従来のカラーパレットに戻すにはpalette("R3")で良い。palette.pals()で使えるパレットの一覧が出てくる。barplot(1:7, col=1:7)などとすればパレットが切り替わったことは確認できる。
- 6番目はRAnalyticFlowで有名な鈴木了太さんの発表で,クラウド&リモート時代のデータ分析環境,という話題。COVID-19の影響でリモートでの業務遂行が重要になった中,データ分析環境をどう拡張・移行するか。スタンドアロン vs オンプレミス(イントラネット) vs クラウド。スタンドアロンでは,データはプレーンテキストかExcelなどのファイルを,R(+RStudio)やExcel,Access,SQLiteなどで,1台のコンピュータの中で完結。オンプレミスではデータは共有サーバにあり,分析もサーバにリモートデスクトップやsshで接続して実行。クラウドでは,データはクラウドストレージ上,分析用仮想マシンや,分析用のクラウドサービスを使う。リモートで在宅勤務の時はどうするか? (1)オンプレミスネットワークにVPN接続,(2)データや分析環境をクラウドに移行,(3)クライアントPCのリソースを活用。(3)では,バージョン管理システム(Gitなど: GitHubやGitLabやSourcetree)を用いてデータやスクリプトを管理し,原則としてローカルで作業し,データ送受信は作業の合間にすること,PCのストレージをキャッシュとして使い(OneDriveやGoogle Driveなど),コンテナ型の仮想環境(Dockerなど)を活用することが考えられる。
- ここで15分休憩。
- 7番目は英語の発音がメチャクチャ格好良い服部さん。言語の語彙がどう拡散していくか("lexical diffusion"というそうだ)をTwitterを使って関西圏で分析したという話。従来はフィールドワークをして生の言語を集めていたが,大変な仕事だった。関西弁の新しい否定の助詞「やん」の拡散を調べた。元々の否定の助詞としては「へん」と「ん」。割と前から三重や和歌山では「みやん」が分布。「見」+否定として。最近,大阪でも若者が「みやん」と言い始めた。その後,「こやん」という語彙もできてきた。「来」+否定。しかし,これが時空間的にどう拡散したのかはわかっていなかった。今回これを調べた。データとして約2万のtweets(2012年1月から2015年3月)を利用。四半期別・都市別にユニークユーザ数をカウント。15-29歳の人の割合,人口密度,面積によって説明するモデル。半分以上ゼロなので,zero-inflated modelに。Spatial autocorrelationも補正(地理加重回帰?)。Moran's Iをチェックすると,2012年Q3以降は有意な正の空間自己相関が見られた。INLAパッケージを使ってzero-inflaed spatio-temporal Poisson regression。残差を使ってもう一度Moran's Iを見ると値は小さくなっていたので,空間要素を入れることで説明力が上がったと考えられる。時間要素も影響するが,空間要素の方が大きいという分析結果も出た。面白い。「こやん」はどこから? これって文化伝播の話だから,人口学会で池さんが発表していたような,反応拡散方程式を使った進行波を当てはめられるのでは? とふと思った。「こやん」が関西圏の北の方には広がらなかったのは,「へん」「ん」に社会的アイデンティティがあったからかも? という推論。谷村さんから,空間ウェイトマトリックスは隣接しているかどうか/距離で良いのか? 人の交流なのでtrip調査(パーソントリップ調査のこと?)のようなデータで移動時間を使ってマトリックスを作れば,より現実的になるのでは? と提案があったのは,もっともだと思った。
- 8番目はRによる探索的財務データ解析という演題。2014年に発表した論文のデータベースを更新したので,同じ方法論で分析し直して知見が再確認できるのかを試した。KGUSBADESという関西学院大学商学部で開発・運用してきた財務データ抽出システム。いくつか課題があったのでSKWADという名前でリニューアルした。来年度からそれで運用する予定。今回は,日経NEEDSからデータを抽出。dbplyrパッケージで。本来はパネルデータだが時間を止めた分析のみ示す。Time-seriesのプロットと3月期のヒストグラム。線形回帰では決定係数は70%くらいだが残差プロットがダメだったので対数変換して分析すると決定係数は90%くらいまで上がる。残差プロットをすると誤差の正規性がなく外れ値がある。4つの巨大資産をもつ会社を除去して回帰分析したらフィットは改善し,残差も正規分布に近くなった(不十分だが)。Log-skew-normal分布を仮定するともっと良く合う。t分布でもfitは良い。AICを使うとlog-skew-normalが最もよくfitしていた。質疑でbox-cox変換やM-推定が良いのでは? というコメントがあった。
- 9番目(今日の最後の発表者)は,樋口さんが,Rによるデータウェアハウスの利用というタイトルで。TargetMineはデータウェアハウスの1つ。エンリッチメント解析などができる。メタボローム解析というかゲノム疫学というか,そういう分野なので,理解に多くの前提知識を要し,難しい。NCBI GEOにSARS-CoV-2の遺伝子発現データが掲載された(7月22日)。RandomForest (RF)には選抜解の不安定性という問題(multiplicity)がつきまとう。RFでの変数選抜・教師無し学習(UCBの~breimanのページ参照)→エンリッチメント解析を反復という方法論を試した。BioconductorにあるInterMineRというパッケージの使い方など。それなりにうまくいったという話だが,難しくて良くわからなかった(なので質問もできなかった)。
- というわけで,今年のR研究集会もオンラインだが無事終了。ありがとうございました。
- 木曜朝に,AuraというグループがVivaldiの四季より「春」をアカペラカバーしていることに触れたが,同じ「春」をスキャットでかなり原曲に忠実にアカペラカバーしているCarmel Acappellaも凄いな。
- 晩飯はLIFEで買ってきた鰹のタタキと大根の千切りと玄米ご飯で済ませた。手抜きだが美味かった。
- 北大の医学統計学の横田先生が,RのShinyサーバでCOVID-19の単純なSEIRモデルを作って動かしてみるというページを作られていることに気がついた(たぶん4月下旬?)。そこからリンクされている,Googleのコミュニティモビリティレポートは,移動量データがCSVでダウンロードできる。日本についてのレポートを見ると,駅や公園はやや減っているが,小売店や娯楽への出足がほとんど減っていないことなどがわかるが,都道府県別など,それより細かい区分はわからないので,「やん」の拡散には使えない。
- 岩田健太郎『僕が「PCR」原理主義に反対する理由:幻想と欲望のコロナウイルス』集英社新書,ISBN 978-4-7976-8061-4(Amazon | honto | e-hon)を読了。扇情的なタイトルだが,前半は自叙伝,後半は岩田先生がいろいろなところで既に書かれていることで,そこまで激しい内容ではない。自叙伝の部分では韜晦的な書き方をされているが(それなのに,時々,内心もっていらっしゃるであろう自信が溢れ出てしまっているように思われるが),事実だけ見れば能力も体力も超人級であることがわかる。本書は90ページに単純ミスがあって,「閾値を下げると特異度も下がってしまうというジレンマが起きるのです」の次の文章は『「あなたは病気ではありませんよ」と判定されたけれども「実は病気だった」という人が増えてしまう,という現象が起きるのです』ではなく,『「あなたは病気ですよ」と判定されたけれども「実は病気ではなかった」という人が増えてしまう,という現象が起きるのです』が正しい。111ページの事前確率0.01%の状況下での事後確率(陽性反応的中率)の計算例は,特異度99.9%のときに8.3%と示すだけでなく,99.99%の場合,99.999%の場合にどうなるかも示した方が良かっただろう(それぞれ,47.3%,90%となる)。武漢での1000万人調査結果(Nature Communicationsで論文になっているが,この陽性例がすべて偽陽性だったと仮定しても―実際は本当に無症状感染の人もそれなりにいたと思うが―PCRの特異度は99.99%以上あることになる。本書でも何度か触れられている回復後に残っている遺伝子断片を検出してしまうことによる偽陽性は,この武漢の検査でも同等に検出されるはず)などを考えたら,99.99%での計算例を示す方が現実的意味があると思う。もっとも,特異度が低くなる原因が主に人為的ミスだとしたら,長い時間にわたって多くの施設で少しずつ検査される方が,武漢のように一斉検査するよりも人為的ミスが起こる可能性は高いかもしれないが。ちなみに,現在のように感染拡大が続いてくると事前確率も上がってくるので,事前確率を0.1%として計算すると,特異度99.9%でも事後確率47.3%となる。事後確率50%というのは,陽性か陰性かという2値判定の現象についての判断としては,ランダムに決めるのと同じだから(もちろん,ほとんどの人が陰性であるときに,この人が陽性である可能性は五分五分だとわかるのは,対象者を絞る目的で意味はあるが),その個人にとっての検査を受ける意味は微妙なところがあり,本書で岩田先生が主張されている,医師がちゃんと背景情報の聞き取りを含めて臨床的な診断を行うことが大事というロジックは揺るがないので,特異度99.99%や事前確率0.1%の計算例を出して欲しかった。マイクロ飛沫の滞留によるクラスター感染を防ぐ上で,換気の悪い複数人がいる場所で喋るときは常にマスクした方が良いという話を無視しているのもどうかと思った。以上3点が残念だったが(「数字とは主観である」というレトリックも,言いたいことはわかるがどうかと思うし,台湾やNZでうまくいった理由として対策を始めた時期の早さを挙げていたが,感染者が増えて強いNPIsをとったとき,新規検出者ゼロが2週間続くまで強い行動制限を続けた点の重要性に触れていないのも残念だった),自叙伝部分は面白かったし,「マシに間違える」という考え方はエルゴノミクス的にも重要で合理的だし,安心を求めることの害とか,個人よりもシステムが重要であるという点も概ね同感であった。
(list)
▼前【596】(朝から会議(2020年12月18日)
) ▲次【598】(日曜(2020年12月20日)
) ●Top
Notice to cite or link here | [TOP PAGE]