问题描述
我正在测试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")
哪个给: