R z[,1]中的错误:执行引导示例时维度数不正确

R z[,1]中的错误:执行引导示例时维度数不正确,r,statistics-bootstrap,R,Statistics Bootstrap,我使用一个平均值比率来估计总体,T=mean(xbar)/mean(u_bar)使用bootstrapping方法,我得到了这个错误 message, Error in z[, 1] : incorrect number of dimensions. 问题中的代码错误在中 sample(z, replace = TRUE) z是一个矩阵,但当对其应用sample时z被视为一个向量,返回值不再属于“矩阵”和“数组”: 因此,在函数中子集z[,1]不是子集相同的z,而是子集相同名称的函数参数。这

我使用一个平均值比率来估计总体,
T=mean(xbar)/mean(u_bar)
使用bootstrapping方法,我得到了这个错误

message, Error in z[, 1] : incorrect number of dimensions.

问题中的代码错误在中

sample(z, replace = TRUE)
z
是一个矩阵,但当对其应用
sample
z
被视为一个向量,返回值不再属于
“矩阵”
“数组”

因此,在函数中子集
z[,1]
不是子集相同的
z
,而是子集相同名称的函数参数。这是
sample
返回的,一个数值向量

下面是函数及其调用,已更正。最后用数据进行了测试

STAT <- function(z) mean(z[, 1])/mean(z[, 2])

T_stat <- STAT(z)

nBoot <- 2e5
Tboot <- numeric(nBoot)
set.seed(123)
for (i in 1:nBoot) {
  j <- sample(nrow(z), replace = TRUE)
  Tboot[i] = STAT(z[j, ])
}

T_stat
#[1] 1.826662
mean(Tboot)
#[1] 1.878934
测试数据创建代码

set.seed(2020)
X <- rexp(20, rate = 1/4)
U <- rexp(20, rate = 1/2)
z <- cbind(X, U)
set.seed(2020年)

如果您提供了一个最小的可复制示例,那么帮助您会更容易,请参见此处:从提供的代码判断,z的尺寸是问题所在。我只能建议不要将函数命名为“T”或“F”,因为它们在R中用于TRUE和FALSE,这可能会导致以后出现问题。您可以创建带有两列的
Tboot
,然后参考
Tboot[I]
。另外,
T
TRUE
的符号。虽然使用它不会引发错误,但您不能使用其他东西吗?
STAT <- function(z) mean(z[, 1])/mean(z[, 2])

T_stat <- STAT(z)

nBoot <- 2e5
Tboot <- numeric(nBoot)
set.seed(123)
for (i in 1:nBoot) {
  j <- sample(nrow(z), replace = TRUE)
  Tboot[i] = STAT(z[j, ])
}

T_stat
#[1] 1.826662
mean(Tboot)
#[1] 1.878934
STAT2 <- function(z, i) mean(z[i, 1])/mean(z[i, 2])

set.seed(123)
b <- boot::boot(z, STAT2, R = nBoot)

b
#
#ORDINARY NONPARAMETRIC BOOTSTRAP
#
#
#Call:
#boot::boot(data = z, statistic = STAT2, R = nBoot)
#
#
#Bootstrap Statistics :
#    original     bias    std. error
#t1* 1.826662 0.05249037   0.4181259

mean(b$t)
#[1] 1.879153
set.seed(2020)
X <- rexp(20, rate = 1/4)
U <- rexp(20, rate = 1/2)
z <- cbind(X, U)