O-1ビザ取得顛末記

自分がO-1ビザの申請をした時、研究者・科学者の申請に関する情報がインターネット上にほとんど無く難儀したので、備忘録的に体験談を書いておきます。*1

O-1を申請することになった経緯

外国人がアメリカの企業で働くには、就労可能なビザが必要になります。 アメリカ企業による正規雇用の場合*2、最もメジャーなのはH1Bビザを取ることです。しかし、H1Bビザに申し込めるチャンスは年に一回しかなく、申請から発給までにもしばらく時間がかかります。年間発給数も決まっているため、抽選に外れると次年まで待たなければなりません。多くの人は、アメリカの大学・大学院を卒業するともらえるOPTというシステムを使って働き始め、有効期間の1~2年のうちにH1B取得を目指すようです。

僕の場合、日本の大学院を出た後にポスドクを経由して就職したので、これには該当しません。その上、ポスドク時代に取得していたJ-1ビザに"Two-Year Home-Country Physical Presence Requirement"*3 という制限がかかっていたため、そもそもH1Bを取得することができませんでした*4

幸いなことに、O-1というビザには

  1. いつでも申し込め、審査プロセスも早い
  2. Two-year ruleの対象外であり、Waiver手続きをしなくても取得できる

という利点があったため、僕の場合はこのカテゴリーでのビザ取得を目指すことになりました。このビザはIndividuals with Extraordinary Ability or Achievementの為とされており、"卓越した能力"を示すためにかなりの量の書類を用意する必要があります。比較的特殊なケースになるので弁護士費用なども高くなり、このビザのサポートをしてくれる企業も少なくなります。ただ、申請のハードルは思ったより高くなく、移民局のページに書いてあるようなノーベル賞を持っているようなレベルの科学者である必要は全く無いようです。

書類の用意

O-1を申請するにあたって何よりも重要なのは、科学者として卓越していることを示すための書類集めです。 USCIS(移民局)のページによると、以下のカテゴリーから少なくとも3つを満たす必要があるとされています。

  1. Receipt of nationally or internationally recognized prizes or awards for excellence in the field of endeavor
  2. Membership in associations in the field for which classification is sought which require outstanding achievements, as judged by recognized national or international experts in the field
  3. Published material in professional or major trade publications, newspapers or other major media about the beneficiary and the beneficiary’s work in the field for which classification is sought
  4. Original scientific, scholarly, or business-related contributions of major significance in the field
  5. Authorship of scholarly articles in professional journals or other major media in the field for which classification is sought
  6. A high salary or other remuneration for services as evidenced by contracts or other reliable evidence
  7. Participation on a panel, or individually, as a judge of the work of others in the same or in a field of specialization allied to that field for which classification is sought
  8. Employment in a critical or essential capacity for organizations and establishments that have a distinguished reputation

弁護士の人と話した感触だと、ある程度の論文数+引用数(4と5に該当?)をベースとした上で、その他をできれば2つ以上満たしたいという所でした。引用数はどれくらいがminimumなのかは分かりませんが、2桁でも大丈夫そうです(二桁前半・後半など細かくは分かりません)。特許も考慮されるようですが、どのカテゴリーに該当するのかはいまいち分かりません。僕の場合は結局、論文・引用・学会発表に加え、海外学振&国内学会のポスター賞を1に、論文誌のPeer-reviewerの経験を7に適用しました。O-1の取得を目指す可能性のある方は、カテゴリー数を増やすことも念頭に置いて、積極的にReviewerの役割を受けることをおすすめします。

併せて、申請には専門領域で確立された研究者からの複数の推薦状が必須です。僕は五通、(1)複数の国の人から and/or (2)自分の論文の論文を引用してくれている人から集めてくれと言われました。更に、そのうち少なくとも2通は今まで直接仕事・研究をしたことがない人からである必要がありました。最終的に、2通ずつをアメリカと日本の方に、1通をイギリスの方にお願いしました。

その他、僕が経験した・聞いたことのうち、役に立ちそうな事を列挙しておきます。

  • 6に関しては、本当に飛び抜けた給料である必要があるようで、通常の会社勤めの人が満たすのは難しそうです。
  • Citationのカウントやリストの作成にはGoogle Scholar Citationsを使いました(そのまま印刷して提出しました)。
  • 僕は使っていないのでどうなのか分かりませんが、Web上で検索すると、O-1が通る確率を無料で評価してくれるようなサービスが有るようです。
  • 貢献を数字として示しやすいIFやjournalの分野内でのランキング(Web of Scienceで調べられる)は、自分の論文・引用元の論文・Reviewerの経験のすべてにおいて重視されていました。

