Fiquei horrorizado ao descobrir recentemente que o Matlab retorna para a variação de amostra de uma entrada escalar:
>> 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
De alguma forma, a variação da amostra não está dividindo por neste caso. R retorna um NaN para um escalar:
> var(rnorm(1,1))
[1] NA
O que você acha que é uma maneira sensata de definir a variação da amostra da população para um escalar? Que conseqüências podem ter para retornar um zero em vez de um NaN?
edit : da ajuda do 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).
um comentário enigmático no código m para `var states:
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
ou seja, eles escolhem explicitamente não retornar um NaN
mesmo quando o usuário solicita uma variação de amostra em um escalar. Minha pergunta é por que eles deveriam escolher fazer isso, não como.
editar : vejo que eu perguntei erroneamente sobre como definir a variação populacional de um escalar (consulte o aviso na linha acima). Isso provavelmente causou muita confusão.
var()
.
var(randn(1),0)
pesa a variação em 0 e, portanto, a saída é 0. O segundo elemento é usado para fazer uma média ponderada se for diferente de 1. Veja: Mathworks help forvar