Hoe kan ik het gebied binnen een contour in R berekenen?

Ik vraag me af of het mogelijk is om het gebied binnen een contour in R. te cacluleren.

Bijvoorbeeld het gebied van de contour dat het resultaat is van:

sw<-loess(m~l+d)
mypredict<-predict(sw, fitdata) # Where fitdata is a data.frame of an x and y matrix

contour(x=seq(from=-2, to=2, length=30), y=seq(from=0, to=5, length=30), z=mypredict)

Sorry, ik weet dat deze code ingewikkeld is. Als het te moeilijk is om te lezen. Elk voorbeeld waarbij u mij kunt laten zien hoe u het gebied van een eenvoudig gegenereerde contour kunt berekenen, zou nuttig zijn.

Bedankt voor alle hulp.

6
Hoe wordt de contour gedefinieerd (een voorbeeld) ... welk gebied wilt u? Als je coördinaten van een grens hebt, is het relatief eenvoudig.
toegevoegd de auteur John, de bron
OK, dus nu je een voorbeeld hebt gegeven, vraag ik me af of je het volume onder die contour naar 0 wilt of dat je het oppervlak van het oppervlak wilt definiëren dat door die contour wordt gedefinieerd. En, als het gebied van het oppervlak, bedoel je het totale gebied 3-dimensionaal of alleen het 2e gebied.
toegevoegd de auteur John, de bron
Bedoel je gebied binnen een contour?
toegevoegd de auteur Phonon, de bron
Ja. Het gebied binnen een contour. @John: ik zal een voorbeeld in mijn oorspronkelijke vraag bewerken.
toegevoegd de auteur Burton Guster, de bron
@John: Alleen het 2-dimensionale gebied. Dus als mijn contour op een cirkel lijkt, zoek ik naar het gebied van die cirkel als object.
toegevoegd de auteur Burton Guster, de bron

2 antwoord

Ik ga ervan uit dat je werkt met een object geretourneerd door contourLines. (Een naamloze lijst met x- en y-componenten op elk niveau.) Ik verwachtte dit te vinden op een gemakkelijk toegankelijke locatie, maar in plaats daarvan vond ik een pdf-bestand dat een algoritme bevatte dat ik me vaag herinner: http://finzi.psych.upenn.edu/R/library/PBSmapping/doc/PBSmapping- UG.pdf (zie pdf pagina 19, met het label "-11-") (Opmerking toegevoegd: het Wikipedia-artikel over "polygoon" citeert deze discussie over de formule van landmeters: http://www.maa.org/pubs/Calc_articles/ma063.pdf , wat mijn gebruik van abs() rechtvaardigt. )

Bouw een voorbeeld:

 x <- 10*1:nrow(volcano)
 y <- 10*1:ncol(volcano)
contour(x, y, volcano); 
clines <- contourLines(x, y, volcano)
x <- clines[[9]][["x"]]
 y <- clines[[9]][["y"]]
 level <- clines[[9]][["level"]]
 level
#[1] 130

Het gebied op niveau == 130 (gekozen omdat er geen twee 130 niveaus zijn en het voldoet niet aan de perceelgrenzen) is dan:

A = 0.5* abs( sum( x[1:(length(x)-1)]*y[2:length(x)] - y[1:(length(x)-1)]*x[2:length(x)] ) )
A
#[1] 233542.1
6
toegevoegd

Met dank aan @DWin voor reproduceerbaar voorbeeld, en aan de auteurs van sos (mijn favoriete R-pakket!) En splancs ...

library(sos)
findFn("area polygon compute")
library(splancs)
with(clines[[9]],areapl(cbind(x,y)))

Krijgt hetzelfde antwoord als @DWin, dat is geruststellend. (Waarschijnlijk is het hetzelfde algoritme, maar geïmplementeerd in een Fortran-routine in het pakket splancs ...)

5
toegevoegd
Ik verdien niet veel lof omdat ik net naar de pagina help (contourlInes) ben gegaan en daar het voorbeeld heb gepakt. @BurtonGuster moet de vrijheid hebben om Ben het vinkje te geven. Ik zou waarschijnlijk een paar duizend punten aan Ben moeten doneren voor al het goede werk dat hij hier en op de R-help mailinglijst heeft gepost. Evenzo naar Hadley en Gabor Grothendeick
toegevoegd de auteur 42-, de bron
Ik ben het eens met @DWin
toegevoegd de auteur Andrie, de bron
@DWin en Ben: Bedankt voor de hulp!
toegevoegd de auteur Burton Guster, de bron