首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >psych::corr.test()中不正确的Holm调整p值?

psych::corr.test()中不正确的Holm调整p值?
EN

Stack Overflow用户
提问于 2019-06-21 00:15:23
回答 1查看 116关注 0票数 0

在编写关于Holm调整的p-值的教材时,我开始手工和通过R的psych::corr.test()进行调整。除两个外,所有26个手工和按-R调整的p-值均符合.我认为这是用户错误,但我无法在我的生活中找出我做错了什么。

以下守则将:

  1. 复制问题中的p值(心理包)。
  2. 秩未调整的p值(lowest=1)。
  3. 将Holm值计算为p(unadj.) *秩。
  4. 比较调整后的p值.
代码语言:javascript
复制
library(psych)  
dat = state.x77  
R.out = corr.test(dat)  
R.out$p  
unadj.p = ifelse(lower.tri(R.out$p) == F, NA, R.out$p)  
p.ranks = 29 - rank(unadj.p, na.last = T)  
p.ranks = matrix(ifelse(p.ranks < 1, NA, p.ranks), 8, 8)  
myHolm = unadj.p * p.ranks  
myHolm = ifelse(myHolm > 1, 1, myHolm)  
myHolm = t(myHolm)  
round(myHolm, 4)  
round(R.out$p, 4)  
myHolm == R.out$p  

分析结果如下所示。第一个表(我的)中的调整p值与第二个表中的值匹配--来自corr.test()--除了第1行第7:8列中的两个。

这是我在这里的第一篇文章

代码语言:javascript
复制
>   round(myHolm,4)  
     [,1] [,2]   [,3]   [,4]   [,5]   [,6]   [,7]   [,8]  
[1,]   NA    1 1.0000 1.0000 0.2328 1.0000 0.2398 0.8765  
[2,]   NA   NA 0.0286 0.2343 1.0000 0.0000 1.0000 0.1616  
[3,]   NA   NA     NA 0.0002 0.0000 0.0000 0.0000 1.0000  
[4,]   NA   NA     NA     NA 0.0000 0.0002 0.7918 1.0000  
[5,]   NA   NA     NA     NA     NA 0.0065 0.0011 1.0000  
[6,]   NA   NA     NA     NA     NA     NA 0.1583 0.2510  
[7,]   NA   NA     NA     NA     NA     NA     NA 1.0000  
[8,]   NA   NA     NA     NA     NA     NA     NA     NA  
>   round(R.out$p,4)  
           Population Income Illiteracy Life Exp Murder HS Grad  Frost   Area  
Population     0.0000 1.0000     1.0000   1.0000 0.2328  1.0000 0.2510 1.0000  
Income         0.1467 0.0000     0.0286   0.2343 1.0000  0.0000 1.0000 0.1616  
Illiteracy     0.4569 0.0015     0.0000   0.0002 0.0000  0.0000 0.0000 1.0000  
Life Exp       0.6387 0.0156     0.0000   0.0000 0.0000  0.0002 0.7918 1.0000  
Murder         0.0146 0.1080     0.0000   0.0000 0.0000  0.0065 0.0011 1.0000  
HS Grad        0.4962 0.0000     0.0000   0.0000 0.0003  0.0000 0.1583 0.2510  
Frost          0.0184 0.1141     0.0000   0.0660 0.0001  0.0088 0.0000 1.0000  
Area           0.8765 0.0095     0.5938   0.4581 0.1106  0.0179 0.6828 0.0000  
>   myHolm == R.out$p  
           Population Income Illiteracy Life Exp Murder HS Grad Frost  Area  
Population         NA   TRUE       TRUE     TRUE   TRUE    TRUE FALSE FALSE  
Income             NA     NA       TRUE     TRUE   TRUE    TRUE  TRUE  TRUE  
Illiteracy         NA     NA         NA     TRUE   TRUE    TRUE  TRUE  TRUE  
Life Exp           NA     NA         NA       NA   TRUE    TRUE  TRUE  TRUE  
Murder             NA     NA         NA       NA     NA    TRUE  TRUE  TRUE  
HS Grad            NA     NA         NA       NA     NA      NA  TRUE  TRUE  
Frost              NA     NA         NA       NA     NA      NA    NA  TRUE  
Area               NA     NA         NA       NA     NA      NA    NA    NA  
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-21 02:14:13

欢迎来到这样,你的第一个帖子看起来很棒,所以没有问题。

就您的计算而言,您遇到了一个问题,因为在乘以unadj.p * p.ranks时,您的级别的顺序没有被保留。例如,如果检查行1列7值或[1,7] (您的值为0.2398),则它低于行7列8值或[7,8] (0.2510)。这种情况不应该是这样的,因为您的p.ranks矩阵显示它们分别应该是13和14 ( [1,7]是两者中较高的)。

我们不应该简单地乘以unadj.p * p.ranks,我们应该首先对它们进行排序,然后取产生的乘法的累积最大值。

代码语言:javascript
复制
    library(psych)  
    dat = state.x77  
    R.out = corr.test(dat)  
    R.out$p  
    unadj.p = ifelse(lower.tri(R.out$p)==F,NA,R.out$p)  

    # convert into vector for ease of calculation
    p <- as.numeric(unadj.p)
    # remove missing values
    p <- p[!is.na(p)]

    # find the ranks of p
    pr <- rank(p)

    # put p in order
    po <- p[order(p)]

    # put ranks in order (1 is smallest)
    pro <- pr[order(pr, decreasing = T)]

    # now they are in order we can take the CUMULATIVE MAX to preserve order
    pcum <- cummax(po * pro)

    # now put back in our order and stick in our matrix
    myHolm <-unadj.p
    myHolm[!is.na(myHolm)] <- pcum[pr]


    myHolm = ifelse(myHolm>1,1,myHolm)  
    myHolm = t(myHolm)  

    myHolm == R.out$p  
代码语言:javascript
复制
#            Population Income Illiteracy Life Exp Murder HS Grad Frost Area
# Population         NA   TRUE       TRUE     TRUE   TRUE    TRUE  TRUE TRUE
# Income             NA     NA       TRUE     TRUE   TRUE    TRUE  TRUE TRUE
# Illiteracy         NA     NA         NA     TRUE   TRUE    TRUE  TRUE TRUE
# Life Exp           NA     NA         NA       NA   TRUE    TRUE  TRUE TRUE
# Murder             NA     NA         NA       NA     NA    TRUE  TRUE TRUE
# HS Grad            NA     NA         NA       NA     NA      NA  TRUE TRUE
# Frost              NA     NA         NA       NA     NA      NA    NA TRUE
# Area               NA     NA         NA       NA     NA      NA    NA   NA
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56695363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档