首页 > 解决方案 > 在 R 中模拟 n=25、mean=45、sd=4 的 100 个样本

问题描述

这是我拥有的代码

sample<-rnorm(25,45,4)
sample[1:100]

但它只返回几个样本,其余的则为 NA。

我对 R 很陌生,所以我不知道该怎么做。

标签: r

解决方案


这是一个解决方案。
首先,用 模拟数据replicate,就像我在评论中所说的那样。来自help("replicate")

replicate 是 sapply 常用的包装器,用于重复评估表达式(通常涉及随机数生成)。

set.seed(2021)
data <- replicate(100, rnorm(25, 45, 4))

现在运行测试,结果保存在一个列表中。

alpha <- 0.05

ttest_list <- apply(data, 2, t.test, mu = 43, alternative = "less", conf.level = 1- alpha)
ttest_list[[1]]
#
#   One Sample t-test
#
#data:  newX[, i]
#t = 3.1329, df = 24, p-value = 0.9977
#alternative hypothesis: true mean is less than 43
#95 percent confidence interval:
#     -Inf 47.38754
#sample estimates:
#mean of x 
# 45.83782 
#

如果apply循环对 OP 来说仍然不是很清楚,这经常发生在 R 的新用户身上,那么下面的for循环可能是一个更好的选择。

测试列表是预先创建的,并在循环中填充了测试结果。注意使用seq_along.

ttest_list2 <- vector(mode = "list", length = ncol(data))
for(i in seq_along(ttest_list2)){
  ttest_list2[[i]] <- t.test(data[, i], mu = 43, alternative = "less", conf.level = 1- alpha)
}

可以使用 提取感兴趣的值sapply

tstat <- sapply(ttest_list, '[[', 'statistic')
pvalues <- sapply(ttest_list, '[[', 'p.value')

tstat2 <- sapply(ttest_list2, '[[', 'statistic')
pvalues2 <- sapply(ttest_list2, '[[', 'p.value')

两种进行测试的方式是等效的。

identical(tstat, tstat2)
#[1] TRUE
identical(pvalues, pvalues2)
#[1] TRUE

不在问题中:

hist(tstat, prob = TRUE)

推荐阅读