построение nls-совпадений с перекрывающимися интервалами прогноза на одной фигуре

Скажем, у меня есть данные, d, и я подгоняю модели nls к двум подмножествам данных.

x<- seq(0,4,0.1)
y1<- (x*2 / (0.2 + x))
y1<- y1+rnorm(length(y1),0,0.2)
y2<- (x*3 / (0.2 + x))
y2<- y2+rnorm(length(y2),0,0.4)
d<-data.frame(x,y1,y2)

m.y1<-nls(y1~v*x/(k+x),start=list(v=1.9,k=0.19),data=d)
m.y2<-nls(y2~v*x/(k+x),start=list(v=2.9,k=0.19),data=d)

Затем я хочу построить линию регрессии подобранной модели по данным и заштриховать интервал прогноза. Я могу сделать это с помощью пакета investr и получить красивые графики для каждого подмножества в отдельности:

require(investr)
plotFit(m.y1,interval="prediction",ylim=c(0,3.5),pch=19,col.pred='light blue',shade=T)

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

 plotFit(m.y2,interval="prediction",ylim=c(0,3.5),pch=19,col.pred='pink',shade=T)

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

Однако, если я построю их вместе, у меня возникнет проблема. Затенение второго графика покрывает точки и затенение первого графика:  введите описание изображения здесь

1: Как я могу убедиться, что точки на первом графике заканчиваются поверх затенения второго графика?

2: Как я могу сделать область, в которой затененные интервалы прогнозирования перекрываются, новым цветом (например, пурпурным или любым слиянием двух перекрывающихся цветов)?


person colin    schedule 23.10.2015    source источник
comment
Вы уверены, что это именно те интервалы прогноза, которые вам нужны? При беглом просмотре документации мне неясно, предназначены ли они для обратного предсказания или для нормального предсказания. В любом случае, по первому вопросу: points(y1 ~ x, data = d), По второму вопросу вам нужны полупрозрачные цвета, и я считаю, что они не поддерживаются на большинстве устройств. Вы можете повторно реализовать функцию plotFit с помощью ggplot2, где вы можете просто указать alpha = 0.3.   -  person Roland    schedule 23.10.2015
comment
@roland да, я уверен, что это те интервалы прогнозов, которые мне нужны. Можете ли вы представить пример того, как я могу реализовать plotfit в ggplot2?   -  person colin    schedule 23.10.2015
comment
Я мог бы, но это было бы слишком большими затратами времени.   -  person Roland    schedule 23.10.2015
comment
@roland о, черт возьми. звучит так, будто у вас нет навыков!   -  person colin    schedule 23.10.2015
comment
Хорошая попытка. Для меня это скорее звучит так, будто у тебя нет навыков.   -  person Roland    schedule 23.10.2015
comment
@ Роланд Я не знаю. Вот почему я разместил вопрос о stackoverflow, спрашивая, как это сделать.   -  person colin    schedule 23.10.2015


Ответы (1)


Используйте adjustcolor, чтобы добавить прозрачность следующим образом:

plotFit(m.y1, interval = "prediction", ylim = c(0,3.5), pch = 19, 
        col.pred = adjustcolor("lightblue", 0.5), shade = TRUE)

par(new = TRUE)
plotFit(m.y2, interval = "prediction", ylim = c(0,3.5), pch = 19, 
       col.pred =  adjustcolor("light pink", 0.5), shade = TRUE)

В зависимости от того, что вы хотите, вы можете поиграть с двумя значениями прозрачности (здесь оба установлены на 0,5) и, возможно, сделать прозрачным только одно из них.

скриншот

person G. Grothendieck    schedule 23.10.2015
comment
Ты меня на 11 секунд обыграл, ответ сниму :) Хорошая функция adjustcolor кстати ... - person Jealie; 23.10.2015