首页 > 解决方案 > purrr::map() 不适用于 ordinal::nominal_test

问题描述

我试图在列表列中对多个有序逻辑回归模型运行名义测试,但输出中缺少值。通过对数据框进行子集化,我能够为单个模型运行名义测试。我也尝试了 lapply() 和 for() 循环,但是,它们都从 purrr:map() 中给出了相同的结果。我怀疑这可能与nominal_test 函数本身有关。欢迎任何有关解决问题的想法。

以下是我的可重现数据和代码。

延县

library(tidyverse) 
library(ordinal) # for running ordered logistic regression
#> 
#> Attaching package: 'ordinal'
#> The following object is masked from 'package:dplyr':
#> 
#>     slice

# make a dataframe
df <- data.frame(stringsAsFactors=FALSE,
              Diet = c("REF", "REF", "REF", "REF", "REF", "REF", "REF", "REF", "REF",
                       "REF", "REF", "REF", "REF", "REF", "REF", "REF", "REF",
                       "REF", "IM", "IM", "IM", "IM", "IM", "IM", "IM", "IM",
                       "IM", "IM", "IM", "IM", "IM", "IM", "IM", "IM", "IM", "IM",
                       "REF", "REF", "REF", "REF", "REF", "REF", "REF", "REF",
                       "REF", "REF", "REF", "REF", "REF", "REF", "REF", "REF",
                       "REF", "REF", "IM", "IM", "IM", "IM", "IM", "IM", "IM", "IM",
                       "IM", "IM", "IM", "IM", "IM", "IM", "IM", "IM", "IM",
                       "REF", "REF", "REF", "REF", "REF", "REF", "REF", "REF", "REF",
                       "REF", "REF", "REF", "REF", "REF", "REF", "REF", "REF",
                       "REF", "IM", "IM", "IM", "IM", "IM", "IM", "IM", "IM", "IM",
                       "IM", "IM", "IM", "IM", "IM", "IM", "IM", "IM"),
           Segment = c("PI", "PI", "PI", "PI", "PI", "PI", "PI", "PI", "PI", "PI",
                       "PI", "PI", "PI", "PI", "PI", "PI", "PI", "PI", "PI",
                       "PI", "PI", "PI", "PI", "PI", "PI", "PI", "PI", "PI", "PI",
                       "PI", "PI", "PI", "PI", "PI", "PI", "PI", "MI", "MI",
                       "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI",
                       "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI",
                       "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI",
                       "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI",
                       "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI",
                       "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI",
                       "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI", "MI"),
          Variable = c("hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv",
                       "hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv",
                       "hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv",
                       "hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv",
                       "hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv",
                       "hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv",
                       "hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv",
                       "hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv", "hpv",
                       "hpv", "hpv", "hpv", "hpv", "hpv", "lpc", "lpc", "lpc", "lpc",
                       "lpc", "lpc", "lpc", "lpc", "lpc", "lpc", "lpc", "lpc",
                       "lpc", "lpc", "lpc", "lpc", "lpc", "lpc", "lpc", "lpc",
                       "lpc", "lpc", "lpc", "lpc", "lpc", "lpc", "lpc", "lpc", "lpc",
                       "lpc", "lpc", "lpc", "lpc", "lpc", "lpc"),
              Rank = c("Severe", "Marked", "Moderate", "Moderate", "Moderate",
                       "Marked", "Marked", "Marked", "Moderate", "Severe",
                       "Moderate", "Marked", "Moderate", "Marked", "Marked", "Mild",
                       "Moderate", "Marked", "Moderate", "Moderate", "Moderate",
                       "Moderate", "Mild", "Moderate", "Mild", "Mild",
                       "Moderate", "Moderate", "Marked", "Moderate", "Moderate",
                       "Moderate", "Marked", "Moderate", "Moderate", "Marked", "Normal",
                       "Mild", "Mild", "Moderate", "Normal", "Normal", "Normal",
                       "Normal", "Mild", "Mild", "Normal", "Moderate", "Normal",
                       "Normal", "Normal", "Normal", "Mild", "Mild", "Normal",
                       "Normal", "Mild", "Normal", "Normal", "Mild", "Normal",
                       "Normal", "Normal", "Normal", "Normal", "Normal", "Normal",
                       "Normal", "Normal", "Normal", "Mild", "Normal", "Normal",
                       "Mild", "Normal", "Normal", "Normal", "Mild", "Moderate",
                       "Normal", "Normal", "Mild", "Normal", "Mild", "Normal",
                       "Normal", "Normal", "Normal", "Mild", "Normal", "Mild",
                       "Moderate", "Normal", "Normal", "Normal", "Normal", "Normal",
                       "Normal", "Normal", "Normal", "Normal", "Mild", "Normal",
                       "Normal", "Normal", "Mild")
      )

# Convert character to factor
df$Diet <- factor(df$Diet, levels = c("REF", "IM"))
df$Segment <- factor(df$Segment, levels = c("PI", "MI", "DI"))
df$Rank <- ordered(df$Rank, levels = c("Normal", "Mild", "Moderate", "Marked", "Severe")) # for running ordered logistic regression
df$Variable <- factor(df$Variable, levels = c("hpv", "snv", "smc", "lpc", "mfh"))

# run ordered logistic regression (olr), extract p values and check model assumption
olr <- df %>%
  group_by(Segment, Variable) %>% 
  nest() %>% 
  mutate(mod      = map(data, ~clm(Rank ~ Diet, data = .x)), # run olr for each dataframe
         Nominal  = map(mod, nominal_test), # somehow, nominal_test does NOT work
         p_nmn    = map_dbl(Nominal, ~.x["Diet", "Pr(>Chi)"]) # extact p value of nominal test
  )                                        

# nominal test can be done by subsetting dataframe directly
# example1
mod1 <- clm(Rank ~ Diet, data = df[1:36, ]) # Segment = "PI", Variable = "hpv"     
Nominal1 <- nominal_test(mod1)
p_nmn1 <- Nominal1["Diet", "Pr(>Chi)"]
p_nmn1
#> [1] 0.6356792

# example2
mod2 <- clm(Rank ~ Diet, data = df[73:107, ]) # Segment = "MI", Variable = "lpc"     
Nominal2 <- nominal_test(mod2)
p_nmn2 <- Nominal2["Diet", "Pr(>Chi)"]
p_nmn2
#> [1] 0.6742354

reprex 包(v0.2.1)于 2018 年 11 月 10 日创建

标签: rloopspurrr

解决方案


推荐阅读