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))