2013-03-19 4 views
2

Мне было интересно, может ли кто-нибудь объяснить мне, как пакет geoR вычисляет функцию ковариации? Я имею в виду, как вы это сделаете вручную?covariance matrix

library(geoR) 
#suppose I have the following coordinates 
X = c(60,30,20,40) 
Y = c(50,20,50,50) 
my_coordinates = cbind(X,Y) 
print(my_coordinates) 

#computing covariance 
my_cov= varcov.spatial(my_coordinates,cov.model="exp", cov.pars=c(0.2,25)) 
print(my_cov) 

И вы получите:

  [,1]  [,2]  [,3]  [,4] 
[1,] 0.20000000 0.03664442 0.04037930 0.08986579 
[2,] 0.03664442 0.20000000 0.05645288 0.05645288 
[3,] 0.04037930 0.05645288 0.20000000 0.08986579 
[4,] 0.08986579 0.05645288 0.08986579 0.20000000 

Однако, один, возможно, захотите сделать это в Matlab, а также.

+0

Вы посмотрели источник? Вы можете сделать это, просто введя имя функции в командной строке R. Функция включает в себя несколько вариантов в соответствии с прилагаемыми аргументами, но отдельные коды кода не выглядят особенно неясными. – walkytalky

+0

Как указано ниже, ваша матрица расстояний 'h' не соответствует вашим данным. – mnel

ответ

3

Лучший способ узнать, как пакет или функция что-то делает, чтобы посмотреть исходный код. Это одна из потрясающих особенностей проектов с открытым исходным кодом, вы можете это сделать.

попробуй ввести varcov.spatial или поиск через распакованный пакет деготь шар для определения функции

Для вычисления ковариации (которое зависит от расстояния между точками), вам нужно вычислить

  • на расстояние между вашими точками (вам действительно нужен только нижний треугольник, так как он будет симметричным
  • Значение функции ковариации на каждом расстоянии
  • сформировать полную симметричную v матрицы ковариации ариесности из этих вычисленных ковариаций.

Ковариационные функции определены в ?cov.spatial. Вы можете позвонить по телефону cov.spatial, чтобы рассчитать это значение R (что именно такое geoR::varcov.spatial)

+0

@ToNoY - ваш пример расстояния не из ваших данных примера. Нижний треугольник вашей дистанционной матрицы - 'as.vector (dist (my_coordinates))', который дает '[1] 42.42641 40.00000 20.00000 31.62278 31.62278 20.00000' – mnel

+0

@ToNoY - по умолчанию [эвклидово расстояние] (http: // en .wikipedia.org/wiki/Euclidean_distance) - см. '? dist'. Я не знаю, откуда у вас номера. – mnel

+0

Жаль, я делал глупые ошибки с моими расчетами – ToNoY