使用Sweave和R进行单尾测试

时间:2012-03-10 15:57:18

标签: r sweave

我正在尝试使用Sweave和R来报告我的统计分析结果。然而,我遇到的问题是我希望报告单尾p值。虽然知道单尾测试的价值当然很简单,但我很难弄清楚如何将单尾值输出到自动生成的表中。

基本上,我想创建一个文档,其中包含用于生成表格的代码,但是表格会报告一个单尾的p值。我甚至不确定这是否可行,但如果有任何信息会有所帮助。

编辑:

很抱歉没有代码可以开始。我认为可能有更普遍的答案,但下面有一些通用代码。我只是使用一个基本的OLS回归和一个名为apsrtable的包来生成表。

\documentclass[12pt, letterpaper]{article}


\usepackage{multirow}
\usepackage{dcolumn}


\begin{document} 


<<results=hide,echo=false>>=
library("apsrtable")
x1 = c(100, 123, 1300, 1230, 5453, 4095, 403958, 309458, 2034, 12430)
x2 = c(1000, 2309184, 203948, 240983, 19874, 198479, 918374, 98374198, 8273498, 092834)
y = c(5,10,15,20,25,30,35,40,45,50)
results <- lm(y ~ x1)
results1 <- lm(y ~ x2)
@

\begin{table}
\begin{center}
<<results=tex,echo=false>>=
apsrtable(results, results1, se="pval", stars="default", model.counter=0, order="rl", Sweave=TRUE)
@
\end{center}
\end{table}


\end{document}

所以,我基本上希望能够将单尾p值传递给apsrtable来制作表格。

作为补充,我对R一般都是新手,对R编程来说是非常新的,所以像操作数据框这样的东西对我来说有点难以理解。

1 个答案:

答案 0 :(得分:5)

在不知道您想要进行哪些分析或某些可重现的代码的情况下,很难给出广泛的答案。但这里有一些提示:

  1. 我写了一个小包,swst,旨在打印Sweave中的统计结果。有关小教程,请参阅my blog,其中还包含可用于从htest对象手动提取p值的代码(R中使用的许多统计测试)。您可以找到代码以从source codes中的更多对象中提取p值。如果您的对象尚不支持,请告诉我们。目前我认为我没有实现打印单尾p值的选项,但您可以查看源代码以了解如何提取双尾p值并简单地将其除以2。

  2. 您可以使用xtable包根据数据框生成表的LaTeX代码。您可以在some slides I made on Sweave(也包含swst包)和Google搜索中找到xtable的简短介绍。

  3. 编辑:

    编辑问题。最好手动提取值并构造表。以下是根据您的代码报告单尾t值的示例(我更改了数据以获得更有趣的结果)。

    x1 = rnorm(10)
    x2 = rnorm(10)
    y = 0.5*x1 + 2*x2
    results <- lm(y ~ x1)
    results1 <- lm(y ~ x2)
    
    sumRes <- summary(results)$coefficients
    sumRes1 <- summary(results1)$coefficients
    
    tab <- data.frame(
      Estimate = paste(round(c(sumRes[2,1],sumRes1[2,1]),3)," (",round(c(sumRes[2,2],sumRes1[2,2]),3),")",sep=""),
    
      tvalue = round(c(sumRes[2,3],sumRes1[2,3]),3),
      pvalue = c(ifelse(sumRes[2,4]/2<0.001,'$< 0.001$',
       round(sumRes[2,4]/2,3)),ifelse(sumRes1[2,4]/2<0.001,'$< 0.001$',
       round(sumRes[2,4]/2,3)))
      )
    names(tab) <- c("Estimate", "$t$-value", "$p$-value")
    rownames(tab) <- c("x1","x2")
    
    library("xtable")
    print(xtable(tab),sanitize.text.function=function(x)x)