2016-08-23 3 views
3

Also mein Problem ist ganz einfach, ich die exponentielle Regression meiner Daten darstellen möge, so weit, was ich getan habe, war die Handlung Polynomregression:R Grundstück mit ggplot2 linearer Regression mit einer transformierten abhängigen Variablen

ggplot(data = mydataANOVA, aes(x = TpsenJour, y = PrptionJourAuDelaDe, color = Type_Contrat))+ 
    geom_point()+ 
    geom_smooth(method ="lm", formula = y ~ poly(x,2)) 

ich die folgende Handlung bekam: enter image description here

die Regression ist nicht gerade eine gute Passform für die eigentlichen Daten aber die Daten sah viel wie eine Exponentialfunktion so verwendete ich den Logarithmus meiner Daten, habe ich die gleiche Code mit dem Protokoll meiner Daten, um das folgende Diagramm zu erhalten:

enter image description here

, die eine sehr genaue Passform zu sein schien, so wollte ich die beiden Regressionsmodelle direkt vergleichen, indem die exponentielle Regression Plotten, aber wenn ich die Formel formula = y ~ exp(poly(x,2)) verwendet, habe ich nicht die gleiche genaue Regression erhalten und stattdessen habe ich noch etwas anderes: enter image description here

Das ist noch weniger genau als das erste. Wie soll ich diese exponentielle Polynom-Regression mit den Konfidenzintervallen darstellen? Es gelang mir, die gute Regression der regulären Plot-Funktion zu erhalten, aber nicht mit den Konfidenzintervallen und nicht in ggplot2. Hier ist, was ich für nur eine der beiden Kurven bekam:

enter image description here

Wie kann ich die gute Regression auf ggplot2 mit den Konfidenzintervallen erhalten? Hier sind die Daten, die ich auf einer der 2 Kurven verwendet habe.

 TpsenJour PrptionJourAuDelaDe fact 
1    1   0.955669 a 
3    3   0.877947 a 
5    5   0.815058 a 
7    7   0.764725 a 
9    9   0.721070 a 
11   11   0.681675 a 
13   13   0.646490 a 
15   15   0.614689 a 
17   17   0.585664 a 
19   19   0.558905 a 
21   21   0.534362 a 
23   23   0.511791 a 
25   25   0.490651 a 
27   27   0.470923 a 
29   29   0.452498 a 
31   31   0.435190 a 
33   33   0.419160 a 
35   35   0.404359 a 
37   37   0.390519 a 
40   40   0.371018 a 
40.1   40   0.371018 a 
43   43   0.352960 a 
46   46   0.336170 a 
49   49   0.320631 a 
52   52   0.306194 a 
55   55   0.292584 a 
58   58   0.279858 a 
62   62   0.264096 a 
65   65   0.253316 a 
68   68   0.243120 a 
71   71   0.233544 a 
74   74   0.224474 a 
77   77   0.215905 a 
81   81   0.205180 a 
84   84   0.197623 a 
87   87   0.190440 a 
90   90   0.183609 a 
93   93   0.177278 a 
96   96   0.171358 a 
100   100   0.163951 a 

Vielen Dank.

Ich hatte ein kleines Problem mit der Antwort von @Roland, wo es einen Fehler zurückgeben würde, ich denke, ich habe es gelöst. Ich hatte einfach zwei Zeilen hinzufügen: (Ich hoffe, dass meine Fehler durch die Festsetzung ich nicht die ursprünglich vorhergesagten Ergebnis nicht verändert hat)

fact<-mydataANOVA$fact 
fit <- lm(log(PrptionJourAuDelaDe) ~ poly(TpsenJour, 2) * fact, data = mydataANOVA) 
fact<-c(rep('a',1000),rep('b',1000)) 
pred <- expand.grid(TpsenJour = seq(min(mydataANOVA$TpsenJour), max(mydataANOVA$TpsenJour), length.out = 1e3), 
        fact = unique(mydataANOVA$fact)) 

pred <- cbind(pred, 
       exp(predict(fit, 
          newdata = data.frame(TpsenJour = pred$TpsenJour), 
          interval = "confidence"))) 

ggplot(data = DF, aes(x = TpsenJour, y = PrptionJourAuDelaDe, color = fact)) + 
    geom_point() + 
    geom_ribbon(data = pred, aes(y = fit, ymin = lwr, ymax = upr, fill = fact), alpha = 0.3) + 
    geom_line(data = pred, aes(y = fit, color = fact)) 

dann bekomme ich die folgende Handlung:

enter image description here

Antwort

4

Sie die passen außerhalb von ggplot2:

fit <- lm(log(PrptionJourAuDelaDe) ~ poly(TpsenJour, 2) * fact, data = DF) 
pred <- expand.grid(TpsenJour = seq(min(DF$TpsenJour), max(DF$TpsenJour), length.out = 1e3), 
        fact = unique(DF$fact)) 
pred <- cbind(pred, 
       exp(predict(fit, 
          newdata = data.frame(TpsenJour = pred$TpsenJour), 
          interval = "confidence"))) 

library(ggplot2) 
ggplot(data = DF, aes(x = TpsenJour, y = PrptionJourAuDelaDe, color = fact)) + 
    geom_point() + 
    geom_ribbon(data = pred, aes(y = fit, ymin = lwr, ymax = upr, fill = fact), alpha = 0.3) + 
    geom_line(data = pred, aes(y = fit, color = fact)) 

Beachten Sie, dass ich diese exponentielle Regression nicht nennen würde. Es ist lineare Regression mit einer transformierten abhängigen Variable (im Gegensatz zu einem nichtlinearen Modell, das mit nls ausgestattet werden müsste). Und es ist wahrscheinlich nicht das Modell, das ich verwenden würde.

+0

Danke nochmal, ich verstehe nicht warum, aber wenn ich den dritten Teil mit dem 'exp (vorhergesagt (...' Ich bekomme einen Fehler mit Fehler in eval (expr, envir, enclos): object 'Tatsache "nicht gefunden" Ich weiß nicht genau woher das kommt, hast du irgendwelche Ideen? Ich habe versucht zu sehen, ob ich es beheben kann, aber ich habe entweder den gleichen oder einen neuen Fehler. Ich weiß auch, dass das nicht der Fall war Die Frage, aber ohne ins Detail zu gehen, hätten Sie ein besseres Modell, das ich verwenden könnte? – PaoloH

+0

Ich habe den Beitrag bearbeitet, um zu erklären, wie ich den Fehler behoben haben könnte. Solange meine Änderungen korrekt sind, beantwortet dies meine Frage. Danke. – PaoloH

+0

Nein, 'Tatsache' ist eine Spalte in' mydataANOVA'. Ich habe dem data.frame einen kürzeren Namen gegeben. Du solltest nicht einmal 'DF' haben, damit' facet <-DDF $ fact' nicht gemacht wird Sinn. – Roland

Verwandte Themen