【发布时间】:2021-02-16 15:37:35
【问题描述】:
我有一个每日降雨量 (x) 和观测值 (y) 的散点图,它看起来像 x^-2 图的右/正 x 值一半或以 1/2 为底的对数图。基本上,当 x 值非常低时,y 值非常高。 x 值越大,y 越低。但是 y 值下降的速度会变慢,并且 y 永远不会是负数。
这是一个有代表性的示例:
rain <- c(1, 1.2, 1.3, 2.5, 3.2, 4.2, 5, 7, 7.5, 10.3, 11.7, 12.9, 14.1, 15, 15.5, 17.5, 18.3, 20, 20.2, 20.3, 25, 28, 30, 34, 40)
obs <- c(42, 44, 43.9, 43.5, 35, 22, 18.4, 15.3, 10, 6.2, 5.7, 4, 3.7, 2.3, 2, 2.7, 3.5, 3, 2.9, 4, 1.6, 2.2, 1.6, 1.3, 0.8)
现在我想为这个散点图拟合一个回归模型。我已经尝试过多项式回归直到 x^-4,但我也想尝试对数回归,因为我认为它可能会成为一个更高质量的模型。
这是我迄今为止对多项式模型所做的:
y <- data$obs
x <- data$rain
xsq <- x^-2
xcub <- x^-3
xquar <- x^-4
fit4 <- lm(y~x+xsq+xcub+xquar) # I did the same for fit 1-3; until fit 4 it becomes more significant
xv <- seq(min(x), max(x), 0.01)
yv <- predict(fit5, list(x=xv, xsq=xv^-2, xcub=xv^-3, xquar=xv^-4))
lines(xv, yv)
这就是我尝试的对数模型,但它只返回与曲线不匹配的直线。我觉得 log() 不是我真正需要的函数。
xlog <- log(x)
fitlogx <- lm(y~xlog)
xv <- seq(min(xlog), max(xlog), 0.01)
yv <- predict(fitlogx, list(x=xv))
abline(fitlogx)
ylog <- log(y)
fitlogy <- lm(ylog~x)
xv <- seq(min(x), max(x), 0.01)
yv <- predict(fitlogy, list(x=xv))
abline(fitlogy)
现在我想知道如何拟合一个有意义的对数函数。如果您知道另一种可能有用的回归模型,我也非常感谢您提供任何建议。
【问题讨论】:
-
你能告诉我们minimal reproducible example ...吗?
-
我添加了显示曲线的数据样本!
-
试试obs~exp(a + b/rain + c*log(rain))
标签: r regression logarithm