[英]how to predict x given y for nls model?
我正在使用 R 中的 nls SSlogis 函數來制作一個模型來表示植物的吸水率,其中 y = 吸水率(g / m^2),x = 水中的分鍾數。 對於給定的 y 值(在本例中為最大吸水率),我想使用每個模型(我有幾個物種,每個物種都有一個單獨的模型)求解 x(我們達到峰值吸收的那一刻)。
我試過 uniroot() 函數,但我似乎做錯了:
mod1_roots <- uniroot(mod1, lower=0, upper=600, y=max_y_mod1)
其中 lower 和 upper 是分鍾的范圍,mod1 是有問題的 SSlogis 模型
錯誤信息是: Error in f(lower, ...): could not find function "f"
所以我假設我沒有正確使用“功能”部分,它應該是模型以外的東西。 啊。
任何人都可以幫助一個無知的植物學家嗎? 謝謝朋友!
編輯再現性(我希望):
這是一些真實的數據
absorption <- c(297.0470936,262.809483,323.8243166,296.6731868,313.5985664,283.1004567,259.8724386,228.8903642,197.1585476,230.1674857,182.5799195,148.0262402,134.087096,77.98206413)
minutes <- c(195,181,167,157,147,135,105,83,63,45,33,24,10)
cembra <- as.data.frame(cbind(absorption,minutes))
cembra_mod <- nls(absorption ~ SSlogis(minutes, Asym, xmid, scal), cembra)
我的目標是預測吸收 = 100(或任何指定數字)的分鍾數。 謝謝!!
發布到 SO 時,請提供一個完整的自包含可重現示例,其他人可以運行該示例來重現該問題。 這次我們會為大家提供一個可復現的例子來展示它是如何實現的。 下面的ChickWeight
帶有 R。這顯示了如何找到對應於 200 的weight
的Time
,假設該值在輸入Time
值的范圍內。 輸出中的目標為零這一事實表明它有效。
Chick.1 <- ChickWeight[ChickWeight$Chick == 1, ]
fm <- nls(weight ~ SSlogis(Time, Asym, xmid, scal), Chick.1)
pred <- function(x) predict(fm, list(Time = x))
optimize(function(x) (pred(x) - 200)^2, range(Chick.1$Time))
給予:
$minimum
[1] 20.34701
$objective
[1] 2.498361e-08
attr(,"gradient")
Asym xmid scal
[1,] 0.2134402 -13.79298 17.99035
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.