R - Как найти 1 / е в модели экспоненциального убывания? - PullRequest
0 голосов
/ 24 марта 2020

Я работаю с ежедневными измерениями осадков от почти 1500 дождемеров. Я рассчитал соотношение между измерениями каждой станции и ее 20 ближайших соседей. У меня также есть расстояния между станциями.

Я сейчас пытаюсь найти расстояние затухания корреляции (CDD) из полученной матрицы корреляции. CDD определяется как расстояние, на котором корреляция между одной станцией и всеми остальными станциями уменьшается ниже 1 / e. Я следую Hofstra и New расчету CDD:

enter image description here

В частности, я пытаюсь воспроизвести их рисунок 2:

enter image description here

Основываясь на этом посте, моя первая попытка использовала SSasymp, чтобы подогнать функцию самопроизвольного экспоненциального затухания к мои данные. Это то, что у меня есть до сих пор:

library(data.table)

# load data
dat <- fread("https://www.dropbox.com/s/jgo5b91owpllbq3/cor_vs_dist.csv?dl=1", sep=",") # ~ 465 KB

# visually inspect it
plot(correl ~ dist, data=dat)

# fit a model using SSasymp
fit <- nls(correl ~ SSasymp(dist, Asym, R0, lrc), data=dat)
summary(fit)
coef(fit)
lines(dat$correl, predict(fit), col="red")

Однако подгонка ужасно плохая:

enter image description here

Так что мои вопросы :

  1. Как мне приспособить лучшую модель another экспоненциального затухания к моим данным?
  2. Как только модель подойдет, как я могу определить значение 1/e, как в справочная бумага?

Любой вклад высоко ценится!

1 Ответ

2 голосов
/ 24 марта 2020

Ваша подгонка неплохая, вы просто неправильно строите прогнозы, используя correl в качестве оси X вместо dist.

Более того, вместо того, чтобы прогнозировать и строить каждый график уникальное значение dist в вашем наборе данных, лучше предсказать и построить график для диапазона значений dist.

Вот чистый график:

plot(correl ~ dist, data=dat)
lines(0:1000, predict(fit, newdata = data.frame(dist = 0:1000)), col="red")

enter image description here

...