Ik heb een panda-dataframe met enkele categorische voorspellers (d.w.z. variabelen) als 0 & 1, en enkele numerieke variabelen. Als ik dat aan een stasmodel pas zoals:
est = sm.OLS(y, X).fit()
Het gooit:
Pandas data cast to numpy dtype of object. Check input data with np.asarray(data).
Ik heb alle dtypes van het DataFrame geconverteerd met df.convert_objects(convert_numeric=True)
Hierna verschijnen alle dtypes van dataframevariabelen als int32 of int64. Maar aan het einde toont het nog steeds dtype: object
, zoals dit:
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
Hier zijn 4516, 4523 variabele labels.
Enig idee? Ik moet een multi-regressiemodel bouwen op meer dan honderden variabelen. Daarvoor heb ik 3 panda’s DataFrames aaneengeschakeld om met het uiteindelijke DataFrame te komen voor gebruik in modelbouw.
Antwoord 1, autoriteit 100%
Als X je dataframe is, probeer dan de .astype
methode te gebruiken om te converteren naar float tijdens het uitvoeren van het model:
est = sm.OLS(y, X.astype(float)).fit()
Antwoord 2, autoriteit 50%
als zowel y(dependent) als X uit een dataframe komen, typ dan cast both:-
est = sm.OLS(y.astype(float), X.astype(float)).fit()
Antwoord 3, autoriteit 3%
Dit komt omdat je de dummy-waardenstap NIET naar alle voorspellers hebt gegenereerd, dus hoe kan de regressie plaatsvinden over letterlijke waarden? dat is wat de foutmelding zegt dat het probeert te converteren naar numpy geldige vermeldingen.
Ga gewoon terug naar je pijplijn en voeg de dummies op de juiste manier toe.
Antwoord 4
Zoals Mário en Daniel suggereerden, ja, het probleem is te wijten aan categorische waarden die niet eerder zijn omgezet in dummy-variabelen.
Ik kwam dit probleem tegen bij het beoordelen van het StatLearning booklab over lineaire regressie voor de “Carseats ” dataset van statsmodels, waar de kolommen ‘ShelveLoc’, ‘US’ en ‘Urban’ categorische waarden zijn, neem ik aan dat de categorische waarden die problemen veroorzaken in je dataset ook strings zijn zoals in deze. Gezien het voorgaande, Ik zal dit als voorbeeld gebruiken, aangezien u geen dataframes voor de vraag heeft verstrekt.
De kolommen die we aan het begin hebben zijn de volgende, zoals eerder vermeld ‘ShelveLoc’, ‘US’ en ‘Urban’ zijn categorisch:
Index(['Sales', 'CompPrice', 'Income', 'Advertising', 'Population', 'Price',
'ShelveLoc', 'Age', 'Education', 'Urban', 'US'],
dtype='object')
In een eenvoudige regel voor Python heb ik ze geconverteerd naar categorische waarden en die met de labels “Nee” en “Slecht” verwijderd (omdat dit in het boek door het lab werd gevraagd).
carseats = pd.get_dummies(carseats, columns=['ShelveLoc', 'US', 'Urban'], drop_first = True)
Hiermee wordt een dataframe geretourneerd met de volgende kolommen:
Index(['Sales', 'CompPrice', 'Income', 'Advertising', 'Population', 'Price',
'Age', 'Education', 'ShelveLoc_Good', 'ShelveLoc_Medium', 'US_Yes',
'Urban_Yes'],
dtype='object')
En dat is alles, je hebt dummy-variabelen klaar voor OLS. Ik hoop dat dit nuttig is.