构建多元回归模型会抛出错误:“Pandas数据转换为numpy dtype对象。使用np.asarray(data)检查输入数据.`

时间:2015-11-20 18:42:05

标签: python numpy pandas statsmodels

我有一些pandas数据帧,其中一些分类预测因子(即变量)为0& 1,和一些数字变量。当我适应这样的stasmodel时:

est = sm.OLS(y, X).fit()

它抛出:

Pandas data cast to numpy dtype of object. Check input data with np.asarray(data). 

我使用df.convert_objects(convert_numeric=True)

转换了DataFrame的所有dtypes

在此之后,所有数据框变量的dtypes都显示为int32或int64。但最后它仍显示dtype: object,如下所示:

4516        int32
4523        int32
4525        int32
4531        int32
4533        int32
4542        int32
4562        int32
sex         int64
race        int64
dispstd     int64
age_days    int64
dtype: object

这里4516,4523是变量标签。

有什么想法吗?我需要在数百个变量上构建一个多元回归模型。为此,我连接了3个pandas DataFrames,以提出用于模型构建的最终DataFrame。

4 个答案:

答案 0 :(得分:18)

如果X是您的数据框,请在运行模型时尝试使用.astype方法转换为float:

est = sm.OLS(y, X.astype(float)).fit()

答案 1 :(得分:10)

如果y(从属)和X都取自数据框,则输入: -

est = sm.OLS(y.astype(float), X.astype(float)).fit()

答案 2 :(得分:1)

这是因为您尚未为所有预测变量生成虚拟值步骤,所以如何对文字进行回归?这就是错误消息所表示的,它正在尝试转换为numpy有效条目。

只需回到您的管道并正确包含虚拟变量即可。

答案 3 :(得分:0)

正如Mário和Daniel所建议的那样,是的,这个问题是由于先前未将分类值转换为虚拟变量而引起的。

我遇到了这个问题,回顾了{strong> statsmodels 的“ Carseats”数据集的线性回归实验室StatLearning book,其中“ ShelveLoc”,“ US”和“ Urban”列为分类值,我假设导致您的数据集出现问题的分类值也是这种字符串。考虑到前面的内容,我将以此为例,因为您没有提供问题的数据框。

如“ ShelveLoc”,“ US”和“ Urban”归为绝对类别之前,我们开头是以下几列:

Index(['Sales', 'CompPrice', 'Income', 'Advertising', 'Population', 'Price',
       'ShelveLoc', 'Age', 'Education', 'Urban', 'US'],
      dtype='object')

在Python的简单代码行中,我将它们转换为分类值,并删除了带有“否”和“不良”标签的值(因为这是本书中的实验要求)。

carseats = pd.get_dummies(carseats, columns=['ShelveLoc', 'US', 'Urban'], drop_first = True)

这将返回包含以下列的数据框:

Index(['Sales', 'CompPrice', 'Income', 'Advertising', 'Population', 'Price',
       'Age', 'Education', 'ShelveLoc_Good', 'ShelveLoc_Medium', 'US_Yes',
       'Urban_Yes'],
      dtype='object')

仅此而已,您可以为OLS准备好虚拟变量。希望这是有用的。