如何在 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")