経過

ビザが手に入るまでの時間はおおよそ三ヶ月となりましたが、人によってかなりばらつきがあるようです(半年近くかかったという話も聞いたことがあります)。

  • 11月中旬: 弁護士と連絡を取り始め、申請に用いる書類のカテゴリーを模索(およそ二週間)
  • 11月下旬~12月上旬: Reference lettersを除く必要書類の準備の完了
  • 12月中旬~1月上旬: Reference lettersも含めた必要書類の準備の完了*5
  • 1月下旬: USCISへのPetition申請
  • (2月上旬: 日本に一時帰国)
  • 2月上旬: Petitionの承認(申請から約一週間強*6 )
  • 2月上旬: ↑の数日後、I-797等面接に必要な書類の原本を弁護士からFEDEXで受け取る
  • 2月中旬: 日本の米国大使館で面接 *7
  • 2月中旬: ビザの貼付されたパスポートを取得(面接から一週間強)

結びに

上にも書きましたが、O-1取得のハードルは思ったほど高くないので、アメリカ就職を考えている科学者の方(特にポスドクからアメリカに来られている方)には一考の価値があると思います。

*1:もちろん必要な書類や手続の詳細などは個人・申請年によって違うので、詳細はケースを扱ってくれる弁護士の人にご相談下さい。

*2:インターンシップやポスドク等の場合はJ-1というビザを使うことが多いと思います。

*3:J-1プログラムの終了後、二年間母国に物理的に住まないと、多くのアメリカビザ・グリーンカードが取得できないという制限。政府系機関から給料を貰っていたりした場合に該当します。

*4:一応Waiver手続きをすることは可能なのですが、それについてはWeb上に色々と情報があるので見てみて下さい。

*5:ホリデーシーズンにかかってしまったため、少し手間取りました。

*6:Premium processingという、追加料金を払う代わりに15 calendar days以内に返事をもらえるという制度を使用しました。

*7:J-1の二年ルールに該当している人はアメリカ国内でビザをO-1に切り替えることが出来ないらしく、一時帰国して申請することになりました。第三国(カナダなど)でも一応は大丈夫なことになっているようですが、母国のほうが安全なようです。

Metrum Research GroupによるSTANの入門コース

Metrum Research Groupから昨日、STANの入門コースの教材がアップロードされました*1。Metrumは、STANをPharmacometricsに適用するため積極的に開発に携わっています。今回公開されたものは、昨年度のPAGE/ACoP meetingで開催された Getting Started with Bayesian PKPD Modeling Using Stan: Practical use of Stan & R for PKPD applications というワークショップが元になっており、基礎的なSTANの使用法に重点が置かれています。 コードや解説PDFに加え、実際にコードを動かすチュートリアルもYouTubeにアップロードされています。英語に抵抗の無い方はこのブログより百倍ためになると思うので、ご覧になることをおすすめします。

metrumrg.com

以下に簡単にコース内容をまとめてみました。番号はアップロードされている動画の番号に(おおよそ)対応しています。特に既にStanに触ったことのある方は、興味がある場所から見てみて下さい。

  1. ベイズ統計・統計モデリングの基本
  2. Stanの紹介・インストール・linear regressionを用いた簡単なデモ
  3. 単純なPK-PDモデル(Emaxモデル)を用いた非線形回帰*2と階層モデル(試験間差)への拡張
  4. 個人間差を考慮したPK-PDモデル(Emaxモデル)
  5. User-defined functionとそれを用いたPopulation PK解析
  6. 5.の続きとCensored dataに対する尤度計算法(解説のみ)

Population PK解析で用いているコンパートメントモデルには、このチュートリアルでも解析解を用いており、数値的にODE(常微分方程式)は解いていません。とはいえ、僕の書いた様な簡易型のものではなく、しっかりとNONMEM形式のデータに対応することを意識して書かれています。ODEの数値解法*3についてカバーされていなかったのは残念ですが、今年のPAGE/ACoPでMetrumが開催するワークショップでカバーするようなので楽しみです。

