Pergunta

Eu tenho um tipo de valor que representa uma distribuição de Gauss:

struct Gauss {
    double mean;
    double variance;
}

Eu gostaria de realizar uma integral sobre uma série desses valores:

Gauss eulerIntegrate(double dt, Gauss iv, Gauss[] values) {
    Gauss r = iv;
    foreach (Gauss v in values) {
        r += v*dt;
    }
    return r;
}

A minha pergunta é como implementar Além destas distribuições normais.

A multiplicação por um escalar (dt) parecia bastante simples. Mas não foi tão simples! Graças FOOSHNICK para a ajuda:

public static Gauss operator * (Gauss g, double d) {
    return new Gauss(g.mean * d, g.variance * d * d);
}

No entanto, a adição me escapa. Eu suponho que eu posso apenas acrescentar os meios; é a variação que está causando-me problemas. Qualquer uma destas definições parece "lógico" para mim.

public static Gauss operator + (Gauss a, Gauss b) {
    double mean = a.mean + b.mean;
    // Is it this? (Yes, it is!)
    return new Gauss(mean, a.variance + b.variance);        
    // Or this? (nope)
    //return new Gauss(mean, Math.Max(a.variance, b.variance));
    // Or how about this? (nope)
    //return new Gauss(mean, (a.variance + b.variance)/2);
}

Alguém pode ajudar a definir uma estatística correcta - ou pelo menos "razoável" -? A versão do operador +

Acho que eu poderia mudar o código para usar aritmética de intervalo em vez disso, mas eu estava esperando para ficar no mundo da prov e estatísticas.

Foi útil?

Solução

A soma de duas distribuições normais é em si uma distribuição normal:

N (mean1, variance1) + N (mean2, variance2) ~ N (mean1 + mean2, variance1 + variance2)

Isto é tudo sobre wikipedia página .

Tenha cuidado para que estes realmente são variâncias e não desvios padrão.

// X + Y
public static Gauss operator + (Gauss a, Gauss b) {
    //NOTE: this is valid if X,Y are independent normal random variables
    return new Gauss(a.mean + b.mean, a.variance + b.variance);
}

// X*b
public static Gauss operator * (Gauss a, double b) {
    return new Gauss(a.mean*b, a.variance*b*b);
}

Outras dicas

Para ser mais preciso:

Se uma variável aleatória Z é definido como a combinação linear de duas variáveis ??aleatórias gaussianas não correlacionadas X e Y, então Z é em si uma variável aleatória gaussiana, por exemplo:.

Se Z = ax + by, em seguida, média (Z) = a * média (X) + b * significativo (Y), e da variância (Z) = a 2 * variância (X) + b 2 * variância (Y).

Se as variáveis ??aleatórias são correlacionada , então você tem que conta para isso. Variância (X) é definida pelo valor esperado E ([X-média (X)] 2 ). Trabalhando isso através de Z = ax + by, obtemos:

variância (Z) = a 2 * variância (X) + b 2 * variância (Y) + 2ab * covariância (X, Y)

Se você está somando duas variáveis ??aleatórias não correlacionadas que não têm distribuições gaussianas, então a distribuição da soma é o convolução das duas distribuições de componentes.

Se você está somando duas variáveis ??aleatórias não-gaussianos correlacionados, você tem que trabalhar através dos integrais apropriadas si mesmo.

Bem, sua multiplicação por escalar é errado - você deve multiplicar variância pelo quadrado da d. Se você está adicionando uma constante, em seguida, basta adicioná-lo à média, estadias a variação do mesmo. Se você está adicionando duas distribuições, em seguida, adicione os meios e adicione as variâncias.

Alguém pode ajudar a definir uma estatística correcta - ou pelo menos "razoável" -? A versão do operador +

Provavelmente não, como a adição de duas distribuições significa coisas diferentes - tendo trabalhado em confiabilidade e maintainablity minha primeira reação do título seria a distribuição de MTBF de um sistema, se o MTBF de cada parte é normalmente distribuída e o sistema tinha nenhuma redundância . Você está falando sobre a distribuição da soma de dois variates independentes normalmente distribuídas, e não o (lógico) soma do efeito duas distribuições normais. Muitas vezes, a sobrecarga de operador tem semântica surpreendentes. Eu deixá-lo como uma função e chamá-lo de 'normalSumDistribution' a menos que seu código tem um público-alvo muito específico.

Hah, eu pensei que você não pode adicionar distribuições gaussianas juntos, mas você pode!

http://mathworld.wolfram.com/NormalSumDistribution.html

Na verdade, a média é a soma das distribuições individuais, ea variância é a soma das distribuições individuais.

Eu não tenho certeza que eu como o que você está chamando de "integração" sobre uma série de valores. Você quer dizer essa palavra em um sentido cálculo? Você está tentando fazer integração numérica? Há outras, melhores maneiras de fazer isso. O seu não parece certo para mim, muito menos ideal.

A distribuição de Gauss é uma boa, função suave. Eu acho que uma abordagem agradável quadratura ou Runge-Kutta seria uma idéia muito melhor.

Eu teria pensado que isso depende de que tipo de adição que está fazendo. Se você quiser apenas para obter uma distribuição normal com propriedades (média, desvio padrão, etc.) igual à soma de duas distribuições, em seguida, a adição das propriedades, como indicado nas outras respostas está bem. Este é o pressuposto usado no algo como PERT onde se um grande número de distribuições de probabilidade normais são somados, em seguida, a distribuição de probabilidade resultante é mais uma distribuição de probabilidade normal.

O problema surge quando as duas distribuições sendo adicionados não são semelhantes. Tomemos por exemplo a adição de uma distribuição de probabilidade com uma média de 2 e desvio padrão de 1 e uma distribuição de probabilidade de 10 com um desvio padrão de 2. Se você adicionar essas duas distribuições, você obter uma distribuição de probabilidade com dois picos, um em 2ish e um no 10ish. O resultado não é, por conseguinte, um distibution normal. A suposição sobre a adição de distribuições só é realmente válida se as distribuições originais ou são muito semelhantes, ou você tem um monte de distribuições originais para que os altos e baixos pode ser igualado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top