Het bouwen van een multi-regressiemodel geeft een fout: `Panda’s-gegevens werpen naar numpy dtype van object. Controleer invoergegevens met np.asarray(data).`

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 .astypemethode 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.

Other episodes