Бештар

Нуқтаҳои тасодуфӣ дар R бо маҳдудияти масофаи ҳадди ақал?

Нуқтаҳои тасодуфӣ дар R бо маҳдудияти масофаи ҳадди ақал?


Ман кӯшиш мекунам, ки як қатор нуқтаҳоро дар доираи маълумоти ман тасодуфан интихоб кунам (маълумоти мисол дар зер) бо маҳдудият, ки масофаи ҳадди ақал байни нуқтаи интихобшуда бояд аз масофаи муайян зиёд бошад. Ман тавонистам бо истифода азнамунадар R кор мекунад, аммо ман фаҳмида наметавонам, ки чӣ тавр каме маҳдудиятро ба коди ман илова кардан мумкин аст. Ман фикр мекунам, ки ин бояд истифодаи як бастаи таҳлили фазоиро дар R дар бар гирад, аммо ман намедонам аз куҷо оғоз кунам.

Ман медонам, ки ArcGIS дорои асбобест бо номи Эҷоди Нуқтаҳои Тасодуфӣ, ки метавонад масофаи ҳадди ақали байни нуқтаро муайян кунад. Аммо вазъияти ман шумораи бештари намунаҳои такрориро талаб мекунад, аз ин рӯ ба ман эҳсос кардани ин кор дар R хеле осонтар хоҳад буд, зеро онро метавон бо ҳалқа дохил кард.

Маълумоти мисол:

grid_index x y grid_168 323012.5 674187.5 grid_169 323012.5 674212.5 grid_292 323037.5 672287.5 grid_293 323037.5 672312.5 grid_368 323037.5 674187.5 grid_369 323037.5 674212.5

Шумо метавонед инро бо R ё ArcGIS мустақилона иҷро кунед.

Бо ArcGIS, аввал аз координатаҳои шабакаи худ синфи хусусиятҳо (масалан файли шакл) созед. Сипас ин синфи хусусиятҳои шабакаро ҳамчун параметри constraining_extent -и "Эҷоди Нуқтаҳои Тасодуфӣ" истифода баред.

Ягона рамзгузорӣ, ки шумо бояд анҷом диҳед, гузоштани он асбоб дар ҳалқаест, ки онро тавассути Model Builder ё Arcpy ба даст овардан мумкин аст.

дар ин ҷо як намуна аст (100 такрорӣ):

arcpy -ро барои i дар диапазон ворид кунед (100): чоп кунед arcpy.CreateRandomPoints_management ("c:/data/project", "samplepoints", "c: /data/studyarea.shp", "", 500, "", "POINT "," ")

Барои R, genrandompnts аз вебсайти фазоии экологияро истифода баред. Ин восита ба асбоби ArcGis "Эҷоди нуқтаҳои тасодуфӣ" шабеҳ аст.

Илова бар ин, як риштаи дигаре ба саволи шумо шабеҳ аст.

Чӣ тавр нуқтаҳои тасодуфиро берун аз полигонҳо эҷод кардан мумкин аст?


Агар ман шуморо дуруст дарк кунам, шумо мехоҳед аз ҳар як мушоҳида дар маълумот намунаи тасодуфии бо масофаи маҳдуд маҳдуд кашед. Ин ба таҳлили наздиктарин K наздик аст.

Ин як мисоли ҷараёни кор аст, ки намунаи тасодуфии kNN -ро бо истифода аз маҳдудияти ҳадди ақали масофа эҷод мекунад ва номи мувофиқро ба маълумоти шумо бармегардонад.

Китобхонаҳо ва маълумоти мисолро илова кунед

китобхона (sp) маълумот (истифода) координатҳо (истифода) <- ~ x+y

Бо истифода аз spDists матритсаи масофаро ҳисоб кунед

dmat <- spDists (истифода)

Ҳадди ақали масофаи намунаро муайян кунед ва дар матритсаи масофа ба NA таъин кунед. Ин ҷоест, ки шумо ҳар гуна маҳдудиятро, масалан, масофаро эҷод мекунед.

