尝试编写一个函数来模拟来自两个样本的单个t统计量

时间:2019-05-22 16:43:46

标签: r simulation montecarlo

我正在尝试编写自己的函数,该函数可从两个大小相等的样本中模拟t统计量。

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)(平均值(x1)-   mean(x2)):尝试应用非功能

1 个答案:

答案 0 :(得分:0)

您想对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检验。上面的代码可以做到。