2015-08-27 30 views
1

指數擬合我有這樣其中R

DF

x   y 
7.3006667 -0.14383333 
-0.8983333 0.02133333 
2.7953333 -0.07466667 

的數據集,我希望像Y = A *(EXP(BX)),以適應一個指數函數。

這是我嘗試和錯誤,我得到

f <- function(x,a,b) {a * exp(b * x)} 
st <- coef(nls(log(y) ~ log(f(x, a, b)), df, start = c(a = 1, b = -1))) 

Error in qr.qty(QR, resid) : NA/NaN/Inf in foreign function call (arg 5) 
In addition: Warning messages: 
1: In log(y) : NaNs produced 
2: In log(y) : NaNs produced 

fit <- nls(y ~ f(x, a, b), data = df, start = list(a = st[1], b = st[2])) 

Error in nls(y ~ exp(a + b * x), data = df, start = list(a = st[1], : 
    singular gradient 

我相信這與該日誌不爲負數定義,但我不知道如何解決這個事實的事。

+0

聽起來像你有一個模型/數據不兼容問題,而不是編程或模型收斂問題。 – davechilders

+0

如果'a'爲正數,那麼右側永遠不會等於負數'y',如果'a'爲負數,那麼右側永遠不會等於正數'y',因此此模型似乎與數據不一致正如你的數據集中的y值一樣。此外,由於「y」的某些組成部分是負數,所以不能取「y」的對數。建議你嘗試一個不同的模型,如果這確實是你的數據。 –

+0

@ G.Grothendieck問題是,我不明白我可以使用哪種模型來模擬指數。 – user3036416

回答

2

我在這裏看到問題時遇到問題。

f <- function(x,a,b) {a * exp(b * x)} 
fit <- nls(y~f(x,a,b),df,start=c(a=1,b=1)) 
summary(fit)$coefficients 
#  Estimate Std. Error t value Pr(>|t|) 
# a -0.02285668 0.03155189 -0.7244157 0.6008871 
# b 0.25568987 0.19818736 1.2901422 0.4197729 

plot(y~x, df) 
curve(predict(fit,newdata=data.frame(x)), add=TRUE) 

係數估計很糟糕,但是這並不奇怪:你有兩個參數和三個數據點。至於爲什麼你的代碼失敗了:第一次調用nls(...)會產生一個錯誤,所以st從來沒有被設置爲任何東西(儘管它可能有一些早期代碼的值)。然後在第二次撥打nls(...)時嘗試使用它。