Использование format.pval в R (и с \Sexpr в Sweave)


person yCalleecharan    schedule 09.12.2011    source источник
comment
format.pval использует format, который имеет более общее назначение. Поэтому вам, вероятно, следует использовать вместо них format, prettyNum или formatC.   -  person Andrie    schedule 09.12.2011
comment
@ Андри Спасибо. Можете ли вы рассмотреть возможность преобразования вашего комментария в решение здесь? 1 голос вверх.   -  person yCalleecharan    schedule 09.12.2011


Ответы (4)


format.pval специально разработан для форматирования печатных значений p.values, например, при просмотре вывода lm.

Рабочая лошадка для format.pval — это format, которая имеет более общее назначение. Поэтому вам, вероятно, следует использовать format или его двоюродных братьев - prettyNum и formatC вместо этого.

Примечание: для форматирования дат (POSIXct или POSIXlt) вам понадобится функция форматирования даты strptime

person Andrie    schedule 09.12.2011

Я включил эту функциональность в пакет knitr, что делает knitr теперь действительно умным — он автоматически использует $a \times 10^b$, если ваш \Sexpr{} выдает число, слишком большое или слишком маленькое (если вы выводите HTML вместо TeX, он автоматически использует a &times; 10<sup>b</sup> ). Возможно, вы уже сейчас можете начать переходить со Sweave на knitr: http://yihui.github.com/knitr/

person Yihui Xie    schedule 09.12.2011
comment
Спасибо. Knitr стабилен? Я понимаю, что это намного новее, чем Sweave, 1 голос вверх. - person yCalleecharan; 28.12.2011
comment
Первая версия будет выпущена в CRAN очень скоро, и тогда ее можно будет считать стабильной. - person Yihui Xie; 13.01.2012

Я думаю, что format.pval, вероятно, не следует использовать. Мы (статистики) обычно не используем общепринятые научные обозначения для значений $p$, потому что ведущие нули также отражают точность. Таким образом, мы используем общие цифры. Вы найдете это в большинстве научных публикаций.

Например, сообщение о трех цифрах означает, что значения «следа» сообщаются с «‹0,001», поскольку с наибольшей доступной точностью это до тысячного разряда. Если я укажу digits=3 и eps=0.001, p-значение 0,0040523 сообщается как 0,00405, предполагая, что моя точность составляет стотысячную, тогда как 0,004 было бы желательно.

Я использую следующую маленькую обертку:

format.p <- function(p, precision=0.001) {
  digits <- -log(precision, base=10)
  p <- formatC(p, format='f', digits=digits)
  p[p == formatC(0, format='f', digits=digits)] <- paste0('<', precision)
  p
}
person AdamO    schedule 14.06.2017

Чтобы быть консервативным, значение p 0,32312 следует округлить до 0,324, а не 0,323. Вот мое решение:

format.p = function(p, precision=0.001) {
  digits = -log(precision, base=10)
  p = formatC(ceiling(p/precision)*precision,format = 'f', digits=digits)
  p[p == formatC(0, format='f', digits=digits)] = paste0('<', precision)
  p
}
person user10901528    schedule 11.01.2019