【问题标题】:Asymmetric eta square matrix in RR中的不对称eta方阵
【发布时间】:2015-05-29 03:56:38
【问题描述】:

我有一个函数可以计算定性变量和定量变量之间相关性的 eta 平方系数:

eta <- function(x,y){
  m <- mean(x,na.rm = TRUE)
  sct <- sum((x-m)^2,na.rm = TRUE)
  n <- table(y)
  mk <- tapply(x,y,mean)
  sce <- sum(n*(mk-m)^2)
  return(ifelse(sct>0,sce/sct,0))
}

假设我有以下变量(只是一个示例),其中缺少值:

a <-  factor(c("M","NA","F","F","NA","M","F"))
b <-  factor(c("y","y","y","n","n","n","y")
d <- c(2,5,4,8,9,6,4)
e <- c(5,7,8,5,6,9,7) 

我需要编写一个函数,该函数返回一个矩阵,该矩阵包含定性和定量变量 x 和 y 的每种组合的 eta 系数。 可能是这样的(它不起作用):

 matrix<-function(x,y){
  col.y<-ncol(y)
  row.x<-nrow(x)
  M<-matrix(ncol=col.y,nrow=row.x,dimnames = list(names(x), names(y)))
  for(i in 1:col.y){
    for(j in 1:row.x){
      M[i,j]<-rap.corr(y[,i],x[,j])
    }
  }
  return(M)
}

我该怎么做?提前谢谢你..

【问题讨论】:

  • 您想如何从abde 构建矩阵?一言以蔽之,您的预期输出是什么? (只是一般形式,矩阵中的数字无关)
  • 一个相关矩阵,其中定性变量 a 和 b 在一侧,定量变量在列中。我在变量中有缺失值。例如,当定性变量多于定量变量时,它应该是一个非对称矩阵
  • 一侧有ab?你的意思是rows的数量等于2,列的数量等于2,这样矩阵就包含eta(a,e)eta(a,d)eta(b,e)eta(b,d)
  • 是的,我的意思是rows 的数量取决于定量变量的数量。对于这个例子,它是 2.
  • 好的,下面是一个方法。

标签: r matrix correlation


【解决方案1】:

您可以使用mapply

qual = list(a=a, b=b)
quant = list(e=e,d=d)

m = matrix(mapply(eta, rep(quant, length(qual)), rep(qual, each=length(quant))), ncol=length(qual))

rownames(m) = names(quant)
colnames(m) = names(qual)

#> m
#           a            b
#e 0.01950355 0.0008865248
#d 0.25333333 0.7363333333

【讨论】:

  • 哇,这比我想象的要容易! mapply 没有循环!
  • 函数式编程的一些美!诀窍主要在rep(x, each=length(y))rep(y, length(x))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 2016-10-05
  • 1970-01-01
相关资源
最近更新 更多