2015-09-13 3 views
-1

Я работаю над бумагой, и я хочу увеличить свою производительность. В настоящее время я запускаю несколько функций, таких как тесты с единичным корнем или корреляционные тесты и перенос вывода консоли R в таблицу; вручную. Есть ли способ выводить результаты из функции в таблицу?Результаты вывода R в таблице

я следующие данные из * .csv таблицы

col1 col2 col3 col4 col5 col6 
x x x x x x 
x x x x x x 
x x x x x x 
x x x x x x 
  1. Можно ли применять adf.test(table$col1), kpss.test(table$col1) и pp.test(table$col1) для всех столбцов одновременно и выводить результаты в таблицу?

  2. Можно ли сделать то же самое с результатами корреляции, как cor.test(table$col1, table$col2, type="pearson")?

  3. Я знаю, что я могу использовать пакет stargazer для экспорта таблиц в латекс. Однако мне сейчас нужно будет вставить таблицу в слово.

+0

Можете ли вы показать какой-то желаемый результат? То, что вы описываете, конечно, возможно, но зависит от того, что именно вы делаете. Хотя я знаю, что есть пакеты для r и слова, я лично использую xtable для записи в html-файл (так как это легко копировать, когда вы довольны результатом). – Heroka

+0

См. [R markdown] (http://rmarkdown.rstudio.com/) – zx8754

+0

@Heroka, выход HTML звучит отлично! Например, для тестов с единичным корнем таблица должна выводить результат каждой переменной (столбца) без тренда, с константой и константой и трендом плюс каждая t-статистика и p-значение. Я использовал AIC для тестирования. Я думаю, что маркировка p-значений тоже не так проста? – Christopher

ответ

1

а) Так как вы можете получить доступ к каждому элементу вашей продукции отдельно (например, cor.test()["statistic"], чтобы получить т-значение из вашей корреляции.), Вы можете просто написать функцию, чтобы поместить каждый из элементов, которые Вас интересуют в таблицу, затем выведите его с помощью Markdown в Word.

Например, в вашем Markdown документа Предположим, у вас есть эти данные:

title: "stackexchange" 
author: "you" 
date: "September 13, 2015" 
output: word_document 
--- 

```{r setup, include=FALSE, message = FALSE, echo = FALSE} 
library(knitr) 
set.seed(1) 
source("~/Dropbox/R_Default/MyRTools/DinkyTools/EmptyFrame.R") 
df <- data.frame(a = runif(n = 100, min = -1000, max = 1000), 
       b = rnorm(n = 100, mean = 0, sd = 500), 
       c = rlogis(n = 100, location = 50, scale = 100)) 

table_cols <- c(correlation = "character", 
      estimate = "numeric", 
      t_value = "numeric", 
      p_value = "numeric", 
      CI_l_95 = "numeric", 
      CI_u_95 = "numeric") 

nvar <- c(1:3) 
cmb <- combn(nvar , m = 2) 

Затем использовать любой метод вы предпочитаете, чтобы создать пустой кадр данных для вашего стола. У меня есть свой собственный сценарий для создания пустых кадров данных, но все, что получает вам что-то вроде это нормально:

tbl <- EmptyFrame(rows = ncol(cmb), varnames_and_types = table_cols ,  print.opt = TRUE) 

>correlation estimate t_value p_value CI_l_95 CI_u_95 
1  <NA>  NA  NA  NA  NA  NA 
2  <NA>  NA  NA  NA  NA  NA 
3  <NA>  NA  NA  NA  NA  NA 
[1] "correlation : character" 
[1] "estimate : numeric" 
[1] "t_value : numeric" 
[1] "p_value : numeric" 
[1] "CI_l_95 : numeric" 
[1] "CI_u_95 : numeric" 

Усилия затем написать некоторые общие функции для вашего выхода. Например, если мне нравятся все попарные корреляции, я говорю что-то вроде:

for(ii in 1 : nrow(tbl)){ 
    tbl$correlation[ ii ] <- paste("cor.test of", names(df)[cmb[ 1, ii] ], "  with ", names(df)[cmb[ 2, ii] ]) 
    tbl$estimate[ ii ] <- round(as.numeric(cor.test (df[ , cmb[ 1, ii ] ], df[ , cmb[2 , ii] ])[[ "estimate" ]]), 2) 
    tbl$t_value[ ii ] <- round(as.numeric(cor.test (df[ , cmb[ 1, ii ] ], df[ , cmb[2 , ii] ])[[ "statistic" ]]) , 2) 
    tbl$p_value[ ii ] <- round(as.numeric(cor.test (df[ , cmb[ 1, ii ] ], df[ , cmb[2 , ii] ])[[ "p.value" ]]), 2) 
    tbl$CI_l_95[ ii ] <- round(cor.test (df[ , cmb[ 1, ii ] ], df[ , cmb[2 , ii] ])[[ "conf.int" ]][1] , 2) 
    tbl$CI_u_95[ ii ] <- round(cor.test (df[ , cmb[ 1, ii ] ], df[ , cmb[2 , ii] ])[[ "conf.int" ]][2], 2) 
} 
``` 

Это дает вам таблицу, которая будет компилировать в Markdown на слово.

```{r} 
kable(tbl) 
|correlation   | estimate| t_value| p_value| CI_l_95| CI_u_95| 
|:----------------------|--------:|-------:|-------:|-------:|-------:| 
|cor.test of a with b |  0.09| 0.88| 0.38| -0.11| 0.28| 
|cor.test of a with c | -0.17| -1.74| 0.08| -0.36| 0.02| 
|cor.test of b with c | -0.02| -0.23| 0.82| -0.22| 0.17| 

``` 

b) Да. Как правило, вы используете apply(X, MARGIN, FUN, ...) для запуска функций по всем столбцам фрейма данных.

c) Кажется, вы действительно будете любить, используя Markdown.

Смежные вопросы