4

背景

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

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

工具集

该数据库是安装了 R(大部分)的 PostgreSQL。报告使用 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 函数都不是这种情况。)

谢谢!

4

3 回答 3

3

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

如果您仅使用 ggplot2 绘制数据,也很容易在该线周围获得一个置信区间带。

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

这将是一个很好的情节。

如果您想在直 R 中绘制更简单的图形。

plot(x, y)
lines(loess.smooth(x,y))
于 2010-05-28T07:45:02.047 回答
3

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

pl/r对你来说是apt-get-able,因为它已经成为 Debian / Ubuntu 的一部分。从apt-cache show postgresql-8.4-plr(即在测试中,其他版本/口味也有)开始。

至于合适的造型:那是完全不同的球赛。loess是对非参数的公平建议,您可能还需要某种动态模型,无论是 ARMA/ARIMA 还是滞后回归。考虑到这个话题的政治化程度,建模的选择非常关键。

于 2010-05-28T11:41:12.393 回答
1

我可以提出不同的解决方案吗?只需使用 PostgreSQL 提取数据,将其输入到一些 R 脚本中,最后显示结果。只要用户不必处理它,R 脚本就可以随心所欲地复杂。

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

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

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

于 2010-05-28T05:43:06.883 回答