Как я могу рассчитать площадь внутри контура в R? - PullRequest
6 голосов
/ 07 декабря 2011

Мне интересно, можно ли рассчитать область внутри контура в R.

Например, область контура, которая получается из:

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)

Извините,Я знаю, что этот код может быть запутанным.Если это слишком сложно читать.Любой пример, где вы можете показать мне, как рассчитать площадь просто сгенерированного контура, был бы полезен.

Спасибо за любую помощь.

Ответы [ 2 ]

6 голосов
/ 07 декабря 2011

Я предполагаю, что вы работаете с объектом, возвращаемым contourLines. (Безымянный список с компонентами x и y на каждом уровне.) Я ожидал найти это в легкодоступном месте, но вместо этого нашел файл PDF, предоставляющий алгоритм, который я смутно помню, увидев http://finzi.psych.upenn.edu/R/library/PBSmapping/doc/PBSmapping-UG.pdf (см. Pdf стр. 19, с пометкой «-11-») (Добавлено примечание: в статье Википедии о «многоугольнике» цитируется это обсуждение формулы геодезистов: http://www.maa.org/pubs/Calc_articles/ma063.pdf, что оправдывает мое использование abs ().)

Построение примера:

 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

Область на уровне == 130 (выбрана потому, что не существует двух уровней 130 и она не соответствует ни одной из границ графика):

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
5 голосов
/ 07 декабря 2011

Спасибо @DWin за воспроизводимый пример и авторам sos (мой любимый пакет R!) И splancs ...

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

Получает тот же ответ, что и @DWin,что утешительно.(Предположительно, это тот же алгоритм, но реализованный в подпрограмме Fortran в пакете splancs ...)

...