Регрессионный анализ временных серий растров
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 08 окт 2008, 10:31
- Репутация: 0
Регрессионный анализ временных серий растров
Можно ли анализировать временной ряд в R как в Erdas в виде протсранственного стека данных? Т.е. можно ли получить, к примеру, регрессию для каждой точки пространственно-временного ряда в виде картинки?
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Регрессионный анализ временных серий растров
то есть у вас растры b1, b2, b3, b4, b5, b6 .... совпадающие по размеру и вам надо для каждого пиксела сделать регрессию?
Если это так, то не совсем понятно, что является зависимой переменной, один из каналов? или еще какое-то значение?
В любом случае, в R это сделать достаточно просто. Если вы импортировали каналы во фреймы данных:
получить количество пикселей:
то потом надо просто сделать регрессию в цикле
и потом сохранить массив как растр. Не хочу все подробно расписывать, так как не очень понимаю, то ли что это нужно.
Если это так, то не совсем понятно, что является зависимой переменной, один из каналов? или еще какое-то значение?
В любом случае, в 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)
}
пристегивайтесь, турбулентность прямо по курсу
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 08 окт 2008, 10:31
- Репутация: 0
Re: Регрессионный анализ временных серий растров
В рассматриваемом примере зависимая переменная - номер растра в стеке, если так можно назвать. В данном случае каждый слой представляет собой измерение некоторой величины в определённый момент времени. Т.е. в каждой точке в стеке задан временной ход некоторого параметра.
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Регрессионный анализ временных серий растров
Хмм, честно говоря, не могу понять, как может ли быть номер растра в стэке зависимой переменной? Наверное будет полегче, если объясните, какая перед вами стоит задача.
пристегивайтесь, турбулентность прямо по курсу
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 08 окт 2008, 10:31
- Репутация: 0
Re: Регрессионный анализ временных серий растров
Тут можно уточнить, что номеру стека соответствует определённый момент времени. И зависимость, конечно, получается не от номера стека, а от времени. Задача заключается в определении тренда (т.е. угла наклона прямой) в значениях ежегодных показателей некоторой величины и в определении надёжности этого тренда. Функция - значение пикселя, зависимая переменная - в какой момент времени взято это измерение в пикселе (связано с номером стека). В дальнейшем необходимо найти множественную регрессию - насколько некоторое число параметров определяют поведение рассматриваемого. Параметры представлены в одинаковых форматах в пространстве и времени.
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Регрессионный анализ временных серий растров
значит я с самого начала понял правильно, просто наоборот, в вашем случае зависимой переменной является спектральное отражение или то, какое значение у вас имеет растр, а независимой - момент времени. Например:
intercept и slope и есть основные показатели регрессии, их и надо картировать так как я показал в посте выше. С множественной регрессией принцип тот же, просто для надо где-то брать еще переменные.
графически это будет выглядеть так:
Код: Выделить всё
aseq = seq(10) #время
data = runif(10) #данные
lm1 = lm(data~aseq) #линейная регрессия
intecept = lm1$coefficients[1]
slope = lm1$coefficients[2]
графически это будет выглядеть так:
Код: Выделить всё
plot(data~aseq,type="b",xlab="time",ylab="value")
abline(lm1)
пристегивайтесь, турбулентность прямо по курсу
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 08 окт 2008, 10:31
- Репутация: 0
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 08 окт 2008, 10:31
- Репутация: 0
Re: Регрессионный анализ временных серий растров
Можно ли при вычислении регрессии исключить из расчёта некое значение, к примеру, ноль?
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Регрессионный анализ временных серий растров
можно, почему нет, просто перед регрессией сделайте
Код: Выделить всё
data = subset(data,data != 0)
пристегивайтесь, турбулентность прямо по курсу
-
- Новоприбывший
- Сообщения: 2
- Зарегистрирован: 28 июн 2015, 17:27
- Репутация: 0
Re: Регрессионный анализ временных серий растров
Об этом можно почитать в статье СМЕШАННАЯ РЕГРЕССИОННО-ТРЕНДОВАЯ МОДЕЛЬ В ЗАДАЧЕ ПРОГНОЗИРОВАНИЯ
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 17 гостей