R:将曲线拟合到点:使用什么线性/非线性模型?

R:将曲线拟合到点:使用什么线性/非线性模型?,r,plot,statistics,glm,R,Plot,Statistics,Glm,我有一个数据应该遵循幂律分布 x = distance y = % 我想创建一个模型,并将拟合线添加到绘图中 我的目标是重现这样的东西: 因为作者使用了R平方;我假设他们应用了线性模型,因为R^2不适用于非线性模型 然而,我不知道如何“弯曲”我的线到点;如何将公式y~a*x^(-b)添加到我的模型中 我从简单的线性回归中得到了线,而不是卷曲线 我的问题是: 我是否正确地假设作者使用的模型是线性的 要使用什么类型的模型来重新创建我的示例:lm、glm、nls等 我根据上图生成了虚拟数据,

我有一个数据应该遵循幂律分布

x = distance 
y = %
我想创建一个模型,并将拟合线添加到绘图中

我的目标是重现这样的东西:

因为作者使用了R平方;我假设他们应用了线性模型,因为R^2不适用于非线性模型

然而,我不知道如何“弯曲”我的线到点;如何将公式
y~a*x^(-b)
添加到我的模型中

我从简单的线性回归中得到了线,而不是卷曲线

我的问题是:

  • 我是否正确地假设作者使用的模型是线性的
  • 要使用什么类型的模型来重新创建我的示例:
    lm、glm、nls

我根据上图生成了虚拟数据,包括应用的幂律公式:

set.seed(42)
scatt<-runif(10)

x<-seq(1, 1000, 100)
b = 1.8411
a = 133093
y = a*x^(-b) + scatt  # add some variability in my dependent variable

plot(y ~ x)

这是我第一次做模特,所以我真的很困惑,我不知道从哪里开始。。。谢谢你的任何建议或指示,我真的很感激…

m我个人认为这个问题是一个骗局:但如果我关闭它,我会很冷血(就像OP悬赏一样)。无论如何,悬赏问题无法解决

m <- lm(log(y) ~ log(x), data=dat)
a <- exp(intercept)

b <- -exp(slope)

plot(y ~ x, type="p", lty=3)

lines(x, exp(predict(m)), col="blue", lty=2, lwd=3)
所以我能想到的最好办法就是在社区维基上发布一个答案(我不想得到这个赏金)

当您想要拟合这种形式的模型时,
y~a*x^(-b)
,它通常受益于在两侧进行
log
变换,并拟合线性模型
log(y)~log(x)


fit如果我问的话,很抱歉。你真的想要一个指数也在变化的公式吗?你的
b
不是一个常数。。。还是我理解错了什么?如果是变化,你应该知道如何,否则你如何适应它?另一方面,为了适应非线性模型,可以使用
nls()
。你能澄清一下你是否真的想让
b
变化吗?实际上,我不太确定。。。我试图复制公式f(x)=a*x^(-b),正如上面的图所示(如果我是正确的,公式应该描述绘图中的线条。公式是线性的、非线性的还是glm?对不起,我真的很困惑..通常用小写字母表示常量,所以我会将此公式解释为
a
b
是常量。在你的帖子中,你也使
b
发生变化,这使得它要复杂得多。我将尝试概述我所理解的您的问题的可能解决方案。请对其进行评论,以便我们可以为其他人更新解决方案…哦,对不起!我将尝试更新我的示例以保持b恒定。提前感谢您!哇,我喜欢这样!如果我应用曲线(ax^b),我将返回一条正确的曲线但是,在我的示例中,他们使用的是公式ax^(-b),这给了我糟糕的曲线方向。他们为什么应用负b值?
m <- lm(log(y) ~ log(x), data=dat)
a <- exp(intercept)

b <- -exp(slope)

plot(y ~ x, type="p", lty=3)

lines(x, exp(predict(m)), col="blue", lty=2, lwd=3)
fit <- lm(log(y) ~ log(x))