*1:この分野にいる人はご存知だと思いますが、Metrumはこれに限らず幅広いトピックに関する教材をCreative Commonsライセンスの元で公開しています。

*2:いきなりODEを解く必要があるPOPPKから入るのではなく、Emaxモデルから入るのは上手いですね。

*3:Torstenという名前のサブモジュールが開発中のようです

Stan & POPPK (2): 階層モデルを用いた複数被験者の薬物動態解析

http://yoshidk6.hatenablog.com/entry/2017/05/24/134934 の続きです。前回使用したモデルを拡張して、複数の被験者からのデータを解析します。解析は以下の手順で行っていきます。

  • 使用する仮想データ
  • 全被験者が同じPKパラメータを持つと仮定
    • Stanモデル
      • transformed parameters
    • Rコード
    • 結果の評価
  • 階層モデルを導入した解析
    • Stanモデル
      • transformed parameters
      • model
    • Rコード
    • 結果の評価
    • パラメータの相関
  • 次のステップ

使用する仮想データ

作成された仮想データは前回と同じく、各被験者がTIME=0で薬物を経口投与された後、各時間ごとに血中濃度(CONC)を測定されたという状況を想定しています。 被験者は各10人ずつ4群に割り当てられており、それぞれ10, 20, 30, 40の投与量がT与えられています。
simple_pk_stan/sim_pk_20170521.csv at master · yoshidk6/simple_pk_stan · GitHub

図示してみると、投与量に応じて血中濃度が変動する一方で、血中濃度推移の形は変動せず、投与量に比例して濃度が上昇していることがわかります。

library(tidyverse)

data.pk <- 
  read_csv("https://raw.githubusercontent.com/yoshidk6/simple_pk_stan/master/data/sim_pk_20170521.csv") 

data.pk.plot <- 
  mutate(data.pk, ID=factor(ID), DOSE_LEVEL=factor(DOSE_LEVEL))

data.pk.plot %>% 
  ggplot(aes(TIME, CONC, group=ID, color=DOSE_LEVEL)) +
  geom_line() +
  geom_point() +
  facet_wrap(~DOSE_LEVEL) +
  scale_y_log10()

f:id:yoshidk6:20170529072239p:plain

Read more

Google Cloud PlatformのRにRStanをインストールする

RStudio ServerをGoogle Computing Engineで動かす - yoshidk6’s blog に引き続き、VMインスタンスにRStanをインストールします。
以下の記事を参考にしてインストールを進めていきます。
Installing RStan on Mac or Linux · stan-dev/rstan Wiki · GitHub

Toolchain

build-essential, g++, libssl-dev をインストールします。

sudo apt-get update
sudo apt-get install build-essential g++ libssl-dev

Configuration

dpkg -s g++でg++のバージョンが4.9以降であることを確認します。 RStudio serverにログインし、以下のコードを実行してMakevarsファイルを作成します。

dotR <- file.path(Sys.getenv("HOME"), ".R")
if (!file.exists(dotR)) dir.create(dotR)
M <- file.path(dotR, "Makevars")
if (!file.exists(M)) file.create(M)
cat("\nCXXFLAGS=-O3 -mtune=native -march=native -Wno-unused-variable -Wno-unused-function", 
    file = M, sep = "\n", append = TRUE)

# Run only if g++ version is 4.9 or higher
cat("\nCXXFLAGS+=-flto -ffat-lto-objects  -Wno-unused-local-typedefs", 
    file = M, sep = "\n", append = TRUE)

Installing RStan

引き続きRStudio server上で以下のコードを実行し、RStanをインストールします。

install.packages("rstan", repos = "https://cloud.r-project.org/", dependencies=TRUE)

インストールに成功したら、Session -> Restart R でRを再起動します。
以下のコードを実行し、10が返されることを確認すればRStanのインストールは完了です。

