Bagaimana saya bisa menemukan nilai-p (signifikansi) dari masing-masing koefisien?
lm = sklearn.linear_model.LinearRegression()
lm.fit(x,y)
python
numpy
statistics
scikit-learn
regression
elplatt
sumber
sumber
Jawaban:
Ini agak berlebihan tapi mari kita coba. Pertama mari kita gunakan statsmodel untuk mencari tahu apa nilai-p seharusnya
dan kita dapatkan
Ok, mari kita mereproduksi ini. Ini agak berlebihan karena kita hampir mereproduksi analisis regresi linier menggunakan Matriks Aljabar. Tapi apa-apaan ini.
Dan ini memberi kita.
Jadi kita dapat mereproduksi nilai dari statsmodel.
sumber
code
np.linalg.inv kadang-kadang dapat mengembalikan hasil bahkan ketika matriks tidak dapat dibalik. Mungkin itu masalahnya.nan
s. Bagi saya itu karenaX
data sampel saya jadi indeksnya mati. Ini menyebabkan kesalahan saat memanggilpd.DataFrame.join()
. Saya membuat perubahan satu baris ini dan sepertinya berfungsi sekarang:newX = pd.DataFrame({"Constant":np.ones(len(X))}).join(pd.DataFrame(X.reset_index(drop=True)))
scear-learn's LinearRegression tidak menghitung informasi ini tetapi Anda dapat dengan mudah memperluas kelas untuk melakukannya:
Dicuri dari sini .
Anda harus melihat statsmodels untuk jenis analisis statistik dengan Python.
sumber
EDIT: Mungkin bukan cara yang tepat untuk melakukannya, lihat komentar
Anda dapat menggunakan sklearn.feature_selection.f_regress.
klik di sini untuk halaman scikit-learn
sumber
Kode dalam jawaban elyase https://stackoverflow.com/a/27928411/4240413 tidak benar-benar berfungsi. Perhatikan bahwa sse adalah skalar, dan kemudian mencoba untuk mengulanginya. Kode berikut adalah versi yang dimodifikasi. Tidak bersih luar biasa, tapi saya pikir itu berfungsi lebih atau kurang.
sumber
Cara mudah untuk menarik nilai-p adalah dengan menggunakan regresi statsmodels:
Anda mendapatkan serangkaian nilai-p yang dapat Anda manipulasi (misalnya memilih urutan yang ingin Anda pertahankan dengan mengevaluasi setiap nilai-p):
sumber
p_value adalah salah satu dari f statistik. jika Anda ingin mendapatkan nilainya, cukup gunakan beberapa baris kode ini:
sumber
Mungkin ada kesalahan dalam jawaban @JARH dalam kasus regresi multivariabel. (Saya tidak memiliki reputasi yang cukup untuk berkomentar.)
Di baris berikut:
p_values =[2*(1-stats.t.cdf(np.abs(i),(len(newX)-1))) for i in ts_b]
,t-nilai mengikuti distribusi chi-squared derajat
len(newX)-1
bukannya mengikuti distribusi chi-squared derajatlen(newX)-len(newX.columns)-1
.Jadi ini seharusnya:
p_values =[2*(1-stats.t.cdf(np.abs(i),(len(newX)-len(newX.columns)-1))) for i in ts_b]
(Lihat nilai-t untuk regresi OLS untuk lebih jelasnya)
sumber
Anda dapat menggunakan scipy untuk nilai-p. Kode ini dari dokumentasi yang lemah.
sumber
Untuk one-liner, Anda dapat menggunakan fungsi pingouin.linear_regress ( penafian: Saya pencipta Pingouin ), yang berfungsi dengan regresi uni / multi-variasi menggunakan array NumPy atau Pandas DataFrame, mis::
Outputnya adalah dataframe dengan koefisien beta, kesalahan standar, nilai-T, nilai-p dan interval kepercayaan untuk setiap prediktor, serta R ^ 2 dan penyesuaian R ^ 2 yang sesuai.
sumber