Table 在单元格中有间隔
Table with intervals in cells
我正在尝试将统计数据的一些置信区间放入 table,但是这个结构对我来说很棘手。我希望它看起来像这样
Level
Percentile
Student's
95%
[p1, p2]
[t1, t2]
其中 p1、p2 和 t1、t2 是部分使用 quantile
函数计算的数字。
示例代码,我刚刚生成了一些用于计算的随机数。
set.seed(42) #Arbitrary random seed
alk <- rexp(800,rate=1) #some random numbers
N <- 10^4
#Reserving space
Tstar <- numeric(N)
xbarstar <- numeric(N)
xbar <- mean(alk)
n <- length(alk)
for (i in 1:N)
{
bootsamp <- sample(alk,size=n,replace=T)
Tstar[i] <- (mean(bootsamp) - xbar)/(sd(bootsamp)/sqrt(n)) #for t-confidence
xbarstar[i] <- mean(bootsamp) #For the bootstrap percentile calc.
}
alpha<-0.05
#bootstrap t Confidence interval
boot.t <-xbar - quantile(Tstar,c(1-alpha/2,alpha/2))*sd(alk)/sqrt(n)
#bootstrap percentile
boot.p <- quantile(xbarstar,c(alpha/2,1-alpha/2))
nams<-c("level","percentile","student")
A <- matrix(data=nams,nrow=1,ncol=3)
A <- rbind(A,c("95%","[1.004, 1.1536]","[1.00131, 1.148672]"))
print(A)
当然,这很糟糕,因为我手动输入了间隔值,但这只是为了让您了解我想要什么 - 我知道使用矩阵可能也不是正确的方法。
特别是,我对如何将 [1.004, 1.1536]
放入单个单元格感到困惑。我知道我可以通过使用 boot.t[[1]]
和 boot.t[[2]]
分别引用这两个数字,或者通过使用 unname(boot.t)
将它们作为向量同时获取 - 但这对我没有帮助如上所述,将它们排列成一个单元格。
此外,打印矩阵或做 as.table(A)
会给出 [1]、[2]、[3] 中令人讨厌的 headers 或 A、B、C 对于 columns/rows 我不知道的我不想。
P.s。这里的数学并不是很重要,我只需要帮助将结果安排在一个漂亮的表格中。
您可以使用 sprintf
和 toString
来格式化 table。
A <- data.frame(level = '95%',
Percentile = sprintf('[%s]', toString(round(boot.t, 3))),
Student = sprintf('[%s]', toString(round(boot.p, 3))))
A
# level Percentile Student
#1 95% [1.004, 1.154] [1.001, 1.149]
我正在尝试将统计数据的一些置信区间放入 table,但是这个结构对我来说很棘手。我希望它看起来像这样
Level | Percentile | Student's |
---|---|---|
95% | [p1, p2] | [t1, t2] |
其中 p1、p2 和 t1、t2 是部分使用 quantile
函数计算的数字。
示例代码,我刚刚生成了一些用于计算的随机数。
set.seed(42) #Arbitrary random seed
alk <- rexp(800,rate=1) #some random numbers
N <- 10^4
#Reserving space
Tstar <- numeric(N)
xbarstar <- numeric(N)
xbar <- mean(alk)
n <- length(alk)
for (i in 1:N)
{
bootsamp <- sample(alk,size=n,replace=T)
Tstar[i] <- (mean(bootsamp) - xbar)/(sd(bootsamp)/sqrt(n)) #for t-confidence
xbarstar[i] <- mean(bootsamp) #For the bootstrap percentile calc.
}
alpha<-0.05
#bootstrap t Confidence interval
boot.t <-xbar - quantile(Tstar,c(1-alpha/2,alpha/2))*sd(alk)/sqrt(n)
#bootstrap percentile
boot.p <- quantile(xbarstar,c(alpha/2,1-alpha/2))
nams<-c("level","percentile","student")
A <- matrix(data=nams,nrow=1,ncol=3)
A <- rbind(A,c("95%","[1.004, 1.1536]","[1.00131, 1.148672]"))
print(A)
当然,这很糟糕,因为我手动输入了间隔值,但这只是为了让您了解我想要什么 - 我知道使用矩阵可能也不是正确的方法。
特别是,我对如何将 [1.004, 1.1536]
放入单个单元格感到困惑。我知道我可以通过使用 boot.t[[1]]
和 boot.t[[2]]
分别引用这两个数字,或者通过使用 unname(boot.t)
将它们作为向量同时获取 - 但这对我没有帮助如上所述,将它们排列成一个单元格。
此外,打印矩阵或做 as.table(A)
会给出 [1]、[2]、[3] 中令人讨厌的 headers 或 A、B、C 对于 columns/rows 我不知道的我不想。
P.s。这里的数学并不是很重要,我只需要帮助将结果安排在一个漂亮的表格中。
您可以使用 sprintf
和 toString
来格式化 table。
A <- data.frame(level = '95%',
Percentile = sprintf('[%s]', toString(round(boot.t, 3))),
Student = sprintf('[%s]', toString(round(boot.p, 3))))
A
# level Percentile Student
#1 95% [1.004, 1.154] [1.001, 1.149]