[英]Fit a Weibull cumulative distribution to mass passing data in R
我有一些碎石材料的粒度質量傳遞累積數據,我想使用 R 將其擬合為 Weibull 分布。我已經設法在 Excel 中使用 WEIBULL.DIST() 函數使用累積開關設置為 TRUE 來完成此操作。
然后我使用 excel SOLVER 使用 RMSE 推導 alpha 和 beta 參數以獲得最佳擬合。 我想在 R 中重現結果。
(請參閱此處隨附的電子表格)
粒子數據和累積質量通過百分比是以下向量
d.mm <- c(20.001,6.964,4.595,2.297,1.741,1.149,
0.871,0.574,0.287,0.082,0.062,0.020)
m.pct <- c(1.00,0.97,0.78,0.49,0.27,0.20,0.14,
0.11,0.07,0.03,0.025,0.00)
這是我想要擬合 Weibull 結果的圖:
plot(log10(d.mm),m.pct)
... 根據電子表格計算直徑值向量的函數
d.wei <- c(seq(0.01,0.1,0.01),seq(0.2,1,0.1),seq(2,30,1))
我在 Excel 中使用求解器確定的 Weibull alpha 和 beta 的最佳值分別為 1.41 和 3.31 所以我的問題是如何在 R 中重現此分析(不一定是求解器部分)但將 Weibull 擬合到此數據集?
非線性最小二乘函數nls
是 Execl 求解器的 R 版本。
pweibull
將計算 Weibull 分布的概率分布。 代碼中的注釋應該解釋一步一步的解決方案
d.mm <- c(20.001,6.964,4.595,2.297,1.741,1.149,
0.871,0.574,0.287,0.082,0.062,0.020)
m.pct <- c(1.00,0.97,0.78,0.49,0.27,0.20,0.14,
0.11,0.07,0.03,0.025,0.00)
#create data frame store data
df<-data.frame(m.pct, d.mm)
#data for prediction
d.wei <- c(seq(0.01,0.1,0.01),seq(0.2,1,0.1),seq(2,30,1))
#solver (provided starting value for solution)
# alpha is used for shape and beta is used for scale
fit<-nls(m.pct~pweibull(d.mm, shape=alpha, scale=beta), data=df, start=list(alpha=1, beta=2))
print(summary(fit))
#extract out shape and scale
print(summary(fit)$parameters[,1])
#predict new values base on model
y<-predict(fit, newdata=data.frame(d.mm=d.wei))
#Plot comparison
plot(log10(d.mm),m.pct)
lines(log10(d.wei),y, col="blue")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.