дақ.дист <- 500 дмат [дмат <= дақ. дист] <- НА

Дар ин ҷо мо ҳар як сатрро дар матритсаи фосилавӣ такрор мекунем ва намунаи тасодуфиро интихоб мекунем! = НА. Объекти "намунаҳо" як data.frame аст, ки дар он ID номҳои объекти манбаъ ва kNN номи ҳамсояи наздиктарин мебошанд. Шарҳ; баъзе коркарди НА вуҷуд дорад, ба шарте ки агар ҳамсоя пайдо нашавад, ки ин метавонад бо маҳдудиятҳои масофа рӯй диҳад.

намунаҳо <- data.frame (ID = rownames ([email protected]), kNN = NA) барои (i in 1: nrow (dmat)) {x <- as.vector (dmat [, i]) names (x) < - намунаҳо $ ID x <- x [! is.na (x)] if (! length (x) == 0) {sample [i,] [2] <- names (x) [sample (1: length ( x), 1)]} дигар {намуна [i,] [2] <- NA}}

Пас мо метавонем сутуни kNN -ро, ки дорои номҳои сатри ҳамсояи наздиктарин аст, ба маълумоти аслӣ илова кунем.

[email protected] <- data.frame ([email protected], kNN = sample $ kNN) head ([email protected])

Мо инчунин метавонем мушоҳидаҳои беназири ҳамсояи наздиктаринро гузорем.

meuse.sub <- meuse [ки (rownames ([email protected]) % дар % беназир (намунаҳо $ kNN)),]

Роҳҳои шевотаре барои анҷом додани ин таҳлил мавҷуданд, аммо ин ҷараёни кор ақидаи умумиро дарбар мегирад. Ман тавсия медиҳам, ки барои ҳалли пешрафта ба китобхонаи spdep ва функсияҳои наздик ё knearneigh бодиққат нигаред.


Агар касе ба нуқтаҳои интихоб бо маҳдудияти масофа барои ҳар як полигон таваҷҷӯҳ дошта бошад, дар айни замон, ду имконоти хуб ва зуд вуҷуд доранд: (1) бо истифода аз QGIS "нуқтаҳои тасодуфӣ дар дохили полигонҳо" тавассути RQGIS-пакет ё (2) бо истифода аз spatstat: : Функсияи rSSI.

Дар мисолҳои зерин барои (1) RQGIS ва (2) spatstat :: rSSI:

