2017-08-07 24 views
2

いくつかの列と行でデータが欠落している(NaN)約7500個のデータポイントを含むデータセットで重回帰分析を実行する際に問題があります。各行には少なくとも1つのNaN値があります。一部の行にはNaN値のみが含まれます。Statsmodelを使用した複数のOLS回帰ValueError:IDなしのゼロサイズ配列から最大の縮小操作

私は回帰分析にOLS Statsmodelを使用しています。 (私はこれについて間違っているかもしれないが)私は、ある程度データセットを歪める私のデータセットに欠けているデータを帰さなければならないので、OLS回帰を実行するためにScikit Learnを使わないようにしています。

が私のデータセットは、次のようになります。 KPI

これは私がやったことである(ターゲット変数がKP6で、予測変数である残りの変数):

est2 = ols(formula = KPI.KPI6.name + ' ~ ' + ' + '.join(KPI.drop('KPI6', axis = 1).columns.tolist()), data = KPI).fit() 

そして、それはValueErrorをを返します。ゼロアイデンティティを持たない最大サイズのアレイから最大の縮小動作までの範囲である。

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-207-b24ba316a452> in <module>() 
     3 #test = KPI.dropna(how='all') 
     4 #test = KPI.fillna(0) 
----> 5 est2 = ols(formula = KPI.KPI6.name + ' ~ ' + ' + '.join(KPI.drop('KPI6', axis = 1).columns.tolist()), data = KPI).fit() 
     6 print(est2.summary()) 

/Users/anhtran/anaconda/lib/python3.6/site-packages/statsmodels/base/model.py in from_formula(cls, formula, data, subset, drop_cols, *args, **kwargs) 
    172      'formula': formula, # attach formula for unpckling 
    173      'design_info': design_info}) 
--> 174   mod = cls(endog, exog, *args, **kwargs) 
    175   mod.formula = formula 
    176 

/Users/anhtran/anaconda/lib/python3.6/site-packages/statsmodels/regression/linear_model.py in __init__(self, endog, exog, missing, hasconst, **kwargs) 
    629     **kwargs): 
    630   super(OLS, self).__init__(endog, exog, missing=missing, 
--> 631         hasconst=hasconst, **kwargs) 
    632   if "weights" in self._init_keys: 
    633    self._init_keys.remove("weights") 

/Users/anhtran/anaconda/lib/python3.6/site-packages/statsmodels/regression/linear_model.py in __init__(self, endog, exog, weights, missing, hasconst, **kwargs) 
    524    weights = weights.squeeze() 
    525   super(WLS, self).__init__(endog, exog, missing=missing, 
--> 526         weights=weights, hasconst=hasconst, **kwargs) 
    527   nobs = self.exog.shape[0] 
    528   weights = self.weights 

/Users/anhtran/anaconda/lib/python3.6/site-packages/statsmodels/regression/linear_model.py in __init__(self, endog, exog, **kwargs) 
    93  """ 
    94  def __init__(self, endog, exog, **kwargs): 
---> 95   super(RegressionModel, self).__init__(endog, exog, **kwargs) 
    96   self._data_attr.extend(['pinv_wexog', 'wendog', 'wexog', 'weights']) 
    97 

/Users/anhtran/anaconda/lib/python3.6/site-packages/statsmodels/base/model.py in __init__(self, endog, exog, **kwargs) 
    210 
    211  def __init__(self, endog, exog=None, **kwargs): 
--> 212   super(LikelihoodModel, self).__init__(endog, exog, **kwargs) 
    213   self.initialize() 
    214 

/Users/anhtran/anaconda/lib/python3.6/site-packages/statsmodels/base/model.py in __init__(self, endog, exog, **kwargs) 
    61   hasconst = kwargs.pop('hasconst', None) 
    62   self.data = self._handle_data(endog, exog, missing, hasconst, 
---> 63          **kwargs) 
    64   self.k_constant = self.data.k_constant 
    65   self.exog = self.data.exog 

/Users/anhtran/anaconda/lib/python3.6/site-packages/statsmodels/base/model.py in _handle_data(self, endog, exog, missing, hasconst, **kwargs) 
    86 
    87  def _handle_data(self, endog, exog, missing, hasconst, **kwargs): 
---> 88   data = handle_data(endog, exog, missing, hasconst, **kwargs) 
    89   # kwargs arrays could have changed, easier to just attach here 
    90   for key in kwargs: 

/Users/anhtran/anaconda/lib/python3.6/site-packages/statsmodels/base/data.py in handle_data(endog, exog, missing, hasconst, **kwargs) 
    628  klass = handle_data_class_factory(endog, exog) 
    629  return klass(endog, exog=exog, missing=missing, hasconst=hasconst, 
--> 630     **kwargs) 

/Users/anhtran/anaconda/lib/python3.6/site-packages/statsmodels/base/data.py in __init__(self, endog, exog, missing, hasconst, **kwargs) 
    77 
    78   # this has side-effects, attaches k_constant and const_idx 
---> 79   self._handle_constant(hasconst) 
    80   self._check_integrity() 
    81   self._cache = resettable_cache() 

/Users/anhtran/anaconda/lib/python3.6/site-packages/statsmodels/base/data.py in _handle_constant(self, hasconst) 
    129    # detect where the constant is 
    130    check_implicit = False 
--> 131    const_idx = np.where(self.exog.ptp(axis=0) == 0)[0].squeeze() 
    132    self.k_constant = const_idx.size 
    133 

ValueError: zero-size array to reduction operation maximum which has no identity 

は、私はいくつかのNaNを含む(すなわちKPI6)エラーが原因ターゲット変数に生じたことが疑わので、私はこのようKPI6 = NaNにしてすべての行をドロップしようとしたが、それでも問題が解決しない:

KPI.dropna(subset = ['KPI6']) 

Iはまた、唯一のNaN値を含むすべての行をドロップしようとしたが、それでも問題が解決しない:

KPI.dropna(how = 'all') 

を私は上記の両方のステップを合わせ、それでも問題が解決しません。このエラーを排除する唯一の方法は、欠落しているデータを実際に何か(例えば0、平均、中央値など)で置き換えることです。しかし、元のデータに対してOLS回帰を実行したいので、このメソッドをできるだけ避けることを望んでいます。

OLS回帰は、プレディクタ変数としていくつかの変数のみを選択しようとしたときにも機能しますが、これもやはり私がやりたいことではありません。私は、予測変数としてKPI6以外のすべての変数を含めることにします。

これに解決策はありますか?私は実際にこれを1週間にわたって強調してきました。どんな助けもありがとうございます。私はプロのPythonコーダーではありませんので、あなたが問題を解決することができれば感謝します(&解決策を提案します)。

ありがとうございます。

答えて

0

数式を使用するときの既定の行方不明の処理は、少なくとも1ナノを含む行を削除することです。各行に1ナノが含まれている場合、観測値は残っていません。トレースバックの末尾にあるのは、ValueError: zero-size arrayということだと思います。

全体的に十分なデータがある場合は、各変数の欠損値を反復的に代入するMICEを使用して代入と推定を試すことができます。

+0

ありがとう、今私はついにこれが間違っていることを理解します。私はあなたが提案したものを試してみるでしょう –

関連する問題