2016-01-05 90 views
4

我想模擬一些數據。我的Excel比R運氣更好,但Excel解決方案不會縮放,因此我需要計算如何在R中執行此操作。Excel中的Power Law比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 

Image shows how the models built from 14-days of data with Excel and R conpl() match up to the Actuals out to day 60

是否有使用lmglm做到這一點給出合理的攔截和alpha功率曲線的方法嗎?

+3

隨着音符的'poweRlaw'嘗試,[查看其暗角(https://cran.rstudio.com/網絡/包/冪/插圖/ a_introduction.pdf)好像它是由估計*冪律概率分佈*,這是你正在做的不是什麼。例如,概率分佈必須將曲線下的面積總和設爲1. – Gregor

回答

6

我還沒有使用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) 

enter image description here

+0

WOOT !!! WOOT!優秀的答案......完全改變了我的方法,給了我更合理的預測。真誠感謝您的回答! – MAlex

8

好像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的回答上圖我們可以看到在擬合值的差異非常小。)

+1

好的解釋Gregor。 – eipi10

+0

格里高爾 - 你提供的解釋非常有助於我消化eipi10的答案。真的很感激你花時間來解決這個問題。 – MAlex

+2

另一個有用的技巧是'GLM(Y〜logX的,家庭=高斯(鏈接= 「日誌」))'... –