目的
Rで「Simulationをすることで,ユーザーでも統計学の理解が深まる」事例を示します。
例題
臨床心理学では,しばしば,連続変数を中央値やcutoff pointで離散化するケースが見られます。
たとえば,ベック抑うつ尺度(BDI)で「10点以上の被検者を抑うつ者」,「10点未満の被検者を非抑うつ者」と分離するケースです。 また,ツァン抑うつ性尺度(SDS)で,「中央値以上の被検者を抑うつ高群」,「中央値未満の者を抑うつ低群」と分離するケースも多く見られます。
MacCallum et al. (2002) では,このような「恣意的な2値化」を行う問題点を,ユーザー向けに指摘しています。この文献で示されている,Simulationを一部,Rを用いて再現してみます。
引用文献: MacCallum, R. C., Zhang, S., Preacher, K. J., & Rucker, D. D. (2002). On the practice of dichotomization of quantitative variables. Psychological Methods, 7, 19-40.
手続き
母相関係数を決める (r =.1, .3, .5, .7, 9)。
2変量正規分布に従う母集団から,標本抽出する。標本サイズは,以下の通り (n=50, 100, 150, 200, 250, 300)。
積率相関係数を算出する。
片方の変数を中央値で分離する.その後,point-biserial correlationを算出する。
point-biserial correlation が,積率相関係数よりも大きくなるか否か評価する。
10000万回,2-5の手順を繰り返す。
point-biserial correlation が,積率相関係数よりも大きくなった数を数える。
Rプログラム
Step1: 特定の相関係数を持つ二変量データの生成(青木先生のプログラム )
gendat2 <- function(nc, r)
{
# 仮のデータ行列を作る。この時点では変数間の相関は近似的に0である。
z <- matrix(rnorm(2*nc), ncol=2)
# 主成分分析を行い,主成分得点を求める。この時点で変数間の相関は完全に0である。
res <- eigen(r2 <- cor(z))
coeff <- solve(r2) %*% (sqrt(matrix(res$values, 2, 2, byrow=TRUE))*res$vectors)
z <- t((t(z)-apply(z, 2, mean))/sqrt(apply(z, 2, var)*(nc-1)/nc)) %*%
coeff
# コレスキー分解の結果をもとに,指定された相関係数行列 を持つように主成分得点を変換する。
z %*% chol(matrix(c(1, r, r, 1), ncol=2))
}
Step2: 母集団を定義
N <- 100000
rho <- .1
Rho <- gendat2(N,rho)
#便宜的に,母集団の大きさを「100000」とする
#便宜的に,母集団相関係数を「.1」とする
#相関係数が「.1」で,標本サイズが「100000」の2変量データを作成する(母集団と考える)
Step3: 標本抽出
n <- 50
sampling <- sample(N, n)
temp <- Rho[sampling,]
#便宜的に,標本サイズを50とする
#100000から50個,無作為に番号を選ぶ
#母集団から,無作為に選んだ番号を指定して,標本抽出する
Step4: 変数名を定義
x <- xd <- temp[,1]
y <- temp[,2]
xd[x < median(x)] <- 0
xd[x >= median(x)] <- 1
標本抽出した1列目のデータを,x, xdと命名する
標本抽出した2列目のデータを,yと命名する
xが中央値未満の場合,xdは0とする
xが中央値以上の場合,xdは1とする
Step5: 相関係数の算出
pearson <- cor(x, y)
pb <- cor(xd, y)
積率相関係数を算出する
point-biserial correlationを算出する
Step6: 反復計算
sim1 <- function(N, n, rho, iter){
count <- 0
Rho <- gendat2(N,rho)
for(i in 1:iter){
sampling <- sample(N, n)
temp <- Rho[sampling,]
x <- xd <- temp[,1]
y <- temp[,2]
xd[x < median(x)] <- 0
xd[x >= median(x)] <- 1
pearson <- cor(x, y)
pb <- cor(xd, y)
if(pb > pearson){
count <- count + 1
}#end if
}# end for
return(count/iter)
}#end fnc
N=母集団の大きさ,n=標本サイズ,rho=母集団相関係数,iter=反復回数を引数とする関数を作成する.
point-biserial correlation が,積率相関係数よりも大きくなった数をfor loopで数える
Step7: 小さな事例の確認
sim1(N=100000,n=50,rho=.1,iter=10000)
母集団の大きさ=100000, 標本サイズ=50,母集団相関係数=.1, 反復回数= 10000の場合に,
point-biserial correlation が,積率相関係数よりも大きくなる割合(大体,.4程度)
Step8: 論文の事例の確認
tab1 <- matrix(0,ncol=6, nrow=5)
N <- seq(50, 300, by=50)
Rho <- seq(.1, .9, by=.2)
colnames(tab1) <- N
rownames(tab1) <- Rho
for(i in 1:length(Rho)){
for(j in 1:length(N)){
tab1[i,j] <- sim1(N=100000, n=N[j], rho=Rho[i], iter=10000)
}
}
5行6列の行列を作成
標本サイズを指定(n=50, 100, 150, 200, 250, 300)
母相関係数を指定(ρ=.1, .3, .5, .7, 9)
行名を作成
列名を作成
反復計算
結果の解釈
tab1のオブジェクトには,以下の表のようなデータが保存されています (無作為抽出の過程が入るので,追計算では全く同じ値にはならない)。
このデータから,以下の2点が考えられます (主に,sampling errorを示したいのだが)。
標本サイズと母集団相関係数が小さい場合,2値化することで相関係数を過大評価する (sampling error)
標本サイズと母集団相関係数が小さくない場合,2値化することで相関係数を過小評価する
したがって,臨床心理学などの,母集団相関係数が小さいことが多い領域での 2値化して得られた有意差は,sampling errorの可能性が高い。 また,2値化して有意差が得られなかった場合は,単に,検出力が低いことが原因かもしれない。2値化により,検出力と分散説明率が大幅に下がることは証明 されているので,注意が必要です (詳しくは,MacCallum et al., 2002を参照下さい)。そもそも,わざわざ連続変数を離散化する理由が希薄なのです。
目次: 雑多な知識
Rの導入に関するポイントを書いています。
テキストエディタを使用する
潜在変数を扱うモデルはRでは,今のところ使わないでおこう
Rを学習する意義とデメリット
Rを学習する前に…
「Rは大変だから勉強しないでおこう」と思う前に…
Rによる関数の作り方
Rによるシミュレーション
What's New
今年も,いろいろとありました。当Webサイトを御覧頂いている皆様に深謝致します。例年の目標管理のために,2021年の課題と反省 (妄想/妄言) と2022年の課題と反省 (妄想/妄言) を記載致しました。来年もよろしくお願い申し上げます。(2020/12/30)
臨床精神薬理に寄稿しました。(2021/2/4)
今年も,いろいろとありました。当Webサイトを御覧頂いている皆様に深謝致します。例年の目標管理のために,2020年の課題と反省 (妄想/妄言) と2021年の課題と反省 (妄想/妄言) を記載致しました。来年もよろしくお願い申し上げます。(2020/12/30)
日本疫学会ニュースレターに寄稿する機会を賜りました。(2020/4/15)
アカデミアを終了して、主に公的研究を支援する非営利型の一般社団法人を開業しました。研究の生産性と質を総合的に高めるために、尽力したいと考えております。町田駅付近にいらした際は、遊びにいらして下さいますと幸いです。(2020/4/1)
日本疫学会奨励賞を授与頂きました。これまで,ご支援くださった皆様に,心より感謝いたします。(2020/2/23)
REQUIRE研究会第37回研究集会 (3/21 (土) 14:00-17:45; ベルサール飯田橋 ) を開催します。(2020/2/18, 3/14追記)
今年も,いろいろとありました。当Webサイトを御覧頂いている皆様に深謝致します。例年の目標管理のために,2019年の課題と反省 (妄想/妄言) と2020年の課題と反省 (妄想/妄言) を記載致しました。来年もよろしくお願い申し上げます。(2019/12/31)
REQUIRE研究会第36回研究集会 (1/18 (土) 13:00-18:00; 東京医科歯科大学) を開催します。(2019/12/13)
株式会社情報機構ヘルスケア系セミナー (2/27(木)12:30-16:30; JAM金属労働会館 ) にて講演を担当します。(2019/11/5, 2020/1/17追記)
International Journal of Environmental Research and Public Healthに共著論文が掲載されました。(2019/10/17)
編集を分担した認知行動療法辞典 が出版されました。(2019/9/3)
REQUIRE研究会第35回研究集会 (9/7 (土) 13:00-18:00; 東京医科歯科大学) を開催します。(2019/8/2)
第2回NDBユーザー会 (8/23 (金) 10:00-17:30) にて講演を担当します。 (2019/7/11, 8/24追記)
実務者のためのデータベース研究講座 その2 (7/10 (水) 13:30-17:30) にて講演を担当します。(2019/6/10)
北里大学医学部精神科学教室研究会 (7/4 (木) 18:00-19:00) にて講演します。(2019/6/10)
第33回臨床研究の日 (5/21 (火) 12:00-13:00; 琉球大学) にて講演しました。(2019/6/4)
REQUIRE研究会第34回研究集会 (5/11 (土) 14:30-17:45; 東京医科歯科大学) を開催します。(2019/4/20)
Journal of Attention Disorders誌に主著論文が掲載されました。(2019/4/4)
臨床研究セミナー (2019/3/22 (金) 18:30-19:30; 倉敷中央病院) にて講演しました。(2019/3/23)
臨床精神薬理に寄稿しました。(2019/2/22)
第1回NDBユーザー会 (2/27 (水) 10:20-16:30@グランフロント大阪) にて講演を担当します。(2019/1/29, 3/1追記)
今年も,いろいろとありました。当Webサイトを御覧頂いている皆様に深謝致します。例年の目標管理のために,2018年の課題と反省 (妄想/妄言) と2019年の課題と反省 (妄想/妄言) を記載致しました。来年もよろしくお願い申し上げます。(2018/12/31)
第24回疫学の未来を語る若手の集い (1/30 (水) 18:15-20:00@国立がん研究センター) にて講演を担当します。
レセプト情報・特定健診等情報データベース(NDB)の使用経験 (スライド ) を新設しました。(2018/11/25, 2019/1/11追加)