Укажите диапазон выходных данных emmeans для диапазона уровней отдельных факторов

#r #list #ggplot2 #emmeans

#r #Список #ggplot2 #emmeans

Вопрос:

Я пытаюсь создать фигуру, используя выходные данные emmeans, рисуя линии для 5 уровней фактора. Я бы хотел, чтобы диапазон каждой ленты соответствовал диапазону данных по оси x, в котором встречается этот уровень, а не по всей оси x. т.Е. Некоторые факторы имели данные только в определенных диапазонах оси x, и я не хочу экстраполировать за пределы этих диапазонов.

Текущий код, который экстраполируется по всему диапазону, является:

 newdata=emmeans(model, ~x|factor, at=list(factor=levels(data$factor), x=seq(min(data$x), max(data$x), len=100)), type='response') %>% as.data.frame

figure=ggplot(data, aes(y=y, x=x, color=factor, fill=factor)) 
  geom_ribbon(data=newdata, aes(x=x, y=response,ymin=lower.CL, ymax=upper.CL), alpha=0.3, colour = NA) 
   geom_line(data=newdata, aes(x=x, y=response))
   
figure
  

Ответ №1:

С тех пор я нашел громоздкий обходной путь:

 #Build dataframes with max and min for each factor
factorvariable.1 <- c("factorvariable.1")
data.factorvariable.1=filter(data, factor %in% factorvariable.1)
factorvariable.1.range=range(data.factorvariable.1$x)%>% as.data.frame
factorvariable.1.range$factor=factorvariable.1
factorvariable.1.range$min.max=c('min','max')

factorvariable.2 <- c("factorvariable.2")
data.factorvariable.2=filter(data, factor %in% factorvariable.2)
factorvariable.2.range=range(data.factorvariable.2$x)%>% as.data.frame
factorvariable.2.range$factor=factorvariable.2
factorvariable.2.range$min.max=c('min','max')

Range=rbind(factorvariable.1.range,factorvariable.2.range)

Range <- spread(Range, min.max, .)

  
 #filter emmeans data by max and min values
newdata=emmeans(model, ~x|factor, at=list(factor=levels(data$factor), x=seq(min(data$x), max(data$x), len=100)), type='response') %>% as.data.frame
newdata=merge(newdata, Range, by="factor")
newdata= newdata%>%filter(x>min)
newdata= newdata%>%filter(x<max)
newdata