[R-br] Geração de números aleatórios com amplitude determinada
Benilton Carvalho
beniltoncarvalho em gmail.com
Terça Julho 29 00:18:05 BRT 2014
um exercicio pra matar saudade de recursao...
f <- function(n, menor, maior, x, s){
obs <- rnorm(n, x, s)
obs <- obs[obs > menor & obs < maior]
nin <- length(obs)
if (nin == n){
return(obs)
}else{
return(c(obs, f(n-nin, menor, maior, x, s)))
}
}
system.time(res <- f(10000, 2, 3, 0, 1))
## user system elapsed
## 0.063 0.001 0.064
length(res)
## [1] 10000
range(res)
## [1] 2.000013 2.999675
Em 28 de julho de 2014 23:34, FHRB Toledo <fernandohtoledo em gmail.com>
escreveu:
> Não seria o caso de você obter esses valores analiticamente, ao invés de
> usar simulação? Veja a documentação da função pnorm().
>
> att,
> FH
>
>
> 2014-07-28 21:14 GMT-05:00 Marcos Bissoli <mbissoli em gmail.com>:
>
>> Boa noite a todos,
>>
>> Preciso gerar uma sequência de números aleatórios, de uma distribuição
>> normal. No entanto, a função <rnorm> não permite definir limites mínimo e
>> máximo para o vetor de dados. Assim, criei uma função para tal fim:
>>
>> >Gerador.Aleatorio <- function(n,menor,maior,x,s)
>> +{
>> + dados <- rnorm(n,x,s)
>> + while ((min(dados)<menor)|(max(dados)>maior))
>> + {
>> + dados <- rnorm(n,x,s)
>> + }
>> + dados <- dados
>> + print(dados)
>> +}
>>
>> Onde:
>> - n é o número de valores que quero gerar
>> - menor é o limite mínimo do vetor
>> - maior é o limite máximo do vetor
>> - x é a média do vetor
>> - s é o desvio padrão do vetor
>>
>> O problema é que, como usei um laço ("loop"), o custo de tempo
>> computacional dessa função tornou-a simplesmente impraticável. Até 100
>> valores eu consegui gerar. Mas agora tentei com 284 e já jantei, fumei,
>> tratei de assuntos familiares e... Nada! E minha demanda, na verdade, é
>> para gerar mais de 1500 valores, simulando estudo epidemiológico
>> observacional, a partir de valores já descritos em um estudo piloto que
>> realizei (ou seja, eu tenho já estimativas de n, mínimo, máximo, média e
>> desvio padrão).
>>
>> Há alguma função, pacote ou sintaxe que torne isso possível? E qual
>> seriam esses "limites do custo computacional"?
>>
>> Grato desde já por qualquer ajuda.
>>
>> Abraços fraternos,
>>
>> --
>> MARCOS BISSOLI
>> Faculdade de Nutrição
>> Universidade Federal de Alfenas
>>
>> E-mail: mbissoli em gmail.com
>> Twitter: #mbissoli
>> Facebook: https://www.facebook.com/MarcosBissoli
>>
>> Alfenas, Minas Gerais, Brasil
>>
>>
>> *****Pense na Natureza antes de Imprimir*****
>> Divulgue ON-LINE
>>
>> Eu apoio a ENEN "na luta por um Brasil sem fome"
>>
>> "por ĉiu popolo ties propran lingvon, por ĉiuj popoloj la esperantan"
>> (para cada povo sua própria língua, para todos os povos o Esperanto)
>>
>> E nunca votarei no PSDB/DEM!
>>
>> _______________________________________________
>> R-br mailing list
>> R-br em listas.c3sl.ufpr.br
>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>> código mínimo reproduzível.
>>
>
>
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
> código mínimo reproduzível.
>
--
[image: Benilton Carvalho on about.me]
Benilton Carvalho
about.me/benilton
<http://about.me/benilton>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20140729/ebc338e9/attachment.html>
Mais detalhes sobre a lista de discussão R-br