Latest update on 2025年12月3日 (水) at 07:32:55.
【第1964回】 ソフトボール部OB総会とR研究集会で東京へ(2025年11月22-24日)
- 土曜は昼前に公衆衛生実習の学生が培地の観察に来るので名谷キャンパスへ出勤(休日出勤というわけではなく、ボランティアだが)してから、新神戸に移動して東京へ行き、東大ソフトボール部のOB総会に参加する。
- その後、小作という駅のそばのビジネスホテルに泊まり、翌朝立川に移動してR研究集会に参加し、最終の新幹線で神戸に帰る予定だが、体力がもつか若干不安。
- OB総会から二次会を経て井の頭線で吉祥寺に出て、中央線・青梅線で小作へ。予定通り0:00少し前に到着。電車も意外に混んでいたが、小作の駅周辺に飲み屋がたくさんあって、こんな時刻なのにどこも繁盛している感じだったのには驚いた。
- 翌朝、8:20頃にチェックアウトして立川へ移動し、駅前の松屋で朝食をとってから統計数理研究所へ。30分以上前に着いてしまった。
- 10:15から予定通りR研究集会2025開始。以下メモ(例によって自分のために検索しながらメモしただけなので、内容は無保証)。
- 最初は瓜生さんによる次世代IDE、Positronの紹介から。最近ではRStudioもPosit社からホスティングされているが、そのPosit社が開発中の次世代IDEがPositronとのこと。今年正式リリースされた。会場参加者はまだほぼ全員がRStudio使いであった。Positへの社名変更はR主流からデータサイエンス全体への転換を意味する。Rmdの後継Quartoが象徴的。その流れで2024からPositron開発が始まった。RStudioがR特化設計でPythonサポートもR経由だったのに対して、PositronはVS Codeの拡張性とRStudioの親和性を融合し、最初から多言語対応。PositronはRStudioとVS Codeの中間的な、データサイエンスに特化したVS Codeといえる。View()が優秀。変数のピン留めやフィルタリングもできる。Quartoでは、RとPythonのチャンク間でデータ共有できる(Pythonのチャンク内でr.の後にRのオブジェクト名をつければ参照できる)。Typstによるpdf出力もできる。AirフォーマッタというRust製ツールがあり、共同作業における個人間の違いを自動整形によりなくしてくれるのが便利とのこと。インストールしてちょっと使ってみたが、RStudioより軽い感じ。
- 2題目はef-prime鈴木さんによる非線形相関の評価と再現可能研究。R AnalyticFlowの話じゃないんだ。pvclustというパッケージを作ってcranで公開している。まずは実行環境の保存と復元というところから。renvパッケージでプロジェクトごとにパッケージ管理とか、miniCRANを使う手もあるが、古いものの再現可能性は必ずしも十分ではない。昔のRは入れられても、普通にinstall.packages()で入るパッケージは現在のバージョン。PPM(Posit Package Manager)を使えば、過去の指定時点におけるパッケージをインストールできる。が、鈴木さんが開発したdatebackパッケージでもできる。依存パッケージが多いと便利。R-3.2.0以降ならローカルレポジトリを作れる。このパッケージ自体が他のパッケージに依存したくないため、base-Rでウェブスクレイピングも含めてゴリゴリ書いたとのこと。ここからまったく話は変わり、非線形相関の話。Nattoパッケージで不確実性係数を出すと変数間の関係を二元分割表に置き換えることができる。分割を増やせば真の分布の良い近似になる。そこで使っている相互情報量は、MIC (Reshef et al., 2011)も似た考え方。Linfoot (1957)の情報相関量係数と似た相互依存度の指標を考えた。相互依存度に基づく一般化相関尺度として、カイ二乗相関という指標を提案。分割数の決定が難しい。自動選択の暫定案として10:2ルール。gcorというパッケージに実装した(GitHubで公開)。随分前に、どんな形の相関でも見つけられるような指標みたいな話って聞いたことがある気がするんだがなあ、と思って自分のサイトを検索したが見つからなかった(20251125追記:MICについては2013年にメモしていた。2014年に馬場さんという方も用例付きのブログ記事を書かれていた)。
- 3題目は安川さんで、分布回帰のいろいろという話。条件付き分布全体をモデル化。パッケージとしては、gamlss(またはgamlss2)、bamlss、mlt、tram、logcondens、quantreg、expectreg等。従来の回帰分析では分散、歪度など、多くの情報が失われている。GAMLSS(Generalized Additive Models for Location, Scale and Shape)が、Rigby and Stasinopoulos (2005)で提案された。分布パラメータを共変量の関数としてモデル化する。ばらつきや歪みが説明変数によってどう変化するかを分析可能。GLM、GAMの自然な拡張。対数尤度関数を最大化するためにRSアルゴリズムが提案されている。モデル診断はワームプロットと正規化分位点残差が推奨されている。gamlssパッケージでは、いくつかの平滑化関数が使える。plot()に結果オブジェクトを与えると、普通の4つの診断プロットがでるが、wp()だとワームプロットをしてくれる。airqualityデータのOzone ~ pb(Temp)でやってみると、裾の当てはまり、尖度、歪度に改善の余地がある。Stasinopoulos et al.の2024のCambridge University Pressの本は応用例中心の総説的な本でお薦め。検索してみると、このブログ記事で数年前に扱われていたが、その後かなり発展している模様。
- 昼休み。往路で買ってきた握り飯で昼食を済ませる。
- 4題目は阪大の鈴木さんでグラフィカルモデルと因果探索:R言語による実装という演題。来月、こういうタイトルの本が共立出版から出る(機械学習の数理100問シリーズ。ブラックボックスがなく、フルスクラッチコードが載っているらしい)。因果探索とは、変数順序の探索+依存関係の探索。LiNGAMの紹介、CRAN BNSLパッケージの話など。鈴木さんのそもそもの専門は確率的グラフィカルモデル。Asiaデータセット(bnstructパッケージに入っている)を使った説明。PCアルゴリズム(BNSLパッケージに実装している)で枝を刈り込む。相互情報量の大きい順に結んでいってループができなければ森ができる(Chow-Liuアルゴリズム)。ベイズ相互情報量推定量を最尤推定して、負だと独立→結ばない。ゲノム解析にも応用されている。Int. J. Approximate Reasoning, 2016で乳癌患者の遺伝子発現データを解析している。SNPにも使われている。順序を求める話は、加法雑音モデル(狩野、2003)により2つの変数のどちらの独立性が高いか? を決定。HSICによる独立性検定。独立→相関係数はゼロは言えるが、逆は言えない。最近の成果としては、交絡の存在を許容したモデルを作っている。LiNGAMは交絡がない因果グラフのどれかが真と考えている。大きなネットワークを描くときiGraphではなくCytoscapeがよく使われている。
- 5題目は徳島大のInaiさんとHattoriさんによる高校教師の動機づけに影響を与えている要因の特定、という演題。教職員の労働環境の厳しさから、精神疾患による休職が増えている。Yamada (2007)、Miura and Seto (2021)など先行研究。機械学習を用いて、どういう要因が高校教員の働く動機づけに影響しているかを探索。192人、9県(愛媛、熊本が多い)の公立高校教員。平均年齢44.63歳。数学科が最多(そもそも教員数の分布がフラットではないと思うが)。68問の質問(はい・いいえもあれば、7件法リッカートもある)を8ドメインに分ける。先行研究で教科を教える楽しさが動機づけに影響しているとあったので、グラフィカルにこのデータでもチェックしたら、確かに関係はありそうだった(どうやって描いたグラフ? サンキーダイアグラムだが、たぶんモザイクプロットの方が良い)。連続変数同士の相関係数行列から、教員数と教歴年数は他の変数との相関が強すぎるので外した。7件法の結果についても相関係数行列を計算。絶対値0.6(どういう基準?)以上の相関があったものは外した結果、説明変数が62個。rpartパッケージを使って、決定木で変数を減らした。random forestやCatboostを使って機械学習モデルを構築する予定。モティベーションが低い先生の参加が少ない限界。インセンティブを与える?
- 6題目は関西学院大の地道さんたちによる、DuckDB+RによるDataHubデータの探索的財務ビッグデータ解析という演題。Moody's DataHubを用いた。データ抽出にも複数のステップが必要。SQLでサーバ内に仮想的なFTPサーバを立てて400 GBくらいのデータをダウンロードする。basicとfinancialsとstockという3種類のデータがそれぞれ複数ある。Parquetデータの前処理には、pacman::p_load()とopen_dataset()とwrite_dataset()という関数が有用。DuckDBとはDBMSの1つ。EmbeddedでOLAPな。tbl()での読み込みは遅延評価なので速い。8 TBのストレージ(SSD)がマスト。
- 7題目は樋口さんによる、MCPサーバでRという演題。Model Context Protocol。UMA方式のPCはローカルなLLM動作要件のハードルを下げた。2025年はVibeコーディング元年?(こういう感じ[=Vibe]でスクリプトを作って、とLLMに指示するとプログラムができる)音声入力で4月時点では1500行くらいが限界に思われたが、11月にはCursor codexを使って5000行まで行った。11/19にAntigravity(Google)が登場。ellmerパッケージは商用LLMやローカルLLM(ollama、vLLM)を統一的に使える。library(ellmer); chat <- chat_ollama(model="gpt-oss"); chat$set_turns(list()); ans <- chat$queryみたいな使い方。AIサイエンティストとMCPとして、Vibeコーディングが実用化され、さまざまなサービスをローカル運用で統合することでセキュリティ対策しつつ実運用できる。とはいえ、R専用よりも汎用の方が実用的かもしれない。
- 休憩(の前にR言語 Advent Calendar 2025の宣伝)を挟んで8題目は再び瓜生さんによる、AIで加速するデータサイエンス:活用と責任ある利用、という演題。LLMsが持つIUCNレッドリスト種の生態学的知識の評価、という論文をarXivに載せている。PositronのAIアシスタント機能を使った。GitHub Copilot Chatと連携して、コード補完、リアルタイムのエラー診断支援、コメントからのコード生成をしてくれる。あ、これって、パッケージを作っているときのexample()のコードを作ってもらえたりする? でもAIって架空データ生成は得意じゃない気がするんだよなあ。AIを論文作成に使った場合、それを明記する(透明性確保)ことは必須。統合的活用の一部として使う。でもCopilotって結構ハルシネーションあるからなあ。#'などを使えばちゃんと要素は区別してくれるので、example()を作らせるのには良いかも。
- 9題目は谷村さんによる、NipponMapパッケージの新機能。谷村さんは初回から皆勤。まだドキュメント更新中なのでcranでは未更新。新機能として、市区町村レベルのnbクラスが加わった。nbクラスとは、spdepパッケージが定義する近隣リストのクラス。これから空間重み行列が作成される。クラスオブジェクトの構造は単純なベクトルのリスト。nbクラスの生成方法にはいろいろあるが、いずれも機械的計算で、実世界を反映しない。NipponMapパッケージの市区町村レベルのnbクラスには、手作業で社会的な接続性を編集した空間重み行列を入れた←膨大な作業だなあ。まずはQueen法で隣接ポリゴンのnbクラスオブジェクトを作り、最大ポリゴンを対象に幾何的中心点を計算し、その点を起点とした距離計算でk次最近隣法を用いて孤立した市区町村を結合。孤立したsubgraphを検出し、それ同士が最近隣の市区町村で接続される関数を作成し、日本全体で1つのグラフになるまで繰り返す。その後に誤接続を手作業で修正。道路網や鉄道網を国土数値情報からダウンロードして市区町村ポリゴンやnbクラスネットワークと重ねて視覚的確認。例えば明石海峡大橋が垂水区と淡路島をつないでいるので、明石市と淡路島の接続を削除し、垂水区と淡路島を接続したなど。1917市区町村をedit.nb()で対話的に修正するのは大変なので、専用の関数を書いて修正した。注意点としては、北方領土が入っているので、分析に含めない場合は削除する必要があること、データの市区町村の並びとnbクラスオブジェクトの市区町村の並びが完全に一致しなくてはいけないこと(そもそも空間データ分析は欠損があると計算できないので取り除くことが普通)。droplinks()やsubset.nb()で除いたり、必要なものだけ抽出したりできる。grepl()でattr()で地区コードを取り出して正規表現でマッチさせるなどする。離島を接続するときに船と飛行機の両方でつながっていたらどちらを優先するのかと尋ねてみたら、フェリーや航空による接続は考慮していないとのこと(つまり陸路がない場合は距離だけということだな)。別バージョンとして人流で重み付けを捉えるものも検討中とのこと。
- 10題目は岡山大の山川さんによる、衛星リモートセンシングデータのモデリング。地球観測(EO)データには欠測があるので、空間補間した。クリギング法を採用。gstatパッケージを使って、クリギング法を実装。地理情報データの準備や表示にはQGISを使用。クリギング法にも細かく分けるといろいろある。通常クリギング(OK)、普遍クリギング(UK)など。UKには共変量として、海底地形や観測点の海岸線からの距離を用いる。OKに比べて分散が小さくなると期待。フィンランド湾(GoF)表層部のクロロフィル濃度、観測点数1,141,037点(GeoTIFF形式、水平解像度333m)。雲で隠蔽された領域を除く観測点数は371,121点。そのままだと非力なPCでは動かないので限定したらしい。空間構造を把握するため、経験バリオグラムを出して、それに理論バリオグラムを回帰させ、クリギングウェイトを推定。ウェイトの制約条件は総和が1ということ。観測値がドリフトや系統的なトレンドを含むときに固有定常でないためOKは良くない。その問題を解決するためUKを用いる。OKでもUKでもレンジが100 kmくらい。交差検証法によりIDWと比較すると、MSEが半減していて、IDWよりクリギング法の方がfitが良い。この発表は既発表論文をGoogle NotebookLMに放り込んで多少加工してBeamer LaTeXで作った。所要3日。他人の論文でも同じことができてしまうかも? と考えると、Journal Clubは意味がなくなってしまう可能性も。
- 11題目は谷村さんのところの大学院生、加藤さんによる、Rによる地理空間メッシュデータから行政区域代表値を算出する方法に関する検討、という演題。健康指標(行政区ごとのデータ)と気象学的因子(メッシュデータ)の関連を見たいので、メッシュデータから行政区を代表するデータが必要。メッシュの細かさは4段階。人口加重平均法(それぞれの行政区の幾何的中心点が含まれるメッシュの値をその行政区の値として、その行政区の人口を重みとして加重平均を計算。これをゴールドスタンダードとする)、幾何的中心点法(シンプルに幾何的中心点が含まれるメッシュの値を、その行政区の値とする)、役場所在地法、領域内平均法の4つを、4種類の地理空間メッシュデータで計算して結果を比較。メッシュデータのダウンロードはsfパッケージの関数を利用。琵琶湖が欠損値として999999が入っていたので、変な値になっていたので補正。夜間光輝度データはblackmarblerパッケージを使って取得。スポーツ施設数はeStatから読み込み、メッシュデータを別に読み込んで結合。いろいろ違いがあった結果からすると、面倒でも人口加重平均を使うべき、ということになりそう。人口自体をメッシュからとってきて重みにしたら? というef-prime鈴木さんからの指摘に対して、人口メッシュが行政境界をまたぐため難しいとの返答。物理量は領域内面積を重みにして加重平均にした方が良いのでは? という指摘に対しては、健康指標との関連については人の住んでいないところの情報を入れない方が合うのでは? と考えたとの回答。健康寿命は要介護度ベースの値を三重県が出しているものを使ったそうだ。
- 総合討論が予定されていたが時間が延びたので省略された。懇親会に1時間だけ参加して帰途に就いた。姫路行き最終で新神戸まで。
- 月曜は疲れたので食材を買いにLIFEに行った以外は在宅でまったり過ごしてしまった。
🦋 (list)
▼前【1963】(六甲から名谷へ(2025年11月21日)) ▲次【1965】(実習など(2025年11月25-27日)) ●Top
🦋 = Cite and link this article to post bluesky, if you have logged in bluesky.
Notice to cite or link here | [TOP PAGE]