¿Cómo ajustar una función no lineal a los datos en ggplot2 usando un modelo de máxima verosimilitud en R?
El conjunto de datos (x.test, y.test) es un ajuste exponencial. Estoy tratando de ajustar una función no lineal personalizada y adjunto está el código. Los puntos regulares se muestran bien, pero no puedo hacer que la línea de ajuste funcione. ¿Alguna sugerencia?
x.test <- runif(50,2,8)
y.test <- 0.5^(x.test)
df <- data.frame(x.test, y.test)
library(ggpmisc)
my.formula <- y ~ lambda/ (1 + aii*x)
ggplot(data = df, aes(x=x.test,y=y.test)) +
geom_point(shape=21, fill="white", color="red", size=3) +
stat_smooth(method="nls",formula = y.test ~ lambda/ (1 + aii*x.test), method.args=list(start=c(lambda=1000,aii=-816.39)),se=F,color="red") +
geom_smooth(method="lm", formula = my.formula , col = "red") + stat_poly_eq(formula = my.formula, aes(label = stringr::str_wrap(paste(..eq.label.., ..rr.label.., sep = "~~~"))), parse = TRUE, size = 2.5, col = "red") + stat_function(fun=function (x.test){
y.test ~ lambda/ (1 + aii*x.test)}, color = "blue")
davy.ai
El problema con el código parece ser el uso de
y.test
en lugar de simplementey
en el argumentoformula
destat_smooth
ystat_function
. Cambiary.test
a soloy
debería resolver el problema.Aquí está el código corregido:
Esto debería producir la línea de ajuste junto con el gráfico de puntos regular.