Saya terkejut menemukan bahwa Matlab mengembalikan untuk varian sampel input skalar:
>> var(randn(1),0) %the '0' here tells var to give sample variance
ans =
0
>> var(randn(1),1) %the '1' here tells var to give population variance
ans =
0
Entah bagaimana, varians sampel tidak membaginya dengan dalam kasus ini. R mengembalikan NaN untuk skalar:
> var(rnorm(1,1))
[1] NA
Menurut Anda apa cara yang masuk akal untuk mendefinisikan varians sampel populasi untuk skalar? Apa konsekuensi yang mungkin terjadi untuk mengembalikan nol daripada NaN?
edit : dari bantuan untuk Matlab var
:
VAR normalizes Y by N-1 if N>1, where N is the sample size. This is
an unbiased estimator of the variance of the population from which X is
drawn, as long as X consists of independent, identically distributed
samples. For N=1, Y is normalized by N.
Y = VAR(X,1) normalizes by N and produces the second moment of the
sample about its mean. VAR(X,0) is the same as VAR(X).
komentar samar dalam kode m untuk `var state:
if w == 0 && n > 1
% The unbiased estimator: divide by (n-1). Can't do this
% when n == 0 or 1.
denom = n - 1;
else
% The biased estimator: divide by n.
denom = n; % n==0 => return NaNs, n==1 => return zeros
end
yaitu mereka secara eksplisit memilih untuk tidak mengembalikan NaN
bahkan ketika pengguna meminta varians sampel pada skalar. Pertanyaan saya adalah mengapa mereka harus memilih untuk melakukan ini, bukan bagaimana.
sunting : Saya melihat bahwa saya telah secara keliru bertanya tentang bagaimana seseorang harus mendefinisikan varians populasi skalar (lihat garis pemogokan di atas). Ini mungkin menyebabkan banyak kebingungan.
var()
.var(randn(1),0)
varians dengan 0 dan karenanya outputnya adalah 0. Elemen kedua digunakan untuk melakukan rata-rata tertimbang jika berbeda dari 1. Lihat: Mathworks help forvar
Jawaban:
Skal tidak dapat 'memiliki' varians populasi walaupun mereka dapat berupa sampel tunggal dari populasi yang memiliki varians (populasi). Jika Anda ingin memperkirakannya maka Anda memerlukan setidaknya: lebih dari satu titik data dalam sampel, sampel lain dari distribusi yang sama, atau beberapa informasi sebelumnya tentang varians populasi melalui model.
btw R telah mengembalikan hilang (NA) bukan NaN
sumber
NA
vs.NaN
Bagus karena memiliki keduanya ...Saya yakin orang-orang di forum ini akan memiliki jawaban yang lebih baik, inilah yang saya pikirkan:
Saya pikir jawaban R adalah logis. Variabel acak memiliki varians populasi, tetapi ternyata dengan 1 sampel Anda tidak memiliki cukup derajat kebebasan untuk memperkirakan varians sampel yaitu - Anda mencoba mengekstrak informasi yang TIDAK ada di sana.
Mengenai jawaban Matlab, saya tidak tahu bagaimana membenarkan 0, kecuali bahwa itu dari pembilang.
Konsekuensi bisa jadi aneh. Tapi saya bisa memikirkan hal lain yang terkait dengan estimasi.
sumber
Saya pikir Matlab menggunakan logika berikut untuk skalar (analog dengan bagaimana kita mendefinisikan varians populasi) untuk menghindari keharusan berurusan dengan NA dan NAN.
Berikut ini sebagai skalar:x¯=x .
Definisi mereka mungkin adalah konvensi pemrograman yang mungkin membuat beberapa aspek pengkodean lebih mudah.
sumber
var
mengembalikan varians sampel untuk skalar sedangkan ia mengembalikan 'varians populasi'. Apakah masalah atau tidak tergantung pada jenis rutinitas penanganan kesalahan apa yang mereka miliki secara internal. Namun, saya setuju bahwa konvensi mereka rentan terhadap kesalahan.