You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Shiny包时同一数据框的Cramer's V计算结果不一致

Cramer's V检验在Shiny与非Shiny环境结果不一致问题

我正在R中对分类数据进行Cramer's V检验,非Shiny环境下的代码示例如下:

#cramer's v
df1 <- subset(ACCIDENT_MASTER_single,  select = c("SEVERITY", "ATMOSPH_COND"))

# Converting into numeric matrix
df3 <- data.matrix(df1)

#calculate Cramer's V
cramerV(df3)

我使用Shiny搭建了交互式界面,让用户通过下拉菜单选择分类变量,然后展示Cramer's V的计算结果。代码可以运行,但奇怪的是,即使使用同一数据框,得到的结果却完全不同。以下是Shiny相关代码示例:

library(shinydashboard)
library(shiny)
library(dplyr)
library(DT)
library(rcompanion) 

df <- data.frame(ACCIDENT_MASTER_single)
    
Cat1.Variables <- c("SEVERITY", "ATMOSPH_COND", "DAY_OF_WEEK")
Cat2.Variables <- c("SEVERITY", "ATMOSPH_COND", "DAY_OF_WEEK")
    
ui <- fluidPage(
  titlePanel("Calculate the strength of the relationship between categorical variables"),
  sidebarLayout(
    sidebarPanel(
      selectInput("cat1", choices = Cat1.Variables, label = "Select a Categorical Variable:"),
      selectInput("cat2", choices = Cat2.Variables, label = "Select a Categorical Variable:")
    ),
    mainPanel(
      tableOutput("results")
    )
  )
)
    
server <- shinyServer(function(input, output) {
  cramerdata <- reactive({
    req(input$cat1, input$cat2)
        
    df %>%
      {
        table(.[[input$cat1]], .[[input$cat2]])
      }
  })
      
  output$results <- renderPrint({
    cat(sprintf("\nThe results equal: \n"))
        
    print(cramerV(cramerdata()))
  })
})
    
shinyApp(ui, server)

我测试了多组不同变量,所有结果都存在差异,并非仅示例中的两个变量。

编辑:补充数据集头部的dput输出片段(数据集很大):

> dput(head(ACCIDENT_MASTER_single))
structure(list(ACCIDENT_NO = c("T20150000004", "T20150000017", 
"T20150000020", "T20150000028", "T20150000034", "T20150000052"
), ACCIDENTDATE = c("2015-01-01", "2015-01-01", "2015-01-01", 
"2015-01-01", "2015-01-01", "2015-01-01"), ACCIDENTTIME = c("02:10:00", 
"07:20:00", "06:51:00", "07:55:00", "17:10:00", "01:20:00"), 
    ACCIDENT_TYPE = c(2L, 1L, 4L, 1L, 4L, 1L), DAY_OF_WEEK = c(5L, 
    5L, 5L, 4L, 5L, 5L), DCA_CODE = c(108L, 130L, 173L, 135L, 
    171L, 121L), DIRECTORY = c("MEL", "MEL", "MEL", "MEL", "MEL", 
    "MEL"), LIGHT_CONDITION = c(3L, 1L, 2L, 1L, 1L, 3L), ROAD_GEOMETRY = c(5L, 
    4L, 1L, 5L, 5L, 1L), SEVERITY = c(3L, 2L, 1L, 3L, 3L, 2L), 
    SPEED_ZONE = c(60L, 70L, 70L, 100L, 60L, 60L), ROAD_TYPE = c("ROAD", 
    "ROAD", "ROAD", "ROAD", "ROAD", "DRIVE"), ATMOSPH_COND = c("1", 
    "1", "1", "1", "1", "1"), ATMOSPH_COND_SEQ = c("1", "1", 
    "1", "0", "1", "1"), LGA_NAME = c("MOONEE VALLEY", "MONASH", 
    "BAYSIDE", "BRIMBANK", "MELTON", "BRIMBANK"), DEG_URBAN_NAME = c("MELB_URBAN", 
    "MELB_URBAN", "MELB_URBAN", "MELB_URBAN", "MELB_URBAN", "MELB_URBAN"
    ), Lat = c(-37.77922923, -37.88240078, -37.92909811, -37.76758102, 
    -37.72427767, -37.76316596), Long = c(144.9309415, 145.0903658, 
    145.0028103, 144.8002374, 144.7529804, 144.7897546), POSTCODE_NO = c(3032L, 
    3148L, 3186L, 3022L, 3023L, 3023L), Surface.Cond.Desc = c("Dry", 
    "Dry", "Dry", "Dry", "Dry", "Dry"), SURFACE_COND = c("1", 
    "1", "1", "1", "1", "1"), SURFACE_COND_SEQ = c("1", "1", 
    "1", "0", "1", "1"), ROAD_SURFACE_TYPE = c("1", "1,1", "1", 
    "1,1", "1", "1,1"), VEHICLE_TYPE = c("99", "5,2", "1", "1,62", 
    "1", "1,1"), TRAFFIC_CONTROL = c("0", "1,1", "0", "0,0", 
    "0", "1,1"), EVENT_TYPE = c("C", "C", "3,C", "C,3,C,3,C", 
    "3,C", "C"), SEX = c("M,U", "M,M", "M", "F,U", "M", "M,M,M,F"
    ), AGE = c("32,NA", "56,43", "28", "54,NA", "23", "17,16,19,41"
    ), Age.Group = c("30-39,unknown", "50-59,40-49", "26-29", 
    "50-59,unknown", "22-25", "16-17,16-17,17-21,40-49"), INJ_LEVEL = c("3,4", 
    "2,3", "1", "3,4", "3", "2,4,4,3"), ROAD_USER_TYPE = c("1,9", 
    "2,2", "2", "2,2", "2", "3,3,2,2")), row.names = c(NA, 6L
), class = "data.frame")

内容的提问来源于stack exchange,提问作者fullcollapse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:20:27