Bagaimana cara menentukan varians sampel untuk input skalar?

8

Saya terkejut menemukan bahwa Matlab mengembalikan untuk varian sampel input skalar:0

>> 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:0=n1

> 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 NaNbahkan 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.

shabbychef
sumber
Apakah Anda bermaksud bertanya tentang definisi varians populasi atau tentang definisi varians sampel ? Tidak ada masalah dengan yang pertama.
whuber
@whuber saya pikir apa yang dilakukan Matlab adalah sebagai berikut. Ketika bertemu skalar, ia melaporkan varians populasi secara default. Ketika bertemu dengan vektor, ia melaporkan varians sampel secara default kecuali Anda memintanya untuk melaporkan varians populasi. Dalam kedua konteks mereka menggunakan fungsi yang sama: var().
@ Srikant Mungkin, tapi itu tidak membahas permintaan saya untuk klarifikasi. Saya menduga mungkin ada kesalahan ketik pada baris terakhir. Fungsi var () tampaknya mengembalikan nilai yang benar dari varians populasi tetapi bukan nilai yang benar untuk varians sampel .
whuber
@whuber Sebenarnya, menimbang 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
2
@shabbychef: Halaman Srikant telah direferensikan dengan jelas mendokumentasikan perilaku yang telah Anda catat. Secara khusus, itu tidak menyatakan bahwa var () mengembalikan versi varian 1 / (n-1) ketika n = 1. Jadi masalahnya bukan Matlab yang salah , per se. (Dari sudut pandang desain perangkat lunak implementasi var () ini mengerikan karena mencoba melakukan terlalu banyak dalam satu fungsi dan akibatnya berisiko kesalahpahaman dan hasil yang keliru oleh pengguna yang tidak patuh.)
whuber

Jawaban:

4

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

is.nan(var(rnorm(1,1)))
[1] FALSE
conjugateprior
sumber
aha, saya belum bekerja dengan R cukup untuk menemukan perbedaan NAvs. NaNBagus karena memiliki keduanya ...
shabbychef
Tentu saja satu nomor memiliki varian! Ini adalah penyimpangan kuadrat rata-rata dari meannya, yaitu nol. Mungkin Anda bermaksud mengatakan dataset dengan satu nomor tidak dapat memiliki varian sampel ?
whuber
Anda akan melihat bahwa saya mengatakan itu tidak dapat memiliki varians populasi , bukan bahwa itu tidak dapat memiliki varians. Jelas itu memiliki varian sampel, yang memang sepele nol.
conjugateprior
1
Saya menyadari bahwa percakapan kita berasal dari dua pemahaman yang berbeda tentang "populasi" dan "sampel" varians. Syarat-syaratnya membingungkan di Internet, jadi saya pikir kita berdua tidak bersalah dan bahwa kita mungkin sepakat. Saya mencoba menggunakan konvensi yang diadopsi oleh OP, yang terminologinya menunjukkan varians "sampel" dibagi dengan n-1 sedangkan varians "populasi" terbagi oleh n. Secara kebetulan, komentar Anda tampaknya (dengan benar) memungkinkan untuk tiga varian: variabel acak, penaksirnya yang tidak bias, dan seperangkat realisasi independennya.
whuber
@whuber kedengarannya seperti diskusi yang luar biasa. Saya akan mencoba memikirkan pertanyaan untuk itu :)
naught101
3

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.

suncoolsu
sumber
3
Sebenarnya, satu pengamatan variabel acak sering memberikan informasi tentang varians variabel itu. Itu tergantung pada kemungkinan yang Anda izinkan. Misalnya, pengamatan tunggal dari distribusi Uniform, Poisson, atau Exponential memungkinkan Anda memperkirakan parameter tunggal, yang memberi Anda perkiraan varians.
whuber
@ terima kasih atas petunjuknya. Sebenarnya, saya lebih memikirkan jalur varians sampel. Yang ingin saya katakan adalah, memperkirakan varians sampel mungkin tidak sesuai dengan satu sampel. Itu sudah diperbaiki sekarang.
suncoolsu
@whuber Tapi ini tidak terjadi di sini; fungsi ini didokumentasikan untuk mengembalikan varian / (n-1) dan mengembalikan 0 untuk simbol 0/0.
@ mbq Anda melewatkan penafian dalam dokumentasi: "Untuk N = 1, V dinormalisasi oleh N." Itu cara elips mengatakan "Untuk N = 1, nilai 0 dikembalikan." Maksud saya membuat dengan komentar saya sebenarnya adalah tentang sesuatu yang lain: itu alamat pernyataan @ suncoolsu bahwa "Anda mencoba untuk mengekstrak informasi yang TIDAK ada" dalam kasus N = 1. Sebaliknya, pengamatan tunggal dari variabel acak memang tidak memberikan informasi tentang varians dalam banyak aplikasi praktis. (Namun, saya tidak mengatakan bahwa varians paling baik diperkirakan oleh semacam formula varians!)
whuber
@whuber Cukup adil; namun ini tidak membenarkan perilaku ini.
1

Saya pikir Matlab menggunakan logika berikut untuk skalar (analog dengan bagaimana kita mendefinisikan varians populasi) untuk menghindari keharusan berurusan dengan NA dan NAN.

Var(x)=(xx¯)21=0

Berikut ini sebagai skalar: x¯=x.

Definisi mereka mungkin adalah konvensi pemrograman yang mungkin membuat beberapa aspek pengkodean lebih mudah.


sumber
Anda telah menyatakan kembali masalahnya tanpa menawarkan resolusi. Kekhawatirannya adalah konvensi ini dapat menyebabkan jawaban yang salah ketika estimasi varians digunakan nanti. Ini tentu saja menunda tahap di mana kegagalan diakui. (Pikirkan tentang apa yang terjadi jika Anda mencoba menggunakan "varian" ini dalam uji-t, misalnya.)
whuber
@whuber Tidak persis begitu. OP berpikir untuk varmengembalikan 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.
@ Srikant Untuk menentukan siapa yang lebih bingung, Anda atau saya, saya telah belajar bahwa kita berdua! Wikipedia menyebut rumus dengan 1 / (n-1) "varians sampel" (di en.wikipedia.org/wiki/Variance ) sedangkan Mathworld jelas menggunakan 1 / n di mathworld.wolfram.com/SampleVariance.html . Namun, OP menggunakan "varians sampel" dalam arti pertama ketika menyatakan bahwa "varians sampel tidak membaginya dengan 0 = n − 1". Dalam pengertian ini tidak ada "varians sampel" untuk dataset dengan satu nilai ("skalar"), sehingga karakterisasi Anda tentang apa yang "dipikirkan" OP terlihat tidak benar.
whuber
+1 Seperti yang saya tahu MATLAB, saya pikir hipotesis Anda (sayangnya) benar.