You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将分为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

关键修正说明

  1. 向量初始化:用numeric(q0)创建长度为4的空向量,专门用于存储每份数据的偏度系数。
  2. 提取目标统计量:先将mardia()的结果存入临时变量,再从中提取b1p赋值给MNA[j],确保每组结果都被保留在对应位置。
  3. 简化逻辑:由于N0=1,外层循环可直接去掉,不影响最终结果。

内容的提问来源于stack exchange,提问作者hamna ehsan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:50:18