如何将mvn测试的结果放在R的表中?

问题描述

我正在测试Iris数据集中的多元正态性。 我想比较MVN软件包下所有不同测试的结果(Mardia的测试,Henze-Zikler,Royston,Doornik-Hansen和Energy的测试),并完成了以下代码:

chrome.windows.getLastFocused(w => {
  chrome.extension.getViews({type: 'popup',windowId: w.id}).forEach(v => v.close());
});

我必须以一种易于呈现在我的发现中的方式来获得结果。 我需要三个表(每个物种一个表),这些表汇总了上面输出的数据。 本质上,对于每个表,行是不同的测试,列是测试统计值,P值和mvn结果。我尝试了以下

library(MVN) 
library(htmlTable)

attach(iris)

#Mardia's Test
Mar<-MVN::mvn(data=iris,subset="Species",mvnTest="mardia")
Mar$multivariateNormality

#Henze-Zirkler's Test
Hz<-MVN::mvn(data=iris,mvnTest="hz")
Hz$multivariateNormality

#Royston's Test
Roy<-MVN::mvn(data=iris,mvnTest="royston")
Roy$multivariateNormality

#Doornik-Hansen Test
Dh<-MVN::mvn(data=iris,mvnTest="dh")
Dh$multivariateNormality

但是,我收到此错误

   table <- rbind(Mar$multivariateNormality$setosa[1:2,],Hz$multivariateNormality$setosa[1:2,Roy$multivariateNormality$setosa[1:2,])
    htmlTable(table,caption="Testing")

解决方法

“表”实际上是数据帧(每列都是一个因子变量)。为了使它们更易于处理,最好将所有结果放入列表中。然后,我们可以将所有数据帧转换为字符矩阵,确保列名匹配,然后将它们绑定在一起:

tablist <- lapply(list(Mar,Hz,Roy),`[[`,"multivariateNormality")
tablist <- lapply(tablist,function(x) 
  lapply(x,function(y) {
    y <- `colnames<-`(as.matrix(y),c("Test","Statistic","p value","MVN"))
    y[,2] <- round(as.numeric(y[,2]),2)
    y[,3] <- round(as.numeric(y[,3]),2)
    y
  }))

setosa <- as.data.frame(do.call(rbind,lapply(tablist,"setosa")))
versicolor <- as.data.frame(do.call(rbind,"versicolor")))
virginica <- as.data.frame(do.call(rbind,"virginica")))

htmlTable(setosa,caption = "Setosa")
htmlTable(versicolor,caption = "Versicolor")
htmlTable(virginica,caption = "Virginica")

哪个给:

enter image description here

enter image description here

enter image description here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...