对于以下情况,在R中使用哪个更合适的预测模型

时间:2018-09-06 13:24:45

标签: r lm

我在x轴上的值范围从300毫米到0.075毫米,在y轴上的值范围从0到100。我需要预测x = 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 :(得分:0)

除了计算预测间隔以了解预测的误差范围(显示为38.5毫米+/- 21毫米)之外,您不能对数据做太多处理:

  • 在一系列实验数据(〜18个字节的数据)中只有四个点。
  • 0.002毫米筛尺寸超出数据范围[0.075,4.75]。不幸的是,任何模型的这种外推都会导致巨大的预测误差。
  • 您拟合为线性对数图的非线性关系在逼近零时会不连续
  • 数据呈指数依赖性地分布在非常窄的范围内。

请参见下面的代码:

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或贝叶斯回归等)的使用不会带来额外的见解。