r - 创建循环以运行统计测试
问题描述
我需要运行统计测试并计算 p_hat_6,使用来自 X ∼ uniform(0, 14) 的 N = 10 个样本,每个样本大小为 n = 10。这是我在 mu=6 处计算 p_hat 的原始循环:
pvalue <- rep(0,10)
reject <- 0
alpha <- 0.05
N <- 10
for (n in seq_along(pvalue)){
pvalue[n] <- wilcox.test(runif(10,0,14), mu=6)$p.value
reject[n] <- ifelse(pvalue[n] > alpha,0,1)
}
p_hat_6 <- (sum(reject))/N
p_hat_6
使用相同的 N 和 n,我需要再重复 5 次,并进行以下更改:
(1) Data from X ∼ uniform(0, 16) and compute p_hat_7 (mu=7)
(2) Data from X ∼ uniform(0, 18) and compute p_hat_8 (mu=8)
(3) Data from X ∼ uniform(0, 20) and compute p_hat_9 (mu=9)
(4) Data from X ∼ uniform(0, 22) and compute p_hat_10 (mu=10)
(5) Data from X ∼ uniform(0, 24) and compute p_hat_11 (mu=11)
当间隔每次增加 2 并且 mu 每次增加 1 时,我如何循环?
解决方案
我们可以创建一个函数
fun1 <- function(N, pvalue, reject, max_val, mu_val) {
for (n in seq_along(pvalue)){
pvalue[n] <- wilcox.test(runif(N ,0, max_val), mu=mu_val)$p.value
reject[n] <- ifelse(pvalue[n] > alpha,0,1)
}
p_hat_6 <- (sum(reject))/N
return(p_hat_6)
}
并将其用于Map
Map(fun1, max_val = seq(14, 24, by = 2), mu_val = 6:11,
MoreArgs = list(N = 10, pvalue = pvalue, reject = reject))
-输出
[[1]]
[1] 0
[[2]]
[1] 0.2
[[3]]
[1] 0.2
[[4]]
[1] 0
[[5]]
[1] 0.1
[[6]]
[1] 0.2
或者在函数周围创建一个外循环
mu_val <- 6:11
max_val <- seq(14, 24, by = 2)
out <- numeric(length(mu_val))
for(i in seq_along(mu_val)) {
out[i] <- fun1(N = 10, pvalue = pvalue,
reject = reject, max_val = max_val[i], mu_val = mu_val[i])
}
out
[1] 0.1 0.1 0.1 0.1 0.3 0.0
数据
N <- 10
pvalue <- rep(0, N)
reject <- rep(0, N)
alpha <- 0.05
推荐阅读
- vue.js - 如何使 .vue 文件在 VS2019 Net Code 3.1 中工作
- bigcommerce - 如何使 BigCommerce 小部件与 PageBuilder 兼容
- azerothcore - 艾泽拉斯世界服务器无法启动win10
- django - 在 Django 项目中将网站图标放在哪里?
- reactjs - React.Lazy(() => import 在 Firefox 上不起作用,使用 HTTPS
- xml - 将xml数据转换成csv格式
- angularjs - 用于验证字符串的 ngPattern
- qt - 为什么我的 QML 代码从 Qt.labs 加载 FileDialog,尽管我导入了 QtQuick.Dialogs?
- identityserver4 - Web 应用程序中的 IdentityServer4 登录名和用户
- javascript - AJAX jQuery。从 SharePoint 列表中提取日期和时间字段。为什么它以时髦的格式显示?