R 用于引导分析的模拟数据集

R 用于引导分析的模拟数据集,r,random-sample,statistics-bootstrap,R,Random Sample,Statistics Bootstrap,我的目标是使用bootstrapping(1000次重复)在20个受刺激的随机对中计算与性状(x)相关的r(皮尔逊相关系数)的零分布、均值和CI,这些随机对由我的600个独特个体(ID)数据集生成。我最近从SAS切换到R,在那里我将使用“proc surveyselect”生成数据集。问题: 产生这些结果的最有效方法是什么(见下面我的尝试) 在我的示例中,如何使用set.seed命令复制结果 具有600个个体和相关特征值的模拟起始数据集: ID <- seq(1, 600, by = 1)

我的目标是使用bootstrapping(1000次重复)在20个受刺激的随机对中计算与性状(x)相关的r(皮尔逊相关系数)的零分布、均值和CI,这些随机对由我的600个独特个体(ID)数据集生成。我最近从SAS切换到R,在那里我将使用“proc surveyselect”生成数据集。问题:

  • 产生这些结果的最有效方法是什么(见下面我的尝试)
  • 在我的示例中,如何使用set.seed命令复制结果
  • 具有600个个体和相关特征值的模拟起始数据集:

    ID <- seq(1, 600, by = 1)
    x <- rnorm(600, m = 7, sd = 2)
    X <- as.data.frame(cbind(ID, x))
    

    ID在一般情况下,隐式循环比显式循环快。尝试将代码放入循环中,并将其放入函数中,然后在lappy或sapply语句中使用该函数

    myfunction = function(<insert relevant parameters here>)
    { 
      X.sample <- X[ sample(1:nrow(X), 40, replace = FALSE), ] 
      X.sample.1 <- X.sample[1:20, ]
      X.sample.2 <- X.sample[21:40, ]
      Y <- as.data.frame(cbind(X.sample.1$ID, X.sample.1$x, X.sample.2$ID,  X.sample.2$x))
      cor.results <- cor.test(Y[,2], Y[,4], alternative = c("greater"), method = c("pearson"))
      cor.results$estimate
    }
    
    Z  = sapply(x, myfunction)
    #Here every element of x contains the arguments you want to pass to my function
    #You can pass multiple arguments separated by commas after the function name
    
    error <- qt(0.975, df = (length(Z) - 1)) * (sd(Z))/sqrt(length(Z))
    
    希望有帮助

    在研究
    boot
    函数以给出一个示例时,我遇到了一个障碍。它只返回一行。奇怪!我可能会就此提出一个新问题。无论如何,我认为
    bootstrap
    包中的
    bootstrap()
    函数将满足您的需求。 这是我的例子

    set.seed(1001)
    X <- rnorm(600, 7, 2)
    
    
    myStat <- function(x, pairs) {
    index = sample(1:length(x),(pairs*2))
    Z = cor(X[index[1:(length(index)/2)]], X[index[((length(index)/2)+1):length(index)]])
    return(Z)
    }
    
    b=bootstrap(X,1000,myStat,pairs=20)
    Z <- b$thetastar
    error <- qt(0.975, length(Z)-1 * sd(Z)/sqrt(length(Z)))
    
    set.seed(1001)
    X试试这个尺码:

    # generate dataset
    set.seed(1)
    X <- rnorm(600, 7, 2)
    
    # Create a function that samples 40 elements from X,
    #  and calculates Pearson's r for the first 20 elements 
    #  against the last 20 elements.
    booties <- function(x) {
      X.samp <- sample(x, 40)
      cor(X.samp[1:20], X.samp[21:40])
    }
    
    # Replicate this function 1000 times (spits out a vector of cor estimates)
    Z <- replicate(1000, booties(X))
    error <- qt(0.975, length(Z)-1 * sd(Z)/sqrt(length(Z)))
    
    #生成数据集
    种子(1)
    
    只需几句注释,代码简洁。。。
    ID
    列在这里显得无关紧要,但如果您确实需要,
    ID感谢您的建议。您能建议如何创建数据集(注意,ID字段上方的好建议完全没有必要)并使用boot命令吗?我试过了,这就是为什么我感觉回到了不太完美的for循环。谢谢,基思
    
    set.seed(1001)
    X <- rnorm(600, 7, 2)
    
    
    myStat <- function(x, pairs) {
    index = sample(1:length(x),(pairs*2))
    Z = cor(X[index[1:(length(index)/2)]], X[index[((length(index)/2)+1):length(index)]])
    return(Z)
    }
    
    b=bootstrap(X,1000,myStat,pairs=20)
    Z <- b$thetastar
    error <- qt(0.975, length(Z)-1 * sd(Z)/sqrt(length(Z)))
    
    # generate dataset
    set.seed(1)
    X <- rnorm(600, 7, 2)
    
    # Create a function that samples 40 elements from X,
    #  and calculates Pearson's r for the first 20 elements 
    #  against the last 20 elements.
    booties <- function(x) {
      X.samp <- sample(x, 40)
      cor(X.samp[1:20], X.samp[21:40])
    }
    
    # Replicate this function 1000 times (spits out a vector of cor estimates)
    Z <- replicate(1000, booties(X))
    error <- qt(0.975, length(Z)-1 * sd(Z)/sqrt(length(Z)))