通过移除离群值来改善R2

时间:2018-09-24 19:53:53

标签: python python-3.x pandas numpy scikit-learn

我正在使用以下代码找出Linregress参数:

import numpy, scipy,pandas as pd
from scipy.optimize import curve_fit
from scipy.stats import linregress
import scipy.stats
import copy
df=pd.read_excel("S:/Python/Excel.xlsx")
df.head();
xyDataPairs = df[['x', 'y']].values.tolist();
df.groupby('Test Event',as_index=True)['x', 'y'].apply(linregress)
res= df.groupby('Test Event',as_index=True)['x', 'y'].apply(linregress);
print(res)
res.to_excel('result.xlsx')

由此我得到所有linregress参数(斜率,截距,R2,pvalue和stderror)

对我而言,挑战始于此:

我需要使用Python从数据集中删除离群值以改善R2(这将导致斜率发生相应的变化)。除去异常值后,我需要计算每个序列的修正的线性回归参数(斜率,截距,R2,pvalue和std误差)。

说,当不删除异常值时,R2 = 0.721,但是在删除异常值时,得出的R2为0.852

数据表如下:

Dataset

我每个序列(A,B和C)有10个数据点,需要删除每个序列中存在的异常值。离群值在数据集中以“黄色”突出显示。我还提供了已删除异常值的输出数据。

当我们删除这些异常值时,R2,斜率,截距等都会发生变化。

如何使用Python执行此操作?我们对此表示任何帮助。


我在Crossvalidate中询问,建议使用鲁棒回归方法进行此类分析。

这个问题我应该使用哪个python库/软件包?

1 个答案:

答案 0 :(得分:0)

说您有价值,您知道您想称呼异常值为“临界值”。

cutoff = 100 # this is your arbitrary outlier cutoff
df = df[df[y] < cutoff] 

这应该从数据集中删除所有异常值。