R 随样本量增加的自举相关系数
我想演示相关性周围95%置信区间的宽度如何随样本量的增加而变化,从n=10到n=100,每轮增加5个样本。我假设我们可以使用bootstrap函数来实现这一点,并将每轮复制1000次。如何在R中实现这一点? 见: 我们可以使用钻石数据:R 随样本量增加的自举相关系数,r,ggplot2,replication,correlation,confidence-interval,R,Ggplot2,Replication,Correlation,Confidence Interval,我想演示相关性周围95%置信区间的宽度如何随样本量的增加而变化,从n=10到n=100,每轮增加5个样本。我假设我们可以使用bootstrap函数来实现这一点,并将每轮复制1000次。如何在R中实现这一点? 见: 我们可以使用钻石数据: data(diamonds) x <- diamonds$price y <- diamonds$carat 数据(菱形) x您可以使用sapply循环您的样本大小,并为每个样本大小抽取1000个适当大小的随机样本,报告置信区间的平均宽度: se
data(diamonds)
x <- diamonds$price
y <- diamonds$carat
数据(菱形)
x您可以使用sapply
循环您的样本大小,并为每个样本大小抽取1000个适当大小的随机样本,报告置信区间的平均宽度:
set.seed(144)
ci.widths <- sapply(seq(10, 100, 5), function(x) mean(replicate(1000, {
r <- sample(nrow(diamonds), x, replace=TRUE)
diff(cor.test(diamonds$price[r], diamonds$carat[r])$conf.int)
})))
plot(seq(10, 100, 5), ci.widths, xlab="Sample size", ylab="CI width")
set.seed(144)
ci.widths您可以使用sapply
循环您的样本大小,并为每个样本大小抽取1000个适当大小的随机样本,报告置信区间的平均宽度:
set.seed(144)
ci.widths <- sapply(seq(10, 100, 5), function(x) mean(replicate(1000, {
r <- sample(nrow(diamonds), x, replace=TRUE)
diff(cor.test(diamonds$price[r], diamonds$carat[r])$conf.int)
})))
plot(seq(10, 100, 5), ci.widths, xlab="Sample size", ylab="CI width")
set.seed(144)
ci.widths您可以自己添加图表和轴标题,但这段代码实现了我认为您使用ggplot2和“心理测量”软件包需要的功能:
library(ggplot2)
library(psychometric)
corSamp <- function(x) {
# return the correlation between price and carat on diamonds for a given sample size
index <- sample(1:nrow(diamonds), x)
carat <- diamonds$carat[index]
price <- diamonds$price[index]
return(cor(carat, price))
}
cors <- sapply(seq(5,100,5), corSamp)
lower <- sapply(1:20, function(i) return(CIr(r = cors[i], n = seq(5,100,5)[i], level = 0.95)[1]))
upper <- sapply(1:20, function(i) return(CIr(r = cors[i], n = seq(5,100,5)[i], level = 0.95)[2]))
myData <- data.frame(cbind(cors, lower, upper, seq(5,100,5)))
myPlot <- ggplot(myData, aes(x = V4, y = cors)) + geom_line() + geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.5)
库(ggplot2)
图书馆(心理测量学)
corSamp您可以自己添加图表和轴标题,但这段代码实现了我认为您在使用ggplot2和“心理测量”软件包时需要的功能:
library(ggplot2)
library(psychometric)
corSamp <- function(x) {
# return the correlation between price and carat on diamonds for a given sample size
index <- sample(1:nrow(diamonds), x)
carat <- diamonds$carat[index]
price <- diamonds$price[index]
return(cor(carat, price))
}
cors <- sapply(seq(5,100,5), corSamp)
lower <- sapply(1:20, function(i) return(CIr(r = cors[i], n = seq(5,100,5)[i], level = 0.95)[1]))
upper <- sapply(1:20, function(i) return(CIr(r = cors[i], n = seq(5,100,5)[i], level = 0.95)[2]))
myData <- data.frame(cbind(cors, lower, upper, seq(5,100,5)))
myPlot <- ggplot(myData, aes(x = V4, y = cors)) + geom_line() + geom_ribbon(aes(ymin = lower, ymax = upper), alpha = 0.5)
库(ggplot2)
图书馆(心理测量学)
corSamp非常好!是否有可能加强这一点,因此对于每个样本量(5到100),我们重复绘制1000次,并以类似的方式报告每个样本量的相关性平均值,以及相应的上限和下限CI?[见下面josilber的回答]那么你不是在寻找给定样本量的相关性的数学确定置信区间,你实际上想要为每个样本量引导1000个集合,并获得相关性分布的CI?你应该能够通过结合我们的答案来做到这一点。使用他的答案生成样本,然后将geom_ribbon的上限和下限设为上限和下限CI值。非常好!是否有可能加强这一点,因此对于每个样本量(5到100),我们重复绘制1000次,并以类似的方式报告每个样本量的相关性平均值,以及相应的上限和下限CI?[见下面josilber的回答]那么你不是在寻找给定样本量的相关性的数学确定置信区间,你实际上想要为每个样本量引导1000个集合,并获得相关性分布的CI?你应该能够通过结合我们的答案来做到这一点。使用他的答案生成示例,然后将geom_功能区的上下界设置为CI值的上下界。