我有公式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中得到公式?
答案 0 :(得分:2)
获取数据并绘制它:
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)
结果:
答案 1 :(得分: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
的置信区间爆炸),所以要小心......