2014-04-11 14 views
8

Tôi tự hỏi làm cách nào để đặt biểu tượng <0.001 nếu giá trị p nhỏ hơn 0.001 để được sử dụng trong Sweave. Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơnIn các giá trị p bằng <0.001

ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14) 
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69) 
group <- gl(2, 10, 20, labels = c("Ctl","Trt")) 
weight <- c(ctl, trt) 
lm.D9 <- lm(weight ~ group) 
summary(lm.D9)$coef 

      Estimate Std. Error t value  Pr(>|t|) 
(Intercept) 4.8465 0.1557174 31.12368 4.185248e-17 
group1  -0.1855 0.1557174 -1.19126 2.490232e-01 

mong muốn Output

  Estimate Std. Error t value  Pr(>|t|) 
(Intercept) 4.8465 0.1557174 31.12368 <0.001 
group1  -0.1855 0.1557174 -1.19126 0.249 
+4

'format.pval'' format.pval (tóm tắt (lm.D9) $ coef [4], eps = 0,001, chữ số = 2) '? – rawr

+0

Cảm ơn @rawr vì nhận xét hữu ích của bạn. Bạn có muốn thay đổi nhận xét của mình thành câu trả lời không. Cảm ơn – MYaseen208

Trả lời

8

Có hai chức năng chính mà tôi sử dụng, format.pval và một này mà tôi xé từ GForge và tinh chỉnh.

ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14) 
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69) 
group <- gl(2, 10, 20, labels = c("Ctl","Trt")) 
weight <- c(ctl, trt) 
lm.D9 <- lm(weight ~ group) 
tmp <- data.frame(summary(lm.D9)$coef) 
tmp <- setNames(tmp, colnames(summary(lm.D9)$coef)) 
tmp[ , 4] <- format.pval(tmp[ , 4], eps = .001, digits = 2) 

tmp 
#    Estimate Std. Error t value Pr(>|t|) 
# (Intercept) 5.032 0.2202177 22.85012 <0.001 
# groupTrt  -0.371 0.3114349 -1.19126  0.25 

Tôi thích cái này vì nó loại bỏ chính xác từ pvalues> 0,1 (hoặc bất kỳ ngưỡng bạn thích nếu bạn muốn một cái gì đó khác nhau, đó là, bất kể digits, nó chỉ giữ hai chữ số thập phân nếu các giá trị là> .1), giữ số không dấu (xem ví dụ bên dưới) và thêm vào số < như bạn muốn cho một số mức độ chính xác (ở đây 0,001).

pvalr <- function(pvals, sig.limit = .001, digits = 3, html = FALSE) { 

    roundr <- function(x, digits = 1) { 
    res <- sprintf(paste0('%.', digits, 'f'), x) 
    zzz <- paste0('0.', paste(rep('0', digits), collapse = '')) 
    res[res == paste0('-', zzz)] <- zzz 
    res 
    } 

    sapply(pvals, function(x, sig.limit) { 
    if (x < sig.limit) 
     if (html) 
     return(sprintf('&lt; %s', format(sig.limit))) else 
      return(sprintf('< %s', format(sig.limit))) 
    if (x > .1) 
     return(roundr(x, digits = 2)) else 
     return(roundr(x, digits = digits)) 
    }, sig.limit = sig.limit) 
} 

Và ví dụ:

pvals <- c(.133213, .06023, .004233, .000000134234) 
pvalr(pvals, digits = 3) 
# [1] "0.13" "0.060" "0.004" "< 0.001" 
Các vấn đề liên quan