Saya pikir Anda hampir dapat melakukan apa yang Anda pikir akan ideal, menggunakan paket statsmodels yang merupakan salah satu pandas
'dependensi opsional sebelum pandas
' versi 0.20.0 (itu digunakan untuk beberapa hal pandas.stats
.)
>>> import pandas as pd
>>> import statsmodels.formula.api as sm
>>> df = pd.DataFrame({"A": [10,20,30,40,50], "B": [20, 30, 10, 40, 50], "C": [32, 234, 23, 23, 42523]})
>>> result = sm.ols(formula="A ~ B + C", data=df).fit()
>>> print(result.params)
Intercept 14.952480
B 0.401182
C 0.000352
dtype: float64
>>> print(result.summary())
OLS Regression Results
==============================================================================
Dep. Variable: A R-squared: 0.579
Model: OLS Adj. R-squared: 0.158
Method: Least Squares F-statistic: 1.375
Date: Thu, 14 Nov 2013 Prob (F-statistic): 0.421
Time: 20:04:30 Log-Likelihood: -18.178
No. Observations: 5 AIC: 42.36
Df Residuals: 2 BIC: 41.19
Df Model: 2
==============================================================================
coef std err t P>|t| [95.0% Conf. Int.]
------------------------------------------------------------------------------
Intercept 14.9525 17.764 0.842 0.489 -61.481 91.386
B 0.4012 0.650 0.617 0.600 -2.394 3.197
C 0.0004 0.001 0.650 0.583 -0.002 0.003
==============================================================================
Omnibus: nan Durbin-Watson: 1.061
Prob(Omnibus): nan Jarque-Bera (JB): 0.498
Skew: -0.123 Prob(JB): 0.780
Kurtosis: 1.474 Cond. No. 5.21e+04
==============================================================================
Warnings:
[1] The condition number is large, 5.21e+04. This might indicate that there are
strong multicollinearity or other numerical problems.
formula
, saya tidak sengaja mengetikformulas
dan mendapat kesalahan aneh:TypeError: from_formula() takes at least 3 arguments (2 given)
print(result.params)
danprint(result.summary())
formula()
pendekatan ini melempar kesalahan jenis TypeError: __init __ () kehilangan 1 argumen posisi yang diperlukan: 'endog', jadi saya rasa itu sudah usang. juga,ols
sekarangOLS
Catatan:
pandas.stats
telah dihapus dengan 0.20.0Ini mungkin dilakukan dengan
pandas.stats.ols
:Perhatikan bahwa Anda perlu
statsmodels
menginstal paket, ini digunakan secara internal olehpandas.stats.ols
fungsi.sumber
The pandas.stats.ols module is deprecated and will be removed in a future version. We refer to external packages like statsmodels, see some examples here: http://www.statsmodels.org/stable/regression.html
missing intercepts
. PerancangR
paket yang setara menyesuaikan dengan menghapus penyesuaian untuk mean: stats.stackexchange.com/a/36068/64552 . . Saran lain:you can use sm.add_constant to add an intercept to the exog array
dan gunakanreg = ols("y ~ x", data=dict(y=y,x=x)).fit()
pandas.stats
💔Saya tidak tahu apakah ini baru di
sklearn
ataupandas
, tetapi saya dapat meneruskan bingkai data secara langsung kesklearn
tanpa mengubah bingkai data ke array numpy atau tipe data lainnya.sumber
.values.reshape(-1, 1)
ke kolom dataframe. Misalnya:x_data = df['x_data'].values.reshape(-1, 1)
dan meneruskan larik npx_data
(dan yang dibuat serupay_data
) ke dalam.fit()
metode.Tidak, tidak, cukup ubah ke array NumPy:
Ini membutuhkan waktu yang konstan karena hanya membuat file tampilan pada data Anda. Kemudian beri makan ke scikit-learn:
sumber
np.matrix( np.asarray( df ) )
, karena sklearn mengharapkan vektor vertikal, sedangkan array numpy, setelah Anda memotongnya dari array, bertindak seperti vecotrs horizontal, yang paling bagus sepanjang waktu..values
atribut tersebut. Yaitureg.fit(df[['B', 'C']].values, df['A'].values)
,.Statsmodels kan membuat model OLS dengan referensi kolom langsung ke kerangka data panda.
Pendek dan manis:
model = sm.OLS(df[y], df[x]).fit()
Detail kode dan ringkasan regresi:
Keluaran:
Cara langsung mendapatkan R-squared, Coefficients dan p-value:
sumber