群馬大学 | 医学部 | サイトトップ | 医学情報処理演習

医学情報処理演習:2011年度第11回の関数

今回使った関数や文の主なものをまとめます (A selected summary of functions and statements used in the 11th practice is shown here.)

関数名(name)機能(effect)使い方(usage)
:連続した整数列を返す1:4でc(1,2,3,4)が返る
as.factor()要因型に変換整数型や文字列型などの引数を要因型に変換する
levels()要因型変数の水準を参照/代入する
factor()水準を指定して要因型に変換水準名はlabel=オプションで指定する。つまり,sex <- as.factor(c(1,1,1,1,1,1,2,2,2,2,2,2,2)); levels(sex) <- c("男","女")とするのは,sex <- factor(c(1,1,1,1,1,1,2,2,2,2,2,2,2), label=c("男","女"))と同じである。
table()カテゴリ変数の度数分布またはクロス集計表を求める引数がベクトル1個の場合は度数分布,複数のベクトルをコンマで区切って並べるとクロス集計表を求める。ベクトル3つなら3次元のクロス集計表になる。table()の返り値は特殊な行列である"table"クラスをもつ。
x <- read.delim("http://phi.med.gunma-u.ac.jp/medstat/sample02.txt")
x$RF <- factor(ifelse(x$FEVER==1,1,2), label=c("recent fever","no fever"))
x$NETUSE <- factor(ifelse(x$BEDNET==1,1,2), label=c("everyday bednet use","not so use bednet"))
とした場合,table(x$RF,x$NETUSE,x$SEX)とすれば,最近3日間の発熱の有無と蚊帳を毎日使っているかどうかの2×2クロス集計表を男女別に求めることができる(3次元目が層別変数となり,ここでは性別)。
xtabs(~RF+NETUSE+SEX, data=x)でも同じ3次元のクロス集計表が得られる。
mosaicplot()モザイクプロットを表示引数は行列(もちろん"table"クラスをもつ行列であるクロス集計表でも可)
chisq.test()独立性のカイ二乗検定引数は行列(もちろん"table"クラスをもつ行列であるクロス集計表でも可)。オプションとして,correct=FALSEを付けると,Yatesの連続性の補正を行わない。また,オプションとして,simulate.p.value=TRUEを付けると,時間はかかるが有意確率をシミュレーションによって計算させることができる。数学的にはchisq.test()とprop.test()は同等である。
fisher.test()フィッシャーの正確確率検定を実行する。引数は行列(もちろん"table"クラスをもつ行列であるクロス集計表でも可)
mar_table()
*vcdパッケージ
周辺度数を含むクロス集計表を作る。library(vcd); mar_table(matrix(c(12,5,19,4),2,2))
table.margins()
*epitoolsパッケージ
周辺度数を含むクロス集計表を作る。library(epitools); table.margins(matrix(c(12,5,19,4),2,2))
choose()組み合わせを計算するchoose(7,3)は7C3を意味するので,35を返す。
Kappa()
*vcdパッケージ
κ係数を計算する結果をconfint()関数に渡すと信頼区間も得られる。library(vcd); res <- Kappa(matrix(c(10,3,2,19),2,2)); print(res); confint(res)
Kappa.test()
*fmsbパッケージ
κ係数を計算する引数は正方行列または2つのベクトル。2つのベクトルの場合は,2人の評価者のスコアか,2回の評価値など。一致度が偶然と差が無いという帰無仮説の検定結果,κ係数とその信頼区間(デフォルトでは95%),Landis and Koch (1977)の目安による一致度の判定も表示される。library(fmsb); Kappa.test(matrix(c(10,3,2,19),2,2))
dimnames()2次元以上の表のタイトルを一括して参照/設定するover40 <- matrix(c(311,218,124,104),2,2); dimnames(over40) <- list(c("Alive","Dead"),c("NIDDM","IDDM"))
prop.table()
*vcdパッケージ
人数の表を割合の表に変換するx <- matrix(1:4,2,2)として,prop.table(x)は総合計を1とした割合を計算するので,matrix(c(0.1,0.2,0.3,0.4),2,2)を返す。prop.table(x,1)は行方向(横方向)の和を1とした割合を計算するので,matrix(c(0.25,0.33...,0.75,0.66...),2,2)を返す。prop.table(x,2)は列方向(縦方向)の和を1とした割合を計算する。
array()3次元以上の表を定義するx <- array(c(311,218,124,104,15,0,129,1),dim=c(2,2,2)); dimnames(x) <- list(c("Alive","Dead"),c("NIDDM","IDDM"),c("over40","under40"))
3次元の表の場合の要素の参照は,例えば,x[1,1,]により,第1の表と第2の表の1行1列の要素を参照できるので,c(311,15)が返る。x[,,2]で第2の表全部が返るので,"under40"におけるAlive/DeadとNIDDM/IDDMのクロス集計表であるmatrix(c(15,0,129,1),2,2)が参照できる。これを利用すると好きな形に表を組み換えることができる。
woolf_test()
*vcdパッケージ
Woolfの検定を行う3次元目を層別変数とする3次元の表を引数に与え,「どの層でも2つのカテゴリ変数(1次元目と2次元目)間の関連が共通」という帰無仮説を検定する。library(vcd); woolf_test(x)のように使う。
mantelhaen.test()マンテル=ヘンツェルの要約カイ二乗検定を行う。「どの層でも同じ向きに関連がある」を対立仮説とする,クロス表を併合した分析を行う。
structable()
*vcdパッケージ
3次元以上の表を見やすく表示する上記array()によりxが定義済みとすると,たんにprint(x)とするよりも,library(vcd); structable(x, split_vertical=TRUE)とした方が見やすい。

リンクと引用について