如何在r中找到最合适的?

时间:2016-05-16 13:43:39

标签: r ggplot2 curve-fitting

我有这些数据,数据框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

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)

我会找到数据的最佳指数拟合:  我在ggplot中尝试使用stat_smooth,代码为:

    while(getline(line, MAXLINE) > 0) {
        lineno++;
        if(strstr(line, *argv) != NULL) != except) {

结果是: enter image description here

但不是我发现的。我的指数拟合应该从第一个点(x = 0)开始并适合所有点(如果可能,最合适) 怎么办?

1 个答案:

答案 0 :(得分:2)

主要问题是您需要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")

enter image description here