No.05222 あるデータの生成方法  【波音】 2007/12/31(Mon) 10:42

例えばですが,3つの群ごとによって平均値が異なるようなデータを作る場合,いろいろな方法があるのだと思うのですが,その一例としてRで,
> creData <- function(group) 24.0 + 1.5*group + rnorm(1)
> creData(0) #第1群のデータ
[1] 24.49217
> creData(1) #第2群のデータ
[1] 26.14282
> creData(3) #第3群のデータ
[1] 29.16657
などとしたり,もっと単純に
> rnorm(10, mean=24, sd=2.7)
と しても良いと思うのです。しかし,以前にこの掲示板で何かのシュミレーション例を提示しているレスで「ぎりぎり有意になるようにしてある(データを生成し ている)」と書いてあった記事を覚えているのですが,過去ログを[データ 生成]とかで検索しても見つからなかったのです。

検定の結果として得られるp値が0.05に近くなるようにデータを生成するというのは,なにか公式的な作り方があるのでしょうか?それとも,上述したような方法で何回か試しにデータを作って,それを検定して,,,といった試行錯誤的に作っているのですか?

No.05223 Re: あるデータの生成方法  【知ったかぶり】 2007/12/31(Mon) 11:00

>以前にこの掲示板で何かのシュミレーション例を提示しているレスで「ぎりぎり有意になるようにしてある(データを生成している)」と書いてあった記事

これじゃないですか?

http://aoki2.si.gunma-u.ac.jp/lecture/mb-arc/arc038/00236.html

No.05224 Re: あるデータの生成方法  【青木繁伸】 2007/12/31(Mon) 12:05

手動で探索する方が手っ取り早いと思いますが,もし,もっと正確な解が必要ならば,uniroot という関数を使えばよいと思います。
gen <- function(n) # 条件を満たすデータを生成
{ # 条件:N(0,1), N(δ,1) の二群のデータ
gen1 <- function(n) # N(0,1) の正規乱数ベクトルを返す
{
return(as.vector(scale(rnorm(n))))
}
gen2 <- function(delta) # 評価関数
{ # t検定のP値-0.05 を返す
return(t.test(x1, x2+delta)$p.value-0.05)
}
x1 <- gen1(n) # N(0,1) の正規乱数ベクトル
x2 <- gen1(n) # N(0,1) の正規乱数ベクトル
delta <- uniroot(gen2, lower=0, upper=5)$root # P=0.05 になる δ を探索する
return(list(x1=x1, x2=x2+delta)) # 解を返す
}
( data <- gen(10) ) # サンプルサイズを指定して,条件を満たすデータを得る
t.test(data$x1, data$x2) # 確認

No.05225 Re: あるデータの生成方法  【波音】 2007/12/31(Mon) 17:41

回答ありがとうございます。

> これじゃないですか?

そうです,おそらくこの記事だったのだと思います。

> もっと正確な解が必要ならば,uniroot という関数を使えばよいと思います。

Pが0.05になるδを探すなどという関数があったのですね。試してみると,(当たり前といえば当たり前ですが)本当にt検定の結果が(p値が)0.05になるようになっていますね。

なるほど,こういうように作れるのですね。

でも基本的には手探りでやればよいのですね。

● 「統計学関連なんでもあり」の過去ログ--- 041 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る