### Bodove procesy na linearnich sitich ### ########################################### library(spatstat) # Ukazka: vicerozmerny bodovy vzorek - kriminalita v ulicich Chicaga X <- chicago uX <- unmark(chicago) plot(uX, chars=19, main="") uX plot(X, chars=19, cols=1:7, show.window=FALSE, main="") plot(split(chicago),mar.panel=c(0,0,0,0),chars=19) # Jak se k takovym datum postavit? # Nas pristup: sit je pevne dana, nenahodna; pozice a pocet bodu pozorovanych na siti nahodne jsou. plot(uX$domain, main="") summary(uX$domain) plot(uX, chars=19, main="", show.window=FALSE) # Zavedeni bodoveho procesu na linearni siti: # - konecny pocet segmentu konecne delky (cela sit se tedy vejde do kompaktni mnoziny) # - dva segmenty site mohou mit nejvyse jeden spolecny bod, a to koncovy # - sigma-algebra podmnozin lin. site je stopou borelovske sigma-algebry v R^2 # - sigma-algebru na mnozine lokalne konecnych mnozin na siti definujeme obdobne jako v rovine # V tomto pristupu predpokladame, ze pozorujeme celou sit, ne vyrez procesu # definovaneho na vetsi mnozine. # Napriklad nemusime resit okrajove efekty - zadna informace nam neschazi. # Odhad intenzity stac. procesu: prumerny pocet bodu na jednotku delky int.uX <- intensity(uX) int.uX # jak vypada Poissonuv proces na siti? Xp <- rpoislpp(lambda=int.uX, L=uX$domain) Xp plot(Xp, chars=19, main="") par(mfrow=c(1,2), mar=c(0,0,0,0)) plot(uX, chars=19, main="", show.window=FALSE) plot(Xp, chars=19, main="", show.window=FALSE) dev.off() # Je to Poissonuv proces, jak ho zname? NENI! plot(as.ppp(Xp), chars=19, main="") # Obalkove testy nam rozdil ukazi: set.seed(123456) env.pois <- envelope(as.ppp(Xp), fun=Kest, do.pwrong=TRUE, savepatterns=TRUE, savefuns=TRUE, nsim=3999) plot(env.pois) # datova krivka mirne vystupuje mimo obalku attr(env.pois,"pwrong") # p-hodnota globalniho testu = 0.0298 mad.test(env.pois) # p-hodnota = 0.0005 dclf.test(env.pois) # p-hodnota = 0.0005 library(spptest) res <- rank_envelope(env.pois,alpha=0.05) # vyrobime 95% obalku plot(res) # datova krivka z obalky vystupuje # Problem je, ze jsme simulovali realizace Poissonova procesu v rovine, ne na siti: set.seed(123456) env.pois.l <- envelope(as.ppp(Xp), simulate=expression(as.ppp(rpoislpp(lambda=int.uX, L=uX$domain))), fun=Kest, do.pwrong=TRUE, savepatterns=TRUE, savefuns=TRUE, nsim=3999) plot(env.pois.l) # datova krivka mirne vystupuje mimo obalku attr(env.pois.l,"pwrong") # p-hodnota globalniho testu = 0.0213 mad.test(env.pois.l) # p-hodnota = 0.953 dclf.test(env.pois.l) # p-hodnota = 0.954 res.l <- rank_envelope(env.pois.l,alpha=0.05) # vyrobime 95% obalku plot(res.l) # datova krivka z obalky nevystupuje # Testy jsme tedy prosli. Je vsak K-funkce, jak jsme ji dosud pouzivali, vhodnou charakteristikou # pro popis bodoveho procesu na linearni siti? # Problem: pocitani Eukleidovske vzdalenosti mezi body nedava smysl pro posuzovani jejich interakci! # Muzeme ale definovat "sitovou vzdalenost" jako delku nejkratsi spojnice mezi danymi body, # vedene po segmentech site. # Eukleidovska vzdalenost: plot(distfun(as.ppp(Xp))) # Sitova vzdalenost: plot(distfun(Xp)) # Odpovidajici charakteristikou je pak "sitova K-funkce" linearK. ?linearK plot(linearK(Xp)) plot(linearK(uX)) # Toto je ilustrace skutecnosti, ze pro ruzne aplikace se hodi pouzivat ruzne varianty K-funkce, # napr. smerovou K-funkci (misto kruhu pouzit dve kruhove vysece), valcova K-funkce (pro 3D data) # pocet bodu vyskytujicich se v urcitem valci okolo typickeho bodu procesu) apod. # V puvodni, nekorigovane verzi (Okabe) byla sitova K-funkce (az na konstantu) strednim poctem # dvojic bodu, ktere jsou si "sitove blize" nez r. # Nevyhoda nekorigovane Okabeho sitove K-funkce: i pro Poissonuv proces zavisi jeji hodnoty na # geometrii site. # simplenet je ukazkova sit definovana ve spatstatu. Xp2 <- rpoislpp(lambda=35, L=simplenet) plot(Xp2, chars=19) plot(linearK(Xp2,correction="none")) plot(linearK(Xp,correction="none")) # Resenim tohoto problemu je tzv. Angova geometricka korekce. Definujme "sitove r-okoli" bodu jako # mnozinu vsech bodu site, ktere jsou mu sitove blize nez r. Pro ruzne body site je obecne velikost # (soucet delek vsech jeho dilcich segmentu) sitoveho r-okoli ruzna. To se pro procesy v rovine stat # nemuze, velikost kulicky o polomeru r je ve vsech mistech roviny stejna... # Geometricka korekce spociva v tom, ze prispevek kazde dvojice bodu x, y prevazime velikosti sitoveho # r-okoli bodu x, kde r = sitova vzdalenost bodu x, y. # Pro Poissonuv proces je teoreticka hodnota sitove K-funkce s touto korekci K_{net}(r) = r, # bez ohledu na tvar a geometrii site. # Muzeme tedy porovnavat tendence ke shlukovani ci regularite pro procesy na ruznych sitich. plot(linearK(Xp2,correction="Ang")) plot(linearK(Xp,correction="Ang")) # Ukol: posudte, zda dataset "Chicago" odpovida Poissonovu procesu.