Doornik&使用R(normality.test2)进行Hansen正态性检验

时间:2018-03-18 14:21:27

标签: r

我在R:normwhn.test::normality.test2中使用(调整的)Doornik-Hansen测试来测试正常性。测试工作正常,但我想从测试中提取特定元素,即测试统计(Ep)和测试统计的显着性(Sig.Ep)。我有以下代码行定义矩阵/向量,然后测试正态性:

m_1 <- matrix(data[,2], nrow = nrow(data), ncol = 1)
normality.test2(m_1)

你们任何人都可以向我解释我是如何提取某个元素的吗?我试过用括号,例如normality.test2(m_1)[1]但没有成功。

1 个答案:

答案 0 :(得分:1)

如果查看normwhn.test::normality.test2的源代码 (只是在没有括号的情况下评估它),你会看到所有的信息 想要只是打印到屏幕上,而不是返回值的一部分。例如,这些是最后几行:

  ...
  dof <- 2 * nvars
  sig.Ep <- 1 - pchisq(Ep, dof)
  print("H0: data are normally distributed")
  print("Ep")
  print(Ep)
  print("dof")
  print(dof)
  print("sig.Ep")
  print(sig.Ep)
}

所以最好的两个选择是:

  1. 只需重新编写该函数,返回所需内容的列表 而不是打印它们;或
  2. 将来电normality.test2包裹在capture.output()中以返回打印的所有内容(请参阅this question以供参考)。
  3. 选项2.可能会在前面花费较少的精力,但结果将作​​为字符向量返回(每行打印到控制台的一个元素),并且您必须解析它以获得您想要的内容。 / p>

    战略2的一个例子:

    data <- matrix(rnorm(100), ncol=2)
    m_1 <- matrix(data[,2], nrow = nrow(data), ncol = 1)
    test_result_output <- capture.output(normwhn.test::normality.test2(m_1))
    

    然后您可以使用例如:

    开始解析输出
    gsub("\"|\\[,*1,*\\]", "", test_result_output)
    
    ## ...
    ## ...
    ## [32] " Ep"                                    
    ## [33] "         "                              
    ## [34] " 1.512684"                              
    ## [35] " dof"                                   
    ## [36] " 2"                                     
    ## [37] " sig.Ep"                                
    ## [38] "          "                             
    ## [39] " 0.4693803"  
    

    (fwiw,如果我是你,我会抓住函数的代码并重写它以便它返回你想要的东西。从长远来看要容易得多。甚至可以考虑向作者发送消息,并询问是否他们会考虑引入像output_in_return_value这样的参数。)