用R绘制x和y数据的幂律线图

6

我想绘制一个幂律线来适应已经在数据框中存在的x和y数据。我尝试使用igraph库中的power.law.fit,但它并没有起作用。数据框如下:

dat=data.frame(
  x=1:8,
  ygm=c( 251.288, 167.739, 112.856, 109.705, 102.064, 94.331, 95.206, 91.415)
)
1个回答

4

我通常有两种策略,一种是取对数并拟合线性模型,另一种是使用nls。如果您想的话,我认为您可以弄清楚对数模型,所以在这里我将展示nls方法。

  nls1=nls(ygm~i*x^-z,start=list(i=-3,z=-2),data=dat)

请仔细检查您需要的公式是否正确,这种方法接受一类相当广泛的公式。花费一些时间来尝试不同的起始值。特别是在可能出现奇怪情况的边界上进行尝试。尝试在奇怪位置的两侧使用不同的数值,以确保您不会陷入局部最优解。

> nls1
Nonlinear regression model
  model:  ygm ~ i * x^-z 
   data:  dat 
       i        z 
245.0356   0.5449 
 residual sum-of-squares: 811.4

 ... 

> predict(nls1)
[1] 245.03564 167.95574 134.66070 115.12256 101.94200  92.30101  84.86458
[8]  78.90891
> plot(dat)
> lines(predict(nls1))

2
谢谢你的解决方案。我没有找到太多关于nls的文档,大部分都指向igraph,但它并不能正常工作。现在我得到了我需要的东西。谢谢! - joe
nls1=nls(ygm~i*x^-z,start=list(i=-3,z=-2),data=dat) plot(dat, log="xy") lines(dat$x, predict(nls1), col="blue") 我认为这个答案很好,对我很有帮助。@Joe,你的解决方案是什么? - Nick Dong
@NickDong 老实说,我不记得我的解决方案是什么了。这是一个六年前的帖子。 - joe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接