table1中的P值列 - 使用table1函数

问题描述 投票:0回答:1

注 - 我指的是“table1”函数,而不是“tableOne”

正如您可能知道的那样,table1包通过对所有其他变量(例如,有多少男性与女性 - 吸烟,得到药物等等)对一些变量进行汇总来将数据汇总到表中。

关于table1函数的非常好的指南在这里。

https://cran.r-project.org/web/packages/table1/vignettes/table1-examples.html

在上面的链接站点的最低部分,您可以通过使用技巧看到编写器创建p值列,因为该命令未内置到table1中。问题是他的代码没有问题,因为他只处理“男性”和“女性”(2个变量)..而且我试图用4个变量来做。

我适合它,所以它可以使用我的变量,我得到错误,需要帮助

错误

“参数不是数字或逻辑:在因子x上返回NACalling var(x)已弃用并将成为错误。使用类似'all(duplicated(x)[ - 1L])'来测试常量vector.Error in if(stderr <10 * .Machine $ double.eps * max(abs(mx),abs(my)))stop(“数据基本上是常数”):缺少值,其中需要TRUE / FALSE“

a <- c(0,13.3,14.0,14.7,15.8,999.0)

dat1$RDWquintiles<-cut(dat1$RDW_pre,a,include.lowest = TRUE)

z <- levels(dat1$RDWquintiles)
dat1$RDWquintiles <- factor(dat1$RDWquintiles,levels=c(z,factor("P-value")),labels=c("0,13.3","13.3,14","14,14.7","14.7,15.8","15.8,999","P-values" ))

dat1$RDWquintiles

table(dat1$RDWquintiles)


rndr <- function(x, name, ...) {
    if (length(x) == 0) {
        y <- dat1[[name]]
        s <- rep("", length(render.default(x=y, name=name, ...)))
        if (is.numeric(y)) {
            p <- t.test(y, dat1$RDWquintiles)$p.value
        } else {
            p <- chisq.test(table(y, droplevels(dat1$RDWquintiles)))$p.value
        }
        s[2] <- sub("<", "&lt;", format.pval(p, digits=3, eps=0.001))
        s
    } else {
        render.default(x=x, name=name, ... ,)
    }
}

rndr.strat <- function(label, n, ...) {
    ifelse(n==0, label, render.strat.default(label, n, ...))
}

table1(~ Age + Sex + LOS + Open + adm_PE |RDWquintiles,data=dat1, droplevels=F, render=rndr, render.strat=rndr.strat, overall=F)
r statistics p-value
1个回答
0
投票

您可能需要检查数据。我没有你的数据集,所以我无法重现你的错误。我看到有4组比较而不是2的唯一问题是你不能对连续变量使用T检验,你需要选择合适的检验,如ANOVA或Kruskal-Wallis来推导P值(一般情况下) ,P值取决于所使用的测试;选择合适的测试是一个重要的考虑因素,但超出了当前问题的范围)。

在这里我改编了vignette的例子(我不重复整个代码,只是相关的变化):

lalonde$age.quartiles <- eqcut(lalonde$age, 4, varlabel="Age")
lalonde$age.quartiles <- factor(lalonde$age.quartiles,
    levels=c(levels(lalonde$age.quartiles), "P-value"))

rndr <- function(x, name, ...) {
    if (length(x) == 0) {
        y <- lalonde[[name]]
        s <- rep("", length(render.default(x=y, name=name, ...)))
        if (is.numeric(y)) {
            p <- kruskal.test(y ~ lalonde$age.quartiles)$p.value
        } else {
            p <- chisq.test(table(y, droplevels(lalonde$age.quartiles)))$p.value
        }
        s[2] <- sub("<", "&lt;", format.pval(p, digits=3, eps=0.001))
        s
    } else {
        render.default(x=x, name=name, ...)
    }
}

table1(~ black + hispan + married + nodegree + re74 + re75 + re78 | age.quartiles,
    data=lalonde, droplevels=F, render=rndr, render.strat=rndr.strat, overall=F)

注意:这不是原始问题的一部分,但我想我会提到table1包中包含函数eqcut,它可以方便地用于创建等大小的组,如三分位数,四分位数等。

© www.soinside.com 2019 - 2024. All rights reserved.