Объединение двух подмножеств данных и результатов GLM на одном ggplot

#r #ggplot2 #glm

Вопрос:

Я знаю, что связывание данных не идеально, но я не могу получить ответ, который я ищу, с помощью подмножества, так что вот он.

https://drive.google.com/file/d/1SIgeBT4k5TyhX8QPO1Xbl87BCev_cDPZ/view?usp=sharing

Я запускаю glm на 2 подмножествах данных, мне нужно либо иметь возможность запускать их на одном glm, а затем разделять результаты по зонам, либо фильтровать по зонам, запускать glm отдельно, а затем объединять их в одну панель ggplot. Вот что у меня есть на данный момент.

 BD_plots <- read.csv("BD_plots.csv")


library(magrittr)
library(tidyverse)
library(ggpubr)
library(conover.test)
library(emmeans)
library(see)
library(performance)

#.#############################################################
#FULL SELECTION GLM Spotted Seatrout zone B

#subsetting data by species and zone
trout.dat.b <- BD_plots %>%
  filter(Commonname == "Spotted Seatrout") %>%
  filter(Zone == "B")

summary(trout.dat.b)
#Spotted Seatrout glm full model-----------------------------------------------------------------
trout.glm.b.full <- glm(CPUE ~ Levelname   Year   BycatchQuantity  
                          StartDepth   DO   Temperature   Salinity   ph,
                        data = trout.dat.b, family = gaussian(link = "log"))
#base model
trout.glm.b.base <- glm(CPUE ~ Levelname, data=  trout.dat.b, family = gaussian(link ="log"))

#step to simplify model and get appropriate order
trout.glm.b.final <- step(trout.glm.b.base, scope = list(upper = trout.glm.b.full, lower = ~Levelname),
                          direction = 'forward', trace = 1, k = log(nrow(trout.dat.b)))

#final model summary
summary(trout.glm.b.final)

#calculate the EMmeans , SE, and Confidence levels
trout.emm.b <- emmeans(trout.glm.b.final, "Levelname", data = trout.dat.b)  
trout.emm.b <- summary(trout.emm.b)

#checking normality of model
check_model(trout.glm.b.final)

#adding fitted alues to original data
trout.fit <- fitted(trout.glm.b.final)
trout.dat.b <- cbind(trout.dat.b, trout.fit)

#plotting
trout.glm.b.plot <- ggplot(trout.dat.b, aes(x = factor(Levelname, levels = c("High", "Med.High", "Medium", "Low")), y = (trout.fit),
                                            fill = factor(Levelname, levels = c("High", "Med.High", "Medium", "Low"))))    
  labs(title = expression(paste("Spotted Sea Trout",italic('(Cynoscion nebulosus)'))), x = "", y = "", legend = NULL)  
  stat_summary(fun = mean, geom = "bar")    
  stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.1)  
  scale_fill_manual(values = c("midnightblue", "dodgerblue4", "steelblue3", "lightskyblue"))  
  mytheme

trout.glm.b.plot

#checking piarwise comparisons for signifigance
conover.test(trout.dat.b$trout.fit, trout.dat.b$Levelname)




#.##############################################################
#FULL SELECTION GLM Spotted Seatrout zone D

#subsetting data by species and zone
trout.dat.d <- BD_plots %>%
  filter(Commonname == "Spotted Seatrout") %>%
  filter(Zone == "D")

hist(log(trout.dat.d$CPUE))

summary(trout.dat.d)
#Spotted Seatrout glm full model-----------------------------------------------------------------
trout.glm.d.full <- glm(CPUE ~ Levelname   Year   BycatchQuantity  
                          StartDepth   DO   Temperature   ph   Salinity,
                        data = trout.dat.d, family = gaussian(link = "log"))
#base model
trout.glm.d.base <- glm(CPUE ~ Levelname, data=  trout.dat.d, family = gaussian(link ="log"))

#step to simplify model and get appropriate order
trout.glm.d.final <- step(trout.glm.d.base, scope = list(upper = trout.glm.d.full, lower = ~Levelname),
                          direction = 'forward', trace = 1, k = log(nrow(trout.dat.d)))

#final model summary
summary(trout.glm.d.final)

#calculate the EMmeans , SE, and Confidence levels
trout.emm.d <- emmeans(trout.glm.d.final, "Levelname", data = trout.dat.d)  
trout.emm.d <- summary(trout.emm.d)

#checking normality of model
check_model(trout.glm.d.final)

#adding fitted alues to original data
trout.fit <- fitted(trout.glm.d.final)
trout.dat.d <- cbind(trout.dat.d, trout.fit)

#plotting
trout.glm.d.plot <- ggplot(trout.dat.d, aes(x = factor(Levelname, levels = c("High", "Med.High", "Medium", "Low")), y = (trout.fit),
                                            fill = factor(Levelname, levels = c("High", "Med.High", "Medium", "Low"))))    
  labs(title = expression(paste("Spotted Sea Trout",italic('(Cynoscion nebulosus)'))), x = "", y = "", legend = NULL)  
  stat_summary(fun = mean, geom = "bar")    
  stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.1)  
  scale_fill_manual(values = c("midnightblue", "dodgerblue4", "steelblue3", "lightskyblue"))  
  mytheme

trout.glm.d.plot

#checking pairwise comparisons for significance
conover.test(trout.dat.d$trout.fit, trout.dat.d$Levelname)

 

Идеальным выходом был бы такой график, где левая группа была бы одной зоной, а правая-другой, с надписями под ними.

введите описание изображения здесь

Ответ №1:

Понял это.. Все, что мне нужно было сделать, это соединить два набора данных вместе и запустить график на этом.

Однако, если у кого-то другого есть лучший способ сделать это и очистить/уменьшить код, я был бы очень признателен!!