使用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
相关产品推荐
相关产品推荐

