Создайте соответствие случай-контроль по расстоянию для условной логистической регрессии в R

Алоха,

Я планирую провести исследование случай-контроль для исследовательских центров, которые равномерно распределены по стране. Мне нужно выбрать каждый случай в наборе данных, а затем сопоставить его с x количеством элементов управления (мы будем использовать анализ чувствительности для выбора оптимальных совпадений, поэтому мне нужно иметь возможность запускать его для 1,2,3,4,5,6,7,8 и т.д. количество органов управления). Поскольку в данных есть пространственный элемент, я хочу запустить это вычисление в матрице расстояний, выбрав элементы управления в пределах 25000 метров от случая.

Я не могу найти оптимальный алгоритм для выполнения этого вычисления в R. Кто-нибудь знает об оптимальном пакете R, который помог бы мне достичь этого?

Спасибо

1 ответ

Чтобы решить эту проблему, я сделал следующее

Получил координаты центра тяжести сайта (x,y)

Разделить БД на группы случай-контроль

запустил пространственный буфер случаев

пробежал контрольный перекресток

присвоил метку всем перекресткам (match_no)

Произвольная выборка из столбца match_no

Код ниже.

      db1 <- read.csv("db1_clf.csv")

library(sf)
dat <- st_as_sf(x=db1,
                   coords = c("x_coor_farm", "y_coor_farm"),
                   crs= "+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")


##Filter the positive cases
library(dplyr)
case = dat %>% filter(TB2017 == "1")
control = dat %>% filter(TB2017 == "0")

case_buff = st_buffer(case, dist = 25000)

case_int = st_intersection(case_buff, control)

library(dplyr)

case_int$match_no <- as.integer(factor(case_int$idunique))

library(dplyr)

pos_db <- case_int %>%
  select("idunique", "match_no")

pos_db$geometry= NULL
pos_db <- unique(pos_db)

neg_db <- case_int %>%
  select("idunique.1", "match_no")

neg_db$geometry= NULL
neg_db <- unique(neg_db)


head(neg_db)


####Now the samples####
library(tidyverse)
control1 <- neg_db %>% group_by(match_no) %>% sample_n(1)
control2 <- neg_db %>% group_by(match_no) %>% sample_n(2)
control3 <- neg_db %>% group_by(match_no) %>% sample_n(3)
control4 <- neg_db %>% group_by(match_no) %>% sample_n(4)
control5 <- neg_db %>% group_by(match_no) %>% sample_n(5)
control6 <- neg_db %>% group_by(match_no) %>% sample_n(6)
control7 <- neg_db %>% group_by(match_no) %>% sample_n(7)
control8 <- neg_db %>% group_by(match_no) %>% sample_n(8)
control9 <- neg_db %>% group_by(match_no) %>% sample_n(9)
control10<- neg_db %>% group_by(match_no) %>% sample_n(10)
Другие вопросы по тегам