2016-05-16 19 views
1

ich diese Daten haben, Datenrahmen fit1:Wie finde ich am besten in r?

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 

ich die beste exponentielle Anpassung der Daten finden würde: ich mit stat_smooth in ggplot versucht, ist der Code:

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) 

und Ergebnis ist: enter image description here

aber ist nicht was ich finde. Meine exponentielle Anpassung sollte vom ersten Punkt (x = 0) ausgehen und an alle Punkte angepasst werden (am besten, wenn möglich) Wie geht das?

+1

Wenn Sie Hilfe bei der Anpassung des Modells benötigen, ist das eine statistische Frage, keine Programmierfrage, und wäre besser gefragt über [stats.se]. – MrFlick

+0

Auch kann nützlich sein, sich dies [post] (http://stackoverflow.com/questions/1181025/goodnessof-fit-functions-in-r) anzuschauen. – lmo

Antwort

2

Das Hauptproblem ist, dass Sie y~exp(-x) benötigen, die das Modell y=a+b*exp(-x) passen; indem Sie stattdessen y~exp(x) angeben, versuchen Sie, exponentiell Wachstum eher als ablehnen. Unten habe ich ein paar andere Alternativen gezeigt: y=a*exp(b*x) (mit glm(.,family=gaussian(link="log"))) und y=a+b*exp(c*x) (mit nls)

Get Daten:

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") 

Verschiedene fits:

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

+0

Vielen Dank, aber wie kann ich die Gleichung ansehen, stat_summary? – Diego

+0

Ich weiß es nicht; es sieht so aus, als ob du 'lm_eqn' von http://stackoverflow.com/questions/7549694/ggplot2-adding-regression-line-equation-and-r2-on-graph nehmen würdest. Sie könnten es einfach an Ihre Gleichung anpassen. –

Verwandte Themen