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
Respostas:
Os escalares não podem 'ter' uma variação populacional, embora possam ser amostras únicas da população que possui uma variação (populacional). Se você deseja estimar isso, precisará de pelo menos: mais de um ponto de dados na amostra, outra amostra da mesma distribuição ou algumas informações anteriores sobre a variação da população por meio de um modelo.
btw R retornou ausente (NA) não NaN
fonte
NA
vs.NaN
É bom que ele tenha os dois ... #Estou certo de que as pessoas neste fórum terão respostas melhores, eis o que penso:
Eu acho que a resposta de R é lógica. A variável aleatória tem uma variação populacional, mas acontece que com 1 amostra você não tem graus de liberdade suficientes para estimar a variação da amostra, ou seja, você está tentando extrair informações que NÃO estão lá.
Em relação à resposta do Matlab, não sei como justificar 0, exceto que é do numerador.
As consequências podem ser bizarras. Mas consigo pensar em qualquer outra coisa relacionada à estimativa.
fonte
Eu acho que o Matlab está usando a lógica a seguir para um escalar (análogo ao modo como definimos a variação populacional) para evitar ter que lidar com NA e NAN.
A seguir, é apresentado um escalar: .x¯=x
Sua definição é provavelmente uma convenção de programação que talvez possa facilitar algum aspecto da codificação.
fonte
var
retorna a variação da amostra para um escalar, enquanto retorna a 'variação da população'. Se é um problema ou não, depende do tipo de rotina de tratamento de erros que eles possuem internamente. No entanto, concordo que a convenção deles é suscetível a erros.