Как подобрать модель с вариограммой, используя gstat в R?

У меня есть файл CSV-файла, содержащий данные о концентрации PM10 в атмосфере за 1 марта,12.00. пожалуйста, скачайте. Я хочу нарисовать вариограмму, используя пакет gstat в R. Я пытался написать этот код в R. Но с этими данными я не могу соответствовать модели.

    library(sp)
    library(gstat)

    seoul3112<-read.csv("seoul3112.csv")
    seoul3112<-na.omit(seoul3112)

    g<-gstat(id="PM10",formula=PM10~LON+LAT,location=~LON+LAT,
             data=seoul3112)
    seoul3112.var<-variogram(g,width=0.04,cutoff=0.6)
    seoul3112.var
    plot(seoul3112.var, col="black", pch=16,cex=1.3,
         xlab="Distance",ylab="Semivariance",
         main="Omnidirectional Variogram for seoul 3112")

model.3112<- fit.variogram(seoul3112.var,vgm(700,"Gau",0.5,200), fit.method = 2)
    plot(seoul3112.var,model=model.3112, col="black", pch=16,cex=1.3,
         xlab="Distance",ylab="Semivariance",
         main="Omnidirectional Variogram for seoul 3112")

На самом деле я новичок в R и статистике. Итак, я очень неосведомлен даже о вариограмме. У меня есть запрос:

а) Когда я представляю данные в виде вариограммы, они выглядят иначе, чем обычная вариограмма! почему это происходит? я должен сделать что-то еще с моими данными, как преобразование?

б) Как я могу подогнать модель под эти данные? Я пробовал разные модели, такие как "Sph","Exp", но они выглядят как линейные! Зачем?

в) Как я могу понять, какое начальное значение порога, диапазона, слепка мне следует использовать в vgm() функционировать?

г) Как я могу понять, что модель соответствует данным?

д) Для использования кригинга какую вариограмму я должен построить? только всенаправленная вариограмма? или я должен построить направленную вариограмму?

е) И как я могу интерпретировать вариограмму? Я имею в виду, что на самом деле я могу понять о данных с вариограммы?

Заранее спасибо.

2 ответа

Решение

Я дам ответы на ваши вопросы, связанные с кодом. Остальные ваши вопросы (d, e и f) больше связаны с теорией.

Во-первых, в вашем комментарии, когда вы изменили proj4string, единицы расстояния должны были измениться на участке. Сделали ли они? Судя по вашему комментарию, похоже, что этого не произошло.

а) В дополнение к игре с cutoff расстояние, также будьте осторожны с np (точки-пары), которые вы поддерживаете каждый bin на вариограмме. Например, используя ваш обновленный proj4string информация, я пытался cutoff=80 а также width=80/10 (10 бинов вместо 15), чтобы увидеть, как изменилась форма вариограммы. Уменьшение с 15 до 10 бинов не меняет места, где существуют пары точек, а только увеличивает расстояние, на которое bin представляет собой. Кроме того, этот подход не обязательно должен использоваться, но это пример того, как изменить ячейки для более вариабельных вариограмм образца (но более плавный не означает лучше).

Сравнение 10 бинов с 15 бинами

б) Используя ваш код, "Sph" а также "Exp" модели возвращаются Warning: singular model in variogram fit, Это предупреждение указывает на то, что данных недостаточно, чтобы соответствовать некоторым параметрам сферической и экспоненциальной эмпирических моделей. Увидеть gstat руководство пользователя для руководства по каждому из эмпирических уравнений и их параметров.

в) vgm() Функция может быть использована, например, для подбора глаз вариограмм. Если вы не знаете, как построить vgm() модель с образцом данных, попробуйте что-то вроде

eye_vgm = vgm(psill=1200,model="Gau",range=60,nugget=350)
plot(seoul3112.var,model=eye_vgm, col="black", pch=16,cex=1.3)

Вы используете vgm() в вызове fit.variogram()так что пока параметры вы даете vgm() являются разумными (например, на основе данных выборки), и эмпирическая модель может иметь параметры, fit.variogram() подойдет в соответствии с fit.method,

Ваши координаты - градусы широты и долготы, но вы не сообщите gstat, что они есть. Следовательно, gstat будет предполагать, что он может вычислять евклидовы расстояния от этих чисел, что не имеет смысла.

Совет состоит в том, чтобы узнать, как использовать gstat после преобразования вашей точки в SpatialPointsDataFrame используя пакет sp, а затем научитесь проецировать ваши данные так, чтобы Евклидово расстояние имело смысл.

Другие вопросы по тегам