[R] @ Mike warning in a loop

Tavpritesh tavpritesh at gmail.com
Sun Jun 24 23:27:32 CEST 2007


Hi Mike,
Thanks for the help, but I want to conduct tests, not between column 1 & 2
of the data but between the values of column two itself which have been
categorized into 3 classes, and indexed in column 1 as 1,2 and 3. Also if
you could help me with the commands for ANOVA for the same purpose, for
three classes.
Thanks.


Mike Meredith wrote:
> 
> 
> You can investigate what's gone wrong after the loop has failed by looking
> at the values of i, k, p, and t. Although d[(d[,(i+1)]%in%1),1] produces a
> vector, k has only one element. Same with p. Should then be obvious why
> the t.test produces an error.
> 
> The problem is with the [i] index for k and p; take those away and it
> works. If you want to keep the values generated in the loop, make k and p
> lists and index with k[[i]] and p[[i]].
> 
> 
> A better way to do this would be to use 'sample' to randomize the measured
> values in d[,1] and then use d[,2] to group them for testing. You can then
> use hundreds of iterations:
> 
> t <- rep(NA, 999) 
> for(i in 1:999) {
>    samp <- sample(d[,1])
>    t <- t.test(samp[d[,2]==1], samp[d[,2]==2])$p.value
> }
> sum(t < 0.05)  # How many were 'significant'?
> 
> Note that I prefer to use t <- rep(NA,...) to allocate space, rather than
> 1:999, so that NA appears as the result if there's a problem.
> 
> Why not just do a randomization test?
> 
> t <- rep(NA, 1000)
> t[1] <- mean(d[d[,2]==1,1]) - mean(d[d[,2]==2,1]) # This is the observed
> difference in means
> for(i in 2:1000) {
>    samp <- sample(d[,1])
>    t[i] <- mean(samp[d[,2]==1]) - mean(samp[d[,2]==2])
> }
> t <- abs(t)   # Skip this line if you want a 1-sided test
> sum(t >= t[1])/1000  # This is the 'p-value'
> 
> HTH, Mike.
> 
> 
> Tavpritesh Sethi wrote:
>> 
>> hi all,
>> I have a matrix with first column having some measurable values, these
>> are
>> indexed by the numerals 1,2 and 3 in the other columns of the data and
>> may
>> be interpreted as values for categories 1,2 and 3.
>> I have written the following loop
>> t<-1:10
>>  for(i in 1:10)
>> + {
>> + k[i]<-d[(d[,(i+1)]%in%1),1]
>> + p[i]<-d[(d[,(i+1)]%in%2),1]
>> + t[i]<-t.test(k[i],p[i])$p.value
>> + }
>> Error in t.test.default(k[i], p[i]) : not enough 'x' observations
>> In addition: Warning messages:
>> 1: number of items to replace is not a multiple of replacement length
>> 2: number of items to replace is not a multiple of replacement length
>> 
>> As you might have understood, I want to test for difference between the
>> two
>> cagories: "k" and "v". the second column of the data is the original
>> categorization and the rest columns(3:10) are a matrix of randomized
>> values
>> between 1 to 3. (I have three categories)
>> My purpose of doing so is to check whether significant difference comes
>> up
>> in the randomized data also. This is to check the effect of the small
>> sample
>> size of my data.
>> Please suggest a way or an alternative to the above approach.
>> 
>> 	[[alternative HTML version deleted]]
>> 
>> ______________________________________________
>> R-help at stat.math.ethz.ch 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.
>> 
>> 
> 
> 

-- 
View this message in context: http://www.nabble.com/warning-in-a-loop-tf3969850.html#a11278677
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list