单表MySQL协方差计算

标签 mysql sql covariance

我有一个包含以下架构的金融交易 MySQL 数据库:

+-----------------+---------------------+------+-----+---------+-------+
| Field           | Type                | Null | Key | Default | Extra |
+-----------------+---------------------+------+-----+---------+-------+
| symbol_id       | tinyint(3) unsigned | YES  | MUL | NULL    |       |
| timestamp       | timestamp(6)        | YES  | MUL | NULL    |       |
| buy_sell        | char(1)             | YES  |     | NULL    |       |
| price           | decimal(10,6)       | YES  | MUL | NULL    |       |
+-----------------+---------------------+------+-----+---------+-------+

有 200 个唯一的 symbol_id。最终,我希望能够计算所有这些货币对价格的运行(随时间变化)协方差。 最初我可以满足于只计算一对的协方差,然后我可以迭代。

为了计算协方差,我需要两个长度相等的数组(在本例中为 price)。我正在努力解决如何将其编写为单个查询的问题,并避免让所有 返回的记录供我在本地计算协方差。

这是我试图在两个-SQL 查询中完成的:

SELECT
(AVG(price1*price2) - AVG(price1)*AVG(price2)) as covar
FROM data

SELECT price AS price1 WHERE HOUR(timestamp)=1 AND symbol_id=1 LIMIT(MIN(COUNT(price1,price2)))
SELECT price AS price2 WHERE HOUR(timestamp)=1 AND symbol_id=2 LIMIT(MIN(COUNT(price1,price2)))

first 语句采用两个等长数组 price1price2 并计算协方差。 第二个语句是选择两种不同类型的语句,它们都发生在交易的第一个小时内,并将返回值限制为相等长度。

以我有限的 SQL 知识,我无法理解如何组合这些查询。任何帮助深表感谢。 最终能够运行一个查询来计算特定时间 block 的成对协方差会很不错。

最佳答案

我在这里有点困惑。协方差旨在根据同时收集的数据进行计算。 (就像同时进行的两次测量一样。)(参见例如 http://www.mathworks.com/matlabcentral/newsreader/view_thread/134856 处的阅读答案)

使用 LIMIT 子句会丢失有值(value)的数据,这会影响准确性。另外,我对此不确定,但我认为 LIMIT 可能会在不同时间返回不同的行,因此您的计算可能不确定。

如果您按小时计算协方差,这意味着您将一小时内发生的价格视为相同的度量,因此我建议您根据该小时内的平均价格计算协方差。

如果您没有将一小时内的价格视为同一测量的一部分,那么您就会遇到数据缺失问题,这意味着当价格 1 发生时您缺少价格 2 的数据,反之亦然。 (参见例如 https://stats.stackexchange.com/questions/20457/is-it-possible-to-compute-a-covariance-matrix-with-unequal-sample-sizes )

关于单表MySQL协方差计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17196716/

相关文章:

sql - 当 udf 包含在 "WHERE...IN"子句中时出现奇怪的错误

.NET SqlCommand - 在内联查询中查找参数(正则表达式?)

generics - 为什么示例不能编译,也就是(co-、contra- 和 in-)方差如何工作?

python - numpy.cov() 返回意外的输出

r - 如何运行控制 R 中多个变量的多重 t 检验或方差分析?

php - 比较表中的内容

android - 使用mysql估计表大小

mysql - 如何对 mysql 中的串联结果进行 group_concat

javascript - php代码从多选列表框中获取计数并存储在数据库中

php - 评论删除按钮不起作用