如何在 r 中找到最合适的?
How to find best fitting in r?
我有这个数据,数据框fit1
:
fit1
x y
1 0 2.36
2 1 1.10
3 2 0.81
4 3 0.69
5 4 0.64
6 5 0.61
我会找到数据的最佳指数拟合:
我在 ggplot 中尝试使用 stat_smooth,代码是:
p_fit <- ggplot(data = fit1, aes(x = x, y = y)) +
stat_smooth(method="glm", se=TRUE,formula=y ~ exp(x),colour="red") +
geom_point(colour="red",size=4,fill="white",shape=1)+ theme_bw()+theme(panel.border = element_blank(), panel.grid.major = element_blank(),
panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"))
p_fit + geom_text(colour="blue",x = 0.25, y = 1, label = lm_eqn(fit1), parse = TRUE)+annotate("text",label=pval,x=0.9,y=0.3)
结果是:
但这不是我发现的。我的指数拟合应该从第一个点 (x=0) 开始并拟合所有点(如果可能,最好拟合)
怎么做到的?
主要问题是您需要 y~exp(-x)
,这将适合模型 y=a+b*exp(-x)
;通过指定 y~exp(x)
而不是,您试图适应指数 增长 而不是下降。下面我展示了其他几个替代方案:y=a*exp(b*x)
(使用 glm(.,family=gaussian(link="log"))
)和 y=a+b*exp(c*x)
(使用 nls
)
获取数据:
fit1 <- read.table(header=TRUE,text="
x y
1 0 2.36
2 1 1.10
3 2 0.81
4 3 0.69
5 4 0.64
6 5 0.61")
各种合身:
library(ggplot2)
ggplot(fit1,aes(x,y))+geom_point()+
geom_smooth(method="glm",se=FALSE,
method.args=list(family=gaussian(link="log")))+
geom_smooth(method="nls",se=FALSE,
formula=y~a+b*exp(-c*x),
method.args=list(start=list(a=0.6,b=1.5,c=1)),
colour="red")+
geom_smooth(method="lm",se=FALSE,
formula=y~exp(-x),
colour="purple")
我有这个数据,数据框fit1
:
fit1
x y
1 0 2.36
2 1 1.10
3 2 0.81
4 3 0.69
5 4 0.64
6 5 0.61
我会找到数据的最佳指数拟合: 我在 ggplot 中尝试使用 stat_smooth,代码是:
p_fit <- ggplot(data = fit1, aes(x = x, y = y)) +
stat_smooth(method="glm", se=TRUE,formula=y ~ exp(x),colour="red") +
geom_point(colour="red",size=4,fill="white",shape=1)+ theme_bw()+theme(panel.border = element_blank(), panel.grid.major = element_blank(),
panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"))
p_fit + geom_text(colour="blue",x = 0.25, y = 1, label = lm_eqn(fit1), parse = TRUE)+annotate("text",label=pval,x=0.9,y=0.3)
结果是:
但这不是我发现的。我的指数拟合应该从第一个点 (x=0) 开始并拟合所有点(如果可能,最好拟合) 怎么做到的?
主要问题是您需要 y~exp(-x)
,这将适合模型 y=a+b*exp(-x)
;通过指定 y~exp(x)
而不是,您试图适应指数 增长 而不是下降。下面我展示了其他几个替代方案:y=a*exp(b*x)
(使用 glm(.,family=gaussian(link="log"))
)和 y=a+b*exp(c*x)
(使用 nls
)
获取数据:
fit1 <- read.table(header=TRUE,text="
x y
1 0 2.36
2 1 1.10
3 2 0.81
4 3 0.69
5 4 0.64
6 5 0.61")
各种合身:
library(ggplot2)
ggplot(fit1,aes(x,y))+geom_point()+
geom_smooth(method="glm",se=FALSE,
method.args=list(family=gaussian(link="log")))+
geom_smooth(method="nls",se=FALSE,
formula=y~a+b*exp(-c*x),
method.args=list(start=list(a=0.6,b=1.5,c=1)),
colour="red")+
geom_smooth(method="lm",se=FALSE,
formula=y~exp(-x),
colour="purple")