Линейная регрессия между двумя растровыми изображениями в R
Мне нужна линейная регрессия для расчета эмпирического параметра. L1 - растровое изображение, формат.tif. L2 также является растровым изображением, рассчитанным заранее. Оба изображения имеют одинаковое количество столбцов и строк.
Формула имеет вид: L1 = a + b * L2, что переводится в R как:
lm(L1 ~ L2)
Во второй формуле мне позже понадобится nd b.
Сейчас я сталкиваюсь с проблемой, что оба растра содержат значения NA, и я не уверен, как построить функцию для линейной регрессии. Я не настолько знаком с R, поэтому я застрял в этой проблеме, которая может быть довольно простой. Я думаю, что я должен использовать Calc, но не уверен, как.
Редактировать: пока у меня есть этот код:
s = stack(L1,L2)
fun = function(x) {if (is.na(x[1])) { NA } else {lm(x[1] ~ x[2])$coefficients[2]}}
Тем не менее, это требует очень много времени для расчета и не приводит к результату
1 ответ
Вы бы использовали calc
если вы хотите сделать локальную регрессию, это отдельная регрессия для каждой ячейки сетки (пикселя). Но это не имеет смысла в этом случае, поскольку у вас есть только два растра; и, следовательно, только одна точка данных на ячейку сетки.
В вашем случае вы хотите глобальной регрессии. Вы можете это так:
s <- stack(L1, L2)
v <- data.frame(na.omit(values(s)))
# this step may not be necessary
names(v) <- c('L1', 'L2')
m <- lm(L2 ~ L1, data=v)
m
если s
слишком велик для этого, вы можете сделать что-то вроде
v <- sampleRegular(s, 100000)
v <- data.frame(na.omit(v))
и т.п.