rnorm
(またはその他を使用して)Rで乱数を生成する場合runif
、サンプリング元の分布として正確な平均とSDを持つことはめったにありません。私のためにこれを行う簡単な1つまたは2つのライナーはありますか? 予備的な解決策として、この関数を作成しましたが、R または一部のパッケージにネイティブである必要があるようです。
# Draw sample from normal distribution with guaranteed fixed mean and sd
rnorm_fixed = function(n, mu=0, sigma=1) {
x = rnorm(n) # from standard normal distribution
x = sigma * x / sd(x) # scale to desired SD
x = x - mean(x) + mu # center around desired mean
return(x)
}
説明する:
x = rnorm(n=20, mean=5, sd=10)
mean(x) # is e.g. 6.813...
sd(x) # is e.g. 10.222...
x = rnorm_fixed(n=20, mean=5, sd=10)
mean(x) # is 5
sd(x) # is 10
これが必要な理由は、実際のデータに適用する前に、シミュレートされたデータの分析を調整するためです。シミュレートされたデータを使用すると、正確なプロパティ (平均、SD など) がわかり、推論統計を行っているため、p 値のインフレを回避できるため、これは素晴らしいことです。たとえば、次のような単純なものがあるかどうかを尋ねています
rnorm(n=20, mean=5, sd=10, fixed=TRUE)