Регрессионный анализ временных серий растров

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
eveeza
Интересующийся
Сообщения: 16
Зарегистрирован: 08 окт 2008, 10:31
Репутация: 0

Регрессионный анализ временных серий растров

Сообщение eveeza » 09 окт 2008, 12:02

Можно ли анализировать временной ряд в R как в Erdas в виде протсранственного стека данных? Т.е. можно ли получить, к примеру, регрессию для каждой точки пространственно-временного ряда в виде картинки?

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

Re: Регрессионный анализ временных серий растров

Сообщение Максим Дубинин » 12 окт 2008, 06:18

то есть у вас растры b1, b2, b3, b4, b5, b6 .... совпадающие по размеру и вам надо для каждого пиксела сделать регрессию?

Если это так, то не совсем понятно, что является зависимой переменной, один из каналов? или еще какое-то значение?

В любом случае, в R это сделать достаточно просто. Если вы импортировали каналы во фреймы данных:

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

x = new("GDALReadOnlyDataset", test)
b1 = getRasterTable(x)$band1
b2 = getRasterTable(x)$band2
...
получить количество пикселей:

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

numpix = dim(b1)[1]*dim(b1)[2]
то потом надо просто сделать регрессию в цикле

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

new = data.frame()
for (i in 1:numpix) {
lm1 = lm(y~b1[i]+b2[i]+b3[i])
new = cbind(new,lm1)
}
и потом сохранить массив как растр. Не хочу все подробно расписывать, так как не очень понимаю, то ли что это нужно.
пристегивайтесь, турбулентность прямо по курсу

eveeza
Интересующийся
Сообщения: 16
Зарегистрирован: 08 окт 2008, 10:31
Репутация: 0

Re: Регрессионный анализ временных серий растров

Сообщение eveeza » 14 окт 2008, 15:36

В рассматриваемом примере зависимая переменная - номер растра в стеке, если так можно назвать. В данном случае каждый слой представляет собой измерение некоторой величины в определённый момент времени. Т.е. в каждой точке в стеке задан временной ход некоторого параметра.

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

Re: Регрессионный анализ временных серий растров

Сообщение Максим Дубинин » 16 окт 2008, 06:41

Хмм, честно говоря, не могу понять, как может ли быть номер растра в стэке зависимой переменной? Наверное будет полегче, если объясните, какая перед вами стоит задача.
пристегивайтесь, турбулентность прямо по курсу

eveeza
Интересующийся
Сообщения: 16
Зарегистрирован: 08 окт 2008, 10:31
Репутация: 0

Re: Регрессионный анализ временных серий растров

Сообщение eveeza » 21 окт 2008, 13:18

Тут можно уточнить, что номеру стека соответствует определённый момент времени. И зависимость, конечно, получается не от номера стека, а от времени. Задача заключается в определении тренда (т.е. угла наклона прямой) в значениях ежегодных показателей некоторой величины и в определении надёжности этого тренда. Функция - значение пикселя, зависимая переменная - в какой момент времени взято это измерение в пикселе (связано с номером стека). В дальнейшем необходимо найти множественную регрессию - насколько некоторое число параметров определяют поведение рассматриваемого. Параметры представлены в одинаковых форматах в пространстве и времени.

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

Re: Регрессионный анализ временных серий растров

Сообщение Максим Дубинин » 22 окт 2008, 01:31

значит я с самого начала понял правильно, просто наоборот, в вашем случае зависимой переменной является спектральное отражение или то, какое значение у вас имеет растр, а независимой - момент времени. Например:

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

aseq = seq(10) #время
data = runif(10) #данные
lm1 = lm(data~aseq) #линейная регрессия
intecept = lm1$coefficients[1]
slope = lm1$coefficients[2]
intercept и slope и есть основные показатели регрессии, их и надо картировать так как я показал в посте выше. С множественной регрессией принцип тот же, просто для надо где-то брать еще переменные.

графически это будет выглядеть так:

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

plot(data~aseq,type="b",xlab="time",ylab="value")
abline(lm1)
Изображение
пристегивайтесь, турбулентность прямо по курсу

eveeza
Интересующийся
Сообщения: 16
Зарегистрирован: 08 окт 2008, 10:31
Репутация: 0

Re: Регрессионный анализ временных серий растров

Сообщение eveeza » 23 окт 2008, 19:00

Спасибо!

eveeza
Интересующийся
Сообщения: 16
Зарегистрирован: 08 окт 2008, 10:31
Репутация: 0

Re: Регрессионный анализ временных серий растров

Сообщение eveeza » 26 дек 2008, 13:45

Можно ли при вычислении регрессии исключить из расчёта некое значение, к примеру, ноль?

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

Re: Регрессионный анализ временных серий растров

Сообщение Максим Дубинин » 26 дек 2008, 19:02

можно, почему нет, просто перед регрессией сделайте

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

data = subset(data,data != 0) 
пристегивайтесь, турбулентность прямо по курсу

alexeysmirnov20
Новоприбывший
Сообщения: 2
Зарегистрирован: 28 июн 2015, 17:27
Репутация: 0

Re: Регрессионный анализ временных серий растров

Сообщение alexeysmirnov20 » 28 июн 2015, 17:30


Ответить

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

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

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