いくつかの列と行でデータが欠落している(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コーダーではありませんので、あなたが問題を解決することができれば感謝します(&解決策を提案します)。
ありがとうございます。
ありがとう、今私はついにこれが間違っていることを理解します。私はあなたが提案したものを試してみるでしょう –