R线性回归

时间:2013-02-26 12:58:25

标签: 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中得到公式?

2 个答案:

答案 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)

结果:

enter image description here

答案 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的置信区间爆炸),所以要小心......