我需要进行分析,我们需要将GBM算法应用于一系列自举重复。另一个问题是每个重复都需要具有分位数标准化结果。 我想要最终实现的是 1.从主数据集开始 2.创建包含200个重采样的三维数组 3.分位数对每个重采样中的结果变量进行标准化 4.在所有样本中运行GBM
现在,我甚至无法进行重新采样步骤。
#generating some data
main<-matrix(
replicate(52,rnorm(1132)),
ncol=52,
nrow=1132,
dimnames = list(
1:1132,
1:52)
)
colnames(main)[1]<-"outcome"
#trying to create 200 resampled replicates
resampled = array (
rep(NA),
dim= c(1000, ncol(main), 200),
dimnames= list(
1:1000,
colnames(main),
1:200
)
)
for (i in 1:dim(resampled)[1]) {
for (j in 1:dim(resampled)[2]) {
for (k in 1:dim(resampled)[3]) {
resampled[i,j,k]= main[sample(nrow(main), size=1000, replace=TRUE),]
}
}}
我很确定这是因为我没有正确指定循环,但经过数周的搜索,我找不到能够帮助我的示例代码。
我目前收到错误消息: 重采样[i,j,k] = main [样本(nrow(main),size = 1000,replace = TRUE)出错,: 要替换的项目数量不是替换长度的倍数
答案 0 :(得分:0)
循环中的问题是resampled[i,j,k]
期望接收一个元素但main[sample(nrow(main), size=1000, replace=TRUE),]
返回1000x52矩阵。
我做了一个基于你的小例子。尝试以下代码,看看这是否是您期望获得的结果:
ncol = 3
nrow = 10
sample.size = 5
sample.rep = 4
#generating some data
main<-matrix(
replicate(ncol,rnorm(nrow)),
ncol=ncol,
nrow=nrow,
dimnames = list(
1:nrow,
1:ncol)
)
colnames(main)[1]<-"outcome"
#trying to create 'sample.rep' resampled replicates
resampled = array (
rep(as.numeric(NA)),
dim= c(sample.size, ncol(main), sample.rep),
dimnames= list(
1:sample.size,
colnames(main),
1:sample.rep
)
)
for (k in 1:dim(resampled)[3]) {
resampled[,,k]= main[sample(nrow(main), size=sample.size, replace=TRUE),]
}
print(resampled)