2015-10-23 3 views
0

Скажите, что некоторые данные, d, и я подгоняю модели nls двум подмножествам данных.построение 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) 

enter image description here

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

enter image description here

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

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

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

+0

Вы уверены, что эти интервалы предсказания, которые вы хотите? Мне не ясно, как быстро просмотреть документацию, если они предназначены для обратного предсказания или для обычного предсказания. Во всяком случае, для первого вопроса: 'points (y1 ~ x, data = d)', для второго вопроса вам нужны полупрозрачные цвета, и я считаю, что они не поддерживаются на большинстве устройств. Вы можете повторно реализовать функцию 'plotFit' с ggplot2, где вы можете просто указать' alpha = 0.3'. – Roland

+0

@roland yes Я уверен, что это промежутки предсказания, которые я хочу. Можете ли вы представить пример того, как я буду использовать plotfit в ggplot2? – colin

+0

Я мог бы, но это было бы слишком большой инвестицией времени. – Roland

ответ

2

Использование 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) и, возможно, сделать только один из них прозрачный.

screenshot

+1

Вы избили меня на 11 секунд, я удалю свой ответ :) Хорошая функция 'adjustcolor' btw ... – Jealie

Смежные вопросы