Làm thế nào nên xác định phương sai mẫu cho đầu vào vô hướng?


8

Gần đây tôi rất kinh ngạc khi thấy Matlab trả về cho phương sai mẫu của đầu vào vô hướng: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

Bằng cách nào đó, phương sai mẫu không được chia cho trong trường hợp này. R trả về NaN cho vô hướng:0=n1

> var(rnorm(1,1))
[1] NA

Bạn nghĩ gì là một cách hợp lý để xác định phương sai mẫu dân số cho một vô hướng? Những hậu quả nào có thể xảy ra khi trả về số 0 thay vì NaN?

chỉnh sửa : từ trợ giúp cho Matlab's 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).

một nhận xét khó hiểu trong mã m cho các trạng thái `var:

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

tức là họ rõ ràng chọn không trả về NaNngay cả khi người dùng yêu cầu phương sai mẫu trên vô hướng. Câu hỏi của tôi là tại sao họ nên chọn làm điều này, không phải làm thế nào.

chỉnh sửa : Tôi thấy rằng tôi đã hỏi sai về cách người ta nên xác định phương sai dân số của một vô hướng (xem đình công qua dòng trên). Điều này có lẽ gây ra nhiều nhầm lẫn.


Ý của bạn là hỏi về định nghĩa phương sai dân số hay về định nghĩa phương sai mẫu ? Không có vấn đề với trước đây.
whuber

@whuber Tôi nghĩ những gì Matlab đang làm là như sau. Khi nó gặp vô hướng, nó báo cáo phương sai dân số theo mặc định. Khi nó gặp một vectơ, nó báo cáo phương sai mẫu theo mặc định trừ khi bạn yêu cầu nó báo cáo phương sai dân số. Trong cả hai bối cảnh, họ sử dụng cùng một chức năng : var().

@Srikant Điều đó có thể, nhưng nó không giải quyết yêu cầu của tôi để làm rõ. Tôi nghi ngờ có thể có một lỗi đánh máy ở dòng cuối cùng. Hàm var () dường như trả về các giá trị chính xác của phương sai dân số nhưng không phải là các giá trị chính xác cho phương sai mẫu .
whuber

@whuber Trên thực tế, var(randn(1),0)trọng số của phương sai bằng 0 và do đó đầu ra là 0. Phần tử thứ hai được sử dụng để làm trung bình có trọng số nếu nó khác với 1. Xem: Mathworks trợ giúp chovar

2
@shabbychef: Trang Srikant đã tham chiếu tài liệu rõ ràng về hành vi mà bạn đã lưu ý. Cụ thể, nó không duy trì var () trả về phiên bản 1 / (n-1) của phương sai khi n = 1. Vì vậy, vấn đề không phải là Matlab sai . (Từ quan điểm thiết kế phần mềm, việc triển khai var () này rất tệ vì nó cố gắng làm quá nhiều trong một chức năng và do đó có nguy cơ hiểu nhầm và kết quả sai lầm của người dùng không thận trọng.)
whuber

Câu trả lời:


4

Vô hướng không thể 'có' một phương sai dân số mặc dù chúng có thể là các mẫu đơn từ dân số có phương sai (dân số). Nếu bạn muốn ước tính điều đó thì bạn cần ít nhất: nhiều hơn một điểm dữ liệu trong mẫu, một mẫu khác từ cùng một phân phối hoặc một số thông tin trước đó về phương sai dân số theo mô hình.

btw R đã mất tích trở lại (NA) chứ không phải NaN

is.nan(var(rnorm(1,1)))
[1] FALSE

aha, tôi chưa từng làm việc với R đủ để phát hiện NAvs NaNphân biệt. Thật tuyệt vì nó có cả ...
shabbychef

Tất nhiên một số duy nhất có một phương sai! Đó là độ lệch bình phương trung bình so với giá trị trung bình của nó, cụ thể là 0. Có lẽ bạn muốn nói một tập dữ liệu với một số không thể có phương sai mẫu ?
whuber

Bạn sẽ nhận thấy rằng tôi không thể có phương sai dân số , không phải là không thể có phương sai. Rõ ràng nó có một phương sai mẫu, thực sự là không có giá trị.
liên hợp chiến binh

1
Tôi đã nhận ra rằng cuộc trò chuyện của chúng tôi xuất phát từ hai cách hiểu khác nhau về phương sai "dân số" và "mẫu". Các điều khoản bị nhầm lẫn trên Internet, vì vậy tôi nghĩ rằng chúng ta đều đáng trách và chúng ta có thể đồng ý. Tôi đã cố gắng sử dụng quy ước được thông qua bởi OP, với thuật ngữ chỉ ra phương sai "mẫu" chia cho n-1 trong khi phương sai "dân số" chia cho n. Ngẫu nhiên, nhận xét của bạn dường như (chính xác) cho phép có ba phương sai: biến ngẫu nhiên, ước lượng không thiên vị của nó và của một tập hợp các nhận thức độc lập về nó.
whuber

@whuber mà âm thanh như một cuộc thảo luận tuyệt vời để có. Tôi sẽ cố gắng nghĩ ra một câu hỏi cho nó :)
naught101

3

Tôi chắc chắn mọi người trong diễn đàn này sẽ có câu trả lời tốt hơn, đây là những gì tôi nghĩ:

Tôi nghĩ câu trả lời của R là hợp lý. Biến ngẫu nhiên có phương sai dân số, nhưng hóa ra với 1 mẫu bạn không có đủ mức độ tự do để ước tính phương sai mẫu, tức là bạn đang cố trích xuất thông tin KHÔNG có ở đó.

Về câu trả lời của Matlab, tôi không biết làm thế nào để biện minh cho 0, ngoại trừ đó là từ tử số.

Hậu quả có thể kỳ quái. Nhưng tôi có thể nghĩ bất cứ điều gì khác liên quan đến ước tính.


3
Trên thực tế, một quan sát duy nhất về một biến ngẫu nhiên thường cung cấp thông tin về phương sai của biến đó. Nó phụ thuộc vào khả năng bạn cho phép. Chẳng hạn, một quan sát duy nhất từ ​​phân phối Đồng nhất, Poisson hoặc Hàm mũ cho phép bạn ước tính tham số duy nhất của nó, đưa ra ước tính về phương sai.
whuber

@whuber cảm ơn các con trỏ. Trên thực tế, tôi đã suy nghĩ nhiều hơn về các dòng phương sai mẫu. Điều tôi muốn nói là, ước tính phương sai mẫu có thể không phù hợp với một mẫu. Nó đứng ngay bây giờ.
suncoolsu

@whuber Nhưng đây không phải là trường hợp ở đây; hàm này được ghi lại để trả về phương sai / (n-1) và trả về 0 cho ký hiệu 0/0.

@mbq Bạn đã bỏ qua phần từ chối trách nhiệm trong tài liệu: "Với N = 1, V được chuẩn hóa bởi N." Đó là một cách nói hình elip "Với N = 1, giá trị 0 được trả về." Điểm tôi đang đưa ra với nhận xét của mình thực sự là về một điều khác: nó giải quyết khẳng định của @ suncoolsu rằng "bạn đang cố trích xuất thông tin KHÔNG CÓ " trong trường hợp N = 1. Ngược lại, một quan sát duy nhất từ một biến ngẫu nhiên thực sự không cung cấp thông tin về sai của nó trong nhiều ứng dụng thực tế. (Tuy nhiên, tôi không nói rằng phương sai được ước tính tốt nhất bằng một số loại công thức phương sai!)
whuber

@whuber Đủ công bằng; nhưng điều này không biện minh cho hành vi này.

1

Tôi nghĩ Matlab đang sử dụng logic sau cho vô hướng (tương tự như cách chúng ta xác định phương sai dân số) để tránh phải đối phó với NA và NAN.

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

x¯=x

Định nghĩa của họ có lẽ là một quy ước lập trình có lẽ có thể làm cho một số khía cạnh của mã hóa dễ dàng hơn.


Bạn đã trình bày lại vấn đề mà không đưa ra giải pháp. Mối quan tâm là quy ước này có thể dẫn đến câu trả lời sai khi ước tính phương sai được sử dụng sau này. Nó chắc chắn trì hoãn giai đoạn mà một thất bại được công nhận. (Hãy suy nghĩ về những gì sẽ xảy ra nếu bạn cố gắng sử dụng "phương sai" này trong một bài kiểm tra t chẳng hạn.)
whuber

@whuber Không chính xác. OP đang nghĩ rằng vartrả về phương sai mẫu cho vô hướng trong khi nó trả về 'phương sai dân số'. Cho dù đó có phải là vấn đề hay không phụ thuộc vào loại thói quen xử lý lỗi mà họ có trong nội bộ. Tuy nhiên, tôi đồng ý rằng quy ước của họ dễ bị lỗi.

@Srikant Để xác định ai là người bối rối hơn, bạn hoặc tôi, tôi đã học được rằng cả hai chúng ta đều như vậy! Wikipedia gọi công thức với 1 / (n-1) là "phương sai mẫu" (tại en.wikipedia.org/wiki/Variance ) trong khi Mathworld sử dụng rõ ràng 1 / n tại mathworld.wolfram.com/SampleVariance.html . Tuy nhiên, OP sử dụng "phương sai mẫu" theo nghĩa đầu tiên khi nhận xét rằng "phương sai mẫu không được chia cho 0 = n 1". Theo nghĩa này, không có thứ gọi là "phương sai mẫu" cho một tập dữ liệu của một giá trị ("vô hướng"), do đó, việc mô tả đặc điểm của OP về "suy nghĩ" có vẻ không chính xác.
whuber

+1 Như tôi biết MATLAB, tôi nghĩ rằng giả thuyết của bạn là (đáng buồn) là đúng.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.