如何在 ggplot2 R 中为 facet_wrap 的每个级别拟合自定义曲线?

How to fit custom curves for each level of facet_wrap in ggplot2 R?

我有一个 x = xaxis 和 y = yaxis 的散点图和两个级别,我需要分别拆分和分析数据。对于每组数据,我需要绘制一个 y ~ (A*((B*x/C)-1) - 1)*log(x)) 形式的自定义函数。对于每个级别,我需要指定 A、B 和 C。如何在 ggplot2 中执行此操作?

ggplot2的示例代码。我生成了随机数据,因此平滑函数可能对这些数据没有意义(但对我的原始数据有用)

xaxis = c(1:100)
yaxis = rnorm(100,2,0.1)
level = rep(c("A","B"), 50)

    
df <- data.frame(xaxis, yaxis, level)
ggplot(df,aes(x= xaxis, y = yaxis, col = level)) + geom_point() +facet_wrap(.~level, scales="free")+ geom_smooth(method="lm", formula = y ~ (A*((B*x/C)-1) - 1)*log(x))

如果要尝试使用您的公式拟合模型以找到 A、B 和 C 的值,则不能,原因很简单,因为 B 和 C 在您的公式中仅作为比率出现。因此,如果“B”的真实值为 4,“C”的真实值为 2,那么这与“B”为 12 和“C”为 6 无法区分。只有比率两个可以通过回归估计。

如果您只想绘制由您的公式指定的 线 ,其中您预先指定 A、B 和 C,那么 可能。例如:

my_func <- function(x, A, B, C) (A*((B*x/C)-1) - 1)*log(x)

ggplot(df,aes(x= xaxis, y = yaxis, col = level)) + 
  geom_point() +
  facet_wrap(.~level, scales = "free")+ 
  geom_function(data = data.frame(xaxis = 0, yaxis = 0, level = "A"),
                fun = my_func,
                args = list(A = 0.05, B = 2, C = 5)) +
  geom_function(data = data.frame(xaxis = 0, yaxis = 0, level = "B"),
                fun = my_func,
                args = list(A = 0.1, B = -0.0005, C = 1))