我正在尝试使用外推法获取一些缺失数字的数据,并且确实很挣扎。
以下是一些期权数据,行使价格为指数,波动率为MidVol
。我要尝试做的是找到MidVol
来查找未列出的各种警示,例如2000.0、3000.0或30000.0或40000.0。
MidVol CallDelta PutDelta
4000.0 0.757832 0.910918 -0.089082
5000.0 0.739650 0.844523 -0.155477
6000.0 0.742915 0.766228 -0.233772
7000.0 0.733530 0.685637 -0.314363
8000.0 0.753219 0.610900 -0.389100
9000.0 0.750366 0.539006 -0.460994
10000.0 0.756793 0.476428 -0.523572
11000.0 0.774761 0.426470 -0.573530
12000.0 0.781004 0.379058 -0.620942
14000.0 0.795634 0.303317 -0.696683
16000.0 0.812305 0.247911 -0.752089
18000.0 0.831367 0.207874 -0.792126
20000.0 0.852848 0.179159 -0.820841
我已经使用poly1d
和interp1d
绘制了当前数据的曲线,由于interp1d
是唯一似乎具有外推功能的曲线,您会认为将是一个很好的使用。我对该曲线的代码是:
curve = interp1d(df.index, df['MidVol'], kind='cubic', fill_value='extrapolate')
然后将使用以下代码来计算丢失的警告:
missing = [20000, 22000,24000,26000,28000,30000]
extrap = [f(x).item() for x in sample]
但是,当我然后尝试外推并获取df
中不在的点的数据时,我得到了这样一个笑话:
首先,有人知道为什么外推失败了吗? 30000.0打击的MidVol
应该约为0.95。
此后,我偶然发现scipy.splev
实际上比interp1d
更适合数据。我使用的代码是:
ipo = spi.splrep(df.index, df['MidVol'], k=5, s=6)
iy = spi.splev(df.index, ipo)
我还注意到文档中有一个ext
变量。这是否意味着我可以用它来推断?如果可以的话,有谁能像我上面用if ext=0, return the extrapolated value.
一样解释我的操作方式,然后为每个丢失的罢工计算missing = [20000, 22000,24000,26000,28000,30000]
?
如果任何人都可以阐明我的任何一个问题(为什么MidVol
不能正确推断或如何用interp1d
推断),我将非常感激。
答案 0 :(得分:0)
您可以使用make_interp_spline
或CubicSpline
bc_type参数来控制外推模式。例如。您可以使用bc_type =“ natural”强制进行线性外推。