## бастаҳои мувофиқро бор кунед, агар (! талаб карда шавад ("pacman")) install.packages ("pacman") pacman :: p_load (sf, sp, rgdal, dplyr, mapview, spatstat, maptools, devtools) ## маълумотро бор кунед ва табдил диҳед ба sf columbus <- readOGR (system.file ("шакли/columbus.shp", package = "spData") [1]) %> % sf :: st_as_sf (.) ## интихобкунии тасодуфиро бо маҳдудияти масофа # # # оғоз кунед # # # # # # # # # # # # # # # # # (1)… бо истифода аз RQGIS # # # # # # # # # # # # # # # # # devtools :: install_github (" jannes-m/RQGIS ") китобхона (" RQGIS ") #… кушодани нақби QGIS RQGIS :: open_app () # QGIS бояд насб карда шавад #… алгоритми мувофиқи RQGIS :: find_algorithms (search_term =" тасодуфӣ ") # [6]" Нуқтаҳои тасодуфӣ дар дохили полигонҳо (собит) # ----------------> qgis: randompointsinsidepolygonsfixed " # [7]" Нуқтаҳои тасодуфӣ дар дохили бисёркунҷаҳо (тағирёбанда) # -------- -----> qgis: randompointsinsidepolygonsvariable " #… санҷиши истифодаи RQGIS :: get_usage (alg =" qgis: randompointsinsidepolygonsfixed ") RQGIS :: get_args_man (alg =" qgis: randompointsinsidepolygonsfixed ") s бо масофаи ҳадди ақал (0.25 дараҷа) # бо истифода аз рақами максималии собит (10) rdnmPts.RQGIS <- RQGIS :: run_qgis (alg "" qgis: randompointsinsidepolygonsfixed ", show_output_paths = TRUE, load_output = TRUE, params = list (VECTOR = columb) , MIN_DISTANCE = "0.25", VALUE = "10", OUTPUT = "rndm_pts.shp")) #… ба натиҷаҳои mapview :: mapview (рӯйхат (rdnmPts.RQGIS, колумб)) назар кунед ... #… шумораи тасодуфиро тафтиш кунед нуқтаҳои наздик (rdnmPts.RQGIS) # [1] 187 # # # # # # # # # # # # # # # # # # (2)… бо истифода аз spatstat :: rSSI -------- ---------------------------- # # # # # # # # # # # # # # # spatstat :: rSSI вуруди махсуси форматро истифода мебарад. Аз ин рӯ, функсия # барои табдил додани хусусияти оддӣ ба формати owin сохта мешавад. # init function genRandomPtsDist <- function (x, seed = 123, dist = 10, n = Inf, maxit = 100, тыныш = TRUE,…) { # вақти оғози раванди равандро гиред. time.start <- proc.time ( ) # гирифтани crs crs <- sf :: st_crs (x = x) # табдил додани хусусияти оддӣ ба полигонҳои фазоӣ x.sp <- x %> % ҳамчун (., "Фазоии") %> % ҳамчун (., "SpatialPolygons" ) # табдил додан ба объекти x.owin <- x.sp %> % ковокии (., "polygons") %> % lapply (X =., FUN = function (x) {sp :: SpatialPolygons (рӯйхат (x) )}) %> % lapply (X =., FUN = spatstat :: as.owin) # намунаи тасодуфиро бо маҳдудияти дур тавлид мекунад (метавон параллелизатсия кард) pts.ppp <- lapply (X = 1: дарозӣ (x.owin) , ФУНК = функсия (i, x.owin, r, n, ором, тухм, maxit,…) {агар (ором == FALSE) гурба ("Давидан", ман, "аз", дарозӣ (x.owin), " n") set.seed (seed) spatstat :: rSSI (r = r, n = n, giveup = maxit, win = x.owin [[i]],…)}, ором = ором, x.owin = x.owin, r = dist, n = n, seed = seed, maxit = maxit,…) # баргардонидан ба хусусияти оддӣ pts.sf <- pts.ppp %> % lapply (X =., FUN = функсия (x) sf :: st_as_sfc (ҳамчун (x, "Sp atialPoints "))) %> % do.call (c,.) %> % sf :: st_sf (., crs = crs) # гирифтани ҷузъҳои буришро pts.inter.x <- sf :: st_intersects (x = pts. sf, y = x) %> % unlist if if (length (pts.inter.x)! = nrow (pts.sf)) {огоҳӣ ("Баъзе нуқтаҳои намуна берун аз як полигон ҳастанд")} дигар {pts.sf $ In <-pts.inter.x} # вақти равандро ба даст оред.time аз genRandomPtsDist: ", давр (x = process.time.run [" гузаштааст]] [[1]]/60, рақамҳо = 3), "Дақиқаҳо ------  n")) бозгаштан (pts.sf )} # охири функсия ## Бо истифода аз функсияи муайяншуда, ҳоло метавон як намунаи тасодуфиро тавлид кард. #… Коркарди нуқтаҳои тасодуфӣ бо масофаи ҳадди ақал (0.25 дараҷа) #бо истифода аз шумораи максималии собит (10) rdnmPts.rSSI <- genRandomPtsDist (x = columbus, dist = 0.25, n = 10, тыныш = FALSE) #... ба назар гиред Натиҷаи mapview :: mapview (рӯйхат (rdnmPts.rSSI, колумб)) #… шумораи нуқтаҳои тасодуфиро тафтиш кунед (rdnmPts.rSSI) # [1] 171

Видеоро тамошо кунед: Aman Tello, gozel bir toy mahnisi 2020