Отображение доверительных интервалов на графике
-
- Интересующийся
- Сообщения: 48
- Зарегистрирован: 20 ноя 2007, 22:17
- Репутация: 16
- Откуда: Mсква
Отображение доверительных интервалов на графике
Здравствуйте!
В продолжении задачи: нужно построить в R линейный график с нанесенным диапазоном ошибки среднего (error bar)
В продолжении задачи: нужно построить в R линейный график с нанесенным диапазоном ошибки среднего (error bar)
-
- Интересующийся
- Сообщения: 48
- Зарегистрирован: 20 ноя 2007, 22:17
- Репутация: 16
- Откуда: Mсква
Re: Отображение доверительных интервалов на графике
+ файл с примером данных
- Вложения
-
- ndvi2007source.csv
- файл данных
- (997.04 КБ) 878 скачиваний
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Отображение доверительных интервалов на графике
вот код, разумеется, так как в данных смешены наборы типа 2000 и 65000 получается на картинке полная фигня, но забавно Код снабдил кое-какими комментариями. Он не идеален, по мелочи можно еще поправлять и универсализировать, но работает хорошо.
вот что у меня получилось с картинкой
Код: Выделить всё
#загружаем данные
data = read.table("D:\\Programming\\R\\error-bars\\ndvi2007source.csv",header=T)
#определим номер последнего поля ID
IDfieldpos = dim(data)[2]
#как обсуждалось в другом посте, сделаем массив средних и стандартных отклонений
means = aggregate(data[,-IDfieldpos],list(ID = data$ID),mean)
sds = aggregate(data[,-IDfieldpos],list(ID = data$ID),sd)
#определим сколько у нас уникальных ID, по ним будем итерировать
numID = nlevels(as.factor(data$ID))
#цикл
for (i in 1:numID) {
#тут немного глючит у меня, конвертирую выборку из массива средних и СТД в простые единичные вектора
amean = as.vector(means[i,-1],mode="integer")
asds = as.vector(sds[i,-1],mode="integer")
#это вектор 1-кол-во полей данных для error bars (это не numID)
xs = seq(length(amean))
#для каждого вектора значений строим график своего цвета
plot(amean,type="l",xlab="Julian Day",xaxt='n',ylab="NDVI",col=i,ylim=c(0,max(data)))
axis(1,at=seq(length(amean)),labels=substr(names(means)[-1],2,4),las=3)
#стрелки - error bars вверх-вниз на стандартное отклонение
arrows(xs,amean-asds,xs,amean+asds,code=3,angle=90,length=0.1,col=i)
par(new=T)
}
- Вложения
-
- graph-error-bars.gif (17.36 КБ) 7990 просмотров
пристегивайтесь, турбулентность прямо по курсу
-
- Интересующийся
- Сообщения: 48
- Зарегистрирован: 20 ноя 2007, 22:17
- Репутация: 16
- Откуда: Mсква
Re: Отображение доверительных интервалов на графике
Sim, спасибо!
все работает)
правда у меня почему то выражение
means = aggregate(data[,-IDfieldpos],list(ID = data$ID),mean)
работает только в таком виде
means = aggregate(data[,-IDfieldpos],list(ID = data$ID),FUN = "mean")
(иначе выдет ошибку...)
вот что получилось(см. вложение)
все работает)
правда у меня почему то выражение
means = aggregate(data[,-IDfieldpos],list(ID = data$ID),mean)
работает только в таком виде
means = aggregate(data[,-IDfieldpos],list(ID = data$ID),FUN = "mean")
(иначе выдет ошибку...)
вот что получилось(см. вложение)
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Отображение доверительных интервалов на графике
Странно, у меня 2.8.1 и все работает и так и так без ошибок.правда у меня почему то выражение
means = aggregate(data[,-IDfieldpos],list(ID = data$ID),mean)
работает только в таком виде
means = aggregate(data[,-IDfieldpos],list(ID = data$ID),FUN = "mean")
(иначе выдет ошибку...)
пристегивайтесь, турбулентность прямо по курсу
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей