4

次の情報を含むデータ フレームにデータ セットがあります。

> head(rs1)
       dater adjStkPrice                optSym     expire strike   bid   ask unadjStkPrice daysLeft   pnl
1 2011-01-03      127.05 SPY   131221P00115000 2013-12-21    115 14.89 15.40        127.05     1083 319.5
2 2011-01-04      126.98 SPY   131221P00115000 2013-12-21    115 15.00 15.39        126.98     1082 328.4
3 2011-01-05      127.64 SPY   131221P00115000 2013-12-21    115 14.39 14.86        127.64     1081 287.2
4 2011-01-06      127.39 SPY   131221P00115000 2013-12-21    115 14.38 14.80        127.39     1080 278.7
5 2011-01-07      127.14 SPY   131221P00115000 2013-12-21    115 14.67 15.10        127.14     1079 300.2
6 2011-01-10      126.98 SPY   131221P00115000 2013-12-21    115 14.75 15.19        126.98     1076 303.4

パッケージのAmericanOptionImpliedVolatility関数を使用してインプライド ボラティリティを取得しようとしています。RQuantLib問題は、単一の値セットしかとらないように見えることです。

> rs1$impVol <- AmericanOptionImpliedVolatility("put", rs1$ask,
+ rs1$adjStkPrice, rs1$strike, .02, .05, rs1$daysLeft/ 365, .4)$impliedVol
Error in AmericanOptionImpliedVolatility.default("put", rs1$ask, rs1$adjStkPrice,  : 
  expecting a single value

これは関数のスポットだと思いますが、apply適切に使用しているかどうかはわかりません:

> rs1$impVol <- apply(rs1, 1, AmericanOptionImpliedVolatility("put", rs1$ask,
+ rs1$adjStkPrice, rs1$strike, .02, .05, rs1$daysLeft/ 365, .4)$impliedVol)
Error in AmericanOptionImpliedVolatility.default("put", rs1$ask, rs1$adjStkPrice,  : 
  expecting a single value

助言がありますか?

4

1 に答える 1

5

Vectorizeまたはを使用できますmapply

Vectorize(AmericanOptionImpliedVolatility)(
  type="put", value=15:16, underlying=130:131, 
  strike=115, dividendYield=.02, riskFreeRate=.05, maturity=1, 
  volatility=.1
)

mapply(
  AmericanOptionImpliedVolatility,
  type="put", value=15:16, underlying=130:131, 
  strike=115, dividendYield=.02, riskFreeRate=.05, maturity=1, 
  volatility=.1
)  

を使用する場合apply、その 3 番目の引数は関数にする必要があります。さらに、各行をベクトルに変換するため、一部の列に文字列が含まれている場合に問題が発生します。

行番号にも使用できますsapplyが、それは変装した単なるループであり、mapply.

sapply(
  seq_len(nrows(rs1)),
  function(i) AmericanOptionImpliedVolatility( 
    type="put", 
    value=rs1$ask[i],
   ... (add the other arguments)
  )
)
于 2012-04-09T06:26:19.257 に答える