2015-03-31 33 views
2

我有以下的xy對:通過指定的座標在r趨於擬合功率曲線

x <- seq(.3, .7, by=0.01) 
y <- .5 * (x**-2.5) + runif(n = 41, min = -0.25, max = 0.25) 

我想找到與形式爲y-帽子= A *的曲線的參數A和B( x ** B),使得y和y-hat之間的平方誤差之和最小化。

此外,曲線必須通過座標(0.7,1.0)。因此我真的只需要解答A,因爲B = -log(A)/log(0.7)

我可以在Excel中使用Solver輕鬆完成此任務,但是編寫自己的算法來解決R中的A超出了我當前的能力。我猜測內置的解決方案已經存在了。我查看了poweRlaw軟件包,但似乎沒有辦法強制曲線通過指定點。

回答

2
set.seed(101) 
x <- seq(.3, .7, by=0.01) 
y <- .5 * (x**-2.5) + runif(n = 41, min = -0.25, max = 0.25) 

您需要一個合理的起點:您可以通過對數迴歸得到一個。

m1 <- lm(log(y)~log(x)) ## hope all your data are positive 
A_est <- exp(coef(m1)[1]) 

現在,您可以估算:

n1 <- nls(y ~ A*x^(-log(A)/log(0.7)),start=list(A=A_est)) 
A <- coef(n1) 
B <- -log(A)/log(0.7) 
plot(x,y) 
curve(A*x^B,add=TRUE,col="red") 
+0

這工作就像一個魅力。當我爲了看看會發生什麼而提出一個不合理的起點時,我得到了一個錯誤,這正是我所希望的。有沒有簡單的方法來確定合理的起點? – drumminactuary 2015-03-31 17:12:03

+0

擬合對數線性迴歸;即'lm(log(y)〜log(x))'應該給出log(A)和B的近似估計。 – 2015-03-31 17:21:03