関数の機能:
基本的に、関数はデータのモデルから新しい疑似ランダム応答(つまり)データを生成します。使用されているモデルは標準的な頻度モデルです。慣例として、 *データは既知の定数であると想定しています。これらのデータは決してサンプリングされません。この関数の重要な特徴として私が見ているのは、推定されたパラメーターに関する不確実性を組み込んでいることです。 XYX
* 切片を抑制したくない場合(一般的には良い方法ではありません)、関数に入力する前に、行列の左端の列としてのベクトルを手動で追加する必要があることに注意してください。X1X
この機能のポイントは何でしたか:
正直なところ、わかりません。これは、ベイジアンMCMCルーチンの一部であった可能性がありますが、1つの部分しかありませんでした。実際にベイジアン分析を実行するには、他の場所でさらにコードが必要になります。私はこれについて決定的にコメントするベイジアン手法の専門家ではないように感じますが、この関数は通常使用されるもののように「感じ」ません。
また、シミュレーションベースの電力分析にも使用できます。(ここで私の回答を参照してください:このタイプの情報については、ロジスティック回帰の電力分析のシミュレーション-計画された実験)。パラメーター推定値の不確実性を考慮しない、以前のデータに基づく電力分析は、多くの場合、注目に値します楽観的。(ここでその点について説明します:望ましい効果のサイズと予想される効果のサイズ)。
この関数を使用する場合:
@whuberがコメントに記されているように、この関数は非効率的です。これを(たとえば)電力分析に使用する場合は、関数を2つの新しい関数に分割します。1つ目はデータを読み取り、パラメータと不確実性を出力します。2番目の新しい関数は、新しい疑似ランダムデータを生成します。以下に例を示します(ただし、さらに改善することは可能です)。 Y
simulationParameters <- function(Y,X) {
# Y is a vector of binary responses
# X is a design matrix, you don't have to add a vector of 1's
# for the intercept
X <- cbind(1, X) # this adds the intercept for you
fit <- glm.fit(X,Y, family = binomial(link = logit))
beta <- coef(fit)
fs <- summary.glm(fit)
M <- t(chol(fs$cov.unscaled))
return(list(betas=beta, uncertainties=M))
}
simulateY <- function(X, betas, uncertainties, ncolM, N){
# X <- cbind(1, X) # it will be slightly faster if you input w/ 1's
# ncolM <- ncol(uncertainties) # faster if you input this
betastar <- betas + uncertainties %*% rnorm(ncolM)
p <- 1/(1 + exp(-(X %*% betastar)))
return(rbinom(N, size=1, prob=p))
}