【发布时间】:2020-12-03 14:14:37
【问题描述】:
我有一个散点图,其中 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))
【问题讨论】:
-
ggplot的目的是可视化。它具有标准模型的一些功能,但是当建模变得复杂时,通常更容易将建模与可视化分开进行。我建议使用nls(或您喜欢的任何功能)来拟合您的模型,然后绘制结果,而不是花费大量精力使两者同时发生.. -
level是什么?它没有定义,并且它不存在于数据框中 -
@GregorThomas 我一直都在说同样的观点,尽管在这种情况下,在
geom_smooth中运行nls会很容易。这里更大的问题是我不认为指定的这个模型会收敛。它包含一个 B 和 C,它们实际上只是形成一个比率。它们的个体值无法通过回归确定。 -
@Mouad_Seridi 哎呀我现在添加了它
-
@Biotechgeek 您只是想在指定 A、B 和 C 的地方画线
y ~ (A*((B*x/C)-1) - 1)*log(x),还是要找到 A、B 和 C?
标签: r function ggplot2 curve-fitting