[R-es] Graficar una curva de tendencia potencial.

Emilio L. Cano em||opezc@no @end|ng |rom gm@||@com
Jue Oct 1 11:10:26 CEST 2020


Hola Jimmy,

Enhorabuena por proporcionar un ejemplo reproducible. Es la mejor forma de poder ayudar, y no todo el mundo lo hace.

El ajuste no lineal muchas veces falla por los valores iniciales. Lo mejor es intentar buscar valores iniciales lo más aproximados posibles. De tu nube de puntos, se ve que es prácticamente una recta y=x, pero si los pones en 1,1 o 0,1, da errores. Entonces siempre primero asegúrate de que el modelo lineal se puede ajustar. Si la función nls da errores, entonces primero arregla eso, y después podrás graficarlo.

En el caso de la función potencial que planteas, es fácil encontrar valores muy aproximados linealizando, y después puedes usar esos valores como iniciales para ajustar el modelo no lineal (y meterlos también en el gráfico).

Pego debajo un ejemplo (reproducible) que funciona. Con nls parece que no funciona se=TRUE, si lo necesitas creo que tendrías que añadir una capa geom_ribbon calculándola con el resultado del modelo.

Un saludo,
Emilio L. Cano


modelos_Garcia <- read.table(header = TRUE,
                text = "AF_E PS_E
90.838 2.206
83.139 1.751
134.272 3.710
84.043 2.076
105.184 2.788
157.249 3.783
50.280 1.027
96.973 2.355
123.582 3.398
60.417 1.236
123.501 3.315
90.128 1.566
193.783 5.167
116.036 2.994
100.289 2.216
56.943 1.106
102.272 2.692
145.579 3.810
53.105 1.202
127.212 3.061
102.838 2.383
126.352 2.723
13.661 0.190
164.352 4.870
159.945 4.160
54.382 0.884
128.253 3.598
181.208 4.767
145.118 3.779
65.993 1.147")

## No funcionan los valores iniciales
modelo <- nls(PS_E ~ a*AF_E^b, modelos_Garcia, start = list(a = 1, b = 1))

## Buscar mejores:
modelol <- lm(log(PS_E) ~ log(AF_E), modelos_Garcia)
coef(modelol)

## Probar de nuevo
modelo <- nls(PS_E ~ a*AF_E^b, modelos_Garcia, 
              start = list(a = exp(coef(modelol)[1]), b = coef(modelol)[2]))
coef(modelo)
a0 <- exp(coef(modelol)[1])
b0 <- coef(modelol)[2]

library(ggplot2)
ggplot(modelos_Garcia,aes(x = AF_E,y = PS_E)) +
  geom_point() +
  geom_smooth(method = 'nls', 
              formula = y~a*x^b, 
              method.args = list(start = list(a = a0, 
                                              b = b0)),
              se = FALSE)



> El 1 oct 2020, a las 0:48, Jimmy Erney Reyes Velasco <jimmyreyesvelasco using gmail.com> escribió:
> 
> AF_E PS_E
> 90.838 2.206
> 83.139 1.751
> 134.272 3.710
> 84.043 2.076
> 105.184 2.788
> 157.249 3.783
> 50.280 1.027
> 96.973 2.355
> 123.582 3.398
> 60.417 1.236
> 123.501 3.315
> 90.128 1.566
> 193.783 5.167
> 116.036 2.994
> 100.289 2.216
> 56.943 1.106
> 102.272 2.692
> 145.579 3.810
> 53.105 1.202
> 127.212 3.061
> 102.838 2.383
> 126.352 2.723
> 13.661 0.190
> 164.352 4.870
> 159.945 4.160
> 54.382 0.884
> 128.253 3.598
> 181.208 4.767
> 145.118 3.779
> 65.993 1.147 Hola buenas tardes
> quiero graficar una curva de tendendia de un modelo potencial con estos
> datos.
> mi codigo es el siguiente:
> 
> ggplot(modelos_Garcia,aes(x = AF_E,y = PS_E)) +
>  geom_point() +
>  stat_smooth(method = 'nls', formula = 'y~a*x^b', start = list(a =
> 1,b=1),se=TRUE)
> 
> pero cuando ejecuto el código no me aparece la curva de tendencia
> ¿alguien sabe cómo podría hacerlo?.
> por otro lado me gustaría añadir la ecuación del modelo.
> agradezco mucho la información que puedan darme.
> 
> 	[[alternative HTML version deleted]]
> 
> _______________________________________________
> R-help-es mailing list
> R-help-es using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es



Más información sobre la lista de distribución R-help-es