Search code examples
rfunctioncorrelationsampling

Sampling for making a correlation in R


I have the following data (it is a short example):

a=c(110.3,126.6,101,7,105.6,111,131.4,109.7,99.5,107.3)
b=c(210,47.5,234.5,223.9,213.4,250.1,198.3,180.3,170.9,118.9)
c=c(0.6,0.9,0.4,0.5,0.6,0.8,0.8,0.5,0.4,0.6)

val= cbind(a,b,c)
val=as.data.frame(val)

And I want to generate a sample with a function (a correlation between a and b) So I have the following function:

acc_func <-function(myVal){
  newPop = sample(myVal,nrow(myVal), replace=TRUE)
  return((cor(newPop$a, newPop$b)^2)/mean(newPop$c))
}

results = matrix(,ncol=1,nrow=0)
for(i in 1:1000){
  accNow = acc_func(val)
  results = rbind(results,accNow)
}

head(results)

But for some reason that I don´t understand, R returns the following message:

Error in cor(newPop$a, newPop$b) : 
supply both 'x' and 'y' or a matrix-like 'x' 

Any ideas?

Thank you very much


Solution

  • You can put a size argument inside your acc_func() to determine the sample size as follows,

    acc_func <-function(myVal,size){
      newPop = myVal[sample(1:nrow(myVal),size=size,replace=T),]
    
      return((cor(newPop$a, newPop$b)^2)/mean(newPop$c))
    }
    
    
    results = matrix(,ncol=1,nrow=0)
    for(i in 1:1000){
      accNow = acc_func(val)
      results = rbind(results,accNow)
    }
    
    
    head(results)
    

    gives,

                [,1]
    accNow 0.1008954
    accNow 0.2389546
    accNow 0.3955409
    accNow 0.1851096
    accNow 0.1526633
    accNow 0.3613495