2015-11-20 19 views
6

Ho un dataframe panda con alcuni predittori categoriali (cioè variabili) come 0 & 1 e alcune variabili numeriche. Quando mi adatto che a uno stasmodel come:Costruire il modello di multi-regressione genera un errore: `Trasmette i dati di Pandas a numpy dtype di oggetto. Controllare i dati di input con np.asarray (dati) .`

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

Getta:

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

ho convertito tutte le dtypes del dataframe utilizzando df.convert_objects(convert_numeric=True)

Dopo questo tutti dtypes di variabili dataframe appaiono come int32 o int64. Ma alla fine si vede ancora dtype: object, in questo modo:

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 

Qui 4516, 4523 sono etichette delle variabili.

Qualche idea? Ho bisogno di costruire un modello multi-regressione su più di centinaia di variabili. Per questo ho concatenato 3 DataFrame panda per creare il DataFrame finale da utilizzare nella costruzione del modello.

+0

L'output visualizzato è come previsto. Il dtype elencato alla fine dell'output è il dtype della serie dtypes (il risultato della chiamata pd.DataFrame.dtypes) e non ha nulla a che fare con i tipi all'interno del tuo dataframe. Basta provare 'pd.DataFrame (range (100)). Dtypes' – davidshinn

+0

controlla' np.asarray (X) .dtype' che dovrebbe essere float64 o int64 che, penso, sarà convertito in float64 all'interno di statsmodels. Meglio controllare di nuovo 'est.model.exog.dtype' per assicurarsi che float64 sia usato nei calcoli. – user333700

risposta

6

Se X è la dataframe, utilizzare il metodo .astype per convertire galleggiare durante l'esecuzione del modello:

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

quindi .. convertire le variabili categoriali in float? – kiradotee

+0

tutte le variabili categoriali devono essere convertite in variabili dummy prima di incollarle nel modello, quindi sì –

4

se sia y (dipendente) e X sono presi da un frame di dati allora cast di tipo sia: -

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

quindi .. convertire le variabili categoriali in float? – kiradotee