我有这些数据,数据框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) {
但不是我发现的。我的指数拟合应该从第一个点(x = 0)开始并适合所有点(如果可能,最合适) 怎么办?
答案 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")