[英]R plot with ggplot2 linear regression with a transformed dependent variable
所以我的問題很簡單,我想繪制我的數據的指數回歸,到目前為止我所做的是繪制多項式回歸:
ggplot(data = mydataANOVA, aes(x = TpsenJour, y = PrptionJourAuDelaDe, color = Type_Contrat))+
geom_point()+
geom_smooth(method ="lm", formula = y ~ poly(x,2))
回歸並不完全適合實際數據,但數據看起來很像指數函數,因此我使用了數據的對數,我使用相同的代碼和我的數據日志來得到以下圖:
這似乎是一個非常准確的擬合,所以我想通過繪制指數回歸直接比較兩個回歸模型,但當我使用公式formula = y ~ exp(poly(x,2))
,我沒有得到相同的准確回歸,而我得到了別的東西:
這比第一個更准確。 我怎么能用置信區間繪制多項式指數回歸。 我設法得到了常規繪圖函數的良好回歸,但沒有置信區間而不是ggplot2。 這是我只得到兩條曲線中的一條曲線:
如何在置信區間內獲得ggplot2的良好回歸? 這是我在2條曲線之一上使用的數據。
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
謝謝。
我對@Roland的回答有一個小問題,它會返回錯誤,我想我已經解決了。 我只需要添加兩行:(我希望通過修復我的錯誤,我沒有改變原先預測的結果)
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))
然后我得到以下情節:
在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))
請注意,我不會稱之為指數回歸。 它是變換因變量的線性回歸(與非線性模型相比,需要與nls
擬合)。 它可能不是我會使用的模型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.