[R] Fwd: Simulate nested data

Sarah Goslee sarah.goslee at gmail.com
Fri Nov 9 21:25:19 CET 2012


On Fri, Nov 9, 2012 at 3:12 PM, Andrea Goijman
<agoijman at cnia.inta.gov.ar> wrote:
> Thanks Sarah,
>
> Ok, I'll start over... forget the functions that I wrote before and lets
> start from scratch.
> Suppose I want to simulate data; for example n species that belong to g
> groups. Lets say 10 species, where 4 belong to group 1, 3 to group 2, and
> the rest to group 3.
> I want to simulate those values...
> How would you do?

Okay.

What do you know beforehand?
That you have 10 species?
That you have 3 groups?
That 4 species belong to group 1?

You don't really explain which are the inputs and which are the
outputs, and what form either will take.

Say you know just the first two:
ngroups <- 3
nspecies <- 10

species.groups <- sample(seq(1, ngroups, by=1), nspecies, replace=TRUE)
# gives nspecies assigned randomly to ngroups

# I still don't know what p is supposed to be: a vector for
# storing further simulations, one per species?
p <- rep(NA, nspecies)

# and for neatness:
mysims <- data.frame(species = seq(1, nspecies, by = 10), groups =
species.groups, p = p)

> On Fri, Nov 9, 2012 at 2:59 PM, Sarah Goslee <sarah.goslee at gmail.com> wrote:
>>
>> Andrea,
>>
>> I don't understand what you want. Why don't you start over, and
>> explain what the inputs are, and what your desired outputs are.
>>
>> Using your previous code:
>>
>> # pre-specified number of groups
>> groups <- 3
>> # what is species? It needs to be defined before
>> # we can assign a value to a component of it
>> species <- ???
>>
>> # randomly assign between 1 and 10
>> # species per functional group for each group
>> # specified in the groups variable
>> species$groups<-as.integer(runif(groups,1,10))
>>
>> # original code to set up p
>> # I assumed this was supposed to create an
>> # array of groups dimension, but apparently
>> # that isn't true
>> p<-array(NA,dim=c(species$groups))
>>
>> # you wrote:
>> # > I need to have a single value of p per species, and the total number
>> of
>> # > elements in p would be whatever number results from
>> # > species(group1)+species(group2)+species(group3)
>> # which suggests to me that you do not need an array at all, but
>> # simply a vector of the length of the number of species:
>> p <- rep(NA, sum(species$groups))
>>
>> # but that isn't clear to me because I'm not sure what you
>> # mean by species(group1), since there is no species()
>> # function defined
>>
>>
>>
>>
>> On Fri, Nov 9, 2012 at 2:49 PM, Andrea Goijman
>> <agoijman at cnia.inta.gov.ar> wrote:
>> > Yes, I tried your suggestion, but it didn't help. It just creates a
>> > tri-dimentional array for p... and that is not what I want p per species
>> > (within groups) to be an unbalanced array...
>> >
>> > I need to have a single value of p per species, and the total number of
>> > elements in p would be whatever number results from
>> > species(group1)+species(group2)+species(group3)
>> >
>> >
>> >
>> >
>> > On Fri, Nov 9, 2012 at 2:40 PM, Sarah Goslee <sarah.goslee at gmail.com>
>> > wrote:
>> >>
>> >> Andrea,
>> >>
>> >> I simply meant that I couldn't run your code assigning a value to
>> >> species$groups
>> >> because the code didn't include any information about creating the R
>> >> object species. Thus, I changed the name of that R object to
>> >> speciesgroups and altered your code so that it runs by removing the
>> >> erroneous c().
>> >>
>> >> Did you try my suggestion, and did or did it not help your problem?
>> >>
>> >> Sarah
>> >>
>> >> On Fri, Nov 9, 2012 at 2:37 PM, Andrea Goijman
>> >> <agoijman at cnia.inta.gov.ar> wrote:
>> >> > Hi Sarah,
>> >> >
>> >> > Maybe I expressed myself wrong, but so far, I don't have the species;
>> >> > I'm
>> >> > just wanting to generate simulated data. For example, creating an
>> >> > unbalanced
>> >> > (and random) number of species per group, and then run the for-loops
>> >> >
>> >> > for example:
>> >> > Group1: 3 species
>> >> > Group2: 5 species
>> >> > Group3: 8 species
>> >> >
>> >> > then, I want to create an array "p" to be able to fill the following
>> >> > loop
>> >> >
>> >> > for (g in 1:groups){
>> >> >            for (i in 1:species[g]){
>> >> >                p[i] <- rnorm(1, mu.p[g], tau.p[g])
>> >> >      }#species
>> >> > }
>> >> >
>> >> >
>> >> > Andrea
>> >> >
>> >> >
>> >> >
>> >> >
>> >> > On Fri, Nov 9, 2012 at 2:26 PM, Sarah Goslee <sarah.goslee at gmail.com>
>> >> > wrote:
>> >> >>
>> >> >> Hi Andrea,
>> >> >>
>> >> >> Without knowing what species is, I can't run your code as is, but
>> >> >> try
>> >> >> this:
>> >> >>
>> >> >>
>> >> >> groups<-3
>> >> >> speciesgroups <- as.integer(runif(groups,1,10))
>> >> >> # I'd use sample(1:10, groups, replace=TRUE)
>> >> >> p<-array(NA,dim=speciesgroups)
>> >> >>
>> >> >>
>> >> >> Mostly you're trying to use c() on something that's already a
>> >> >> vector.
>> >> >>
>> >> >> Sarah
>> >> >>
>> >> >> On Fri, Nov 9, 2012 at 2:16 PM, Andrea Goijman
>> >> >> <agoijman at cnia.inta.gov.ar> wrote:
>> >> >> > I know this seems like a very easy question (and maye it is) but
>> >> >> > I've
>> >> >> > been
>> >> >> > trying to simulate nested data and been unsucessful so far..
>> >> >> >
>> >> >> > I want to simulate a varying number of species within a group; and
>> >> >> > then
>> >> >> > create an array to store the results of my for-loop. For example:
>> >> >> >
>> >> >> > groups<-3
>> >> >> > species$groups<-as.integer(runif(groups,1,10))  #species per
>> >> >> > functional
>> >> >> > group
>> >> >> >
>> >> >> > ###create arrays to store results
>> >> >> >
>> >> >> > p<-array(NA,dim=c(species$groups))
>> >> >> >
>> >> >> > So, far this is not working...
>> >> >> >
>> >> >> > Thanks!
>> >> >>
>> >> >>
>>




More information about the R-help mailing list