使用Scipy.interpolate.splev进行外推以填充缺少的数据Python/Pandas
我试图用外推法来获得一些缺失数字的数据,我真的很挣扎 以下是一些期权数据,以履约价格为指数,波动率为使用Scipy.interpolate.splev进行外推以填充缺少的数据Python/Pandas,python,pandas,scipy,extrapolation,Python,Pandas,Scipy,Extrapolation,我试图用外推法来获得一些缺失数字的数据,我真的很挣扎 以下是一些期权数据,以履约价格为指数,波动率为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.766
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='extraction')
然后将使用以下代码计算缺失的罢工:
missing = [20000, 22000,24000,26000,28000,30000]
extrap = [f(x).item() for x in sample]
然而,当我试图推断并获取不在df
中的点的数据时,我得到了一个笑话:
首先,有人知道为什么外推法失败得很惨吗?30000.0次罢工的中期产量应该在0.95左右
此后,我偶然发现了scipy.splev
,它实际上比我认为的interp1d
更适合数据。我使用的代码是:
ipo = spi.splrep(df.index, df['MidVol'], k=5, s=6)
iy = spi.splev(df.index, ipo)
我还注意到文档中有一个ext
变量,它说如果ext=0,则返回外推值。
。这是不是意味着我可以用这个来推断?如果是这样的话,有谁能解释一下我是如何做到这一点的,就像我在上面用missing=[20000,2200024000260002800030000]
做的那样,然后计算每个缺失的击键的MidVol
如果有人能解释我的任何一个问题(为什么
interp1d
不能正确外推,或者如何使用splev
外推),我将非常感激。您可以通过make\u interp\u spline
或CubicSpline
bc\u类型参数多少控制外推模式。例如,您可以使用bc_type=“natural”强制进行线性外推 “首先,有人知道为什么外推失败得很惨吗?”您使用了参数kind='quadratic'
,这些外推曲线看起来像抛物线,正如您所要求的那样!哦,很抱歉,很公平,这是我从这里得到的答案,生成的图表看起来正是我想要的。我改为“立方体”,图形更糟。我是否应该使用另一种“类型”?