Основываясь на графике рассеяния, мы, вероятно, можем подогнать линию нелинейной регрессии к набору данных.Предполагая, что ваш набор данных называется dat
.Мы можем использовать функцию nls
, чтобы соответствовать регрессионной модели.Обратите внимание, что требуются некоторые усилия и размышления, чтобы найти возможное уравнение и начальные значения.В этом случае уравнение равно CFU ~ a * diltn/(b + diltn)
, а начальные значения для a
и b
равны 100
и 1000
соответственно.
library(tidyverse)
fit <- nls(formula = CFU ~ a * diltn/(b + diltn),
start = list(a = 100, b = 1000), data = dat)
summary(fit)
# Formula: CFU ~ a * diltn/(b + diltn)
#
# Parameters:
# Estimate Std. Error t value Pr(>|t|)
# a 187.32 21.25 8.814 0.000118 ***
# b 1514.27 517.50 2.926 0.026420 *
# ---
# Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 13.17 on 6 degrees of freedom
#
# Number of iterations to convergence: 4
# Achieved convergence tolerance: 3.555e-06
Для визуальной проверки соответствия модели мыможно сначала создать второй кадр данных с diltn
от 1 до 9000. Затем мы можем использовать функцию predict
для прогнозирования КОЕ на основе diltn
и модели fit
.
dat2 <- data_frame(diltn = 1:9000) %>%
mutate(Pred = predict(fit, .))
ggplot(data = dat, aes(x = diltn, y = CFU))+
geom_point() +
geom_line(data = dat2, aes(x = diltn, y = Pred), color = "red")
Модель выглядит хорошо для меня.
Наконец, мы можем отфильтровать значения Pred
, чтобы найти возможные значения для diltn
.В этом случае, я думаю, что 1057
может быть возможным ответом.
dat2 %>% filter(Pred > 76.9, Pred < 77.1)
# # A tibble: 5 x 2
# diltn Pred
# <int> <dbl>
# 1 1055 76.9
# 2 1056 77.0
# 3 1057 77.0
# 4 1058 77.0
# 5 1059 77.1
Или, поскольку мы установили модель нелинейной регрессии, и мы знаем, что подобранные параметры a
и b
, мыможно установить CFU
= 77
и вычислить diltn
.Мой расчет показывает diltn
это 1056.914
.