6

モデル化されたスプレッドと観測されたスプレッドの間の平均二乗誤差(パッケージmse()内のが使用される場合があります)を最小限に抑えたいと思います。hydroGOF関数は次のように定義されます。

    KV_CDS <- function(Lambda, s, sigma_S){
     KV_CDS = (Lambda * (1 + s)) / exp(-s * sigma_S) - Lambda^2)
}

目標は、mseLambdaをKV_CDS関数の自由パラメーターのままにして、KV_CDSとCの間を最小化することです。

df <- data.frame(C=c(1,1,1,2,2,3,4),
                 Lambda=c(0.5),s=c(1:7),
                 sigma_S=c(0.5,0.4,0.3,0.7,0.4,0.5,0.8),
                 d=c(20,30,40,50,60,70,80), 
                 sigma_B=0.3, t=5, Rec=0.5, r=0.05)
4

2 に答える 2

2

この特定のケースの平均二乗誤差を計算する最小化する関数を作成する必要があります。例:

calcMSE <- function (Lambda) 
{
        d <- df # best not to use -df- as a variable because of confusion with
                # degrees of freedom
        err <- d$C - KV_CDS(Lambda, d$s, d$sigma_S, d$d, d$sigma_B, d$t, d$Rec, d$r)
        sum(err^2) / length(err)
}

...次にoptimize()、たとえば次のように使用できます(-の可能な値の範囲を指定する必要があります。Lambdaこれは、実際には単なる変数である場合に関数である可能性があることを意味するため、ちなみに理想的な名前ではありません)。

optimize(calcMSE,c(0,1))

pbivnormインストールしていなかったため、完全なテストを行うことができませんでしたが、これで十分にテストできるはずです。

于 2013-02-28T19:46:23.843 に答える
1

あなたのサイモンのおかげで、私は解決策に到達しました:

  d <- df

  TestMSE <- function(LR)
    {

     D <- KV_CDS(LR, d$s, d$sigma_s, d$D, d$sigma_B, d$t, d$Rec, d$r)
      mse(d$C, D)
     }

  optimize(TestMSE,lower = 0.1, upper =1.5)

また:

TestMSE2 <- function(LR)
    {
 D <- KV_CDS(LR, d$s, d$sigma_s, d$D, d$sigma_B, d$t, d$Rec, d$r)
      mean((d$C- D)^2)
     }

  optimize(TestMSE2,lower = 0.1, upper =1.5)

助けてくれてありがとう!

于 2013-03-01T13:42:57.037 に答える