statmodels OLS在python

时间:2018-11-14 19:16:20

标签: python python-3.x statsmodels sklearn-pandas

我正在尝试为statsmodel的OLS线性回归模型拟合一组功能。

我一次添加了一些功能。具有前两个功能,可以正常工作。但是当我继续添加新功能时,它给我一个错误。

Traceback (most recent call last):
  File "read_xml.py", line 337, in <module>
    model = sm.OLS(Y, X).fit()
...
  File "D:\pythonprojects\testproj\test_env\lib\site-packages\statsmodels\base\data.py", line 132, in _handle_constant
    if not np.isfinite(ptp_).all():
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''

所以我使用更改了输入类型

X = X.astype(float)

然后弹出另一个错误。

Traceback (most recent call last):
  File "read_xml.py", line 339, in <module>
    print(model.summary())
...
File "D:\pythonprojects\testproj\test_env\lib\site-packages\scipy\stats\_distn_infrastructure.py", line 1824, in sf
    place(output, (1-cond0)+np.isnan(x), self.badvalue)
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

我的代码如下。

new_df0 = pd.concat([df_lex[0], summary_df[0]], axis = 0, join = 'inner')
new_df1 = pd.concat([df_lex[1], summary_df[1]], axis = 0, join = 'inner')
data = pd.concat([new_df0, new_df1], axis = 1)
print(data.shape)
X = data.values[0:6,:]
Y = data.values[6,:]
Y = Y.reshape(1,88)
X = X.T
Y = Y.T
X = X.astype(float)
model = sm.OLS(Y, X).fit()
predictions = model.predict(X)
print(model.summary())

model = sm.OLS(Y,X).fit()中触发的第一个错误 model.summary()

中触发了第二个错误

但是具有其他一些功能,没有错误。

new_df0 = pd.concat([df_len[0], summary_df[0]], axis = 0, join = 'inner')
new_df1 = pd.concat([df_len[1], summary_df[1]], axis = 0, join = 'inner')

data = pd.concat([new_df0, new_df1], axis = 1)
print(data.shape)
X = data.values[0:2,:]
Y = data.values[2,:]
Y = Y.reshape(1,88)
X = X.T
Y = Y.T
X = X.astype(float)
print(X.shape)
print(Y.shape)

model = sm.OLS(Y, X).fit()
predictions = model.predict(X)
print(model.summary())

当我只有两个功能时,它可以工作。但是,当添加了6个不同的功能时,就会出现错误。我主要关心的是了解错误。因为我已经阅读了与python中的情节相关的类似问题。但这是在内置函数中触发的,而不是在我的代码中触发的。任何有关调试的建议都将受到高度赞赏。

3 个答案:

答案 0 :(得分:1)

检查X_opty的类型。由于计算精度的原因,可能是float64。因此,尝试:

X_opt = X_opt.astype(np.float64)
y = y.astype(np.float64)

我遇到了同样的错误,并以这种方式解决了。

答案 1 :(得分:0)

Y.astype(float)

成功了!

答案 2 :(得分:-1)

请使用

model=sm.OLS(df.Y,df.X, missing='drop').fit()

在某些变量中似乎有一个nan值。默认情况下,不丢失是任何原因,可能是 的原因。