如何用 Mardia 的峰度值模拟数据?

机器算法验证 模拟 峰度 多元分析
2022-04-09 01:20:17

关于使用用户指定的 Mardia 1970 多元峰度值的相关非正态数据的模拟,我有两个(相关)问题。

(1) 在我的领域中,使用 Vale 和 Maurelli (1983) 开发的对标准正态随机变量 (其中 ) 其中系数控制(单变量)偏度和峰度估计。然后通过一维边际分布实现非正态性,但无法控制多元偏度/峰度估计(如 Mardia (1970) 中所定义。所以这是我的第一个问题:Y=a+bX+cX2+dX3XN(0,1)cd

如果我只有所有单变量边际的总体值,如何获得多变量峰度的总体值?

这是我的解决方案尝试。它使用semToolsR 中的包(计算 Mardia 的度量)和lavaan包(实现 Vale & Maurelli 方法)

        library(semTools)
        library(lavaan)
    
    ### three variables all correlated at 0.5
    model <- 'x1 ~~ 0.5*x2
              x2 ~~ 0.5*x3
              x3 ~~ 0.5*x1'
       
    ### vector to store Mardia's kurtosis values
    mardia_values <- double(100)
    
    for (i in 1:100){
    
    ### generate simulated data with N=100,000 population 
    ### skewness of 2 and kurtosis of 7
    dataz <- simulateData(model, sample.nobs=100000, 
                     skewness=c(2,2,2), kurtosis=c(7,7,7))
    
    mardia_values[i] <- as.numeric(mardiaKurtosis(datz)[1])
    }
    
    mean(mardia_values)

所以基本上我是通过模拟来近似它(在大样本量下)

这种方法可以接受吗?我非常愿意接受建议(特别是如果它可以通过分析得出

(2) 现在,在相关的说明中......有没有人知道任何模拟数据的方法,其中 Mardia Kurtosis 的值可以由用户指定?到目前为止,我唯一能想到的就是再次使用 Vale 和 Maurelli (1983) 的方法,然后循序渐进,直到我得到我想要的值。由于 Mardia 在人口中定义了这些度量,我认为应该有可能有一些方法来生成可以预先指定值的数据,但我不知道如何。

参考

玛迪亚,KV(1970)。多变量偏度和峰度的测量与应用。生物计量学,57(3),519-530。

Vale, CD 和 Maurelli, VA (1983)。模拟多元非正态分布。心理测量学,48(3),465-471。

0个回答
没有发现任何回复~