Рассчет простой статистики

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
Igg
Интересующийся
Сообщения: 48
Зарегистрирован: 20 ноя 2007, 22:17
Репутация: 16
Откуда: Mсква

Рассчет простой статистики

Сообщение Igg » 13 янв 2009, 17:43

Уважаемые коллеги !
Не подскажете ли как реализовать следующую задачу в R
есть файл данных (.csv) - сезонные значения NDVI для набора тестовых полигонов . Формат следующий:

NDVI1 NDVI2 NDVI3 NDVI4 NDVI5 ID
8217 8571 8485 8706 8464 65
8153 8498 8578 8808 8542 65
8179 8508 8578 8810 8468 65
8390 8759 8686 8947 8635 65
8390 8759 8686 8947 8635 66
8339 8664 8648 8847 8622 66
8339 8664 8648 8847 8622 66
8255 8581 8590 8283 8596 66

NDVI1- значения индекса (*1000) за определенный период, ID - номер полигона , всего 150 , а (всего записей порядка 15000)
Нужно:
1) для каждого полигона посчитать статистику сезонного изменения значения индекса : среднее и станд.откл. (напр для NDVI1 для ID = 65 и т.д.)

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Рассчет простой статистики

Сообщение Максим Дубинин » 14 янв 2009, 04:09

NDVI1 NDVI2 NDVI3 NDVI4 NDVI5 ID
8217 8571 8485 8706 8464 65
8153 8498 8578 8808 8542 65
никак не могу понять, почему одному полигону ID=65 соответствует несколько записей, он составной чтоли? из нескольких частей? Тогда не
ID - номер полигона
а ID - класс, категория и т.п., так? и считать надо не для полигонов, а для классов?
пристегивайтесь, турбулентность прямо по курсу

Igg
Интересующийся
Сообщения: 48
Зарегистрирован: 20 ноя 2007, 22:17
Репутация: 16
Откуда: Mсква

Re: Рассчет простой статистики в R

Сообщение Igg » 15 янв 2009, 19:12

Для каждого полигона имеется несколько значений NDVI (точки внутри полигона) -т.е. это можно назвать классом (в данном примере 2 класса - 65,66)

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Рассчет простой статистики

Сообщение Максим Дубинин » 15 янв 2009, 20:50

А, так это точки были, понял. В общем считается просто, буквально одной командой, следующим образом:

Код: Выделить всё

data = read.table("c:\\temp\\test.csv",header=T,sep=" ")
aggregate(data,list(ID = data$ID),sum)
Команде aggregate задается список уникальных идентификаторов, который также берется из самих данных, кстати это причина, почему результат имеет в конце колонку ID, так как при этом из анализируемых данных она не удаляется, можно сделать изящнее, вот так, ограничив то, что считается первыми 5 столбцами, результат будет тот же, но от лишнего столбца в конце избавимся:

Код: Выделить всё

aggregate(data[1:5],list(ID = data$ID),sum)
По-моему очень круто :)
Вложения
test.csv
(264 байт) 1188 скачиваний
пристегивайтесь, турбулентность прямо по курсу

Igg
Интересующийся
Сообщения: 48
Зарегистрирован: 20 ноя 2007, 22:17
Репутация: 16
Откуда: Mсква

Re: Рассчет простой статистики

Сообщение Igg » 22 янв 2009, 21:21

Ага , спасибо - проверил работает)
Но по ходу, возникла еще одна проблема: нужно убрать значения меньше определенной величины (например все меньше 8200)

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Рассчет простой статистики

Сообщение Максим Дубинин » 22 янв 2009, 21:24

в два шага, очень просто :)

1. сначала создать матрицу, где все меньшие значения будут FALSE, а большие TRUE

Код: Выделить всё

acase = data < 8200
результат такой

Код: Выделить всё

     NDVI1 NDVI2 NDVI3 NDVI4 NDVI5   ID
[1,] FALSE FALSE FALSE FALSE FALSE TRUE
[2,]  TRUE FALSE FALSE FALSE FALSE TRUE
[3,]  TRUE FALSE FALSE FALSE FALSE TRUE
[4,] FALSE FALSE FALSE FALSE FALSE TRUE
[5,] FALSE FALSE FALSE FALSE FALSE TRUE
[6,] FALSE FALSE FALSE FALSE FALSE TRUE
[7,] FALSE FALSE FALSE FALSE FALSE TRUE
[8,] FALSE FALSE FALSE FALSE FALSE TRUE
2. обнулить, все что False

Код: Выделить всё

acase*data
результат

Код: Выделить всё

  NDVI1 NDVI2 NDVI3 NDVI4 NDVI5 ID
1     0     0     0     0     0 65
2  8153     0     0     0     0 65
3  8179     0     0     0     0 65
4     0     0     0     0     0 65
5     0     0     0     0     0 66
6     0     0     0     0     0 66
7     0     0     0     0     0 66
8     0     0     0     0     0 66
пристегивайтесь, турбулентность прямо по курсу

Igg
Интересующийся
Сообщения: 48
Зарегистрирован: 20 ноя 2007, 22:17
Репутация: 16
Откуда: Mсква

Re: Рассчет простой статистики

Сообщение Igg » 22 янв 2009, 21:43

Спасибо!

Igg
Интересующийся
Сообщения: 48
Зарегистрирован: 20 ноя 2007, 22:17
Репутация: 16
Откуда: Mсква

Re: Рассчет простой статистики

Сообщение Igg » 30 янв 2009, 16:22

нашел как еще проще)

data[data > 8000]<-NA

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Рассчет простой статистики

Сообщение Максим Дубинин » 31 янв 2009, 04:37

чистый восторг! спасибо
пристегивайтесь, турбулентность прямо по курсу

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей