我没有您的数据,因此我将使用mpg
数据集来完成此操作。
如上所述,您可以使用geom_smooth()
并指定诸如"loess"
之类的方法。要知道,您可以像在使用背后的函数时那样将参数传递给方法。
对于loess
,平滑参数为span
。您可以尝试一下,直到对结果满意为止。
data(mpg)
g <- ggplot(mpg,aes(x = displ,y = hwy,color = class)) + geom_point()
g + geom_smooth(se = F,method = 'loess',span = .8) + ggtitle("span 0.8")
g + geom_smooth(se = F,span = 1) + ggtitle("span 1")
,
据我所知,没有内置的方法可以实现此目的,但是您可以通过一些手动绘制来实现。首先,由于您期望指数关系,因此使用log(y)
作为响应进行线性回归可能是有意义的(为了避免混淆,我将使用u
和v
在图表中具有x
和y
的美感)
tb1 = tibble(
u = rep(runif(100,5),3),a = c(rep(-.5,100),rep(-1,rep(-2,100)),v = exp(a*u + rnorm(3*100,.1))
) %>% mutate(a = as.factor(a))
lm1 = lm(log(v) ~ a:u,tb1)
summary(lm1)
给您
Call:
lm(formula = log(v) ~ a:u,data = tb1)
Residuals:
Min 1Q Median 3Q Max
-0.263057 -0.069510 -0.001262 0.062407 0.301033
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.013696 0.012234 -1.12 0.264
a-2:u -1.996670 0.004979 -401.04 <2e-16 ***
a-1:u -1.001412 0.004979 -201.14 <2e-16 ***
a-0.5:u -0.495636 0.004979 -99.55 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.1002 on 296 degrees of freedom
Multiple R-squared: 0.9984,Adjusted R-squared: 0.9983
F-statistic: 6.025e+04 on 3 and 296 DF,p-value: < 2.2e-16
在“系数”下,您可以找到曲线的截距和“斜率”(实际上是指数因子)。您会看到它们紧密匹配我们用于生成数据的因素。
要绘制拟合曲线,可以使用使用predict
从线性模型生成的“预测”值:
ggplot(tb1,aes(u,v,colour=a)) +
geom_point() +
geom_line(data=tb1 %>% mutate(v = exp(predict(lm1))))
如果您要使用标准错误功能区,则可以做更多的工作,但仍然可以:
p1 = predict(lm1,se.fit=T)
tb2 = tibble(
u = tb1$u,a = tb1$a,v = exp(p1$fit),vmin = exp(p1$fit - 1.96*p1$se.fit),vmax = exp(p1$fit + 1.96*p1$se.fit)
)
ggplot(tb2,colour=a)) +
geom_ribbon(aes(fill=a,ymin=vmin,ymax=vmax),colour=NA,alpha=.25) +
geom_line(size=.5) +
geom_point(data=tb1)
产生:
本文链接:https://www.f2er.com/3096935.html