2017-01-12 76 views
-2

我想更詳細地分析對數增長曲線。特別是當我們傾向於當斜率變爲> 0(這是滯後階段之後的增長起點)時,我們需要確定時間點。 因此,我用r的grofit軟件包對我的增長數據擬合了一個對數函數。我得到了三個參數(lambda,mu,maximal assymptote)的值。 現在我想,我可以使用對數增長函數的一階導數將mu = 0(增長過程中任意時間點的斜率),並以此方式求解時間(x)的方程。我不確定這是否可行,因爲mu = 0對於曲線開始處更長的時間段(並且沒有唯一的時間點)是正確的。但是,也許我可以通過將mu = 0.01來接近這一點。這應該更具體。 無論如何,我使用的包DERIV找到我的對數函數的一階導數:如何解析R中的x的指數函數?

DERIV(A /(1 + EXP(((4 * B)/ A)×(CX)2)), 「X」)

其中a = assymptote,b =最大斜率,C =拉姆達。

結果我得到:

{.e2 < - EXP(2 + 4 *(B *(C - X)/ A))

4 * (.e2 * b/(.e2 + 1)^2)} 

或者在正常書寫:

f'(x)=(4 * exp(2 +((4b(cx))/ a))* b)/(exp(2 +((4b(cx))/ a ))+ 1)^ 2)

現在我會l ike用f'(x)= 0.01解決x的這個函數。誰能告訴我,如何最好地做到這一點?

另外,你對我的思維方式或我使用的R函數有什麼意見嗎?

謝謝。 Anne

+0

你的意思是你想找到一個' ,b,c' – Mateusz1981

+0

對不起,我不清楚,我知道a,b和c用於我使用的不同治療方法,它們是常數,但是對於每一個重複項都是變化的,我想知道x,根據不同a,b,c值。 – Anne

回答

0

非常感謝您的努力。不幸的是,以上解決方案的工作對我來說:-( 我想通問題出來了老式的方式(筆+紙+數學書)。 有一個好的一天 安妮

0

可能不是最好的方法,但您可以使用optim函數來查找解決方案。檢查下面的代碼,我基本上是試圖找到X最大限度地減少abs(f(x) - 0.01)

開始有種子X值可能是重要的,則optim功能可能無法收斂了一些種子的價值。

fn <- function(x){ 
    a <- 1 
    b<- 1 
    c <- 1 

return(abs((4*exp(2+((4*b*(c-x))/a))*b)/ ((exp(2+((4*b*(c-x))/a))+1)^2) - 0.01)) 
} 

x <- optim(10,fn) 
x$par 
0

使用根解法函數比使用優化函數更合適。 我會舉兩個包的例子。

爲一系列值繪製函數也是一個好主意。 像這樣:

curve(fn,-.1,.1) 

你可以看到,因爲它在間隔的端點需要函數值是相反符號的使用基礎R函數uniroot將出現問題。

使用包nleqslv這樣

library(nleqslv) 
nleqslv(1,fn) 

給出

$x 
[1] 0.003388598 

$fvec 
[1] 8.293101e-10 

$termcd 
[1] 1 

$message 
[1] "Function criterion near zero" 

<more info> ...... 

從包使用功能fsolvepracma

library(pracma) 
fsolve(fn,1) 

給出

$x 
[1] 0.003388585 

$fval 
[1] 3.136539e-10 

兩個軟件包給出的解決方案都非常接近。