Мои данные состоят из 16 пар расстояний и пеленгов от определенного места. Я пытаюсь создать 1000 повторных выборок этих 16 пар (т.е. создать новые наборы X2 и Y2). Так что в итоге у меня будет 1000, 16 пар расстояний и пеленгов, что приведет к новым 16 пространственным точкам.

мои данные, используя азимут и расстояние для генерации X2 и Y2

То, что я сделал до сих пор, - это повторная выборка (перетасовка) из 16 значений, которые у меня уже есть,

`

f2 <- function(x) data.frame(bearing = sample(min(HRlog$beartoenc):max(HRlog$beartoenc), 16, replace = TRUE), 
                                distance = sample(min(HRlog$distoenc):max(HRlog$distoenc), 16, replace = TRUE))

    se1randcent <- as.data.frame(lapply(seq(1000), f2))

`

Но с моими советниками это было не так.

Мне сказали, что я должен выполнить повторную выборку в соответствии с распределением фон Мизеса, то есть подогнать распределение к моим данным, а затем регенерировать 16 пар из этого распределения в соответствии с полученным значением K. Я действительно не знаю, что это значит. Может ли кто-нибудь помочь мне разобраться?

Я публикую этот вопрос, потому что я нахожусь в серьезном дефиците времени и на 9-м месяце беременности, поэтому мой мозг не помогает мне своевременно понять это.

Любая помощь в этом будет принята с благодарностью!

1
MMaor 14 Июн 2020 в 23:13

1 ответ

Лучший ответ

Пакет circular в R может быть полезен. Параметр распределения фон Мизеса kappa может быть рассчитан по указанным вами углам либо с использованием метода минимизации, как я покажу ниже, либо с помощью встроенных оценщиков максимального правдоподобия mle.vonmises(). Когда у вас есть параметры, вы можете использовать rvonmises с количеством выборок и рассчитанными параметрами для генерации выборки. Кажется, что сгенерированный образец находится на [0,2pi], поэтому может потребоваться некоторая корректировка, чтобы убедиться, что средние значения представлены правильно.

Подгонка расстояния, вероятно, будет отдельным распределением, и вопрос о возможной зависимости между ними не рассматривается в этом ответе.

library(circular) # circular statistics and bessel functions

# converting the bearing to be on the interval [-pi,pi] which is conventional for von Mises
bearing <- c(19.07,71.88,17.23,202.39,173.67,357.04,5.82,5.82,95.53,5.82,94.13,157.67,19.07,202.39,173.67,128.15)
bearing_rad <- bearing*2*pi/360 - pi

# sample statistics
circ_mean <-  mean.circular(bearing_rad) # mu of von Mises
circ_sd <- sd.circular(bearing_rad) # related to kappa of von Mises
circ_var <- var.circular(bearing_rad)

# function to return difference in variances between
diff_vars2 <- function(kappa){
  
  # squaring to make the function convex
  return((1 - A1(kappa) - circ_var)^2)
}

# solving for kappa by matching the variances
kappa_solution <- optim(par = 1,fn=diff_vars2,lower = 0,method="L-BFGS-B")

# sample from von mises distribution
sampled_vals <- rvonmises(n=100, mu=circ_mean, kappa=kappa_solution$par)

Добавлен контент на основе комментариев

Одна из проблем с тестами на однородность заключается в том, что у вас небольшой размер выборки. Два метода, которые кажутся подходящими, - это тесты Рэлея и Койпера, которые проверяют однородность. Справочная информация по ним представлена ​​на странице Руководство NCSS

Оба реализованы в circular, но я не уверен, используется ли модифицированный Рэлей. Результаты для bearings_rad показывают, что p-значение Рэлея = 0,2 и p-значение Койпера <0,05.

rayleigh.test(x=bearing_rad)
kuiper.test(x=bearing_rad)

Вы можете добавить подобранную гистограмму к приведенному выше графику, используя dvonmises. Это даст радиус, который можно преобразовать в x и y, используя стандартный перенос полярных координат. Заставить углы работать может быть немного сложно. Если вам не нужна диаграмма с розами на заднем плане, вы можете использовать plot.

rose.diag(bearing_rad)

density_vals <- dvonmises(x=seq(0,2*pi,0.01)-circ_mean,mu = 0,kappa=kappa_solution$par)

x_from_polar <- density_vals*cos(seq(0,2*pi,0.01))
y_from_polar <- density_vals*sin(seq(0,2*pi,0.01))
lines(x=x_from_polar,y=y_from_polar,col='red')
2
Calvin 21 Июн 2020 в 00:46