多次采样并使用趋势线计算平均值的标准偏差和标准误差

问题描述 投票:0回答:1

假设我有以下数据:

df1<-rnorm(100,000, 20,5)

我想从df1获得以下样本,每个样本有50个试验:

C=( 25,50,100,200,300,400,500,600)

接下来,我想绘制一条趋势线。在趋势线图中,x轴=样本大小,y轴是SDSEM。抱歉,我无法绘制情节,但希望我的描述很清楚。谢谢你的帮助。

r random sampling
1个回答
0
投票

我不确定您要在这里做什么,但这是我想通过的第一步:

library(ggplot2)

my_theme = theme_minimal() + theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"), legend.title = element_blank())

df1 <- rnorm(100000, 20, 5)

df <- data.frame(sample_size = c(25,50,100,200,300,400,500,600))

samples <- lapply(df$sample_size, function (x) {sample(df1, x)})

df$std <- sapply(samples, sd)
df$se <- sapply(samples, function(x) {sd(x)/sqrt(length(x))})


ggplot(data = df) + geom_point(aes(x = sample_size, y = std, colour = "std")) + geom_point(aes(x = sample_size, y = se, colour = "se")) + 
    geom_smooth(aes(x = sample_size, y = std), method = "lm",) +
    geom_smooth(aes(x = sample_size, y = se), method = "lm") + my_theme

我更喜欢将ggplot2库用于绘图,而不是基数R附带的库。您可以忽略my_theme部分,这只是我所喜欢的美学。这是情节:

enter image description here

如果这不是您要查找的内容,除非我完全误解了您的问题,否则您应该可以修改这里的内容以获取所需的内容。无论如何,重要的部分是使用lapplysampledf1获取样本列表。然后,您可以仅使用sapplysd计算每个的标准偏差,并使用sapplysdsqrtlength计算标准误差。

sapplylapply都非常有用,特别是因为用户定义的函数可以作为参数传递。我建议查看lapply以了解其作用(sapply只是lapply的包装,它返回一个向量)。

© www.soinside.com 2019 - 2024. All rights reserved.