我有一只大熊猫,我想从中估算每列的线性回归。但问题是,我的时间序列缺少值(nan)。例如,我做了这个
line={}
slope={}
for k,v in df.iteritems():
xm = np.ma.masked_array(df.index.values,mask=np.isnan(v)).compressed() #i used this to mask the nan values
x=np.arange(0,len(xm),1)
ym = np.ma.masked_array(v,mask=np.isnan(v)).compressed()#i used this to mask the nan values
if len(xm)>1 and len(ym)>1:
res = stats.theilslopes(ym,x, 0.90)
line[k]=res[1]+res[0]*x
问题是我排队的点数小于初始点数。如何确保即使由于纳米被忽略而用于回归的点数较少,我仍然有一个具有相同初始点数(读数)的回归线。例如,如果我的v最初由[45,42,47,nan,45,43,45]组成,那么获得的线将只有6个点而不是7个。我该如何解决这个问题?
答案 0 :(得分:1)
哦,所以你想插入NaN
,而不是忽略它们。如果使用线性插值进行插值,则会获得相同的回归,但是您可以获得尽可能多的点数。尝试:
df.reset_index(inplace=True) # This will make your index into a new column in your DataFrame.
df = df.interpolate()
这将使用插值填充df中的所有NaN
。然后尝试回归。为什么这么复杂的回归方法呢?复制粘贴df.head()
的输出并告诉我们您要回归的列。应该可以在大约2行代码中计算线性回归。