Pergunta

Existe alguma maneira de gerar aleatoriamente um conjunto de números positivos, de modo que eles tenham uma média desejada e desvio padrão?

Eu tenho um algoritmo para gerar números com uma distribuição gaussiana, mas não sei como lidar com números negativos de uma maneira que preserva a média e o desvio padrão.
Parece que uma distribuição de Poisson pode ser uma boa aproximação, mas é preciso apenas uma média.

EDIT: Houve alguma confusão nas respostas, então tentarei esclarecer.

Eu tenho um conjunto de números que me dão um meio e um desvio padrão. Gostaria de gerar um conjunto de números igualmente de tamanhos com uma média equivalente e desvio padrão. Normalmente, eu usaria uma distribuição gaussiana para fazer isso, no entanto, neste caso, tenho uma restrição adicional de que todos os valores devem ser maiores que zero.

O algoritmo que procuro não precisa ser baseado no gaussiano (a julgar pelos comentários até agora, provavelmente não deveria ser) e não precisa ser perfeito. Não importa se o conjunto de números resultantes tem um desvio médio/padrão ligeiramente diferente - eu só quero algo que geralmente esteja no estádio.

Foi útil?

Solução

Você pode estar procurando uma distribuição log-normal, como David Norman sugeriu, ou talvez exponencial, Binomial, ou alguma outra distribuição. Se você tem um algoritmo para gerar uma distribuição, provavelmente não é bom para gerar números em conformidade com outra distribuição. Mas só você sabe como seus números são realmente distribuídos.

Com a distribuição normal, a faixa da variável aleatória é do infinito negativo ao infinito positivo; portanto, se você estiver procurando apenas números positivos, não será gaussiano.

Diferentes distribuições também têm propriedades exclusivas, por exemplo, com distribuição de Poisson, os desvios padrão são sempre iguais à média. (É por isso que sua função de biblioteca não pede ao parâmetro de desvio padrão, apenas a média).

Na pior das hipóteses, você pode gerar um número real aleatório entre 0 e 1 e calcular a função de densidade de probabilidade por conta própria. (Dependendo da distribuição, isso pode ser muito mais fácil dizer do que fazer).

Outras dicas

Primeiro, você não pode gerar apenas valores positivos a partir de uma distribuição gaussiana.

Segundo, estou entendendo corretamente que você está tentando gerar uma distribuição aleatória com média dada e desvio padrão? Alguma distribuição fará? Se sim, deixe mencionar = m e desvio padrão = s. Estou assumindo que m - s > 0.

let n = random integer modulo 2;
if n equals 0 return m - s
else return m + s

Os valores retornados por esse processo terão significado m e desvio padrão s.

Você poderia usar um Log-Normal distribuição.

Por que não usar um método de reamostragem? Se você tem n números em sua amostra, basta levar n desenhos aleatórios da amostra, com substituição. O conjunto resultante terá a média e a variação esperadas da mesma amostra original, mas geralmente será um pouco diferente.

Dito isto, sem saber por que você precisa de mais números aleatórios, é impossível dizer qual é a resposta certa. Alguém se pergunta se você está tentando resolver o problema errado ...

Eu não pude resistir - eu realmente gosto do ângulo de Jason, mas não fiquei feliz por sua resposta apenas abordar casos em que M> s, então trabalhei uma solução geral após sua idéia.
A distribuição mais simples com dados, se termos positivos é

com probabilidade P, retorne 0
com probabilidade (1-p), retorne m / (1-p)
onde (1-p) = m^2 / (m^2 + s^2)

Prova: para uma distribuição x com dois resultados lowx com probabilidade p e highx com probabilidade (1-p),
M = e [x] = px lowx + (1-p) x Highx
s^2 = variação (x) = e [x^2] - e [x]^2 = px lowx^2 + (1 -p) x Highx^2 - m^2

Defina Lowx como 0 e resolva em Highx e p.

Você pode usar qualquer distribuição que tenha suporte positivo e pode ser especificado por média e variação. Por exemplo,

  • As distribuições de um parâmetro não funcionam em geral. Por exemplo, o qui-quadrado não funcionará, a menos que sua variação seja sempre o dobro dela. Da mesma forma, exponencial não funcionará, a menos que sua variação seja igual à sua média ao quadrado.
  • Algumas distribuições de dois parâmetros não funcionam em alguns casos. A distribuição binomial não funcionará, a menos que a variação seja menor que a sua média. Da mesma forma, o qui-quadrado não central não funcionará, a menos que sua variação seja superior a 2 vezes a sua média e menos de 4 vezes a sua média!
  • No entanto, o log-normal e o gama funcionarão em todos os casos.

Se eu entendo você corretamente, você deseja gerar números aleatórios a partir de uma distribuição com suporte positivo. Existem muitas opções possíveis. O mais simples é o

qui-quadrado: http://en.wikipedia.org/wiki/chi-square_distribution(que é apenas a soma de dois gaussianos quadrados)

Toda a distribuição assimétrica (exponencial, Weibull, Pareto, Gaussiana Inversa, Normal Log, Gama)

Todas as distribuições da Skew Familly (Skew-Normal, Skew-Student, ...)

Todas as funções acima são tais que qualquer número aleatório extraído de qualquer uma delas seja sempre positivo.

De que diabos você está palhaço falando? O normal o normal tem zero médio, mas esse é um caso especial da distribuição gaussiana, que tem parâmetros médios e desvio padrão. À medida que a média aumenta, com a SD mantida constante, a probabilidade de gerar números abaixo de zero diminui para zero. Você pode ter uma distribuição gaussiana sem números negativos.

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