Какая модель более подходит для прогнозирования в R для следующего сценария - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть значения по оси х в диапазоне от 300 мм до 0,075 мм, а по оси у - от 0 до 100. Мне нужно предсказать значения для х = 0,002. Существует необходимость в заговоре с использованием полулогового участка. Я попытался использовать функцию lm следующим образом:

f2 <- data.frame(sievesize = c(0.075, 1.18, 2.36, 4.75), weight = c(55, 66.9, 67.69, 75)
f3 <- data.frame(sievesize = 0.002)
model1 <- lm(weight ~ log10(sievesize), data = f2)
pred3 <- predict(model1, f3)

Есть ли лучший способ предсказать значения для 0,002?

1 Ответ

0 голосов
/ 16 сентября 2018

Вы не можете многое сделать с данными, кроме как рассчитать интервал прогнозирования, чтобы понять, какой предел погрешности для вашего прогнозирования (будет показано, что он составляет 38,5 мм +/- 21 мм):

  • всего четыре точки в диапазоне ваших экспериментальных данных (~ 18 байт данных).
  • нелинейное отношение, которое вы устанавливаете на графике lin-log, имеет разрыв при приближении к нулю
  • данные распределены в очень узком диапазоне для экспоненциальной зависимости.

Пожалуйста, смотрите ниже код:

f2 <- data.frame(sievesize = c(0.075, 1.18, 2.36, 4.75), weight = c(55, 66.9, 67.69, 75))
f3 <- data.frame(sievesize = c(0.002))

m_lm <- lm(weight ~ log10(sievesize), data = f2)
fit_lm <- predict(m_lm, f3, interval = "prediction")
fit_lm

pred_x <- data.frame(sievesize = seq(0.001, 5, .01))
fit_conf <- predict(m_lm, pred_x, interval = "prediction")
# fit      lwr      upr
# 1 38.46763 17.73941 59.19586

plot(log10(f2$sievesize), f2$weight, ylim = c(0, 85), pch = 16, xlim = c(-3, 1))
points(log10(f3$sievesize), fit_lm[, 1], col = "red", pch = 16)
lines(log10(pred_x$sievesize), fit_conf[, 1])
lines(log10(pred_x$sievesize), fit_conf[, 2], col = "blue")
lines(log10(pred_x$sievesize), fit_conf[, 3], col = "blue")
legend("bottomright",
       legend = c("experiment", "fitted line", "prediction interval", "forecasted"),
       lty = c(NA, 1, 1, NA), 
       lwd = c(NA, 1, 1, NA),
       pch = c(16, NA, NA, 16), 
       col = c("black", "black", "blue", "red"))

и график, который иллюстрирует вышеупомянутые пункты: graph

Таким образом, использование некоторых передовых методов, таких как нелинейное соответствие, glm или байесовская регрессия и т. Д., Не принесет дополнительной информации, поскольку набор данных чрезвычайно мал и распределен в очень узком диапазоне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...