我有一个数据应该遵循幂律分布。
x = distance
y = %
我想创建一个模型并将拟合线添加到我的绘图中。
作者使用 R 方;我假设他们应用了线性模型,因为 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)
这是我第一次做模特,所以我真的很困惑,我不知道从哪里开始......谢谢你的任何建议或指导,我真的很感激......
最佳答案
我个人认为这个问题是一个骗局:`nls` fails to estimate parameters of my model但如果我关闭它,我会变得冷血(因为OP悬赏)。无论如何,赏金问题无法关闭。
所以我能想到的最好的办法就是发布社区维基答案(我不想得到这个赏金)。
当您想要拟合这种形式的模型 y ~ a*x^(-b)
时,它通常受益于在两侧进行 log
变换并拟合线性模型log(y) ~ log(x)
。
fit <- lm(log(y) ~ log(x))
由于您已经知道如何使用curve
来绘制回归曲线并且对此感到满意,所以我现在将展示如何制作绘图。
有些人称之为双对数回归。以下是我针对此类回归提供的一些其他链接:
关于R:将曲线拟合到点:使用什么线性/非线性模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44669339/