使用Sweave和R进行单尾测试

use*_*057 2 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}
Run Code Online (Sandbox Code Playgroud)

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

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

Sac*_*amp 5

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

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

  2. 您可以使用xtable包根据数据框生成表的LaTeX代码.您可以xtable我在Sweave(也包含swst包)和Googling 上制作的一些幻灯片中找到一个非常简短的介绍.

编辑:

至于编辑过的问题.最好手动提取值并构造表.这是一个根据您的代码报告单尾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)
Run Code Online (Sandbox Code Playgroud)