Как я могу рассчитать площадь внутри контура в R?

Мне интересно, можно ли вычислить площадь внутри контура в 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)

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

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


person Burton Guster    schedule 06.12.2011    source источник
comment
Вы имеете в виду область внутри контура?   -  person Phonon    schedule 07.12.2011
comment
Как определяется контур (пример)... какую область вы хотите? Если у вас есть координаты границы, это относительно легко.   -  person John    schedule 07.12.2011
comment
Да. Площадь внутри контура. @John: я отредактирую пример в своем исходном вопросе.   -  person Burton Guster    schedule 07.12.2011
comment
Итак, теперь, когда вы предоставили пример, мне интересно, хотите ли вы, чтобы объем под этим контуром был равен 0, или вы хотите, чтобы площадь поверхности определялась этим контуром. И, если площадь поверхности, вы имеете в виду общую площадь в 3-х измерениях или только площадь в 2-х измерениях.   -  person John    schedule 07.12.2011
comment
@John: Просто двумерная область. Итак, если мой контур выглядит как круг, я ищу площадь этого круга, похожего на объект.   -  person Burton Guster    schedule 07.12.2011


Ответы (2)


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

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

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

person Ben Bolker    schedule 06.12.2011
comment
Я не заслуживаю особого внимания, так как я просто зашел на страницу help(contourlInes) и взял оттуда пример. @BurtonGuster может поставить Бену галочку. Я, вероятно, должен пожертвовать несколько тысяч баллов Бену за всю хорошую работу, которую он опубликовал здесь и в списке рассылки R-help. Аналогично Хэдли и Габору Гротендейку. - person IRTFM; 07.12.2011
comment
@DWin и Бен: Спасибо за помощь! - person Burton Guster; 07.12.2011

Я собираюсь предположить, что вы работаете с объектом, возвращаемым контурными линиями. (Безымянный список с компонентами x и y на каждом уровне.) Я ожидал найти это в легкодоступном месте, но вместо этого нашел pdf-файл с алгоритмом, который я смутно помню, когда видел http://finzi.psych.upenn.edu/R/library/PBSmapping/doc/PBSmapping-UG.pdf (см. стр. 19 в формате pdf с пометкой "-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
person IRTFM    schedule 06.12.2011