带ggplot2的R图,带转换因变量的线性回归
所以我的问题很简单,我想画数据的指数回归,到目前为止我所做的是画多项式回归:带ggplot2的R图,带转换因变量的线性回归,r,plot,ggplot2,regression,non-linear-regression,R,Plot,Ggplot2,Regression,Non Linear Regression,所以我的问题很简单,我想画数据的指数回归,到目前为止我所做的是画多项式回归: ggplot(data = mydataANOVA, aes(x = TpsenJour, y = PrptionJourAuDelaDe, color = Type_Contrat))+ geom_point()+ geom_smooth(method ="lm", formula = y ~ poly(x,2)) 我得到了下面的情节: 回归并不完全适合实际数据,但数据看起来很像指数函数,因此我使用了数据
ggplot(data = mydataANOVA, aes(x = TpsenJour, y = PrptionJourAuDelaDe, color = Type_Contrat))+
geom_point()+
geom_smooth(method ="lm", formula = y ~ poly(x,2))
我得到了下面的情节:
回归并不完全适合实际数据,但数据看起来很像指数函数,因此我使用了数据的对数,我使用了与数据日志相同的代码来获得以下曲线图:
这似乎是一个非常精确的拟合,所以我想通过绘制指数回归来直接比较两个回归模型,但是当我使用公式公式=y~exp(poly(x,2))
时,我没有得到相同的精确回归,而是得到了其他东西:
这比第一个更不准确。我该如何得到多项式指数回归,并用置信区间来绘制呢。我设法在常规绘图函数上获得了良好的回归,但没有置信区间,也没有在ggplot2中。以下是两条曲线中仅一条的结果:
如何使用置信区间获得ggplot2上的良好回归?
这是我在两条曲线之一上使用的数据
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在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))
fit再次感谢,我不明白为什么,但是当我用exp(predict(…
我在eval(expr,envir,enclose)中的错误运行第三部分时:找不到对象“事实”
我不知道这到底是从哪里来的,你有什么想法吗?我试着看看是否可以修复它,但我得到了相同的错误或新的错误。此外,我知道这不是问题所在,但不必详细说明,你是否有更好的模型可以使用?我编辑了这篇文章,解释了我可能如何修复它d我的错误。只要我的更改是正确的,这确实回答了我的问题,谢谢。不,fact
是mydataANOVA
中的一列。我只是给data.frame起了一个较短的名称。你甚至不应该有DF
所以fact我在代码中忘记了它,但我也添加了一行DF,但是为什么?只要替换DF
在我的代码中由mydataANOVA
编写。
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))