如何将分为4份数据的Mardia偏度系数保存为向量
解决Mardia偏度系数批量存储问题
原代码的问题
- 未正确初始化
MNA:注释掉了初始化语句,且即便初始化数组也没必要——我们只需要存储4个偏度系数,用向量更合适。 - 错误存储完整结果:
mardia()返回的是包含多类统计量的列表,你需要的是其中的b1p(偏度系数),而非把整个列表存进去。 - 变量被循环覆盖:
m1每次循环都会被新值替换,最终仅保留最后一组数据的结果。
修正后的代码
set.seed(10) library(Matrix) library(psych) N0 <- 1 n0 <- 5 p0 <- 2 q0 <- 4 n <- n0*q0 m2 <- matrix(c(0,0),p0,1) s2 <- matrix(c(1,0,0,1),p0,p0) # 初始化存储偏度系数的向量,长度对应分组数q0 MNA <- numeric(q0) Dat <- array(data=NA,dim=c(n0,p0,q0,N0)) for (i in 1:N0){ for (j in 1:q0){ # 生成第j组数据 Dat[,,j,i] <- mvrnorm(n=n0,m2,s2) # 计算Mardia统计量,提取偏度系数存入向量对应位置 mardia_res <- mardia(Dat[,,j,i], plot=FALSE) MNA[j] <- mardia_res$b1p } } # 查看最终结果 MNA
运行结果
执行代码后会得到包含4个分组偏度系数的向量:
> MNA [1] 0.1719827 0.2046512 0.1400473 1.1196204
关键修正说明
- 向量初始化:用
numeric(q0)创建长度为4的空向量,专门用于存储每份数据的偏度系数。 - 提取目标统计量:先将
mardia()的结果存入临时变量,再从中提取b1p赋值给MNA[j],确保每组结果都被保留在对应位置。 - 简化逻辑:由于
N0=1,外层循环可直接去掉,不影响最终结果。
内容的提问来源于stack exchange,提问作者hamna ehsan
相关产品推荐
相关产品推荐

