Python 构建多元回归模型时抛出错误:`Pandas数据强制转换为对象的numpy数据类型。使用np.asarray(数据)检查输入数据`
我有一个数据框架,其中一些分类预测值(即变量)为0和1,还有一些数值变量。当我将其安装到stasmodel时,如:Python 构建多元回归模型时抛出错误:`Pandas数据强制转换为对象的numpy数据类型。使用np.asarray(数据)检查输入数据`,python,numpy,pandas,statsmodels,Python,Numpy,Pandas,Statsmodels,我有一个数据框架,其中一些分类预测值(即变量)为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\u对象(convert\u numeric=True) 在此之后,所有数据帧变量的数据类型显示为int32或int64。但最
est = sm.OLS(y, X).fit()
它抛出:
Pandas data cast to numpy dtype of object. Check input data with np.asarray(data).
我使用df.convert\u对象(convert\u numeric=True)
在此之后,所有数据帧变量的数据类型显示为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个熊猫数据帧,以得到用于模型构建的最终数据帧 如果X是您的数据帧,请尝试在运行模型时使用
.astype
方法将其转换为float:
est = sm.OLS(y, X.astype(float)).fit()
如果y(从属)和X均取自数据帧,则键入cast(强制转换):-
est = sm.OLS(y.astype(float), X.astype(float)).fit()
这是因为您尚未生成所有预测值的伪值步骤,因此如何在文字上进行回归?这就是错误消息所说的,它正试图转换为numpy有效条目
只需回到您的管道并正确地包含虚拟变量。正如Mário和Daniel所建议的,是的,问题是由于以前没有将分类值转换为虚拟变量 我遇到了这个问题,正在审查来自statsmodels的“Carseats”数据集的线性回归实验室,其中列“ShelveLoc”、“US”和“Urban”是分类值,我假设在您的数据集中引起问题的分类值也是与此类似的字符串。考虑到前面的问题,我将以此为例,因为您没有为问题提供数据帧。 如“ShelveLoc”、“US”和“Urban”之前所述,我们在开头的专栏如下:
Index(['Sales', 'CompPrice', 'Income', 'Advertising', 'Population', 'Price',
'ShelveLoc', 'Age', 'Education', 'Urban', 'US'],
dtype='object')
在Python的一行简单代码中,我将它们转换为分类值,并删除了带有“No”和“Bad”标签的值(因为这是本书中向实验室提出的要求)
这将返回包含以下列的数据帧:
Index(['Sales', 'CompPrice', 'Income', 'Advertising', 'Population', 'Price',
'Age', 'Education', 'ShelveLoc_Good', 'ShelveLoc_Medium', 'US_Yes',
'Urban_Yes'],
dtype='object')
就是这样,你已经为OLS准备好了虚拟变量。希望这是有用的。您看到的输出与预期一致。输出末尾列出的数据类型是数据类型系列的数据类型(调用pd.DataFrame.dtypes的结果),与数据帧中的类型无关。只需尝试
pd.DataFrame(范围(100)).dtypes
checknp.asarray(X).dtype
哪个应该是float64,或者int64,我认为它将在statsmodels内转换为float64。最好再次检查est.model.exog.dtype
,以确保在计算中使用float64.so。。将分类变量转换为浮点数?所以。。将分类变量转换为浮点数?在将所有分类变量粘贴到模型中之前,应将其转换为虚拟变量,因此是的
Index(['Sales', 'CompPrice', 'Income', 'Advertising', 'Population', 'Price',
'Age', 'Education', 'ShelveLoc_Good', 'ShelveLoc_Medium', 'US_Yes',
'Urban_Yes'],
dtype='object')