Como definir a variação da amostra para entrada escalar?


8

Fiquei horrorizado ao descobrir recentemente que o Matlab retorna para a variação de amostra de uma entrada escalar: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

De alguma forma, a variação da amostra não está dividindo por neste caso. R retorna um NaN para um escalar:0=n1

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


Você quis perguntar sobre a definição de variação de população ou sobre a definição de variação de amostra ? Não há nenhum problema com o primeiro.
whuber

@whuber Eu acho que o Matlab está fazendo o seguinte. Quando encontra um escalar, informa a variação da população por padrão. Quando encontra um vetor, ele relata a variação da amostra por padrão, a menos que você solicite que relate a variação da população. Em qualquer contexto eles usam a mesma função: var().

@ Krikant Pode ser, mas ele não atende ao meu pedido de esclarecimento. Suspeito que possa haver um erro tipográfico na última linha. A função var () parece estar retornando os valores corretos da variação da população, mas não os valores corretos para a variação da amostra .
whuber

@whuber Na verdade, 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

2
@shabbychef: A página que Srikant fez referência documenta claramente o comportamento que você observou. Em particular, ele não mantém que var () retorna a versão 1 / (n-1) da variação quando n = 1. Portanto, a questão não é que o Matlab esteja errado , por si só. (De um ponto de design de software de vista esta implementação de var () é terrível, porque ele tenta fazer coisas demais em uma única função e, consequentemente, corre o risco de mal-entendidos e resultados errados por usuários unvigilant.)
whuber

Respostas:


4

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

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

aha, eu não trabalhei com R o suficiente para identificar a distinção NAvs. NaNÉ bom que ele tenha os dois ... #
29210 shabbychef

Claro que um único número tem uma variação! É o desvio quadrado médio da sua média, ou seja, zero. Talvez você quisesse dizer que um conjunto de dados com um número não pode ter uma variação de amostra ?
whuber

Você notará que eu disse que não pode ter uma variação populacional , não que não possa ter uma variação. Claramente, ele tem uma variação de amostra, que é de fato trivialmente zero.
conjugateprior

1
Percebi que nossa conversa deriva de dois entendimentos diferentes de variação "populacional" e "amostral". Os termos estão confusos na Internet, então acho que somos ambos inocentes e que podemos estar de acordo. Eu estava tentando usar a convenção adotada pelo OP, cuja terminologia indica que a variação da "amostra" se divide por n-1, enquanto a variação da "população" se divide por n. Aliás, seu comentário parece (corretamente) permitir três variações: a de uma variável aleatória, o estimador imparcial da mesma e a de um conjunto de realizações independentes dela.
whuber

@ whuber que soa como uma discussão incrível de se ter. Vou tentar pensar em uma pergunta para ele :)
naught101

3

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.


3
Na verdade, uma única observação de uma variável aleatória geralmente fornece informações sobre a variação dessa variável. Depende das possibilidades que você permite. Por exemplo, uma única observação de uma distribuição Uniforme, Poisson ou Exponencial permite estimar seu único parâmetro, o que fornece uma estimativa da variação.
whuber

@whuber obrigado pelas dicas. Na verdade, eu estava pensando mais nas linhas de variação da amostra. O que eu quis dizer foi que estimar a variação da amostra pode não ser apropriado para uma amostra. Está corrigido agora.
Suncoolsu 30/10/10

@ whuber Mas este não é o caso aqui; esta função está documentada para retornar variação / (n-1) e está retornando 0 para o símbolo 0/0.

@mbq Você perdeu o aviso de isenção de responsabilidade na documentação: "Para N = 1, V é normalizado por N." Essa é uma maneira elíptica de dizer "Para N = 1, um valor de 0 é retornado". O argumento que eu estava enfatizando com meu comentário é sobre outra coisa: ele aborda a afirmação da @ suncoolsu de que "você está tentando extrair informações que NÃO estão lá" no caso N = 1. Pelo contrário, uma única observação a partir de uma variável aleatória de fato faz fornecer informações sobre sua variância em muitas aplicações práticas. (No entanto, estou não dizendo que a variância é a melhor estimativa por algum tipo de fórmula variância!)
whuber

@whuber Justo; no entanto, isso não justifica esse comportamento.

1

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.

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

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.


Você atualizou o problema sem oferecer uma resolução. A preocupação é que essa convenção possa levar a respostas erradas quando a estimativa de variação for usada posteriormente. Certamente atrasa o estágio em que uma falha é reconhecida. (Pense no que acontece se você tentar usar essa "variação" em um teste t, por exemplo.)
whuber

@ Whuber Não exatamente. O OP está pensando que varretorna 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.

@ Krikant Para determinar quem está mais confuso, você ou eu, aprendi que nós dois somos! A Wikipedia denomina a fórmula com 1 / (n-1) a "variação de amostra" (em en.wikipedia.org/wiki/Variance ), enquanto o Mathworld usa claramente 1 / n em mathworld.wolfram.com/SampleVariance.html . No entanto, o OP usa "variação de amostra" no primeiro sentido ao observar que "a variação de amostra não está dividida por 0 = n-1". Nesse sentido, não existe "variação de amostra" para um conjunto de dados de um valor (um "escalar"); portanto, sua caracterização do que o OP está "pensando" parece incorreta.
whuber

+1 Como conheço o MATLAB, acho que sua hipótese é (infelizmente) verdadeira.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.