我有一个应遵循幂律分布的数据。
x = distance
y = %
我想创建一个模型并将拟合的线添加到我的情节中。
作者使用R-square;我假设他们应用线性模型,因为R ^ 2 不适合非线性模型。 http://blog.minitab.com/blog/adventures-in-statistics-2/why-is-there-no-r-squared-for-nonlinear-regression
然而,我无法找到如何“曲线”我的线到点;如何将公式y ~ a*x^(-b)
添加到我的模型中。
我的问题是:
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)
并尝试创建glm
模型。
# formula for non-linear model
m<-m.glm<-glm(y ~ x^2, data = dat) #
# add predicted line to plot
lines(x,predict(m),col="red",lty=2,lwd=3)
这是我第一次模特儿,所以我很困惑,我不知道从哪里开始...谢谢你的任何建议或指示,我真的很感激......
答案 0 :(得分:4)
我个人认为这个问题是这个问题:`nls` fails to estimate parameters of my model但如果我关闭它,我就会冷血(因为OP提供了赏金)。无论如何,赏金问题不能被关闭。
所以我能想到的最好的,就是发布一个社区wiki答案(我不想得到这个赏金)。
由于您希望适合此表单的模型y ~ a*x^(-b)
,因此通常会在两侧进行log
转换并使用线性模型log(y) ~ log(x)
。
fit <- lm(log(y) ~ log(x))
正如您已经知道如何使用curve
绘制回归曲线并对其感到满意,我现在将展示如何制作情节。
有些人称此日志对数回归。以下是我对此类回归的一些其他链接:
答案 1 :(得分:-1)
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)