Hola: Lamento molestar por este medio. Tal vez no sea la manera correcta de hacer esta consulta. Me disculpo por ello. Navegando por la red encontré esta dirección. Soy un usuario que apenas se está familiarizando con el programa R, de modo que me surgen dudas. Pero por ahora sólo quisiera hacer la siguiente consulta y confío que me pueden ayudar. Mi problema es el siguiente: Estoy analizando la frecuencia de especies forestales y variables de clima. Donde estoy usando la distribución de Weibull con tres parámetros. Puedo generar los parámetros, el histograma y la curva de weibull. Hasta aquí todo bien. Mi problema es: ¿Cómo voy a saber si los parámetros son significativos y si realmente mis datos siguen una distribución de Weibull? Revisando la literatura (encuentro que existe el Test de Kolmogorov-Smirnov y Anderson-Darling) pero cuáles son los códigos en R para tres parámetros? Llevo mucho tiempo buscando y no encuentro. # Weibull parameters: a=location; b=scale; c=shape dweibull3 <- function(x, c, b, a) {(c/b) * ((x -a)/b)^(c - 1) * (exp(-((x - a)/b)^c))} ll.w3 <- function(p, data) sum(log(dweibull3(data, p[1], p[2], p[3]))) # Nelder-Mead method mle.w3.nm<-optim(c(c=.1, b=.01, a=0.1), ll.w3, data=dat, hessian=TRUE,control=list(fnscale=-1)) mle.w3.nm$par # list the parameters Estos son mis parámetros que me da R c b a 62.15368 11832.90760 -9038.41699 Son 1804 observaciones. Por si es necesario saberlo, De antemano les agradezco muchísimo. Saludos Pablo [[alternative HTML version deleted]]
Hola Pablo, Quizas esto te ayude: # ---------------- # tus funciones # ---------------- # Weibull parameters: a=location; b=scale; c=shape # -- aqui cambie "dweibull3" por "d2weibull3" para que no se confundiera # -- con una funcion que existe en la libreria FAdist d2weibull3 <- function(x, c, b, a) {(c/b) * ((x -a)/b)^(c - 1) * (exp(-((x - a)/b)^c))} ll.w3 <- function(p, data) sum(log(d2weibull3(data, p[1], p[2], p[3]))) # Nelder-Mead method mle.w3.nm<-optim(c(c=.1, b=.01, a=0.1), ll.w3, data=x, hessian=TRUE,control=list(fnscale=-1)) mle.w3.nm$par # parametros muy cerca de los valores "reales" # --------------------------------------- # datos, histograma y ajuste # --------------------------------------- # install.packages(''FAdist'') # desactivar para instalarlo require(FAdist) # datos "reales" --> Y ~ W(a, b) n <- 1000 a <- 20 b <- 10 m <- 30 y <- rweibull(n, a, b) # transformados --> X = Y + m ~ W3(a, b, m) # ver ayuda de ?rweibull3 para mas informacion x <- y + m # histogramas par(mfrow = c(1, 2), type = ''o'') hist(y, main = expression(Y*"~"*W(a, b)), las = 1, prob = TRUE) hist(x, main = expression(Y*"~"*W3(a, b, m)), las = 1, prob = TRUE) # organizando los parametros out <- mle.w3.nm$par names(out) <- c(''a'',''b'',''m'') out # histograma par(mfrow = c(1, 1)) hist(x, prob = TRUE, ylim = c(0, 0.8), main = '''', las = 1) x0 <- seq(min(x), 1.05*max(x), length = 1000) points(x0, dweibull3(x0, out[1], out[2], out[3]), type = ''l'', add = TRUE, col = 2) # bondad de ajuste xsample <- rweibull3(n, out[1], out[2], out[3]) ks.test(xsample, x, alternative = ''two.sided'') # son equivalentes Recomendaciones: leer un manual introductorio a R (ver por ejemplo http://cran.r-project.org/other-docs.html) y consultar las ayudas de ?rweibull y ?rweibull3. Bienvenido a R y a R-help-es! Jorge.- 2012/5/2 Niño-Alfa <>> Hola: > > Lamento molestar por este medio. Tal vez no sea la manera correcta de > hacer esta consulta. Me disculpo por ello. > > Navegando por la red encontré esta dirección. > > Soy un usuario que apenas se está familiarizando con el programa R, de > modo que me surgen dudas. Pero por ahora sólo quisiera hacer la siguiente > consulta y confío que me pueden ayudar. Mi problema es el siguiente: > > Estoy analizando la frecuencia de especies forestales y variables de > clima. Donde estoy usando la distribución de Weibull con tres parámetros. > > Puedo generar los parámetros, el histograma y la curva de weibull. Hasta > aquí todo bien. > Mi problema es: ¿Cómo voy a saber si los parámetros son significativos y > si realmente mis datos siguen una distribución de Weibull? > > Revisando la literatura (encuentro que existe el Test de > Kolmogorov-Smirnov y Anderson-Darling) pero cuáles son los códigos en R > para tres parámetros? > Llevo mucho tiempo buscando y no encuentro. > > # Weibull parameters: a=location; b=scale; c=shape > > dweibull3 <- function(x, c, b, a) {(c/b) * ((x -a)/b)^(c - 1) * (exp(-((x - a)/b)^c))} > ll.w3 <- function(p, data) sum(log(dweibull3(data, p[1], p[2], p[3]))) > > # Nelder-Mead method > > mle.w3.nm<-optim(c(c=.1, b=.01, a=0.1), ll.w3, data=dat, hessian=TRUE,control=list(fnscale=-1)) > mle.w3.nm$par # list the parameters > > Estos son mis parámetros que me da R > c b a > 62.15368 11832.90760 -9038.41699 > > Son 1804 observaciones. Por si es necesario saberlo, > > De antemano les agradezco muchísimo. > > > Saludos > Pablo > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
Pablo, Solo por curiosidad, existe alguna razon especifica por la cual debas usar la distribucion weibull de tres parametros? Si la distribucion weibull de dos parametros fuese suficiente, entonces podrias utilizar la funcion fistdistr() de la libreria MASS para ajustar tus datos. A continuacion un ejemplo: # datos "reales" --> Y ~ W(a, b) n <- 1000 a <- 20 b <- 10 m <- 30 y <- rweibull(n, a, b) x <- y + m # X ~ W3(a, b, m) # ajuste require(MASS) fit <- fitdistr(x, ''weibull'')[[1]] # histograma x0 <- seq(min(x), 1.05*max(x), length = 1000) hist(x, prob = TRUE, ylim = c(0, 0.8), main = '''', las = 1, breaks = 20) points(x0, dweibull(x0, fit[1], fit[2]), type = ''l'', add = TRUE, col = 2) # bondad de ajuste xsamp <- rweibull(n, fit[1], fit[2]) ks.test(x, xsamp) --JIV 2012/5/2 Jorge I Velez < <jorgeivanvelez@gmail.com>>> Hola Pablo, > > Quizas esto te ayude: > > # ---------------- > # tus funciones > # ---------------- > > # Weibull parameters: a=location; b=scale; c=shape > # -- aqui cambie "dweibull3" por "d2weibull3" para que no se confundiera > # -- con una funcion que existe en la libreria FAdist > d2weibull3 <- function(x, c, b, a) {(c/b) * ((x -a)/b)^(c - 1) * (exp(-((x > - a)/b)^c))} > ll.w3 <- function(p, data) sum(log(d2weibull3(data, p[1], p[2], p[3]))) > > # Nelder-Mead method > mle.w3.nm<-optim(c(c=.1, b=.01, a=0.1), ll.w3, data=x, > hessian=TRUE,control=list(fnscale=-1)) > mle.w3.nm$par # parametros muy cerca de los valores "reales" > > # --------------------------------------- > # datos, histograma y ajuste > # --------------------------------------- > # install.packages(''FAdist'') # desactivar para instalarlo > require(FAdist) > > # datos "reales" --> Y ~ W(a, b) > n <- 1000 > a <- 20 > b <- 10 > m <- 30 > y <- rweibull(n, a, b) > > # transformados --> X = Y + m ~ W3(a, b, m) > # ver ayuda de ?rweibull3 para mas informacion > x <- y + m > > # histogramas > par(mfrow = c(1, 2), type = ''o'') > hist(y, main = expression(Y*"~"*W(a, b)), las = 1, prob = TRUE) > hist(x, main = expression(Y*"~"*W3(a, b, m)), las = 1, prob = TRUE) > > # organizando los parametros > out <- mle.w3.nm$par > names(out) <- c(''a'',''b'',''m'') > out > > # histograma > par(mfrow = c(1, 1)) > hist(x, prob = TRUE, ylim = c(0, 0.8), main = '''', las = 1) > x0 <- seq(min(x), 1.05*max(x), length = 1000) > points(x0, dweibull3(x0, out[1], out[2], out[3]), type = ''l'', add = TRUE, > col = 2) > > # bondad de ajuste > xsample <- rweibull3(n, out[1], out[2], out[3]) > ks.test(xsample, x, alternative = ''two.sided'') # son equivalentes > > Recomendaciones: leer un manual introductorio a R (ver por ejemplo > http://cran.r-project.org/other-docs.html) y consultar las ayudas de > ?rweibull y ?rweibull3. > > Bienvenido a R y a R-help-es! > Jorge.- > > > 2012/5/2 Niño-Alfa <> > >> Hola: >> >> Lamento molestar por este medio. Tal vez no sea la manera correcta de >> hacer esta consulta. Me disculpo por ello. >> >> Navegando por la red encontré esta dirección. >> >> Soy un usuario que apenas se está familiarizando con el programa R, de >> modo que me surgen dudas. Pero por ahora sólo quisiera hacer la siguiente >> consulta y confío que me pueden ayudar. Mi problema es el siguiente: >> >> Estoy analizando la frecuencia de especies forestales y variables de >> clima. Donde estoy usando la distribución de Weibull con tres parámetros. >> >> Puedo generar los parámetros, el histograma y la curva de weibull. Hasta >> aquí todo bien. >> Mi problema es: ¿Cómo voy a saber si los parámetros son significativos y >> si realmente mis datos siguen una distribución de Weibull? >> >> Revisando la literatura (encuentro que existe el Test de >> Kolmogorov-Smirnov y Anderson-Darling) pero cuáles son los códigos en R >> para tres parámetros? >> Llevo mucho tiempo buscando y no encuentro. >> >> # Weibull parameters: a=location; b=scale; c=shape >> >> dweibull3 <- function(x, c, b, a) {(c/b) * ((x -a)/b)^(c - 1) * (exp(-((x - a)/b)^c))} >> ll.w3 <- function(p, data) sum(log(dweibull3(data, p[1], p[2], p[3]))) >> >> # Nelder-Mead method >> >> mle.w3.nm<-optim(c(c=.1, b=.01, a=0.1), ll.w3, data=dat, hessian=TRUE,control=list(fnscale=-1)) >> mle.w3.nm$par # list the parameters >> >> Estos son mis parámetros que me da R >> c b a >> 62.15368 11832.90760 -9038.41699 >> >> Son 1804 observaciones. Por si es necesario saberlo, >> >> De antemano les agradezco muchísimo. >> >> >> Saludos >> Pablo >> [[alternative HTML version deleted]] >> >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es@r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> >> >[[alternative HTML version deleted]]