AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 77885797
Accepted
MetehanGungor
MetehanGungor
Asked: 2024-01-26 19:12:31 +0800 CST2024-01-26 19:12:31 +0800 CST 2024-01-26 19:12:31 +0800 CST

Como posso encontrar matrizes com zero determinantes no conjunto de dados? - Muitas marginais iguais, não é possível calcular

  • 772

Estou tentando calcular a concordância entre avaliadores (teste Stuart-Maxwell). Cheguei a um certo ponto. Também detectei o problema. No entanto, tive um problema em algum lugar. Como posso encontrar o padrão no conjunto de dados? Para continuar a análise, preciso remover as matrizes problemáticas do conjunto de dados.

# 2 raters, 4 different response category and 4 subjects
R1 <- as.data.frame(expand.grid(rep(list(0:3), 4)))
R2 <- as.data.frame(expand.grid(rep(list(0:3), 4)))

# nrow(R1)*nrow(R2) = 256
pattern <- expand.grid(1:256, 1:256)
allPossible <- vector(mode = "list", length = nrow(pattern))
for(i in 1:nrow(pattern)){
  allPossible[[i]] <- rbind(R1[pattern[i, 1], ], R2[pattern[i, 2], ])
}

# 256*256 = 65536 possible rating
allPossible

# cross-tabulation
levs <- c(0:2)
list1 <- list()
list2 <- list()
list_A <- list()

for (i in 1:65536) {
  list1[[i]] <- factor(allPossible[[i]][1, ], levels = levs)
  list2[[i]] <- factor(allPossible[[i]][2, ], levels = levs)
  list_A[[i]] <- xtabs(~list1[[i]] + list2[[i]])
}

list_A

# 256 out of 65536 are completely same ratings. I have to delete them. (eg. check allPossible[1], allPossible[258])
list_B <- list_A[-seq(from = 1, to = 65536, by = 257)]

# Stuart-Maxwell Test
install.packages("DescTools")
library(DescTools)

# Now, I have 65280 different matrices
outputSM <- list()

for (i in 1:65280) {
  outputSM[[i]] <- StuartMaxwellTest(list_B[[i]])

}

outputSM

# it didn't work. Because, there are still some 3x3 matrices with the determinant 0 (zero).

# eg. problematic 3x3 matrices
StuartMaxwellTest(list_A[[260]])
StuartMaxwellTest(list_A[[820]])

# yes I found the source of some of problematic matrices 
allPossible[260]
allPossible[820]

  • 1 1 respostas
  • 22 Views

1 respostas

  • Voted
  1. Best Answer
    DaveArmstrong
    2024-01-26T19:51:23+08:002024-01-26T19:51:23+08:00

    O problema não é necessariamente apenas determinantes iguais a zero. Existem algumas matrizes onde o determinante é igual a zero, mas o teste ainda é válido. Tomemos, por exemplo, o segundo elemento de list_A:

    > det(as.matrix(list_A[[2]]))
    [1] 0
    > StuartMaxwellTest(list_A[[2]])
    
        Stuart-Maxwell test
    
    data:  list_A[[2]]
    chi-squared = 1, df = 2, p-value = 0.6065
    

    A verificação de que o teste está sendo executado pode ser vista nas linhas 25 a 31 do código-fonte.

      rowsums <- rowSums(x)
      colsums <- colSums(x)
      equalsums <- diag(x) == rowsums & diag(x) == colsums
      if (any(equalsums)) {
        x <- x[!equalsums, !equalsums]
        if (dim(x)[1] < 2) 
          stop("Too many equal marginals, cannot compute")
    

    Para descobrir antecipadamente quais são válidos, você poderia escrever uma pequena função que acabou de fazer esse teste:

    validSM <- function(x){
      rowsums <- rowSums(x)
      colsums <- colSums(x)
      equalsums <- diag(x) == rowsums & diag(x) == colsums
      if (any(equalsums)) {
        x <- x[!equalsums, !equalsums]
      }
      dim(x)[1] >= 2
      
    }
    

    Então, você poderia aplicar essa função à sua lista de matrizes:

    > valid <- sapply(list_A, validSM)
    > table(valid)
    valid
    FALSE  TRUE 
    10000 55536 
    

    Isso indica que existem 10.000 outras matrizes que não passarão no teste. Você poderia então usar apenas os válidos:

    list_A_small <- list_A[which(valid)]
    pattern_small <- pattern[which(valid), ]
    
    outputSM_small <- list()
    for (i in seq_along(list_A_small)) {
      outputSM_small[[i]] <- StuartMaxwellTest(list_A_small[[i]])
    }
    

    Outra opção, talvez mais fácil, seria apenas capturar os erros usando tryCatch()e retornar um valor ausente se não for válido. Por exemplo:

    outputSM <- list()
    for (i in seq_along(list_A)) {
      outputSM[[i]] <- tryCatch(
        StuartMaxwellTest(list_A[[i]]), 
        error = function(x)NA)
    }
    
    • 1

relate perguntas

  • Adicionar número de série para atividade de cópia ao blob

  • A fonte dinâmica do empacotador duplica artefatos

  • Selecione linhas por grupo com 1s consecutivos

  • Lista de chamada de API de gráfico subscritoSkus estados Privilégios insuficientes enquanto os privilégios são concedidos

  • Função para criar DFs separados com base no valor da coluna

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle?

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Quando devo usar um std::inplace_vector em vez de um std::vector?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Martin Hope
    Aleksandr Dubinsky Por que a correspondência de padrões com o switch no InetAddress falha com 'não cobre todos os valores de entrada possíveis'? 2024-12-23 06:56:21 +0800 CST
  • Martin Hope
    Phillip Borge Por que esse código Java simples e pequeno roda 30x mais rápido em todas as JVMs Graal, mas não em nenhuma JVM Oracle? 2024-12-12 20:46:46 +0800 CST
  • Martin Hope
    Oodini Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores? 2024-12-12 06:27:11 +0800 CST
  • Martin Hope
    sleeptightAnsiC `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso? 2024-11-09 07:18:53 +0800 CST
  • Martin Hope
    The Mad Gamer Quando devo usar um std::inplace_vector em vez de um std::vector? 2024-10-29 23:01:00 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST
  • Martin Hope
    MarkB Por que o GCC gera código que executa condicionalmente uma implementação SIMD? 2024-02-17 06:17:14 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve