在R中同时估计两个数据集的威布尔分布参数

Posted

技术标签:

【中文标题】在R中同时估计两个数据集的威布尔分布参数【英文标题】:Estimating the parameters of a weibull distribution to two data sets simultaneously in R 【发布时间】:2021-07-19 02:26:58 【问题描述】:

我正在尝试估计 3 参数威布尔分布的参数(平移参数 beta= -0.5)。问题是我必须同时拟合两组数据。使用nlc(见下面的代码)我能够单独估计每组数据的分布参数,但不能同时估计。 GAMMA 类似于共享参数(估计的 GAMMA 在两个 nlc 估计中必须相同)。

我的数据如下所示:

x = seq(from =0, to =10, by =1)
y = c(0.1315, 0.2368, 0.2631, 0.1578, 0.1578, 0.0000, 0.0526, 0.0000, 0.0000, 0.0000, 0.0000)
z = c(0.3684, 0.3157, 0.2105, 0.0789, 0.0263, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000)

这是我的代码

# WEIBULL FUNCTION WITH ALPHA_GS and beta=-0.5
weibull_GS = function(x, GAMMA, ALPHA_GS)
  (GAMMA/ALPHA_GS)*(((x-(-0.5))/ALPHA_GS)^(GAMMA-1))*exp(-((x-(-0.5))/ALPHA_GS)^GAMMA)


#ESTIMATE ALPHA_GS
nlc <- nls.control(maxiter=100)
n <- nls(y ~ weibull_GS(x, GAMMA, ALPHA_GS), control="nlc",
         start = list(GAMMA=2, ALPHA_GS=3), trace=T, model=F)

summary(n)

# WEIBULL FUNCTION WITH ALPHA_GA beta=-0.5
weibull_GA = function(x, GAMMA, ALPHA_GA)
  (GAMMA/ALPHA_GA)*(((x-(-0.5))/ALPHA_GA)^(GAMMA-1))*exp(-((x-(-0.5))/ALPHA_GA)^GAMMA)


# ESTIMATE ALPHA_GA
nlc <- nls.control(maxiter=100)
m <- nls(z ~ weibull_GA(x, GAMMA, ALPHA_GA), control="nlc",
         start = list(GAMMA=2, ALPHA_GA=3), trace=T, model=F)

summary(m)

【问题讨论】:

nls(y ~ f(x)) 适合模型 y = f(x) + error。我认为这不是你想要的。这里weibull_GA是威布尔分布的密度,不是吗? @StéphaneLaurent 是的,weibull_GS 和 weibull_GA 是 weibull 分布的密度函数,我想用共享参数 GAMMA 和 beta 拟合我的数据( --> 估计最适合通过最小二乘估计的参数) 我认为你的方法不对。 f(x) + error 的分布是具有均值 f(x) 的正态分布。您应该使用最大似然法。 【参考方案1】:

您正在做的是用 Weibull 分布的密度函数 f 拟合非线性回归模型 y = f(x) + error。这与将 Weibull 分布拟合到样本无关

如果这真的是你想要做的,这里是如何回答你的问题:

f <- function(x1, x2, GAMMA, ALPHA_GS, ALPHA_GA)
  c(weibull_GS(x1, GAMMA, ALPHA_GS), weibull_GA(x2, GAMMA, ALPHA_GA))

Sample <- c(y, z)
nls(Sample ~ f(x, x, GAMMA, ALPHA_GS, ALPHA_GA), ......)

【讨论】:

以上是关于在R中同时估计两个数据集的威布尔分布参数的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中绘制数据集的 CDF?

R语言中一组数据服从威布尔分布,怎么判断拟合的效果

1 一元数据集的分布

不平衡数据集的 Knn 分类器

使用 Scipy 拟合 Weibull 分布

R语言 箱线图