R 将先前分布信息输入函数的一般方法?

R 将先前分布信息输入函数的一般方法?,r,distribution,R,Distribution,我想在函数中输入以前的分发信息。我可以通过修改函数体手动输入各个分布,但我正在寻找一种通用的方法? 例如,我想在给定先验分布的情况下,绘制函数的后验分布 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 <-

我想在函数中输入以前的分发信息。我可以通过修改函数体手动输入各个分布,但我正在寻找一种通用的方法? 例如,我想在给定先验分布的情况下,绘制函数的后验分布

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) 
set.seed(1)

n为了清楚起见,这里有一个从评论中提取的有效解决方案

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, fun = dnorm, 
                          params.fun = list(mean=0, sd=2))
{  
  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 * do.call(fun, c(list(x), params.fun))
  plot(x,posterior,type="l")
}

plotPosterior(pars, y) # default params and function
plotPosterior(pars, y, fun = dbeta, params.fun = list(shape1=2, shape2=3))
set.seed(1)

n如果我理解得很好,您可以用
fun(x,…)
替换函数中的
dnorm()
,其中
fun
被传递到
plotPosterior(pars,y,fun=dnorm,…)
这正是我想要的。我将函数头更改为
plotPosterior,另一种方法是编写
plotPosterior(pars,y,fun=dbeta,params.fun=list(shape1=2,shape2=3))
并使用
posterior调用它,我正要编写如何将默认值设置为函数,而第二种方法似乎正是为了这个目的。但是,当我将上面函数的第一行更改为
plotPosterior时,对不起,您需要
posterior