[R] rlnorm behaviour

Thierry Onkelinx thierry.onkelinx at inbo.be
Tue Jun 14 17:15:28 CEST 2016


Dear Ayyappa,

ifelse works on a vector. See the example below.

ifelse(
  sample(c(TRUE, FALSE), size = length(letters), replace = TRUE),
  letters,
  LETTERS
)

However, note that it will recycle short vectors when they are not of equal
length.

ifelse(
  sample(c(TRUE, FALSE), size = 2 * length(letters), replace = TRUE),
  letters,
  LETTERS
)

In your code the length of the condition vector is 200, the length of the
two other vectors is 100.

Best regards,

ir. Thierry Onkelinx
Instituut voor natuur- en bosonderzoek / Research Institute for Nature and
Forest
team Biometrie & Kwaliteitszorg / team Biometrics & Quality Assurance
Kliniekstraat 25
1070 Anderlecht
Belgium

To call in the statistician after the experiment is done may be no more
than asking him to perform a post-mortem examination: he may be able to say
what the experiment died of. ~ Sir Ronald Aylmer Fisher
The plural of anecdote is not data. ~ Roger Brinner
The combination of some data and an aching desire for an answer does not
ensure that a reasonable answer can be extracted from a given body of data.
~ John Tukey

2016-06-14 17:02 GMT+02:00 Ayyappa Chaturvedula <ayyappach op gmail.com>:

> Dear Group,
>
> I am trying to simulate a dataset with 200 individuals with random
> assignment of Sex (1,0) and Weight from lognormal distribution specific to
> Sex.  I am intrigued by the behavior of rlnorm function to impute a value
> of Weight from the specified distribution.  Here is the code:
> ID<-1:200
> Sex<-sample(c(0,1),200,replace=T,prob=c(0.4,0.6))
> fulldata<-data.frame(ID,Sex)
> fulldata$Wt<-ifelse(fulldata$Sex==1,rlnorm(100, meanlog = log(85.1), sdlog
> = sqrt(0.0329)),
>                     rlnorm(100, meanlog = log(73), sdlog = sqrt(0.0442)))
>
> mean(fulldata$Wt[fulldata$Sex==0]);to check the mean is close to 73
> mean(fulldata$Wt[fulldata$Sex==1]);to check the mean is close to 85
>
> I see that the number of simulated values has an effect on the mean
> calculated after imputation. That is, the code rlnorm(100, meanlog =
> log(73), sdlog = sqrt(0.0442)) gives much better match compared to
> rlnorm(1, meanlog = log(73), sdlog = sqrt(0.0442)) in ifelse statement in
> the code above.
>
> My understanding is that ifelse will be imputing only one value where the
> condition is met as specified.  I appreciate your insights on the behavior
> for better performance of increasing sample number.  I appreciate your
> comments.
>
> Regards,
> Ayyappa
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help op r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list