Создайте цикл для множественных сравнений для GLM в ggplot - PullRequest
0 голосов
/ 22 февраля 2019

Я хотел бы отобразить буквы сравнения из результатов нескольких сравнений для GLM, используя цикл в ggplot2.В моем примере:

#Packages
library(ggplot2)
library(tidyverse)
library(multcomp)
library(dplyr)

Набор данных моделирования с 3 переменными: Production, Feature и Temp

set.seed(123)
d<-NULL
N<-54
d$Production <- rgamma(N,10)
d$Feature <- ifelse(d$Production >7 & d$Production<10, c("A"),ifelse(d$Production>11, 
c("B"), c("C")))  
#d$Temp<-rnorm(N,20,5)
d$Temp<-rep(1:3,18)
d<-as.data.frame(d)
#

# Gamma glm general model
mG<- glm(Production~ Feature + Temp, family= Gamma, data = d)
summary(mG)
anova(mG,test="Chi")

# Prediction values
pred.data = data.frame(
Feature<-d$Feature,
Temp<-d$Temp
)  
pred.data$Production = predict(mG, newdata=pred.data, type="response")

Если, например, я создаю переменную Feature, сравнивающую каждую Temp (1, 2 и 3) переменная с использованием цикла:

uniq <- c(1,2,3)
dT<-NULL
for (i in 1:length(uniq)){
    data_1 <- subset(d, Temp == uniq[i])
    mI2  <- glm(Production ~ Feature, data = data_1, family = "Gamma")
    res2 <- cld(glht(mI2, linfct = mcp(Feature = "Tukey")),decreasing=TRUE) #Create a letters for a comparison
dT2 <- #organize letters results
  res2$mcletters$Letters %>%
  tibble(
    reg = names(.),
    lett = .
  ) %>%
  mutate(
    Clone = substr(reg, 1, 1),
  ) %>%
  left_join(d2) %>%
  mutate(lett_pos = if_else(Feature == 'C', Diametro - .5, Diametro + .5))
dT2<-as.data.frame(dT2)
dT<-rbind(dT,c(uniq[i],dT2))
}

Выбрать означает

d2<-d %>%
  group_by(Feature, Temp) %>%
  summarize(Production = mean(Production, na.rm = TRUE))

#Final plot
ggplot(d2, aes(Temp, Production, colour = Feature)) +
  geom_point() +
  stat_smooth(method="glm", method.args = list(family = "Gamma"),fullrange = TRUE)
  geom_text(aes(y = dT$lett_pos, label = dT$lett), color = 'black') 
## Put my select letters
#

Моя выходная карта:

glm

Но это не показывает сравнения, которые я создал в цикле:

#For Temp 1
#  A   B   C 
#"b" "a" "b" 

#For Temp 2
#  A   B   C 
#"b" "a" "b" 

#For Temp 3
#  A   B   C 
#"b" "a" "b"
...