自定义意大利面图

customizing spaghetti plot

我正在尝试创建自定义意大利面条图

假设这是我的数据集

data(package = "geepack")
data("dietox") 
head(dietox)




    head(dietox, n =20)
    Pig    Evit    Cu Litter    Start   Weight       Feed Time
   4601 Evit000 Cu000      1 26.50000 26.50000         NA    1
   4601 Evit000 Cu000      1 26.50000 27.59999   5.200005    2
   4601 Evit000 Cu000      1 26.50000 36.50000  17.600000    3
   4601 Evit000 Cu000      1 26.50000 40.29999  28.500000    4
   4601 Evit000 Cu000      1 26.50000 49.09998  45.200001    5
   4601 Evit000 Cu000      1 26.50000 55.39999  56.900002    6
   4601 Evit000 Cu000      1 26.50000 59.59998  71.700005    7
   4601 Evit000 Cu000      1 26.50000 67.00000  86.800001    8
   4601 Evit000 Cu000      1 26.50000 76.59998 104.900002    9
   4601 Evit000 Cu000      1 26.50000 86.50000 123.000000   10
   4601 Evit000 Cu000      1 26.50000 91.59998 140.900002   11
   4601 Evit000 Cu000      1 26.50000 98.59998 160.000000   12
   4602 Evit000 Cu035      1 28.29999 28.29999         NA    1
   4602 Evit000 Cu035      1 28.29999 30.09999   3.300003    2
   4602 Evit000 Cu035      1 28.29999 38.29999  13.200001    3
   4602 Evit000 Cu035      1 28.29999 44.50000  26.100000    4
   4602 Evit000 Cu035      1 28.29999 51.59998  43.600002    5
   4602 Evit000 Cu035      1 28.29999 57.59998  55.200001    6


 ggplot(data = dietox, aes(x = Time, y = Weight, group = Pig)) +
 geom_line()

这会创建一个这样的情节

我感兴趣的是在两个时间点创建一条 gee 预测回归线, 1)0-6, 2)6-12。预期的情节应该是这样的。

mf <- formula(Weight ~ Cu * (Time + I(Time^2) + I(Time^3)))
gee1 <- geeglm(mf, data=dietox, id=Pig, family="gaussian", corstr="ar1")
gee1

非常感谢您的帮助。

您的模型将变量 Cu 考虑在内,因此您的每个时期都会有 3 条不同的线 - 一条线对应 Cu 的每个级别。由于这只是从包中提取的示例数据,而您正在寻找每个周期的单行,因此我假设您的实际数据是单个变量的函数。

绘制此图的方法是手动预测两个独立时期的线并绘制它们:

library(geepack)
library(ggplot2)
library(hrbrthemes)

data("dietox") 

mf   <- formula(Weight ~ Time + I(Time^2) + I(Time^3))

gee1 <- geeglm(mf, data = dietox[dietox$Time <= 6,], 
               id = Pig, family = "gaussian", corstr ="ar1")
gee2 <- geeglm(mf, data = dietox[dietox$Time >= 6,], 
               id = Pig, family = "gaussian", corstr ="ar1")
dietox$predictions <- numeric(1)
dietox$period <- "A"
dietox$predictions[dietox$Time <= 6] <- predict(gee1)
dietox$predictions[dietox$Time >= 6] <- predict(gee2)
dietox$period[dietox$Time >= 6] <- "B"


ggplot(data = dietox, aes(x = Time, y = Weight, group = Pig)) +
 geom_line(aes(group = Pig), size = 2, alpha = 0.2) +
 geom_line(aes(y = predictions, group = interaction(Pig, period),
               colour = period), size = 2) +
 theme_ipsum()

reprex package (v2.0.1)

于 2022-03-09 创建