我有公式 y = x / (a+b*x) 我想拟合点 (6,72) (211,183) (808,360) (200,440)。我把它们放在 R 中
x <- c(6,211,808,200)
y <- c(72,183,360,440)
现在我想拟合上面定义的函数来拟合这些点,并找到 a 和 b。我如何获得 a 和 b(使用 R)?而且,我如何获得 R 中的公式?
我有公式 y = x / (a+b*x) 我想拟合点 (6,72) (211,183) (808,360) (200,440)。我把它们放在 R 中
x <- c(6,211,808,200)
y <- c(72,183,360,440)
现在我想拟合上面定义的函数来拟合这些点,并找到 a 和 b。我如何获得 a 和 b(使用 R)?而且,我如何获得 R 中的公式?
获取数据并绘制它:
x <- c(6,211,808,200)
y <- c(72,183,360,440)
plot(x,y,pch=19)
定义函数,得到你的系数
f <- function(x,a,b) {x/(a+b*x)}
fit <- nls(y ~ f(x,a,b), start=c(a=1,b=1))
co <- coef(fit)
# co will contain your coefficients for a and b
# a b
#0.070221853 0.002796513
并策划:
curve(f(x, a=co["a"], b=co["b"]), add = TRUE, col="green", lwd=2)
结果:
构造数据:
x <- c(6,211,808,200)
y <- c(72,183,360,440)
d <- data.frame(x,y)
绘制数据:虽然稀疏,但它们并不疯狂(它们确实显示了一些增加/饱和模式的证据)
plot(y~x,data=d)
拟合模型:
## y = x/(a+b*x)
## 1/y = a/x + b
m1 <- glm(y~I(1/x),family=gaussian(link="inverse"),data=d)
您可以将结果绘制在ggplot
library("ggplot2")
qplot(x,y,data=d)+theme_bw()+
geom_smooth(method="glm",family=gaussian(link="inverse"),
formula=y~I(1/x),se=FALSE)
这个模型的置信区间有点疯狂(因为置信区间1/y
包括零,此时置信区间y
爆炸),所以要小心......