Fungsi NumPy np.std
mengambil parameter opsional ddof
: "Delta Degrees of Freedom". Secara default, ini 0
. Setel 1
untuk mendapatkan hasil MATLAB:
>>> np.std([1,3,4,6], ddof=1)
2.0816659994661326
Untuk menambahkan lebih banyak konteks, dalam perhitungan varians (yang deviasinya standarnya adalah akar kuadrat) kita biasanya membagi dengan jumlah nilai yang kita miliki.
Tetapi jika kita memilih sampel acak dari N
elemen dari distribusi yang lebih besar dan menghitung varians, pembagian dengan N
dapat menyebabkan perkiraan varian yang sebenarnya terlalu rendah. Untuk mengatasinya, kita dapat menurunkan angka yang kita bagi ( derajat kebebasan ) ke angka yang kurang dari N
(biasanya N-1
). The ddof
Parameter memungkinkan kita mengubah pembagi dengan jumlah yang kita tentukan.
Kecuali diberitahu sebaliknya, NumPy akan menghitung penduga bias untuk varians ( ddof=0
, dibagi dengan N
). Inilah yang Anda inginkan jika Anda bekerja dengan seluruh distribusi (dan bukan subset nilai yang telah diambil secara acak dari distribusi yang lebih besar). Jika ddof
parameter diberikan, NumPy akan membagi dengan N - ddof
.
Perilaku default MATLAB std
adalah memperbaiki bias untuk varians sampel dengan membaginya dengan N-1
. Ini menghilangkan beberapa (tapi mungkin tidak semua) bias dalam standar deviasi. Ini mungkin yang Anda inginkan jika Anda menggunakan fungsi tersebut pada sampel acak dari distribusi yang lebih besar.
Jawaban bagus dari @hbaderts memberikan detail matematis lebih lanjut.
std([1 3 4 6],1)
setara dengan default NumPynp.std([1,3,4,6])
. Semua ini cukup jelas dijelaskan dalam dokumentasi untuk Matlab dan NumPy, jadi saya sangat menyarankan OP untuk membaca itu di masa mendatang.Simpangan baku adalah akar kuadrat dari varians. Varians variabel acak
X
didefinisikan sebagaiOleh karena itu, penduga untuk varians adalah
dimana menunjukkan mean sampel. Untuk dipilih secara acak , dapat ditunjukkan bahwa penduga ini tidak konvergen ke varian sebenarnya, tetapi ke
Jika Anda memilih sampel secara acak dan memperkirakan mean dan varians sampel, Anda harus menggunakan estimator yang dikoreksi (tidak bias)
yang akan menyatu . Istilah koreksi juga disebut koreksi Bessel.
Sekarang secara default, MATLABs
std
menghitung berisi estimator dengan istilah koreksin-1
. Namun NumPy (seperti yang dijelaskan @ajcr) menghitung penaksir bias tanpa istilah koreksi secara default. Parameterddof
memungkinkan untuk mengatur istilah koreksi apa punn-ddof
. Dengan mengaturnya ke 1 Anda mendapatkan hasil yang sama seperti di MATLAB.Demikian pula, MATLAB memungkinkan untuk menambahkan parameter kedua
w
, yang menentukan "skema penimbangan". Default ,,w=0
menghasilkan istilah koreksin-1
(penduga tidak bias), sedangkan untukw=1
, hanya n yang digunakan sebagai istilah koreksi (penduga bias).sumber
n
berada di atas notasi penjumlahan, ia masuk ke dalam penjumlahan.Untuk orang yang tidak ahli dalam statistik, panduan sederhana adalah:
Sertakan
ddof=1
jika Anda menghitungnp.std()
sampel yang diambil dari kumpulan data lengkap Anda.Pastikan
ddof=0
jika Anda menghitungnp.std()
populasi penuhDDOF disertakan untuk sampel untuk mengimbangi bias yang dapat terjadi pada angka.
sumber