はい。 mgcv
は(経験的な)ベイズ推定を行っているので、予測分布を得ることができます。あなたの例としては、ここにあります。
# prediction on the link (with standard error)
l <- predict(b, newdata = data.frame(x0 = 0.1, x1 = 0.2, x2 = 0.3, x3 = 0.4), se.fit = TRUE)
# Under central limit theory in GLM theory, link value is normally distributed
# for negative binomial with `log` link, the response is log-normal
p.mu <- function (mu) dlnorm(mu, l[[1]], l[[2]])
# joint density of `y` and `mu`
p.y.mu <- function (y, mu) dnbinom(y, size = 3, mu = mu) * p.mu(mu)
# marginal probability (not density as negative binomial is discrete) of `y` (integrating out `mu`)
# I have carefully written this function so it can take vector input
p.y <- function (y) {
scalar.p.y <- function (scalar.y) integrate(p.y.mu, lower = 0, upper = Inf, y = scalar.y)[[1]]
sapply(y, scalar.p.y)
}
は今、あなたは一般的に
p.y(7)
# 0.07810065
使用し、y = 7
の確率が、指定された新しいデータを条件にしたいため、数値積分することにより、このアプローチは簡単ではありません。例えば、sqrt()
のような他のリンク関数が負の二項演算に使用されている場合、応答の分布はそれほど単純ではありません(派生するのは難しくありません)。
ここでは、サンプリングベースのアプローチまたはモンテカルロアプローチを提供します。これはベイジアン手順に最もよく似ています。
N <- 1000 # samples size
set.seed(0)
## draw N samples from posterior of `mu`
sample.mu <- b$family$linkinv(rnorm(N, l[[1]], l[[2]]))
## draw N samples from likelihood `Pr(y|mu)`
sample.y <- rnbinom(1000, size = 3, mu = sample.mu)
## Monte Carlo estimation for `Pr(y = 7)`
mean(sample.y == 7)
# 0.076
備考1
注として経験的ベイズすなわち、すべての上記の方法は、推定された平滑化パラメータの条件です。 「完全ベイズ」のようなものをお望みなら、unconditional = TRUE
をpredict()
に設定してください。
mu <- predict(b, newdata = data.frame(x0 = 0.1, x1 = 0.2, x2 = 0.3, x3 = 0.4), type = "response")
dnbinom(7, size = 3, mu = mu)
このような結果は、回帰係数に関する条件である(不確かなく固定とする)、従ってmu
が一定となり、:おそらく一部の人々は、このような単純な解決策を想定している
備考2
ランダムではありません。これはではなく、予測分布です。予測分布はモデル推定の不確定性を統合するだろう。
この素晴らしい答えをありがとう!ここでセントラルリミット理論の使用を避けるためにブートストラップを使用することについてのあなたの考えは何ですか? – DavidR
@DavidR申し訳ありませんが、ブートストラップがどのように機能するかはわかりません。いくつのデータがありますか?あなたが多くのデータを持っているなら、CLTはむしろ正確です。信頼区間はCLTベースですが、そうではありませんか? **ええ、しかし、ブートストラップソリューションを試してみたら、別の答えとして投稿してください。私は最初に学び、投票します!** –
負の2項数のシータ(「サイズ」)を推定しているので、サイズについてはb $ family $ getTheta(TRUE)を接続する必要がありますか? – DavidR