Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带ggplot2的R图,带转换因变量的线性回归_R_Plot_Ggplot2_Regression_Non Linear Regression - Fatal编程技术网

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