@ জায়নাহ মন্তব্যগুলিতে পোস্ট করেছেন যে ডেটাগুলি ওয়েবুল বিতরণ অনুসরণ করে বলে মনে করা হচ্ছে, এমএলই (সর্বাধিক সম্ভাবনার প্রাক্কলন) ব্যবহার করে এই জাতীয় বিতরণের পরামিতিগুলি কীভাবে নির্ধারণ করা যায় সে সম্পর্কে আমি একটি সংক্ষিপ্ত টিউটোরিয়াল সরবরাহ করব। একটা হল অনুরূপ পোস্টে বাতাসের গতি এবং সাইটে WEIBULL ডিস্ট্রিবিউশন সম্পর্কে।
- ডাউনলোড এবং ইনস্টল করুন
R
, এটি বিনামূল্যে
- Alচ্ছিক : আর স্টুডিও ডাউনলোড করুন এবং ইনস্টল করুন যা সিন্ট্যাক্স হাইলাইটিং এবং আরও অনেক কিছু দরকারী ফাংশন সরবরাহ করার জন্য আর এর জন্য দুর্দান্ত আইডিই।
- প্যাকেজ ইনস্টল করুন
MASS
এবং car
টাইপ করুন: install.packages(c("MASS", "car"))
। এগুলি টাইপ করে লোড করুন: library(MASS)
এবং library(car)
।
- এতে আপনার ডেটা আমদানি করুন
R
। উদাহরণস্বরূপ, আপনার যদি এক্সেলে আপনার ডেটা থাকে তবে এগুলিকে ডিলিমেটেড টেক্সট ফাইল (.txt) হিসাবে সংরক্ষণ করুন এবং সেগুলি R
দিয়ে আমদানি করুন read.table
।
- ফাংশন ব্যবহার করুন
fitdistr
আপনার WEIBULL বিতরণের সর্বোচ্চ সম্ভাবনা অনুমান গণনা করতে: fitdistr(my.data, densfun="weibull", lower = 0)
। সম্পূর্ণরূপে কাজ করা উদাহরণ দেখতে, উত্তরের নীচে লিঙ্কটি দেখুন।
- পয়েন্ট 5 হিসাবে অনুমান করা স্কেল এবং আকৃতি পরামিতিগুলির সাথে ওয়েবেল বিতরণের সাথে আপনার ডেটা তুলনা করতে একটি কিউ-প্লট করুন:
qqPlot(my.data, distribution="weibull", shape=, scale=)
ভিটো রিচি এর টিউটোরিয়াল সঙ্গে বন্টন ঝুলানো উপর R
বিষয়ে একটি ভাল প্রথম ধাপ। এবং বিষয়টিতে এই সাইটে অসংখ্য পোস্ট রয়েছে ( এই পোস্টটিও দেখুন )।
কিভাবে ব্যবহার করতে একটি উদাহরণ সম্পূর্ণরূপে কাজ দেখার জন্য fitdistr
, কটাক্ষপাত আছে এই পোস্টে ।
এর মধ্যে একটি উদাহরণ তাকান R
:
# Load packages
library(MASS)
library(car)
# First, we generate 1000 random numbers from a Weibull distribution with
# scale = 1 and shape = 1.5
rw <- rweibull(1000, scale=1, shape=1.5)
# We can calculate a kernel density estimation to inspect the distribution
# Because the Weibull distribution has support [0,+Infinity), we are truncate
# the density at 0
par(bg="white", las=1, cex=1.1)
plot(density(rw, bw=0.5, cut=0), las=1, lwd=2,
xlim=c(0,5),col="steelblue")
# Now, we can use fitdistr to calculate the parameters by MLE
# The option "lower = 0" is added because the parameters of the Weibull distribution need to be >= 0
fitdistr(rw, densfun="weibull", lower = 0)
shape scale
1.56788999 1.01431852
(0.03891863) (0.02153039)
সর্বাধিক সম্ভাবনার অনুমানগুলি যথেচ্ছভাবে এলোমেলো সংখ্যার প্রজন্মের মধ্যে আমরা সেট করেছি to আসুন আমরা অনুমান করেছি যে পরামিতিগুলির সাথে অনুমানমূলক ওয়েইবুল বিতরণের সাথে কিউকিউ-প্লট ব্যবহার করে আমাদের ডেটা তুলনা করি fitdistr
:
qqPlot(rw, distribution="weibull", scale=1.014, shape=1.568, las=1, pch=19)
পয়েন্টগুলি লাইনের সাথে সুন্দরভাবে সাজানো থাকে এবং বেশিরভাগ 95% -বিশ্বস্ত খামের মধ্যে থাকে। আমরা উপসংহারে পৌঁছে যাব যে আমাদের ডেটা একটি ওয়েইবুল বিতরণের সাথে সামঞ্জস্যপূর্ণ। এটি অবশ্যই প্রত্যাশিত ছিল, যেমন আমরা ওয়েবুল বিতরণ থেকে আমাদের মূল্যবোধকে নমুনা দিয়েছি।
এমএলই ছাড়াই ওয়েবুল বিতরণের (আকৃতি) এবং সি (স্কেল) অনুমান করাটগ
এই কাগজটি বাতাসের গতির জন্য ওয়েবুল বিতরণের পরামিতিগুলি অনুমান করার জন্য পাঁচটি পদ্ধতি তালিকাভুক্ত করে। আমি তাদের তিনটি এখানে ব্যাখ্যা করব।
মাধ্যম এবং মান বিচ্যুতি থেকে
ট
কে = ( σ^বনাম^)- 1.086
গসি = ভি^Γ ( 1 + 1 / কে )
বনাম^σ^Γ
স্বল্প-স্কোয়ারগুলি পর্যবেক্ষণের বিতরণে উপযুক্ত
এন0 - ভি1, ভি1- ভি2, … , ভিn - 1- ভিএনচ1, চ2, … , চএনপি1= চ1, পি2= চ1+ চ2, … , পিএন= পিn - 1+ চএনY= এ + বি x
এক্সআমি= ln( ভআমি)
Yআমি= ln[ - এলএন( 1 - পিআমি) ]
একটিখসি = এক্সপ্রেস( - কখ)
কে = খ
মিডিয়ান এবং কোয়ার্টাইল বাতাসের গতি
ভীমিভী0.25ভী0.75 [ পি ( ভি≤ ভি0.25) = 0.25 , পি ( ভি≤ ভি0.75) = 0.75 ]গট
কে = এলএন[ এলএন( 0.25 ) / এলএন( 0.75 ) ] / এলএন( ভ0.75/ ভি0.25) ≈ 1.573 / ln( ভ0.75/ ভি0.25)
সি = ভিমি/ এলএন( 2 )1 / কে
চারটি পদ্ধতির তুলনা
R
চারটি পদ্ধতির তুলনা করার জন্য এখানে উদাহরণ রয়েছে :
library(MASS) # for "fitdistr"
set.seed(123)
#-----------------------------------------------------------------------------
# Generate 10000 random numbers from a Weibull distribution
# with shape = 1.5 and scale = 1
#-----------------------------------------------------------------------------
rw <- rweibull(10000, shape=1.5, scale=1)
#-----------------------------------------------------------------------------
# 1. Estimate k and c by MLE
#-----------------------------------------------------------------------------
fitdistr(rw, densfun="weibull", lower = 0)
shape scale
1.515380298 1.005562356
#-----------------------------------------------------------------------------
# 2. Estimate k and c using the leas square fit
#-----------------------------------------------------------------------------
n <- 100 # number of bins
breaks <- seq(0, max(rw), length.out=n)
freqs <- as.vector(prop.table(table(cut(rw, breaks = breaks))))
cum.freqs <- c(0, cumsum(freqs))
xi <- log(breaks)
yi <- log(-log(1-cum.freqs))
# Fit the linear regression
least.squares <- lm(yi[is.finite(yi) & is.finite(xi)]~xi[is.finite(yi) & is.finite(xi)])
lin.mod.coef <- coefficients(least.squares)
k <- lin.mod.coef[2]
k
1.515115
c <- exp(-lin.mod.coef[1]/lin.mod.coef[2])
c
1.006004
#-----------------------------------------------------------------------------
# 3. Estimate k and c using the median and quartiles
#-----------------------------------------------------------------------------
med <- median(rw)
quarts <- quantile(rw, c(0.25, 0.75))
k <- log(log(0.25)/log(0.75))/log(quarts[2]/quarts[1])
k
1.537766
c <- med/log(2)^(1/k)
c
1.004434
#-----------------------------------------------------------------------------
# 4. Estimate k and c using mean and standard deviation.
#-----------------------------------------------------------------------------
k <- (sd(rw)/mean(rw))^(-1.086)
c <- mean(rw)/(gamma(1+1/k))
k
1.535481
c
1.006938
সমস্ত পদ্ধতিতে খুব অনুরূপ ফলাফল পাওয়া যায়। সর্বাধিক সম্ভাবনার পদ্ধতির সুবিধাটি হ'ল ওয়েবুল প্যারামিটারগুলির স্ট্যান্ডার্ড ত্রুটিগুলি সরাসরি দেওয়া হয়।
পিডিএফ বা সিডিএফ-তে পয়েন্টওয়াইজ আস্থা অন্তর যুক্ত করতে বুটস্ট্র্যাপ ব্যবহার করা
আমরা আনুমানিক ওয়েইবুল ডিস্ট্রিবিউশনের পিডিএফ এবং সিডিএফের চারপাশে পয়েন্টওয়াইজ কনফিডেন্স ইন্টারভালগুলি তৈরি করতে একটি নন-প্যারাম্যাট্রিক বুটস্ট্র্যাপ ব্যবহার করতে পারি। এখানে একটি R
স্ক্রিপ্ট রয়েছে:
#-----------------------------------------------------------------------------
# 5. Bootstrapping the pointwise confidence intervals
#-----------------------------------------------------------------------------
set.seed(123)
rw.small <- rweibull(100,shape=1.5, scale=1)
xs <- seq(0, 5, len=500)
boot.pdf <- sapply(1:1000, function(i) {
xi <- sample(rw.small, size=length(rw.small), replace=TRUE)
MLE.est <- suppressWarnings(fitdistr(xi, densfun="weibull", lower = 0))
dweibull(xs, shape=as.numeric(MLE.est[[1]][13]), scale=as.numeric(MLE.est[[1]][14]))
}
)
boot.cdf <- sapply(1:1000, function(i) {
xi <- sample(rw.small, size=length(rw.small), replace=TRUE)
MLE.est <- suppressWarnings(fitdistr(xi, densfun="weibull", lower = 0))
pweibull(xs, shape=as.numeric(MLE.est[[1]][15]), scale=as.numeric(MLE.est[[1]][16]))
}
)
#-----------------------------------------------------------------------------
# Plot PDF
#-----------------------------------------------------------------------------
par(bg="white", las=1, cex=1.2)
plot(xs, boot.pdf[, 1], type="l", col=rgb(.6, .6, .6, .1), ylim=range(boot.pdf),
xlab="x", ylab="Probability density")
for(i in 2:ncol(boot.pdf)) lines(xs, boot.pdf[, i], col=rgb(.6, .6, .6, .1))
# Add pointwise confidence bands
quants <- apply(boot.pdf, 1, quantile, c(0.025, 0.5, 0.975))
min.point <- apply(boot.pdf, 1, min, na.rm=TRUE)
max.point <- apply(boot.pdf, 1, max, na.rm=TRUE)
lines(xs, quants[1, ], col="red", lwd=1.5, lty=2)
lines(xs, quants[3, ], col="red", lwd=1.5, lty=2)
lines(xs, quants[2, ], col="darkred", lwd=2)
#lines(xs, min.point, col="purple")
#lines(xs, max.point, col="purple")
#-----------------------------------------------------------------------------
# Plot CDF
#-----------------------------------------------------------------------------
par(bg="white", las=1, cex=1.2)
plot(xs, boot.cdf[, 1], type="l", col=rgb(.6, .6, .6, .1), ylim=range(boot.cdf),
xlab="x", ylab="F(x)")
for(i in 2:ncol(boot.cdf)) lines(xs, boot.cdf[, i], col=rgb(.6, .6, .6, .1))
# Add pointwise confidence bands
quants <- apply(boot.cdf, 1, quantile, c(0.025, 0.5, 0.975))
min.point <- apply(boot.cdf, 1, min, na.rm=TRUE)
max.point <- apply(boot.cdf, 1, max, na.rm=TRUE)
lines(xs, quants[1, ], col="red", lwd=1.5, lty=2)
lines(xs, quants[3, ], col="red", lwd=1.5, lty=2)
lines(xs, quants[2, ], col="darkred", lwd=2)
lines(xs, min.point, col="purple")
lines(xs, max.point, col="purple")
fitdistr(mydata, densfun="weibull")
মধ্যেR
MLE মাধ্যমে পরামিতি খুঁজে। গ্রাফ তৈরি করতে হলে, ব্যবহারqqPlot
থেকে ফাংশনcar
প্যাকেজ:qqPlot(mydata, distribution="weibull", shape=, scale=)
আকৃতি এবং স্কেলের পরামিতি আপনার সাথে পেয়েছি সঙ্গেfitdistr
।