我有我想要適合點(6,72)(211,183)(808,360)(200,440)的公式y = x /(a + b * x)。我把它們放在R中使用R線性迴歸
x <- c(6,211,808,200)
y <- c(72,183,360,440)
現在我想擬合上面定義的函數來適應這些點,找到a和b。 如何獲得a和b(使用R)?並且,我如何獲得R中的公式?
我有我想要適合點(6,72)(211,183)(808,360)(200,440)的公式y = x /(a + b * x)。我把它們放在R中使用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)
結果:
很好的答案,但OP的模型是**不是**'x /(a + b + x)',它是'x /(a + b * x)' - 雖然沒有過度參數化,但是將2參數模型擬合爲4數據點有點冒險... – 2013-02-26 14:12:38
@BenBolker - 該死!這就是你在午夜回答的問題,無論如何我在研究舊的答案時學到了一些東西,所以這不是完全的損失。 ... – thelatemail 2013-02-26 22:12:48
構造數據:
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
炸掉置信區間),所以一定要小心......
這不是線性迴歸。你可以使用'nls(y〜x /(a + b * x),...'(你必須提供起始值)或'glm(y〜x,family = gaussian(link =「inverse」)) )'。見相關(但比這更難):http://stackoverflow.com/questions/15073246/how-to-put-a-complicated-equation-into-ar-formula/15076688#15076688 – 2013-02-26 13:11:05