1

バックグラウンド

PostgreSQL データベースは PL/R を使用して R 関数を呼び出します。スピアマンの相関を計算するための R 呼び出しは次のようになります。

cor( rank(x), rank(y) )

また、R では、当てはめられた一般化加法モデル (GAM) の単純な計算:

data.frame( x, fitted( gam( y ~ s(x) ) ) )

xこれは 1900 年から 2009 年までの年を表し、その年のy平均測定値 (最低気温など) です。

問題

次の図に示すように、近似傾向線 (GAM を使用) はかなり正確です。

問題は、相関関係 (左下に表示) が、モデルがデータにどの程度適合しているかを正確に反映していないことです。

考えられる解決策

相関の精度を向上させる 1 つの方法は、ビニングされたデータに対して二乗平均平方根誤差 (RMSE) 計算を使用することです。

質問

Q.1. ビニングされたデータに RMSE 計算を実装して、R 言語で GAM の測定値への適合の相関関係 (0 と 1 の間) を取得するにはどうすればよいでしょうか?

Q.2. GAM のデータへの適合の精度を見つけるためのより良い方法はありますか? もしそうなら、それは何ですか (例えば、二乗平均平方根偏差)?

試行された解決策 1

  1. 観測量とモデル (GAM) 量を使用して PL/R 関数を呼び出します。
    correlation_rmse := climate.plr_corr_rmse( v_amount, v_model );
  2. 次のように定義plr_corr_rmseします (ここでo、 とmは観測データとモデル化データを表します)。
    CREATE OR REPLACE FUNCTION climate.plr_corr_rmse(
    o double precision[], m double precision[])
    RETURNS double precision AS
    $BODY$
    sqrt( mean( o - m ) ^ 2 )
    $BODY$
    LANGUAGE 'plr' VOLATILE STRICT
    COST 100;
    

o - m間違っています。mean5 つのデータ ポイントごとにを計算して、両方のデータ セットをビンに入れたいと思います(最大で 110 のデータ ポイントがあります)。例えば:

omean <- c( mean(o[1:5]), mean(o[6:10]), ... )
mmean <- c( mean(m[1:5]), mean(m[6:10]), ... )

次に、RMSE の計算を次のように修正します。

sqrt( mean( omean - mmean ) ^ 2 )

適切な数のビンで任意の長さのベクトルを計算するにはどうすればよいでしょうかc( mean(o[1:5]), mean(o[6:10]), ... )(たとえば、5 は 67 回の測定だけでは理想的ではない可能性があります)。

histここにはふさわしくないと思いますよね?

試みられた解決策 2

次のコードは問題を解決しますが、リストの最後からデータ ポイントを削除します (リストを 5 で割り切れるようにするため)。数字の「5」は魔法のようなものなので、この解決策は理想的ではありません。

while( length(o) %% 5 != 0 ) {
  o <- o[-length(o)]
}

omean <- apply( matrix(o, 5), 2, mean )

他にどのようなオプションがありますか?

前もって感謝します。

4

1 に答える 1

2

あなたはこう言います:

問題は、相関関係 (左下に表示) が、モデルがデータにどの程度適合しているかを正確に反映していないことです。

適合値と測定値の間の相関を計算できます。

cor(y,fitted(gam(y ~ s(x))))

データをビン化する理由はわかりませんが、次のようにすることができます。

mean.binned <- function(y,n = 5){
  apply(matrix(c(y,rep(NA,(n - (length(y) %% n)) %% n)),n),
        2,
        function(x)mean(x,na.rm = TRUE))
}

少し見栄えが悪いですが、長さがビニング長の倍数ではないベクトルを処理する必要があります(例では5)。

あなたは次のようにも言います。

相関の精度を向上させる 1 つの方法は、ビニングされたデータに対して二乗平均平方根誤差 (RMSE) 計算を使用することです。

私はあなたがこれで何を意味するのか理解できません。相関は、平均二乗誤差を決定する際の要因です。たとえば、Murphy (1988 年、Monthly Weather Review、v. 116、pp. 2417-2424)の方程式 10 を参照してください。しかし、あなたが何を意味するのか説明してください。

于 2010-06-19T12:32:51.647 に答える