0

假设有人给我画了一个直方图,我想对其进行平滑处理,并得到平滑函数。他们是在R中这样做的一种方式吗?(直方图不是来自数据,所以核密度估计器似乎不适应。如果你认为我在这方面错了,请告诉我。)

到目前为止,我选择将参数分布拟合到我的直方图。为此,我将直方图和 beta 分布之间的积分平方误差最小化。这是我的代码,其中 h 是支持 [0;1] 的分段常量函数。

h<-function(x) (x>0 & x<1)*1

    fit.beta<-function(h){
      dist<-function(alpha,beta){
            diff2<-function(x)(h(x)-dbeta(x,alpha,beta))^2          
            return(integrate(diff2,0,1))
      }
      res<-constrOptim(theta = c(1,1), f = dist,grad=NULL, ui = matrix(c(1,1),1,2), ci = c(0,0)) 
      return<-res
    }

R 说:

 Error in dbeta(x, alpha, beta) : 
  argument "beta" is missing, with no default

我不明白为什么 R 不理解 dbeta(x, alpha, beta)。我还尝试了 dbeta(x, shape1=alpha,shape2=beta) 它不起作用。你可以帮帮我吗?

4

1 回答 1

0

I found the solution to the syntax problem. The constrOptim function only optimize the first argument so it works if the optimized function as only one argument.

   fit.norm<-function(h){
  dist<-function(ab){
    diff2<-function(x)(h(x)-dnorm(x,ab[1], ab[2]))^2
    return(integrate(diff2,0,1)$value)
  }
  res<-constrOptim(theta = c(0.5,1), f = dist,grad=NULL, ui = rbind(c(1,0),c(-1,0),c(0,1)), ci = c(0,-1,0)) 
  return<-list(res)
}
于 2014-04-23T12:11:02.723 回答