关于assocstats()中Phi-Coefficient:na的原因

好久没有更新了,最近都在忙数据分析,对于代码的编写时间变少了。今天更一个关于《R语言实战》书中代码结果不一致的问题。
在《R语言实战(第2版)》p144-145中,有一个利用vcd包中assocstats()函数计算相关性的问题,我们先看看书中如何描述:
《R语言实战p144-145》

根据书中的实例代码,我们重新跑一下试试看:

> library(vcd)
> data <- xtabs(~Treatment+Improved,data = Arthritis)
> assocstats(data)
                    X^2 df  P(> X^2)
Likelihood Ratio 13.530  2 0.0011536
Pearson          13.055  2 0.0014626

Phi-Coefficient   : NA 
Contingency Coeff.: 0.367 
Cramer's V        : 0.394 
> #我们注意到 Phi-Coefficient 这个值同实例数据产生了产别,即便代码都是一样的。

那么为什么会产生这个问题呢?我们扒一下源码看看

> assocstats
function (x) 
{
    if (!is.matrix(x)) {
        l <- length(dim(x))
        str <- apply(x, 3:l, FUN = assocstats)
        if (l == 3) {
            names(str) <- paste(names(dimnames(x))[3], names(str), 
                sep = ":")
        }
        else {
            dn <- dimnames(str)
            dim(str) <- NULL
            names(str) <- apply(expand.grid(dn), 1, function(x) paste(names(dn), 
                x, sep = ":", collapse = "|"))
        }
        return(str)
    }
    tab <- summary(loglm(~1 + 2, x))$tests
    phi <- sqrt(tab[2, 1]/sum(x))
    cont <- sqrt(phi^2/(1 + phi^2))
    cramer <- sqrt(phi^2/min(dim(x) - 1))
    #我们发现在这里是否输出phi值进行了判断,当dall(dim(x) == 2L时,才会输出phi值
    #也就是都是二维变量的时候才会输出,详见Phi-Coefficient的阐述。
    structure(list(table = x, chisq_tests = tab, phi = ifelse(all(dim(x) == 
        2L), phi, NA), contingency = cont, cramer = cramer), 
        class = "assocstats")
}
<bytecode: 0x000002bdb48566e0>
<environment: namespace:vcd>

造成这个结果差异的 原因可能是由于书编写的时候函数还未更新吧:)
哪些都不重要,重要的是理解为什么会输出NA:)
源码放在这里啦,Phi-Coefficient具体是如何计算出来的,可以自己用源码去试试~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值