R |Fisher 测试错误是说超出工作空间?

R | Fisher test error is saying out of workspace?

提问人:Crimson 提问时间:5/8/2023 最后编辑:Crimson 更新时间:5/8/2023 访问量:55

问:

我正在尝试比较两列的显着关联,因此使用 Fisher 检验,因为大多数单元格值为 0。我做的第一件事是创建一个 2x2 列联表,但它不正确,也不确定它不创建列联表的原因是什么。如何解决这个问题?

错误:

> fisher.test(data_table)
Error in fisher.test(data_table) : FEXACT error 40.
Out of workspace.

法典:

#import Excel file into R
setwd('C:\\Users\\main\\Desktop')
data <- read.csv("Framingham.csv")

diabetes_no <- subset(xx,DIABETES==0)$DIABETES
diabetes_yes <- subset(xx,DIABETES==1)$DIABETES
cursmoke_no <- subset(xx,CURSMOKE==0)$CURSMOKE
cursmoke_yes <- subset(xx,CURSMOKE==1)$CURSMOKE
# create 2x2 table
data_table = matrix(c(diabetes_no,diabetes_yes,cursmoke_no,cursmoke_yes), nrow = 2)
data_table
fisher.test(data_table)
R Excel 数学 统计 卡方

评论


答:

0赞 mfg3z0 5/8/2023 #1

通常,应将数据转换为 2x2 列联表以使用 .有关详细信息,请查看此问题。下面是一个简单的示例,说明如何执行此操作(请注意,此处的数据集太小,无法获得有意义的结果,因此会发出警告):chisq.testchisq.test

df <- tibble::tribble(
  ~col1, ~col2,
  0, 1,
  1, 1,
  0, 0,
  1, 1,
  1, 1,
  1, 1,
  1, 1,
  0, 1,
  0, 1,
  0, 1,
  0, 1,
  0, 1, 
  0, 1
)

a <- df %>% filter(col1 == 0 & col2 == 0) %>% 
  summarise(n = n()) %>% pull(n)
b <- df %>% filter(col1 == 1 & col2 == 0) %>% 
  summarise(n = n()) %>% pull(n)
c <- df %>% filter(col1 == 0 & col2 == 1) %>% 
  summarise(n = n()) %>% pull(n)
d <- df %>% filter(col1 == 1 & col2 == 1) %>% 
  summarise(n = n()) %>% pull(n)

contingency_table <- data.frame(col1_0 = c(a, c), col1_1 = c(b, d), row.names = c("col2_0", "col2_1"))

contingency_table
#>        col1_0 col1_1
#> col2_0      1      0
#> col2_1      7      5

chisq.test(contingency_table)

#>  Pearson's Chi-squared test with Yates'
#>  continuity correction
#> 
#> data:  contingency_table
#> X-squared = 7.7448e-32, df = 1, p-value = 1

评论

1赞 thelatemail 5/8/2023
这可能无法说明全部情况 - 将起作用,也会起作用 - 两者都具有相同的结果 AFAIK。chisq.test(df$col1, df$col2)chisq.test(table(df))