Hi Carrie,

Try running the following:

# function to create y using binomials and normals
# -- this function is based on option 2
makey <- function(d){
 spd <- with(d, split(d, x))
 do.call(c, lapply(spd, function(comp)
         with(comp, ifelse(t == 0, rbinom(sum(t==0), 1, 0.2),
            rnorm(sum(t!=0))))))
 }

set.seed(1)  # for replication
transform(d, y = replicate(5, makey(d)))

I ran it five times and observed different values each time, which confirms
it is random.

HTH,
Jorge


On Thu, Jun 3, 2010 at 8:22 PM, Carrie Li <> wrote:

> Yes, in my case here, each strata has the same number of 0's and 1's. But I
> want the y to be randomly generated within each strata, so y should have
> some difference across the strata. (at least for the rnorm part we would see
> much clear randomness)
> (I hope what I am asking here is clear to you. )
>
> Using option 2 you provided previously
> the output:
>
>
> > cbind(x, t,y)
>       x t         y
>  [1,] 1 0 0.0000000
>  [2,] 1 0 0.0000000
>  [3,] 1 1 0.8920037
>  [4,] 1 1 1.6695435
>  [5,] 1 1 0.8289429
>  [6,] 2 0 0.0000000
>  [7,] 2 0 0.0000000
>  [8,] 2 1 0.8289429
>  [9,] 2 1 0.8920037
> [10,] 2 1 1.6695435
> [11,] 3 0 0.0000000
> [12,] 3 0 0.0000000
> [13,] 3 1 1.6695435
> [14,] 3 1 0.8289429
> [15,] 3 1 0.8920037
>
>
> For the rnorm part, it seems only take 3 values 1.66954, 0.82894, and
> 0.8920
>
>
>
>
> On Thu, Jun 3, 2010 at 8:16 PM, Jorge Ivan Velez <jorgeivanve...@gmail.com
> > wrote:
>
>> Hi Carrie,
>>
>> It works just fine in this case because you have the same number of 0's
>> and 1's within each strata. If that would not be the case, option 1 would
>> not work. That's why I provided you a second option.
>>
>> Best,
>> Jorge
>>
>>
>> On Thu, Jun 3, 2010 at 7:24 PM, Carrie Li <> wrote:
>>
>>> Thanks! Jorge
>>> Just one more question I don't get it even after checking help
>>> For option, why just using with(d,...), ifelse works on stratum indexed
>>> by x automatically ?
>>> Since in with, we didn't specify the stratum is indexed by x, what if you
>>> have another categorical variable in the data ?
>>> Thanks again!
>>>
>>>
>>>
>>>
>>> On Thu, Jun 3, 2010 at 12:21 PM, Jorge Ivan Velez <
>>> jorgeivanve...@gmail.com> wrote:
>>>
>>>> Hi Carrie,
>>>>
>>>> Here are two options:
>>>>
>>>> # Option 1
>>>> d <- data.frame(x, t)
>>>> y <- with(d, ifelse(t == 0, rbinom(2, 1, 0.2), rbinom(3, 1, 0.8)))
>>>> y
>>>>
>>>> # Option 2  -- more general case, e.g. you do not know
>>>> #  how many 0's and 1's you have within each strata
>>>> spd <- with(d, split(d, x))
>>>> do.call(c, lapply(spd, function(comp)
>>>>                 with(comp, ifelse(t == 0, rbinom(sum(t==0), 1, 0.2),
>>>> rbinom(sum(t!=0), 1, 0.8)))))
>>>>
>>>> HTH,
>>>> Jorge
>>>>
>>>>
>>>> On Thu, Jun 3, 2010 at 11:49 AM, Carrie Li <> wrote:
>>>>
>>>>>  Dear R-helpers,
>>>>>
>>>>> I would like to generate a binary random variable within a stratum's
>>>>> stratum. Here is a simple example.
>>>>>
>>>>>
>>>>> ## x is the first level strata index, here I have 3 strata.
>>>>> x=c(rep(1,5), rep(2,5), rep(3,5))
>>>>>
>>>>> ## within x, there is a second strata indexed by t=0 and t=1
>>>>> t=rep(c(0,0,1,1,1),3)
>>>>>
>>>>>
>>>>> ## and within strata i and t=0 and t=1, I generate the random binomial
>>>>> variable respectively, and save in y
>>>>> y=rep(NA, length(x))
>>>>> for (i in 1:3)
>>>>> {
>>>>> y[(x==i)&(t==0)]=rbinom(2, 1, 0.2)
>>>>> y[(x==i)&(t==1)]=rbinom(3, 1, 0.8)
>>>>> }
>>>>>
>>>>>
>>>>> My question: is there any way to avoid the for loop, since I have the
>>>>> first
>>>>> level strata has thousands of strata. (Within each x stratum, the t
>>>>> only has
>>>>> 2 levels, 0 and 1 )
>>>>>
>>>>> Thanks for any help!
>>>>>
>>>>> Carrie
>>>>>
>>>>>        [[alternative HTML version deleted]]
>>>>>
>>>>>
>>>>> ______________________________________________
>>>>> R-help@r-project.org mailing list
>>>>> 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]]

______________________________________________
R-help@r-project.org mailing list
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.

Reply via email to