Я разработал систему в R для отображения больших наборов данных, полученных от ветровых турбин. Я сейчас портирую процесс на Java. Результаты, которые я получаю между двумя системами, противоречивы.
Как показано ниже:
- Набор данных сначала отображается с использованием R, а затем с использованием JFreeChart.
- Красная линия на обоих графиках соответствует моим соответствующим расчетам на каждом языке (которые подробно описаны ниже).
- Коричневая пунктирная линия в # 1 соответствует синей линии в # 2, здесь нет никаких расхождений, они предоставлены для справки
- Заштрихованная область представляет точки данных, серые в # 1 и красные в # 2.
Я могу объяснить расхождения между (красными) рассчитанными линиями, и это связано с тем, что я использую разные методы расчета.
В R данные обрабатываются следующим образом, я написал этот код с небольшой помощью и не знаю, что здесь происходит (но, эй, это работает).
df <- data.frame(pwr = pwr, spd = spd)
require(mgcv)
mod <- gam(pwr ~ s(spd, bs = "ad", k = 20), data = df, method = "REML")
summary(mod)
x_grid <- with(df, data.frame(spd = seq(min(spd) + 0.0001, maxi, length=100)))
pred <- predict(mod, x_grid, se.fit = TRUE)
x_grid <- within(x_grid, fit <- pred$fit)
lines(fit ~ spd, data = x_grid, col = "red", lwd = thickLineWidth)
В Java (SQL Infact) я использую метод бинов для вычисления среднего значения каждые 0,5 на оси X. Полученные данные строятся с использованием org.jfree.chart.renderer.xy.XYSplineRenderer
. Я не знаю слишком много о том, как отображается линия.
SELECT
ROUND( ROUND( x_data * 2 ) / 2, 1) AS x_axis, # See /5445670/funktsii-okrugleniya-mysql
AVG( y_data ) AS y_axis
FROM
table
GROUP BY
x_axis
Мой взгляд на разницу между двумя графиками:
- Наличие единственного выброса в 18 на оси x (наиболее заметного на графике R), по-видимому, оказывает огромное влияние на форму кривой.
- Даже между 5 и 15 по оси x кажется, что линия в графе R более непрерывна, она не меняет траекторию так же легко, как в Java.
- «Кратер», видимый в 18 на оси Х Java, должен «насыпать» каждую его сторону, я полагаю, это связано с полиномиальными эффектами в системе рендеринга.
Это то, что я хотел бы устранить.
Итак, чтобы понять разницу между двумя графиками, у меня есть несколько вопросов:
- Что именно происходит в моем сценарии R?
- Как я могу, или я хочу перенести тот же процесс на мой Java-код?
- Может кто-нибудь объяснить систему сплайнов, используемую JFreeCharts, есть ли другая?