La distribucion Weibull es una distribucion muy versátil que sirve para modelar una amplia gama de aplicaciones tales como: Ingenieria, Investigación Médica, Control de Calidad, Finanzas, etc. Usualmente se lo utliza para el análisis de fiabilidad para modelar datos asimétricos del proceso en el análisis de capacidad.
Esta distribución, \(W(\lambda , \alpha)\), es una generalización de la distribución \(exp(\alpha)\). Su función de densidad de probabilidad esta dada por \[
f(x)=\alpha\lambda^\alpha x^{\alpha-1}e^{-(\lambda x)^{\alpha}}, \space \forall x\geq 0
\]
Y su funcion de distribucion esta dada por \[ F(x)= \left\{ \begin{array}{lcc} 0 & si & x \leq 0 \\ \\ 1-e^{-(\lambda x)^k} & si & x \geq 0 \end{array} \right. \] Como \(W(\lambda , 1)\approx exp(\lambda)\).
#datos
n<-1000
x<-sample(n)
lambda<-1.5
alpha<-1.4
dwll <- function(x, lambda =1, alpha = 1){
# Densidad Weibull
alpha*(lambda^alpha)*(x^(alpha-1))*exp(-(alpha*x)^alpha)
}
rwll<- function(lambda = 1, alpha = 1){
# Weibull
U <- runif(1)
if (U<0.5) {
return (0)
} else {
return((-log(U)^(1/alpha))/lambda)
}
}
rwlln <- function(n = 100,lambda = 1, alpha = 1) {
# Simulación n valores de weibull
x <- numeric(n)
for(i in 1:n) x[i]<-rwll(alpha,lambda)
return(x)
}
curve(dwll(x,1.5,1.4),0,10)
curve(dweibull(x,1.5,1.4),0,10)
Notemos que la aproximacion por inversion es casi similar a la curva de una distribucion Waibull dada por R.
La distribucion binomial negativa, \(BN(r,p\) generaliza a la geométrica. Se la puede interpretar como el numero de fracasos antes del r-ésimo éxito. Esta dado por: \[ P(X=i)=\displaystyle{i+r-1 \choose i}p^r(1-p)^i, \space para \space i=0,1,... \] Debido a la reproductividad en el parámetro \(r\), puede simularse como suma de \(r\) variables geométricas, aunque este algoritmo puede ser muy costoso en tiempo de computación si \(r\) es elevado. Se lo puede simular como:
dbn <- function(x, r = 1, p){
# Densidad Binomial Negativa
library(gtools)
i<-1
combinations(i+r-1,i)*p^r~(1-p)^i
}
rbn <- function(p){
# Binomial Negativa
L <- rgamma(1)
U <- rpois(L)
return (U)
}
rbnn <- function(n = 100,p) {
# Simulación n valores de binomial negativa
x <- numeric(n)
for(i in 1:n) x[i]<-rbn(p)
return(x)
}
plot(0:10, dnbinom(0:10,10,0.35))