【问题标题】:How to put findings of mvn tests in a table in R?如何将 mvn 测试的结果放在 R 中的表格中?
【发布时间】:2020-09-14 05:19:45
【问题描述】:

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

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,subset="Species",mvnTest="hz")
Hz$multivariateNormality

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

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

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

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

但是,我得到了这个错误

Error in match.names(clabs, names(xi)) : 
names do not match previous names

【问题讨论】:

    标签: r html-table multivariate-testing iris-dataset


    【解决方案1】:

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

    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, lapply(tablist, `[[`, "versicolor")))
    virginica <- as.data.frame(do.call(rbind, lapply(tablist, `[[`, "virginica")))
    
    htmlTable(setosa, caption = "Setosa")
    htmlTable(versicolor, caption = "Versicolor")
    htmlTable(virginica, caption = "Virginica")
    

    这给出了:

    【讨论】:

    • 那太好了,谢谢。唯一的问题是,有没有办法摆脱每个表中的第四行(MVN YES)?
    • @daisybeats 是 - 在只有一个 y 的行中,将其更改为 y[,-4]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多