Рассчитать площадь между 2 кривыми - PullRequest
6 голосов
/ 23 октября 2011

Я хотел бы рассчитать площадь между синей линией и серой диагональной линией.

enter image description here

Я могу рассчитать площадь под синей линией как:

library(zoo)    
id <- order(x)
AUC <- sum(diff(x[id])*rollmean(y[id],2))

(спасибо Рассчитать площадь под кривой в R )

Есть идеи, как найти область между синей и серой линией?

Спасибо заранее EC

Ответы [ 3 ]

4 голосов
/ 23 октября 2011

Область между кривыми - это модуль (площадь (под синей линией) - площадь (под серой линией)) Площадь под синей линией равна 1/2 (b-a) (f (b) -f (a)), где a и b - X пределов, а f (a), f (b) - Y пределов. Найти область под серой линией можно по правилу Симпсона. смотреть это http://en.wikipedia.org/wiki/Simpson%27s_rule Они дали правило, а также реализацию + точность, если у вас есть массивы xs и ys.

Надеюсь, это поможет, Саурабй

1 голос
/ 06 июля 2018

Наткнулся на это, казалось, другое возможное решение, поэтому я добавлю его:

library(geiger)
geiger:::.area.between.curves(x, f1, f2)
# x is the vector of x-axis values
# f1 the y-axis values for the first line
# f2 the y-axis values for the second line
1 голос
/ 24 октября 2011

Просто чтобы убедиться, что есть приемлемый ответ, но в основном суммируя предложения других людей:

'Математически', вам нужна область под кривой abs(blue - grey).

Эти значения (т. Е. Абсолютные различия) легко получить, и, как только вы их получите, вы можете использовать любой интеграционный метод (например, правило Симпсона или то, что предлагается в статье, на которую вы ссылаетесь), чтобы получить поверхность.

В качестве альтернативы, в некоторой степени похожей на @Saurabh, вы можете использовать тот факт, что синяя линия является пошаговой функцией (или нет?), А другая - прямой линией. Для этого вы суммируете все значения x, для которых либо синие и серые линии пересекаются, либо отображается новое значение (делается «шаг») в синей линии. Разделение области таким образом приведет только к треугольникам и трапециям, и вы можете просто взять абсолютное значение, прежде чем суммировать их все.

Даже если синяя линия не является простой пошаговой функцией, но все же состоит из прямых, это должно сработать, хотя теперь вам придется учитывать некоторые дополнительные случаи ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...