Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Scipy.interpolate.splev进行外推以填充缺少的数据Python/Pandas_Python_Pandas_Scipy_Extrapolation - Fatal编程技术网

使用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'
,这些外推曲线看起来像抛物线,正如您所要求的那样!哦,很抱歉,很公平,这是我从这里得到的答案,生成的图表看起来正是我想要的。我改为“立方体”,图形更糟。我是否应该使用另一种“类型”?