17

I am trying to use Ordinary Least Squares for multivariable regression. But it says that there is no attribute 'OLS' from statsmodels. formula. api library. I am following the code from a lecture on Udemy The code is as follows:

import statsmodels.formula.api as sm
X_opt = X[:,[0,1,2,3,4,5]]
#OrdinaryLeastSquares
regressor_OLS = sm.OLS(endog = y, exog = X_opt).fit(

The error is as follows:

AttributeError                            Traceback (most recent call last)
<ipython-input-19-3bdb0bc861c6> in <module>()
      2 X_opt = X[:,[0,1,2,3,4,5]]
      3 #OrdinaryLeatSquares
----> 4 regressor_OLS = sm.OLS(endog = y, exog = X_opt).fit()

AttributeError: module 'statsmodels.formula.api' has no attribute 'OLS'
desertnaut
  • 57,590
  • 26
  • 140
  • 166
Shubham Trehan
  • 245
  • 1
  • 3
  • 8
  • you can check the version of `statsmodels`, is it >= 0.5.0? Something like `print (statsmodels.__version__)` – niraj Jun 04 '19 at 19:09
  • 4
    Use `import statsmodels.api as sm`. The `formula.api` now has only the formula interface to models which are lower case like `ols` – Josef Jun 04 '19 at 23:48

6 Answers6

29

Just for completeness, the code should look like this if statsmodels.version is 0.10.0:

import statsmodels.api as sm
X_opt = X[:,[0,1,2,3,4,5]]
#OrdinaryLeastSquares
regressor_OLS = sm.OLS(endog=y, exog=X_opt).fit()
chefer
  • 401
  • 3
  • 5
16

Use this import.

import statsmodels.api as sm
Max
  • 6,821
  • 3
  • 43
  • 59
Ankit Pal
  • 161
  • 1
  • 2
15

I have tried the above mentioned methods and while

import statsmodels.api as sm

the import works for me. When I run the next piece of code

X_opt = X[:, [0, 1, 2, 3, 4, 5]]
regressor_OLS = sm.OLS(endog=y, exog=X_opt).fit()

it gives me this error.

TypeError: ufunc 'isfinite' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

If you are getting the above mentioned error, you can solve it by specifying dtype for the np.array.

Replace

X_opt = X[:, [0, 1, 2, 3, 4, 5]]

with

X_opt = np.array(X[:, [0, 1, 2, 3, 4, 5]], dtype=float)
Matus Dubrava
  • 13,637
  • 2
  • 38
  • 54
3

This is the working solution that I tried today.
use this in the import

import statsmodels.api as sm

and your rest of the fix is mentioned below

X_opt = X[:, [0, 1, 2, 3, 4, 5]]
X_opt = X_opt.astype(np.float64)
regressor_OLS = sm.OLS(Y, X_opt).fit()

This should work because it did work for me.

Mubeen
  • 88
  • 8
2

Try this instead, worked for me:

import statsmodels.regression.linear_model as sm
0

As @Josef mentions in the comment, use ols() instead of OLS(), OLS() truly does not exist there.

GreatDuke
  • 214
  • 1
  • 10