2015-11-20 20 views
6

Mam pandasową ramkę danych z pewnymi predykatorami kategorycznymi (tj. Zmiennymi) jako 0 & 1 i niektórymi zmiennymi numerycznymi. Kiedy dopasować ją do a stasmodel jak:Model wieloregresowy budynku zgłasza błąd: `Dane Pand oddane do numpy dtype obiektu. Sprawdź dane wejściowe za pomocą np.asarray (danych). "

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

to rzuca:

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

konwertowane wszystkie dtypes z DataFrame stosując df.convert_objects(convert_numeric=True)

Po tym wszystkim dtypes zmiennych dataframe się jako Int32 lub int64. Ale w końcu to nadal pokazuje dtype: object coś takiego:

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 

Tu 4516, 4523 są zmienne etykiety.

Każdy pomysł? Muszę zbudować model wieloregresyjny na więcej niż setkach zmiennych. W tym celu złączyłem 3 pandy DataFrames, aby stworzyć ostateczną ramkę DataFrame do zastosowania w budowaniu modeli.

+0

Dane wyjściowe, które widzisz, są zgodne z oczekiwaniami. Podany na końcu danych wynik jest typem dtypes (wynik wywołania pd.DataFrame.dtypes) i nie ma nic wspólnego z typami wewnątrz twojej ramki danych. Po prostu spróbuj 'pd.DataFrame (zakres (100)). Dtypes' – davidshinn

+0

sprawdź' np.asarray (X) .dtype', który powinien być float64, lub int64, który, jak sądzę, zostanie przekonwertowany na float64 wewnątrz statsmodels. Najlepiej ponownie sprawdzić 'est.model.exog.dtype', aby upewnić się, że float64 jest używany w obliczeniach. – user333700

Odpowiedz

6

Jeśli X jest Twój dataframe, spróbuj zastosować metodę .astype przekonwertować do pływaka podczas uruchamiania model:

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

czyli ... konwertowanie zmiennych jakościowych na zmienne? – kiradotee

+0

wszystkie zmienne jakościowe powinny zostać przekonwertowane na fałszywe zmienne przed ich wstawieniem do modelu, więc tak –

4

gdy oba y (zależne) i X są wzięte z ramki danych następnie typu cast zarówno: -

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

czyli przekształcenie zmiennych jakościowych w zmiennoprzecinkowe? – kiradotee