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

Eric er|cconch@munoz @end|ng |rom gm@||@com
Vie Oct 2 03:03:33 CEST 2020


Gracias Emilio, tu respuesta nos sirve a todos,

Eric.



On 01-10-20 06:10, Emilio L. Cano wrote:
> 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
> _______________________________________________
> 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