回答:
私があなたの質問を正しく理解していれば、これはとても簡単です。エラーをどの分布にするかを決定し、対応するランダム生成関数を使用するだけです。
コードを変更する例を次に示します。
set.seed(5840) # this makes the example exactly reproducible
N <- 100
x <- rnorm(N)
beta <- 0.4
errors <- rlnorm(N, meanlog=0, sdlog=1)
errors <- -1*errors # this makes them left skewed
errors <- errors - 1 # this centers the error distribution on 0
y <- 1 + x*beta + errors
更新: 以下は、エラーがWeibullとして分布する右に歪んだバージョンです。
set.seed(5840) # this makes the example exactly reproducible
N <- 100
x <- rnorm(N)
beta <- 0.4
errors <- rweibull(N, shape=1.5, scale=1)
# errors <- -1*errors # this makes them left skewed
errors <- errors - factorial(1/1.5) # this centers the error distribution on 0
y <- 1 + x*beta + errors
関係のない最後のコメント: 質問のサンプルコードはやや混乱しています(つまり、問題はありません)。のでrnorm(N)
でデータを生成mean=0
し、sd=1
デフォルトでは、0.4*rnorm(N)
生成されますrnorm(N, mean=0, sd=0.4)
。後者の定式化を使用すると、コード(およびおそらくあなたの考え)がより明確になります。また、コードがbeta
混乱しているようです。私たちは一般的に考えます確率変数ではなく、パラメーターとしての回帰型モデル。つまり、データ生成プロセスの動作を制御するのは未知の定数ですが、プロセスの確率的性質はエラーによってカプセル化されます。これは、マルチレベルモデルで作業しているときの考え方ではなく、コードは標準回帰モデルとマルチレベル回帰モデルのコードの中間にあるようです。ベータを個別に指定することは、コードの概念的な明確性を維持するための良いアイデアですが、標準の回帰モデルの場合、各ベータに単一の番号を割り当てるだけです(例:)beta0 <- 1; beta1 <- .04
。