現在、.NET でのブートストラップに関するチュートリアルを書いていR
ます。パッケージの機能boot
に落ち着きました。boot
Efron/Tibshirani (1993) による「An Introduction to the Bootstrap」という本を入手し、それらの例のいくつかを複製しました。
これらの例では、さまざまなサンプルに基づいて統計を計算することがよくあります。たとえば、彼らは 16 匹のマウスのサンプルを持っているこの 1 つの例を持っています。これらのマウスのうち 7 匹は、試験手術後に生存期間を延長することを意図した治療を受けました。残りの 9 匹のマウスは治療を受けませんでした。各マウスについて、生存した日数を収集しました (値は以下に示します)。
ここで、ブートストラップ アプローチを使用して、平均値の差が大きいかどうかを調べたいと思います。ただし、ヘルプ ページをboot
正しく理解していれば、サンプル サイズが等しくない 2 つの異なるサンプルを関数に渡すことはできません。私の回避策は次のとおりです。
#Load package boot
library(boot)
#Read in the survival time in days for each mouse
treatment <- c(94, 197, 16, 38, 99, 141, 23)
control <- c(52, 104, 146, 10, 51, 30, 40, 27, 46)
#Call boot twice(!)
b1 <- boot(data = treatment,
statistic = function(x, i) {mean(x[i])},
R = 10000)
b2 <- boot(data = control,
statistic = function(x, i) {mean(x[i])},
R = 10000)
#Compute difference of mean manually
mean_diff <- b1$t -b2$t
私の意見では、このソリューションはちょっとしたハックです。私が興味を持っている統計は現在 vector に保存されていますが、パッケージmean_diff
の優れた機能をすべて利用することはできません。boot
通話できboot.ci
ないmean_diff
など
したがって、私の質問は基本的に、私のハックがboot
パッケージを使用してブートストラップを実行し、 R
2 つの異なるサンプルを比較する統計を行う唯一の方法であるかどうかです。それとも別の方法がありますか?
16行と追加の列「グループ」で1つのdata.frameを渡すことを考えました:
df <- data.frame(survival=c(treatment, control),
group=c(rep(1, length(treatment)), rep(2, length(control))))
head(df)
survival group
1 94 1
2 197 1
3 16 1
4 38 1
5 99 1
6 141 1
boot
ただし、最初の 7 行から 7 つの観測値を、最後の 9 行から 9 つの観測値を常にサンプリングし、これらを個別のサンプルとして扱う必要があることを伝えなければなりません。私はそれを行う方法を知りません。