R中的非对称eta方阵
Asymmetric eta square matrix in R
我有一个函数可以计算定性和定量变量之间相关性的 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)
我需要编写一个函数,returns 一个矩阵,其中包含定性和定量变量 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)
}
我该怎么做?提前谢谢你..
您可以使用 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
我有一个函数可以计算定性和定量变量之间相关性的 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)
我需要编写一个函数,returns 一个矩阵,其中包含定性和定量变量 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)
}
我该怎么做?提前谢谢你..
您可以使用 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