我有一些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)
在此之后,所有数据框变量的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。
答案 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准备好虚拟变量。希望这是有用的。