2016-06-18 9 views
1

У меня есть данные этого формата и вы хотите сделать контурный график. Когда я пытаюсь использовать density(z), я получаю сообщение об ошибке "x must be numeric". Я не уверен, как преобразовать мои данные, чтобы сделать его правильным форматом для создания контура. Я просто хочу, чтобы это было основано на плотности точек, поскольку две колонки представляют мою длинную/лат.Контурный график: плотность участков с широтой и местоположениями местоположения

z <- c(
    c(8.83,8.89), 
    c(8.89,8.94), 
    c(8.84,8.9), 
    c(8.79,8.852), 
    c(8.79,8.88), 
    c(8.8,8.82), 
    c(8.75,8.78), 
    c(8.8,8.8), 
    c(8.74,8.81), 
    c(8.89,8.99), 
    c(8.97,8.97), 
    c(9.04,9.08), 
    c(9,9.01), 
    c(8.99,8.99), 
    c(8.93,8.97) 
) 
z <- matrix(z, ncol = 2, byrow = TRUE) 
+0

Как 'x <- z [seq (1, length (z), 2)]; y <- z [seq (2, length (z), 2)]; контур (MASS :: kde2d (x, у)) '? – lukeA

+0

Я пробовал это и получил эту ошибку. Ошибка в контуре (MASS :: kde2d (x, y)): ошибка при оценке аргумента 'x' при выборе метода для функции 'contour': Error in is.finite (x): метод по умолчанию не реализован для типа ' список'. @lukeA – gamemastersr

+0

Работает для меня. Возможно, вы неправильно разместили свои данные. 'dim (z)' - 'NULL', а не' c (15,2) '. – lukeA

ответ

2

density() используется для оценки однофакторного плотности. Поскольку у вас есть две независимые переменные: long и lat, вы должны использовать kde2d() из пакета R по умолчанию MASS.

library(MASS) 
fit <- kde2d(z[,1], z[,2]) 
contour(fit$x, fit$y, fit$z) 
## show original data locations 
points(z, pch = 19, col = 4) 

contour


Последующая деятельность

Если вы посмотрите на ?kde2d:

Usage: 

    kde2d(x, y, h, n = 25, lims = c(range(x), range(y))) 

номер по умолчанию ячеек вдоль каждой из x и y: n = 25, который дает вам сетку 25 * 25. Оценка плотности проводится на этих сетках. Возможно, вам интересно, почему оценка делается на регулярной сетке. Потому что такая сетка подобна пикселям цифровой фотографии. Сетка/растровый объект удобен для визуализации. На самом деле, если вы хотите, чтобы компьютер продолжал 3D-график, вы должны дать ему растровый объект.

На практике вы должны выбрать n в зависимости от того, сколько у вас данных. Обратите внимание, что сетка 25 * 25 имеет 625 ячеек, это вполне справедливо, если у вас 1000 точек данных. Вы также можете попробовать n = 50. Значение n очень похоже на установку количества ящиков при создании гистограммы. По мере увеличения n ваша итоговая оценка более неровная. Рассмотрим пример гистограммы, если вы неясны:

x <- rnorm(200) 
hist(x, breaks = 10) 
hist(x, breaks = 20) 

Точно, оценка плотности отличается от гистограммы; первый является более гладким ядром, в то время как последний является примитивным бином. Но выбор n (уточнение) имеет значение.

+0

Будет ли это работать, если мои данные имеют неравномерную долю длинных и значений lat и даже не масштабируются, как этот пример? – gamemastersr

+0

У меня около 1000 латов/длинных точек случайным образом по всей стране, и вы хотите сделать мой контур на основе «плотности» или местоположения тех, которые были сделаны – gamemastersr

+0

Когда я попробовал то, что у вас было, мне показалось, что мне дали только матрицу 25x25 с значением az, а не за все мои баллы – gamemastersr