Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R weibull分布的矩估计_R - Fatal编程技术网

R weibull分布的矩估计

R weibull分布的矩估计,r,R,我想用R中的“矩量估计法”(MME)拟合威布尔参数。我知道我们可以用MASS包中的fitdisr()函数来估计这些值,但我想知道是否有函数或包可以用MME计算参数。 例如,我想用蒙特卡罗方法近似MME。当我从均匀分布生成1000个值时,我为这个问题编写的函数(用于估计一个积分)给了我0个值。如何解决此问题?以下是使用MME查找威布尔分布参数的一种方法 # load packages require(rootSolve) # generate data N <- 1000 shape <

我想用R中的“矩量估计法”(MME)拟合威布尔参数。我知道我们可以用
MASS
包中的
fitdisr()
函数来估计这些值,但我想知道是否有函数或包可以用MME计算参数。
例如,我想用蒙特卡罗方法近似MME。当我从均匀分布生成1000个值时,我为这个问题编写的函数(用于估计一个积分)给了我0个值。如何解决此问题?

以下是使用MME查找威布尔分布参数的一种方法

# load packages
require(rootSolve)
# generate data
N <- 1000
shape <- 2
scale <- 6
X <- rweibull(n=N, shape=shape, scale=scale)
# range of plausible shapes (for solver)
min_shape <- 0.1
max_shape <- 100 
# bootstraping
Nboot <- 1000
sim <- replicate(Nboot, {
  Xboot <- sample(X, replace=TRUE)
  # find shape
  rt <- 1+(sd(Xboot)/mean(Xboot))^2
  rootFct <- function(k) {
    gamma(1+2/k)/gamma(1+1/k)^2 - rt
  }
  shape_est <- uniroot.all(rootFct, c(min_shape, max_shape))
  if (length(shape_est)!=1) stop("The shape may be outside min_shape and max_shape")
  scale_est <- mean(Xboot)/gamma(1+1/shape_est)
  c(shape=shape_est, scale=scale_est)
})
apply(sim, 1, function(x)
  c(est=mean(x), se=sd(x), quantile(x, c(.025, .5, .975))))
#加载包
require(rootSolve)
#生成数据

这是一个“给我密码”的问题。。。如果你查找威布尔分布的均值和方差,你可以使用二维根查找器来求解(均值,方差)=(形状,尺度)(我想你可以做一点代数,将问题简化为一个稍微简单的形式,在这里你可以做一维根查找,这要容易得多)谢谢@BenBolker,但对我来说,这不是一个简单的寻根器,因为两个方程都必须在数值计算中求解,我不知道如何在shadow中求解这些方程,谢谢你的帮助。