使用R的PostgreSQL中的非线性回归模型

时间:2010-05-28 05:07:24

标签: postgresql r statistics data-analysis

背景

我在1900年到2009年之间有加拿大所有气候数据(温度,降水,积雪深度)。我写了一个基本网站,最简单的页面允许用户选择类别和城市。然后他们得到一个非常简单的报告(没有参数和计算部分):

Web应用程序的主要目的是提供简单的用户界面,以便公众可以以有意义的方式探索数据。 (数字列表对公众没有意义,也不是提供too many inputs的网站。)该应用程序的第二个目的是为气候学家和其他科学家提供更深入的数据查看方式。 (当然,使用过多的输入。)

工具集

数据库是PostgreSQL,安装了R(大部分)。报告使用iReport编写,并使用JasperReports生成。

糟糕的模特选择

目前,线性回归模型应用于日常数据的年平均值。线性回归模型在PostgreSQL函数中计算如下:

SELECT 
  regr_slope( amount, year_taken ),
  regr_intercept( amount, year_taken ),
  corr( amount, year_taken )
FROM
  temp_regression
INTO STRICT slope, intercept, correlation;

使用以下结果将结果返回给JasperReports:

SELECT
  year_taken,
  amount,
  year_taken * slope + intercept,
  slope,
  intercept,
  correlation,
  total_measurements
INTO result;

JasperReports使用以下参数化分析函数调用PostgreSQL:

SELECT
  year_taken,
  amount,
  measurements,
  regression_line,
  slope,
  intercept,
  correlation,
  total_measurements,
  execute_time
FROM
  climate.analysis(
    $P{CityId},
    $P{Elevation1},
    $P{Elevation2},
    $P{Radius},
    $P{CategoryId},
    $P{Year1},
    $P{Year2}
  )
ORDER BY year_taken

这不是一个最佳解决方案,因为它给人的假象是气候正以缓慢但稳定的速度变化。

问题

使用带有两个参数的函数(例如,年[X]和金额[Y]),例如PostgreSQL的regr_slope

  • 什么是更好的回归模型?
  • CPAN-R套件提供哪些型号? (可安装,最好使用apt-get。)
  • 如何在PostgreSQL函数中调用R函数?

如果不存在此类功能:

  • 我应该尝试获得哪些参数可以产生合适的函数?
  • 您如何推荐显示最佳拟合曲线?

请注意,这是一个供公众使用的网络应用。如果分析数据的唯一方法是来自R shell,那么目的就被打败了。 (我知道到目前为止我看过的大多数R函数都不是这种情况。)

谢谢!

3 个答案:

答案 0 :(得分:3)

我认为自回归不是你想要的。非线性不是你想要的,因为它意味着不连续的数据。你有连续的数据,它可能不是一条直线。如果您只是想象,特别是如果您不知道形状应该是什么,那么黄土就是您想要的。

如果您只是使用ggplot2绘制数据,那么很容易在线周围获得置信区间带。

qplot(x, y, data = df, geom = 'point') + stat_smooth()

这将是一个很好的情节。

如果你想在直线R中使用更简单的图形。

plot(x, y)
lines(loess.smooth(x,y))

答案 1 :(得分:3)

令人敬畏的pl/r包允许您在PostgreSQL中运行R作为过程语言。有一些问题因为R喜欢用向量来考虑数据而不是RDBMS所做的。它仍然是一个非常有用的包,因为它为您提供了PostgreSQL 中的 R,为您节省了一些架构的往返。

并且pl/rapt-get - 能够为你服务,因为它已经成为Debian / Ubuntu的一部分了一段时间。从apt-cache show postgresql-8.4-plr开始(正在测试,其他版本/口味也有)。

至于适当的建模:这是一个完全不同的球赛。对于非参数化的东西,loess是一个公平的建议,你可能也想要某种动态模型,ARMA / ARIMA或滞后回归。鉴于该主题的政治化程度如何,建模的选择非常关键。

答案 2 :(得分:1)

我可以提出不同的解决方案吗?只需使用PostgreSQL提取数据,将其提供给某些R脚本,最后显示结果。只要用户不必处理它,R脚本就可以像你想要的那样复杂。

您可能需要查看rapache,这是一个允许在网页中运行R脚本的Apache模块。 几个视频说明了它的用途:

特别检查San Francisco Estuary Institue Web Query Tool如何允许用户与参数进行交互。

至于回归,我不是专家,所以我可能会说一些非常愚蠢的东西......但不会像LOESS回归这样的东西可以吗?