2015-05-21 3 views
1

Я хотел бы продемонстрировать, как ширина 95% -ного доверительного интервала вокруг корреляции изменяется с увеличением размера выборки от n = 10 до n = 100 с шагом в 5 выборок за раунд. Я бы предположил, что мы можем использовать функцию бутстрапа для этого и тиражировать каждый раунд 1000 раз. Как это можно сделать в R? См: http://www.nicebread.de/at-what-sample-size-do-correlations-stabilize/Коррекция корреляции бутстрапа с увеличением размера выборки

Мы можем использовать данные алмазов:

data(diamonds) 
x <- diamonds$price 
y <- diamonds$carat 

ответ

3

Вы можете добавить диаграмму и оси титулы себя, но этот код делает то, что я думаю, что вы ищете с помощью 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) 

Sample size vs. correlation

Здесь V4 является размер выборки ,

+0

Очень приятно! Возможно ли это увеличить таким образом для каждого размера выборки (от 5 до 100) мы тиражируем розыгрыш 1000 раз и аналогичным образом сообщают среднее значение корреляции для каждого размера выборки плюс соответствующий верхний и нижний CI? [См. Ответ josilber ниже] – Nordenskiold

+0

Итак, вы не ищете математически определенный доверительный интервал для корреляции с данным размером выборки, вы действительно хотите загружать 1000 наборов для каждого размера выборки и получать CI для распределения корреляций? Вы должны быть в состоянии сделать это, объединив наши ответы. Используйте его ответ, чтобы сгенерировать ваши образцы, а затем сделайте верхнюю и нижнюю границы geom_ribbon верхним и нижним значениями CI. –

1

Вы можете перебрать ваши размеры образца с 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") 

enter image description here

Смежные вопросы