簡體   English   中英

psych :: corr.test()中Holm調整后的p值不正確?

[英]Incorrect Holm-adjusted p-values in psych::corr.test()?

在准備有關Holm調整的p值的教材時,我着手通過R的psych :: corr.test()進行手工調整。 除兩個以外,所有26個by- R和by R調整后的p值均一致。 我認為這是用戶錯誤,但我無法終生弄清楚自己在做什么錯。

下面的代碼將:

  1. 重現所討論的p值(心理軟件包)。
  2. 對未調整的p值進行排名(最低= 1)。
  3. 將Holm p值計算為p(unadj。)*等級。
  4. 比較調整后的p值。
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值(最小值)與第二個表中的p值匹配(來自corr.test()),但第1行第7列第8列中的兩個除外。

這是我在這里的第一篇文章-對與發布規范的任何差異表示抱歉。

>   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  

歡迎來到SO,您的第一篇文章看起來不錯,所以那里沒有問題。

就您的計算而言,您遇到了一個問題,因為將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相乘,而應該對它們進行排序,然后取所得乘積的累積最大值。

    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  

#            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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM