【问题标题】:chi square test for independence of variables with R使用 R 的变量独立性的卡方检验
【发布时间】:2012-03-03 17:19:04
【问题描述】:

我必须用 R 对两个物理变量进行卡方检验。我正在尝试:

Library('MASS')
Library('gplots')
data<-read.table('data.dat',head=F) 
pp<-hist2d(data$V2,data$V3)
chisq.test(pp$counts)

但 R 说我:

Pearson's Chi-squared test

    data:  pp$counts 
    X-squared = NaN, df = 240, p-value = NA

我过去曾使用此脚本来执行卡方,但现在它不起作用。问题出在哪里?

【问题讨论】:

    标签: r statistics


    【解决方案1】:

    hist2d 对数据进行分箱,但如果某些分箱始终为空, 卡方统计量未定义(因为除以零)。 您可以尝试减少垃圾箱的数量, 或丢弃空的垃圾箱。

    library(gplots)
    d <- data.frame( rnorm(100), rnorm(100) )
    
    # Discard empty bins
    p <- hist2d(d)
    i <- apply( p$counts, 1, sum ) > 0
    j <- apply( p$counts, 2, sum ) > 0
    chisq.test( p$counts[i,j] )
    
    # Reduce the number of bins
    p <- hist2d(d,nbins=5)
    chisq.test( p$counts )
    

    (从统计的角度来看, 我不确定你所做的是否是最佳的。)

    【讨论】:

    • 如果数据已经是离散的(从您的问题中不清楚),您不需要致电hist2dchisq.test(table(data[,2:3])) 就足够了。如果数据是连续的,通过离散化它,你实际上会丢弃信息:不仅是观察值的精确值,还有它们的顺序。如果变量之间的可疑关系可能是单调的,则可以使用相关性(对于线性关系)或等级相关性。如果变量之间的可疑关系不是单调的,或者更糟糕的是,如果它不是函数式的,那就更棘手了……
    • 这是一个示例,说明当每个 bin 中的观测值非常少时,连续数据可能会出现什么问题。对于两个自变量,p 值为 0.23:d &lt;- data.frame(runif(10),runif(10)); chisq.test(table(d))。对于两个因变量,p 值也是 0.23(我们期望它不同并且接近 0):d &lt;- data.frame(1:10,1:10); chisq.test(table(d))。但是,有一个警告,告诉您测试不太可能有效。
    • 您可以通过?quantile ?cut 您的数据,或者通过查看您的数据的?hist 在有用的休息时间将其剪切。然后用?table比较两者……然后就可以用chisq.test(table(cut(x)),table(cut(y))),得到合理的统计结果。不过,查看您的数据很重要。频率小于 5 的单元格会导致重要性不稳定(或至少不准确)。
    猜你喜欢
    • 2020-10-12
    • 1970-01-01
    • 2013-11-02
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 2021-11-19
    • 2021-05-17
    • 1970-01-01
    相关资源
    最近更新 更多