R 如何在3d应急选项卡中选择部分表格?

R 如何在3d应急选项卡中选择部分表格?,r,contingency,R,Contingency,这似乎是个新问题,但我就是搞不懂。我正在看一个3d列联表,我想对部分表进行分析。以下是一些示例数据: df2 <- data.frame(Gender = c(rep("M", 6), rep("F", 6)), Beliefs = c(rep("Fund", 2), rep("Mod", 2), rep("Liberal", 2), rep("Fund", 2), rep("Mod", 2), rep("Liberal", 2)), Afterlife = c(rep(c("Yes",

这似乎是个新问题,但我就是搞不懂。我正在看一个3d列联表,我想对部分表进行分析。以下是一些示例数据:

df2 <- data.frame(Gender = c(rep("M", 6), rep("F", 6)), Beliefs = c(rep("Fund", 2), rep("Mod", 2), rep("Liberal", 2), rep("Fund", 2), rep("Mod", 2), rep("Liberal", 2)), Afterlife = c(rep(c("Yes", "No"), 6)), Count = c(252, 43, 274, 47, 226, 100, 420, 50, 415, 50, 273, 83))

df2.tab <- xtabs(Count ~ Beliefs + Afterlife + Gender, data = df2)

df2以下是一个示例,试图解释
apply
在这里是如何有用的:

printchk <- function(x) {print(x); print(class(x)); cat("------\n")}
tab <- array(1:8,dim=c(2,2,2))
printchk(tab)
#, , 1
#
#     [,1] [,2]
#[1,]    1    3
#[2,]    2    4
#
#, , 2
#
#     [,1] [,2]
#[1,]    5    7
#[2,]    6    8
#
#[1] "array"
#------
跨地层使用组合柱

invisible(apply(tab, 1, printchk))
#     [,1] [,2]
#[1,]    1    5
#[2,]    3    7
#[1] "matrix"
#------
#     [,1] [,2]
#[1,]    2    6
#[2,]    4    8
#[1] "matrix"
#------
invisible(apply(tab, 2, printchk))
#     [,1] [,2]
#[1,]    1    5
#[2,]    2    6
#[1] "matrix"
#------
#     [,1] [,2]
#[1,]    3    7
#[2,]    4    8
#[1] "matrix"
#------
 
与地层打交道

invisible(apply(tab, 3, printchk))
#     [,1] [,2]
#[1,]    1    3
#[2,]    2    4
#[1] "matrix"
#------
#     [,1] [,2]
#[1,]    5    7
#[2,]    6    8
#[1] "matrix"
#------
因此,在不更改维度或结构的情况下,您可以使用
apply
调用比较数组的不同部分

oddsratio <- function(x) (x[1,1]/x[2,1]) / (x[1,2]/x[2,2])

apply(tab, 1, oddsratio)
##Expecting: (1/3)/(5/7) = 0.46
##           (2/4)/(6/8) = 0.66

#[1] 0.4666667 0.6666667

你的意思是像
apply(df2.tab,3,chisq.test)
这样的东西吗?我正在为每个
性别组运行
chisq.test
<代码>应用
可以处理任何维度和维度组合,而不仅仅是行和列,您的预期输出是什么?正如最近的邮件所说,您是否需要
应用(df2.tab,3,demateols::oddsratio)
?我想这就是我想要的。我考虑的更多是选择一个部分表,就像使用$选择一个对象的元素一样简单,而不是在本例中创建一个全新的表,其中信念是分组变量,然后对其使用apply。但最终我认为,通过apply方法,如果不是更少的话,工作量也是一样的。@Michael-
aperm
也可以用来“旋转”表格的维度,例如:
aperm(df2.tab,c(1,3,2))
不知道该函数。和apply一起,我想这就是我想要的。谢谢大家!那么维度的各个部分呢?假设数组是2x4x2,但您只对边缘关联感兴趣,所以您正在查看2x4表。但这本身就有一系列的部分表可以应用于x[,c(1,4)]。如何使用一个函数覆盖数组中的所有2x2部分表?我想你必须为此编写某种函数,对吗?@Michael-我看看我是否理解正确,你想比较所有2x2表的可能性,比如
c(1,2)
c(1,3)
c(1,3)c(1,4)c(2,3)等吗?我认为您必须在
apply
-ed函数中使用类似
combn
的内容。它开始变得越来越复杂,但它是可行的:
apply(tab,3,function(x)combn(ncol(x),2,FUN=function(y)chisq.test(x[,y]),simplify=FALSE))
invisible(apply(tab, c(1,2), printchk))
#[1] 1 5
#[1] "integer"
#------
#[1] 2 6
#[1] "integer"
#------
#[1] 3 7
#[1] "integer"
#------
#[1] 4 8
#[1] "integer"
#------