簡體   English   中英

R圖用ggplot2線性回歸和變換的因變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM