> 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)と しても良いと思うのです。しかし,以前にこの掲示板で何かのシュミレーション例を提示しているレスで「ぎりぎり有意になるようにしてある(データを生成し ている)」と書いてあった記事を覚えているのですが,過去ログを[データ 生成]とかで検索しても見つからなかったのです。
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 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る