簡體   English   中英

將帶有 geom_smooth 的回歸線添加到 plot,在 R 中使用離散 x 軸

[英]Add regression line with geom_smooth to plot with discrete x-axis in R

我想在 R 中添加一條從線性 model 到 plot 的回歸線。

我創建了以下示例數據集:

# Load libraries
library(tidyverse)
library(ggbeeswarm)

# Set seed
set.seed(123)

# Create dataset
ID <- sprintf("ID-%s",seq(1:30))
baseline <- rnorm(30, mean = 50, sd = 3)

df <- data.frame(ID, baseline) %>%
  mutate(`1` = baseline - rnorm(1, mean = 5, sd = 4), 
         `2` = `1` - rnorm(1, mean = 7, sd = 5), 
         `3` = `2` - rnorm(1, mean = 10, sd = 9)) %>% 
  pivot_longer(-ID) %>% 
  rename(time = name) %>% 
  mutate(time = as.factor(time))

這會創建以下 plot:

# Plot
ggplot(data = df, aes(x=time, y = value)) + 
  geom_quasirandom() +
  theme_classic() + 
  scale_x_discrete(limits = c("baseline", "1", "2", "3") ) +
  labs(x = "Time", y = "Value")

在此處輸入圖像描述

如果我將geom_smooth(method = 'lm')添加到 plot,什么也不會發生,我認為這與time是一個因素有關。 但是,添加geom_smooth(method = 'lm', formula = y~as.numeric(x)也不起作用。

我如何 plot 在此圖的頂部添加一條回歸線?

EDIT1.0:我已經能夠使用 geom_smooth 到 plot 回歸線geom_smooth(aes(x = as.numeric(time), y = value), method = "lm", formula = y~x) ,但遺憾的是, 回歸線不正確...

如何使用有序因子啟用與aes(as.numeric(time), value)的疊加?

# Load libraries
library(tidyverse)
library(ggbeeswarm)

# Set seed
set.seed(123)

# Create dataset
ID <- sprintf("ID-%s",seq(1:30))
baseline <- rnorm(30, mean = 50, sd = 3)

df <- data.frame(ID, baseline) %>%
    mutate(`1` = baseline - rnorm(1, mean = 5, sd = 4), 
           `2` = `1` - rnorm(1, mean = 7, sd = 5), 
           `3` = `2` - rnorm(1, mean = 10, sd = 9)) %>% 
    pivot_longer(-ID) %>% 
    rename(time = name) %>% 
    # create ordered factor to allow synchronized order of x after as.numeric
    mutate(time = factor(time, ordered = T, c("baseline", "1", "2", "3")))  


## rendered results
ggplot(data = df, aes(x=time, y = value)) + 
    geom_quasirandom() +
    theme_classic() + 
    labs(x = "Time", y = "Value") +
    geom_smooth(aes(as.numeric(time), value), method = "lm")



## verify with this
ggplot(data = df, aes(x=time, y = value)) + 
    geom_point() +
    theme_classic() + 
    labs(x = "Time", y = "Value") +
    geom_smooth(aes(as.numeric(time), value), method = "lm")

reprex package (v0.3.0) 創建於 2020-04-15

試試這個。 添加回歸線的一種選擇是手動計算它並通過group美學上的geom_line和映射ID將其添加到 plot。 紅線是value ~ time的回歸線,而在藍線的情況下,我將時間重新編碼為數字,將“基線”設置為 0。

# Load libraries
library(tidyverse)
library(ggbeeswarm)

# Set seed
set.seed(123)

# Create dataset
ID <- sprintf("ID-%s",seq(1:30))
baseline <- rnorm(30, mean = 50, sd = 3)

df <- data.frame(ID, baseline) %>%
  mutate(`1` = baseline - rnorm(1, mean = 5, sd = 4), 
         `2` = `1` - rnorm(1, mean = 7, sd = 5), 
         `3` = `2` - rnorm(1, mean = 10, sd = 9)) %>% 
  pivot_longer(-ID) %>% 
  rename(time = name) %>% 
  mutate(time = as.factor(time),
         time1 = ifelse(time == "baseline", 0, as.numeric(time)),
         smooth = predict(lm(value ~ time, data = .)),
         smooth1 = predict(lm(value ~ time1, data = .)))

# Plot
ggplot(data = df, aes(x=time, y = value)) + 
  geom_quasirandom() +
  # Regression line
  geom_line(aes(x = time, y = smooth, group = ID), color = "red") +
  geom_line(aes(x = time, y = smooth1, group = ID), color = "blue") +
  theme_classic() + 
  scale_x_discrete(limits = c("baseline", "1", "2", "3") ) +
  labs(x = "Time", y = "Value")

reprex package (v0.3.0) 創建於 2020-04-15

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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