首页 > 解决方案 > 尝试编写一个从两个样本中模拟单个 t 统计量的函数

问题描述

我正在尝试编写自己的函数,该函数从两个相同大小的样本中模拟 t-stat。

cntrl <- c(8.4,8.1,5.1,7.6,4.7,10.7,5.7,4.1,8.1,6.8)
strv <- c(12.4,15.8,11.7,8.6,12.6,11.1,10.5,7.3,7.2,10.8)

我将 cntrl 放入示例中,但我将 strv 放在哪里?

single_rt <- function(size1, size2) {x1 <-sample(x=cntrl, size =size1, replace = TRUE) (mean(x1)-mean(x2))/sqrt((var(x1)/size2) +(var(x2)/size1))}

my_rt <- function(n, size1, size2) {replicate(n=n, expr = single_rt(size1=size1, size2 = size2))}

num_reps <- 10000; N1 <-10; N2 <- 10

t.stats <-my_rt(n=num_reps, size1 = N1, size2 = N2)

我得到这个错误代码

样本错误(x = cntrl,size = size1,replace = TRUE)(mean(x1)-mean(x2)):尝试应用非函数

标签: rsimulationmontecarlo

解决方案


你想做什么rnorm

一种可能性是:

single_rt <- function(size1, size2){
  x1 <- rnorm(n = size1)
  x2 <- rnorm(n = size2)
  return((mean(x1)-mean(x2))/sqrt((var(x1)/size2) + (var(x2)/size1)))}

my_rt <- function(n, size1, size2, x1, x2){
  replicate(n=n, expr = single_rt(size1=size1, size2 = size2))}
num_reps <- 10000
N1 <- 10
N2 <- 10

t.stats <-my_rt(n=num_reps, size1 = N1, size2 = N2)

如果您仔细查看该rnorm函数,它需要 3 个参数而不是向量。如果你想用噪声扰乱你的样本,你应该做不同的事情。

如果你想使用sample我建议你的功能,下面的代码是你应该使用的:

single_rt_bis <- function(size1, size2, x1 = x1, x2 = x2){
  x1 <- sample(x=x1, size = size1, replace = TRUE)
  x2 <- sample(x=x2, size = size2, replace = TRUE)
  return((mean(x1)-mean(x2))/sqrt((var(x1)/size2) + (var(x2)/size1)))}


my_rt <- function(n, size1, size2, x1, x2){
  replicate(n = n, expr = single_rt_bis(size1 = size1, size2 = size2, x1 = x1, x2 = x2))}

num_reps <- 10000
N1 <- 10
N2 <- 10

t.stats <-my_rt(n = num_reps, size1 = N1, size2 = N2, x1 = cntrl, x2 = strv)

实际上,您想要做的似乎是使用 boostrap 来模拟相同样本的不同 t 检验。上面的代码正是这样做的。


推荐阅读