在R中使用ggplot2创建多条平滑/拟合的线

我无法使用ggplots在R中生成图形。不需要任何统计信息-我只需要数据的直观表示即可。我有7位参与者,我想通过散点图为每位参与者绘制一条线。每个参与者的线的斜率和形状都不同,但是平均而言是指数级的。

我在R中使用了以下代码,但是我仅获得线性模型。将方法更改为黄土时,线条太扭曲了。有人可以帮我使它更像样吗?本质上,我追求的是最适合每个参与者的路线,但仍然需要能够使用功能fullrange = FALSE。

此外,我应该使用stat_smooth还是geom_smooth?有区别吗

ggplot(data,aes(x=x,y=y,group = athlete)) +
  geom_point() + 
  stat_smooth(method = "lm",se=FALSE,fullrange = FALSE)

在R中使用ggplot2创建多条平滑/拟合的线

在此先感谢您的帮助!

zusihui 回答:在R中使用ggplot2创建多条平滑/拟合的线

我没有您的数据,因此我将使用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")

enter image description here enter image description here

,

据我所知,没有内置的方法可以实现此目的,但是您可以通过一些手动绘制来实现。首先,由于您期望指数关系,因此使用log(y)作为响应进行线性回归可能是有意义的(为了避免混淆,我将使用uv在图表中具有xy的美感)

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)

产生:

smoothed exp regression

本文链接:https://www.f2er.com/3096935.html

大家都在问