14532


上場会社の指標の数値から上場企業全体における偏差値を重み付きで計算しているのですが、処理に時間がかなりかかってしまいます。

Postgresの機能を使った標準偏差を求める方法は以前教えていただき

[code]

    company = Company.select('stddev_pop(price) as stddev')
    company.stddev
    
[/code]

で求められることはわかったのですが、重み付きの場合はどうやって求めれかよいかわかりませんでした。  
重みには時価総額を利用しており `Company`モデルの`market_cap`として保存しています。

計算方法はこちらにある公式を少し変更して単純にRubyで実装しています。

<https://stats.stackexchange.com/questions/6534/how-do-i-calculate-a-weighted-
standard-deviation-in-excel>

そもそも重み付き標準偏差をデータベースの機能として使えるかどうか自体がわかりませんでした。  
やり方を知ってる方がいましたらどうか教えて下さい。

できればRailsと統合された方法を使いたいのですが、SQL文を直接発行しないと無理なのであればそちらでも構わないので知りたいです。


CC BY-SA 3.0
2015-08-14T18:30:28.313
14435
2015-08-17T12:55:07.337
2017-04-13T12:44:19.937
-1
3271
question
ruby-on-rails postgresql
重み付き標準偏差をRailsからPostgresqlを使って求める方法


Rubyのことは分かりませんが、SQLとしては多くとも2回に分ければ実現可能です。

まず重み付き平均を求めます。

[code]

    SELECT SUM(market_cap * price) / SUM(market_cap)
      FROM Company
    
[/code]

上のSQLで求めた値を`:mean`とすると、重み付き標準偏差は

[code]

    SELECT SUM(market_cap * (price - :mean)) * COUNT(*)
         / (SUM(market_cap) * (COUNT(*) - 1))
      FROM Company
    
[/code]

の平方根です。


CC BY-SA 3.0
2015-08-17T12:55:07.337
14532
2015-08-17T12:55:07.337
5750
14435
answer