fx <- inline::cxxfunction( signature(x = "integer", y = "numeric" ) , '
    return ScalarReal( INTEGER(x)[0] * REAL(y)[0] ) ;
' )
fx( 2L, 5 ) # should be 10

RStudio ServerをGoogle Computing Engineで動かす

モチベーション

家で使っているコンピュータがMacbook Air 2011モデル(1.6GHz Core i5, メモリ2GB)と非常に貧弱で、Stanを動かすのに支障が出ている一方で、特段買いたいパソコンも見当たらないので、クラウドのサーバーを試してみることにしました。AWSについては公式含めかなり多くの解説記事がありますが、今回はGoogleのCloudサービスであるGoogle Computing Engineを試してみます。

Virtual Machineをセットアップ

Quickstart Using a Linux VM  |  Compute Engine Documentation  |  Google Cloud Platform を参考にしています。

[プロジェクト]ページに移動し、"Computing Engineを試す"のチュートリアルに従うと、仮想マシンインスタンスの作成が体験できます。途中で無料トライアルを有効にするためクレジットカード情報などの登録が必要になります。

僕は一旦このトライアルで作成したインスタンスを削除した後、"r-studio"という名前のインスタンスを全く同じ設定で新たに作成しました。

R/RStudioのインストール

まず、VMインスタンスページからSSHボタンをクリックしてインスタンスのターミナルに接続し、以下の作業を行います。RとRStudio serverのインストールは、ローカルのマシンにインストールするのと同様に行います(Download RStudio Server – RStudio)。既に手元のサーバーマシンなどにRStudio serverをインストールしたことがある方には馴染み深い手順になっていると思います。

Rのインストール

まず、そのままapt-getを実行すると古いバージョン(2017/5/27現在 3.1.1 (2014-07-10))がインストールされてしまうため、apt-getのインストール元にCRANを追加する必要があります。 エディタで /etc/apt/source.list を開き(sudo vi /etc/apt/sources.list)、以下の接続先を追加してください(CRAN mirror は CRAN - Mirrors から適当に選んで下さい。httpsではエラーとなってうまく行きませんでした)。

deb http://cran.cnr.berkeley.edu/bin/linux/debian jessie-cran34/

その後apt-get updateを実行すると、恐らくPublic keyが足りないというエラーで怒られます。

sudo apt-get update
# W: GPG error: http://cran.cnr.berkeley.edu jessie-cran34/ Release: The following signatures couldn't be verified be cause the public key is not available: NO_PUBKEY FCAE2A0E115C3D8A

Debian 7にRの実行環境(3.1.1)をapt-getでインストールする - Symfoware を参考に、末尾にある FCAE2A0E115C3D8A (選んだCRAN mirrorによって違うかも?) を使用して以下のように公開鍵を登録後、改めてapt-get updateapt-get install r-base を行います。

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FCAE2A0E115C3D8A
sudo apt-get update
sudo apt-get install r-base

コマンドライン版のRをRコマンドで起動し、最近のバージョンがインストールされていることを確認します。(2017/5/27現在 3.4.0 (2017-04-21))

RStudio serverのインストール

再び Download RStudio Server – RStudio を参考に、RStudioをインストールします

sudo apt-get install gdebi-core
wget https://download2.rstudio.org/rstudio-server-1.0.143-amd64.deb
sudo gdebi rstudio-server-1.0.143-amd64.deb

RStudio severにアクセス

RStudioにアクセスできるようにするため、ファイアーウォールの設定を追加する必要があります。

  1. Google Cloud Platformのトップページのメニューから、"ネットワーキング>ファイアーウォール ルール"に移動し、以下のルールを追加します( RStudio Server on a Google Compute Engine instance · Joe Roe を参考にしました)。
    • 名前: allow-rstudio
    • トラフィックの方向: 上り
    • ソースIPの範囲: 0.0.0.0/0 (allow from any source)
    • 指定したプロトコルとポート: tcp:8787
    • ターゲットタグ: allow-rstudio
  2. ターゲットタグであるallow-rstudioを、作成したVMインスタンスの"編集"の中にある"ネットワークタグ"に追加します。
  3. http://<your-instance-ip>:8787 からRStudio serverに接続します。

RStudio serverにログイン

RStudio Server on a Google Compute Engine instance · Joe Roe
上のサイトの"Users and permissions"に詳細が書いてありますが、VMインスタンス上のデフォルトアカウントがkey-basedなログイン形式を用いている一方、RStudio serverはパスワードによるログインにしか対応していないため、RStudio server用のアカウントをLinux上に別に作成する必要があるようです。指摘されているように、既にデフォルトのアカウントでいろいろとファイルを作成してしまっていたら少し面倒そうです。

ともあれ、ブラウザ上のterminalからsudo adduser <username>によって新規ユーザーを作成します。その後、http://<your-instance-ip>:8787 にあるRStudio serverを開き、Linuxアカウントを用いてログインすると無事RStudio serverが使用できます。

tidyverseのインストール

ライブラリーのインストール中に幾つかのLinux用ライブラリが足りないと叱られました。 以下のコマンドで足りないライブラリをインストールしたところ無事tidyverseがインストールできました。

sudo apt-get install libcurl4-openssl-dev libssl-dev libxml2-dev

元々のモチベーションであったRStanのインストールについては、以下に記載しています。

yoshidk6.hatenablog.com

ファイル転送

まだ試していませんが、VMインスタンスへのファイルの転送は通常のSCPによって行うことができるようです。
Transferring Files to Instances  |  Compute Engine Documentation  |  Google Cloud Platform

最後に

終わったらインスタンスを停止することを忘れないようにしましょう。

References

  1. googleComputeEngineRという、ローカルのRから(?)GCEにアクセスしてサーバーをセットアップするパッケージ。Shiny serverを作成する等色々な用途に使うようなら便利かもしれません。今回は完全にブラウザから作成することを目指したので除外。 Launch RStudio Server in the Google Cloud with two lines of R · Mark Edmondson

  2. Googleが提供しているCloud SDKを用いたRStudioのインストール法。これもローカルPCにソフトウェアのインストールが必要になるので除外しましたが、記事で使ったコマンドの多くはこのサイトのものを参考にしました。 Deploying R Studio on Compute Engine

  3. もう一つ(日本語の)記事を見かけました。2. 同様にGoogleが提供しているコマンドラインツールを使用しています。 Google Container Engineの無限のリソースでRStudioを動かす - Technically, technophobic.

Stan & POPPK (1): 一被験者の薬物動態解析

StanでPopulation pharmacokinetic解析 - yoshidk6’s blog の続きです。 最初のステップとして、一被験者のデータを用いた解析を行います。
(2017/5/27 に、データ・コード含めて更新を行いました。)
(2017/10/26 にコードの再更新を行いました。)

使用する仮想データ

作成された仮想データは、各被験者がTIME=0で薬物を経口投与された後、各時間ごとに血中濃度を測定(CONC)されたという状況を想定しています。 今回はこのうち、ID==1の被験者のデータを解析します。
simple_pk_stan/sim_pk_20170521.csv at master · yoshidk6/simple_pk_stan · GitHub

図示してみると、薬物が吸収されるに従って血中濃度CONCが上昇し、次第に体内から排出されるに従って減少していくことが分かります。

library(tidyverse)

data.pk <- read_csv("https://raw.githubusercontent.com/yoshidk6/simple_pk_stan/master/data/sim_pk_20170521.csv") 

data.pk %>%
  filter(ID==1) %>% 
  ggplot(aes(TIME, CONC)) +
  geom_line() +
  geom_point() 

f:id:yoshidk6:20170528160031p:plain

Stanモデル

transformed parameters

このブロックで、1-コンパートメントモデルの解析解に基づいて濃度の算出を行っています(算出式に興味が有る方は一つ前の記事を御覧ください)。 薬物動態パラメータから計算された各時点での血中濃度の平均値がmuに代入されます。

model

Y(測定値)は標準偏差s_Yの対数正規分布に従うと設定しています。

各薬物動態パラメータについては、推定を安定させるため弱情報事前分布を設定しています。また、初期値もある程度plausibleな値を中心にランダムに生成するように設定しています*1

GitHubリンク: https://github.com/yoshidk6/simple_pk_stan/blob/master/code/mod_00_single_subj.stan

Rコード

上記のモデルを動かすRのコードは以下の通りです。

library(tidyverse)
library(rstan)
library(ggmcmc)

rstan_options(auto_write=T)
options(mc.cores=parallel::detectCores())

data.pk   <- 
  read_csv("https://raw.githubusercontent.com/yoshidk6/simple_pk_stan/master/data/sim_pk_20170521.csv") 

## Prepare data for Stan
data.pk.id1 <- filter(data.pk, ID==1)

init <- function(){
    list(KA = exp(rnorm(1, log(0.5), 0.2)),
         CL = exp(rnorm(1, log(0.5), 0.2)),
         VD = exp(rnorm(1, log(5), 0.2)),
         s_Y = runif(1, 0.5, 2))
}

data <- 
  list(N    = nrow(data.pk.id1),
       TIME = data.pk.id1$TIME,
       DOSE = 10,  # ID==1の被験者への投与量は10と設定しています
       Y    = data.pk.id1$CONC)

## Run Stan
fit.stan <-
  stan(file = "mod_00_single_subj.stan", data = data)

結果の評価

安定した推定結果が得られ、推定値のmean (CL=0.33, VD=5.06, KA=0.93, s_y=0.17)も、もともと設定した値(CL=0.30, VD=4.89, KA=1.0, s_y=0.15)と非常に近い値となりました。推定されたパラメータを元に算出された平均値と90%予測区間も、実測値と比較的良く合っています。 f:id:yoshidk6:20170528160259p:plain

上図を生成するためのコードは以下の通りです。

mcmc.sample <- rstan::extract(fit.stan)

y.pred.interval <- 
  mcmc.sample$y_new %>% 
  apply(MARGIN=2, quantile, prob=c(0.05, 0.5, 0.95)) %>% 
  t() %>% 
  tbl_df()

bind_cols(data.pk.id1,
          y.pred.interval) %>% 
  ggplot(aes(TIME, `50%`)) +
  geom_line() +
  geom_ribbon(aes(ymin=`5%`, ymax=`95%`), alpha=0.1) +
  geom_point(data=data.pk.id1, aes(TIME,CONC))

次の記事では、複数被験者のデータを用いたパラメータ推定を行います。

*1:今回用いているモデルには2つの解が存在してしまうことが知られているので(flip-flop)、ラベルスイッチングを何らかの方法で避ける必要がありました。一被験者の場合は値に上下関係をつけることも可能なのですが、後にあるように複数被験者に対して各個人のパラメータを推定すると制限をつけるのが難しくなってしまうため、今回は初期値をうまく設定することにしました。

StanでPopulation pharmacokinetic解析

簡単な薬物動態モデルを使ったPopulation pharmacokinetic (母集団薬物動態) 解析を、練習を兼ねてStanで実装してみました。

項目(予定)

  1. 一被験者の薬物動態解析
  2. 階層モデルによる複数被験者の薬物動態解析
  3. 推定パラメータ間の相関と多変量正規分布
  4. パラメータ個人差を説明する共変量の導入

モチベーション

  • 薬物動態・臨床薬理界隈の人にStanを触ってもらうきっかけにする
  • 薬物動態に馴染みはないが興味があるStan/Rユーザーへの紹介

モデル

仮想データの作成と実際のデータ解析共に、以下のシンプルな1-コンパートメントモデルを用いています。 消化管に投与された薬物が一次の吸収速度 kaに従って体内に移行し、体内では薬物が分布容積Vdに従って分布、最終的にクリアランスCLによって体外へと排出されるというモデルです(Web上にあまり良い図がなかったので、模式図を簡単に作成しました)。

f:id:yoshidk6:20170522122333p:plain:w500

このモデルからは簡単に解析解を導出することができます。興味の有る方は↓の記事を御覧ください(上の図と対応させるには、A0投与量/Vd、k0CL/Vdと読み替えてください)。
differential equations - Analytic solution to the one-compartment model - Mathematics Stack Exchange

解析コード・データ

仮想データ、その作成コード、及びに解析コードはGitHubで公開しています。
GitHub - yoshidk6/simple_pk_stan: Practice Stan with simple POPPK models and virtual data

ダウンロードされる場合はリポジトリごとダウンロードするのが一番楽かと思います。↓を参考にしてください。
GitHubで公開されているファイルをダウンロードするときの注意点(右クリックじゃできないよ) | 非IT企業に勤める中年サラリーマンのIT日記

仮想データはmrgsolveを用いて作成しました。
GitHub - metrumresearchgroup/mrgsolve: Simulate from ODE-based population PK/PD and QSP models in R

Acknowledgement

Stanの使用を始めるにあたり、 StanとRでベイズ統計モデリング / 松浦 健太郎 著 石田 基広 監修 市川 太祐 高橋 康介 高柳 慎一 福島 真太朗 編集 | 共立出版 を頭から読んで勉強しました。実践と背景知識のバランスがとれた素晴らしい本です。このブログの書式も作者の方のブログ StatModeling Memorandum に大いに影響されています。