当前位置:  开发笔记 > 编程语言 > 正文

Excel中的幂律比R好吗?

如何解决《Excel中的幂律比R好吗?》经验,为你挑选了2个好方法。

我正在尝试建模一些数据.我的Excel运气比R好,但Excel解决方案不会扩展所以我需要在R中计算如何做到这一点.

Excel将趋势线映射到数据,功率曲线产生合理的y = 0.6462x ^ -0.542.

当我将相同的数据放入R并尝试使用包中的连续幂律对其进行建模时,poweRlaw我会得到类似的结果y = 0.14901x^-3.03671.拦截太小了,而且alpha太大了.

# 14 days of % of users retained
y = c(0.61431   , 0.42585   , 0.35427   , 0.33893   , 0.28853   , 0.26004   , 0.2352    , 0.20087   , 0.17969   , 0.1848    , 0.17311   , 0.17092   , 0.15777   , 0.14901)

y.pl = conpl$new(y)
y.pl_est = estimate_xmin(c_pl)
y.pl_est

# $KS
# 0.1068587
#
# $xmin
# 0.14901
#
# $pars
# 3.03673
#
# $ntail
# 14

该图显示了使用Excel和R conpl()从14天数据构建的模型如何与实际值相匹配到第60天

有没有办法使用lmglm做一个能产生合理拦截和alpha的功率曲线?



1> Gregor..:

似乎Excel可能在日志范围内执行具有正常错误的线性模型 - 我将Excel结果与您在建立日志时xy之前共享的小数位数相匹配.

使用@ eipi10的共享数据框:

dat = transform(dat, logx = log(x), logy = log(y))
mod = lm(logy ~ logx, data = dat)

## intercept
exp(coef(mod)[1])
# (Intercept) 
#   0.6461621 

## power
coef(mod)[2]
#       logx 
# -0.5424412 

这当然有效,因为如果

      y = a * x ^ b
 log(y) = log(a) + b * log(x)

因此,线性模型的拟合系数log(a),并b在功率模型.

不同之处在于误差分布的假设.使用NLS的另一个答案是最小化功率标度上的平方误差 - 如果您假设正常分布的误差,则为MLE y.这种方法(显然也是Excel的方法)假设错误在对数刻度上是正常的,这意味着在未转换的量表上假设对数正态误差 - 这可能更合适.(虽然从eipi的答案中可以看出,拟合值的差异非常小.)


另一个有用的技巧是`glm(y~logx,family = gaussian(link ="log"))``

2> eipi10..:

我没有使用过该poweRlaw软件包,但是R的基础nls(非线性最小二乘)函数给出了与Excel相似的结果.如果有差异,在检查我的代码错误之后,我的第一个想法是"对Excel来说更糟糕":).

# Data
dat = data.frame(x=1:14,
y = c(0.61431   , 0.42585   , 0.35427   , 0.33893   , 0.28853   , 0.26004   , 0.2352    , 0.20087   , 0.17969   , 0.1848    , 0.17311   , 0.17092   , 0.15777   , 0.14901))

# Model
m1 = nls(y ~ a*x^b, list(a=1,b=1), data=dat)
summary(m1)

Formula: y ~ a * x^b

Parameters:
  Estimate Std. Error t value Pr(>|t|)    
  a  0.62104    0.01307   47.51 4.94e-15 ***
  b -0.51460    0.01525  -33.74 2.92e-13 ***

# Plot nls model
curve(coef(m1)[1]*x^coef(m1)[2], from=1, to=14)

# Add curve for Excel model in red
curve(0.6462*x^(-0.542), from=1, to=14, col="red", lty=2, add=TRUE)

# Add data points
points(dat$x, dat$y)

在此输入图像描述

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有