r - 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 日创建
解决方案
推荐阅读
- java - JVM在堆栈上创建对象?(和更多)
- python - Flask SQLAlchemy 初始数据库连接极慢
- html - CSS 全高,div 分配剩余空间
- mysql - 加入主键,但在一个表中,键用逗号分隔
- ruby-on-rails - 我想在祖父母显示页面下显示孙子记录...我做错了什么?
- php - 如何通过凌空向服务器发送信息?
- regex - 在第一个符号之后提取字符串的正确正则表达式是什么?
- javascript - SailsJS 中的水线关系
- angular - Angular Material Select (mat-select) - 如何设置默认值
- javascript - 带有对象数组的 ReactNative useState