与えられたcsvファイルの各行の変数の式を解いてみたいと思います。 この方程式は、オイラー・ロトカ方程式として知ることができます。rのuniroot関数を使ってデータフレームのデータを使ってEuler-Lotka方程式を解く
# seed is needed for reproducible results (otherwise random numbers will never be the same!)
set.seed(42)
# using the Euler-Lotka equation
# l = survival rate until age x
# m = amount of offspring at age x
# x = age of reproduction
# r = population growth rate
y <- function(r, l1, l2, l3, m1, m2, m3, x1, x2, x3, z){((l1*m1*exp(-r*x1)) + (l2*m2*exp(-r*x2)) + (l3*m3*exp(-r*x3))) - z}
# iterate through each line calculating r and writing it into the respective field
for (i in 1:length(neos_data$jar_no)){
# declare the variables from table (this does not work!!)
l1 <- neos_data$surv_rate_clutch1[i]
l2 <- neos_data$surv_rate_clutch2[i]
l3 <- neos_data$surv_rate_clutch3[i]
m1 <- neos_data$indiv_sum_1_clutch[i]
m2 <- neos_data$indiv_sum_2_clutch[i]
m3 <- neos_data$indiv_sum_3_clutch[i]
x1 <- neos_data$age_clutch_1[i]
x2 <- neos_data$age_clutch_2[i]
x3 <- neos_data$age_clutch_3[i]
# this works, while these numbers are the same as in the data frame
l1 <- 0.9333333
l2 <- 0.9333333
l3 <- 0.9333333
m1 <- 3.4
m2 <- 0
m3 <- 0
x1 <- 9
x2 <- 13
x3 <- 16
## uniroot finds a 0 value, so offset function, thats why -z in the upper formula
r <- uniroot(y, l1=l1, l2=l2, l3=l3, m1=m1, m2=m2, m3=m3, x1=x1, x2=x2, x3=x3, z = 1, interval = c(-1, 1))[1] #writing only the result of r into variable
# write r into table
neos_data$pop_gr[i] <- r
}
私はすでにコメントのように値を手動で入力して正常に動作しますuniroot:私はこれまで持っているものである 。しかし、私のデータフレームから値を読み込もうとすると、 "f()の値に同じ符号があります"というエラーが返されます。
私はエラー自体の意味を理解していますが、データフレームと同じ値ではなく手動で挿入する値とはなぜ同じ働きをしますか?はい、データ型をチェックしました。私がこれまで見てきたことは私の場合には有用ではなかったよう
は、任意の助けを喜んでいるだろう:)
EDIT: clearifyするには:私はのためのrの値を取得したいのですが式は0になります。これは、変数の値を数値として挿入する限り、与えられたコードでは非常にうまく動作します。しかし、データフレームから値を渡そうとすると、同じ値が渡されても失敗します。
'uniroot'関数は1次元でのみ動作します。あなたのケースでは、あなたの 'y'関数は' f(y)= y(r、...) 'として扱われます。 'uniroot'関数は、' f'が連続的であることを仮定して動作します。したがって、 'f'が一方の端で正で他方の端で負の区間でゼロが見つかることができます。インターバル終点での 'f 'の反対のサインは前提条件です。例えば、 'uniroot(function(x)x^2、interval = c(-1,1))'は解{0^2 = 0}を見つけません。代わりに 'optimize'を探しているかもしれません。 –
あなたのヒントをありがとう。私は最適化機能や最適化機能については赤字になっていますが、まだこれらの機能の出力を理解していません。 多分私は自分の欲望を理解していないか、私はその点を理解できません。私は、rのどの値が方程式が0になるかを知りたいと思います。実際には、uniroot(既知の固定値と結果でテストした限り)でうまく動作します。固定値を使用するのではなく、データフレームの値を使用した後では機能しません。 – Maki