Vagilla 新奇一転

世の中の変わったことを考えていこう。

臨床試験における症例数の設定

2013年03月16日 | 統計
統計パッケージのRが利用できる。

基本機能に以下の関数がある。
power.prop.test()
power.t.test()

これを利用して、症例数を設定できる。
関数の説明はhelpでみることができる。

使い方は簡単で、
例えば、治験薬と標準薬の2群の評価スケールの差が3.5でSDが6.0だったとする。有意水準5%、検出力80%での症例数は
power.t.test(delta=3.5,sd=6.0,power=0.8)
結果が以下のようになる。

Two-sample t test power calculation

n = 47.11207
delta = 3.5
sd = 6
sig.level = 0.05
power = 0.8
alternative = two.sided

NOTE: n is number in *each* group
したがって、1群48例、2群で96例必要である。

program tab.prop

2012年05月02日 | 統計
###分割表+パーセント
### xはtableの結果
### margins 1:横の%、2:縦の%、3:全体の%
### digitsは小数点以下の桁数

tab.prop <- function(x, margins=1, digits=2) {
xn <- ncol(x)
xm <- nrow(x)
if(margins == 1) {
x1<-round(prop.table(x,1)*100,digits=digits)
} else if(margins == 2) {
x1<-round(prop.table(x,2)*100,digits=digits)
} else {
x1<-round(prop.table(x)*100,digits=digits)
}

x0<-addmargins(x,c(1,2))
x1<-addmargins(x1,c(1,2))
xn2<-(xn+1)*2
xx<-data.frame(matrix(0,xm+1,xn2));
# xx<-as.table(matrix(0,xm+1,xn2));
rownames(xx)=rownames(x0);rownames(xx)[xm+1]<-"Total"
cc<-colnames(x0)
for(i in 0:xn+1){
xx[,i*2-1]<-x0[,i];
xx[,i*2]<-x1[,i]
colnames(xx)[i*2-1]<-cc[i]
colnames(xx)[i*2]<-"%"
}
colnames(xx)[((xn+1)*2-1)]<-"Total"
if(margins == 1) {
a<-round(x1[xm+1,]/x1[xm+1,xn+1]*100,digits=digits)
for(i in 0:xn+1){
xx[xm+1,i*2]<-a[i]
}

} else if(margins == 2) {
a<-round(x1[,xn+1]/x1[xm+1,xn+1]*100,digits=digits)
xx[,(xn+1)*2]<-a
}
return(xx)
}

Rで簡単な集計表(パーセント表示)を作成

2012年05月02日 | 統計

統計ソフトRでは、集計はtable()関数、その比率はprop.table()関数で簡単に作成できるが、SASのような両方合わせた表は簡単にできない。得に今、集計の結果をLaTeXで記載しているが、表組みを最初からするのが面倒である。

そこで、簡単なプログラムを作成してみた。
まず、元のtableは以下のようなものである。
x<-table(Diagnosis,EndPoint)
> x
EndPoint
Diagnosis Alive Death
A     2   0
B     15    0
C               13      0
D               36      5

> prop.table(x)
                  EndPoint
Diagnosis Alive              Death
A              0.02816901   0.00000000
B              0.21126761   0.00000000
C              0.18309859   0.00000000
D              0.50704225   0.07042254
>

これを作成したtab.propで処理すると、以下のようになる。
> tab.prop(x,margins=3)
     Alive       %      Death %    Total     %
A        2    2.82      0     0.00      2     2.82
B      15 21.13       0     0.00    15   21.13
C      13 18.31       0     0.00    13   18.31
D      36 50.70       5     7.04    41   57.74
Total 66 92.96       5     7.04    71 100.00
>
marginsは1:縦、2:横、3:全体の比率に対応している。
小数点の桁数はdigits=で指定できる。

> tab.prop(x,margins=2, digits=3)
    Alive        %    Death  %    Total         %
A       2    3.030         0     0        2     1.515
B     15  22.727         0     0      15   11.364
C     13  19.697         0     0      13     9.849
D      36 54.545         5 100      41   77.273
Total 66 99.999         5 100      71 100.000
>

xtableを利用してLaTexにする。
> library(xtable)
> xtable(tab.prop(x,margins=2,digits=2))
% latex table generated in R 2.15.0 by xtable 1.7-0 package
% Wed May 2 21:13:32 2012
\begin{table}[ht]
\begin{center}
\begin{tabular}{rrrrrrr}
\hline
& Alive & \% & Death & \% & Total & \% \\
\hline
A & 2.00 & 3.03 & 0.00 & 0.00 & 2.00 & 1.51 \\
B & 15.00 & 22.73 & 0.00 & 0.00 & 15.00 & 11.36 \\
C & 13.00 & 19.70 & 0.00 & 0.00 & 13.00 & 9.85 \\
D & 36.00 & 54.55 & 5.00 & 100.00 & 41.00 & 77.27 \\
Total & 66.00 & 100.01 & 5.00 & 100.00 & 71.00 & 100.00 \\
\hline
\end{tabular}
\end{center}
\end{table}
>

これをTeXの文章に張り付ければ、おしまい。


プログラムは次にあります。