-3

我有公式 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 中的公式?

4

2 回答 2

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)

结果:

在此处输入图像描述

于 2013-02-26T14:03:13.540 回答
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爆炸),所以要小心......

于 2013-02-26T14:21:20.707 回答