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