0
我想將先前的分配信息輸入到函數中。我可以通過修改函數體來手動輸入個人發行版,但是我正在尋找這樣做的一般方法?例如,我想繪製一個函數的先驗分佈的後驗分佈。將先前分配信息輸入功能的一般方法?
set.seed(1)
n <- 10
pars <- runif(n)
y <- NA
for (i in 1:n)
y[i] <- rbinom(1,1, prob=pars[i])
plotPosterior <- function(pars,y,mean=0,vari=4)
{
x <- seq(-3,3,by = .1)
logLik <- NA
for (i in seq(along.with=x))
logLik[i] <- sum(y*log(1 + exp(pars-x[i])) - (y-1)*log(1 + exp(x[i]-pars)))
posterior <- logLik * dnorm(x,mean=mean,sd=sqrt(vari))
plot(x,posterior,type="l")
}
plotPosterior(pars,y,0,4)
我可以輸入均值爲正態分佈的方差參數。但是,如果我想使用,例如,beta版本,我必須重寫該函數。相反,我想要一種方式來輸入分佈,如「dnorm(mean=xx,sd=yy)
」或「dbeta(shape1=xx, shape2=yy)
」...
只有可行的方式,我看到輸入dnorm(x,mean=mean,sd=sqrt(vari))
作爲輸入功能。但我不想事先指定x
。有沒有其他方法可以做到這一點?
如果我沒有理解好了,你可以取代'dnorm()'由'有趣的功能(X,... )',其中'fun'和'...'被傳遞給'plotPosterior(pars,y,fun = dnorm,...)' – baptiste
這正是我想要的。我將函數頭改爲'plotPosterior < - 函數(pars,y,fun = dnorm,...)',將相關函數行改爲'後<
HBat
另一種方法是編寫'plotPosterior(pars,y,fun = dbeta,params.fun = list(shape1 = 2,shape2 = 3))'並用後面的< - logLik * do.call(fun, c(x,params.fun))'。 – baptiste