将虚拟变量从数字转换为 R 中卡方检验的因子

Posted

技术标签:

【中文标题】将虚拟变量从数字转换为 R 中卡方检验的因子【英文标题】:Convert dummy variable from numeric to factor for chi-square test in R 【发布时间】:2019-12-12 19:07:11 【问题描述】:

我想使用以下数据集在 R 中执行卡方检验。执行虚拟变量创建后。我从卡方检验得到的 p 值为 1,这是不正确的。我怀疑这是因为在创建虚拟变量之后,数据结构从因子变为数字。这是一个假设检验问题,要检查缺陷百分比是否在 4 个国家中心以 5% 的置信区间变化。请告知可能的错误以及解决方案是什么。

Subset of datasets used
Phillippines    Indonesia   Malta   India
Error Free  Error Free  Defective   Error Free
Error Free  Error Free  Error Free  Defective
Error Free  Defective   Defective   Error Free
Error Free  Error Free  Error Free  Error Free
Error Free  Error Free  Defective   Error Free
Error Free  Error Free  Error Free  Error Free

初始数据的结构是因数:

> str(data)
'data.frame':   300 obs. of  4 variables:
 $ Phillippines: Factor w/ 2 levels "Defective","Error Free": 2 2 2 2 2 2 2 2 2 2 ...
 $ Indonesia   : Factor w/ 2 levels "Defective","Error Free": 2 2 1 2 2 2 1 2 2 2 ...
 $ Malta       : Factor w/ 2 levels "Defective","Error Free": 1 2 1 2 1 2 2 2 2 2 ...
 $ India       : Factor w/ 2 levels "Defective","Error Free": 2 1 2 2 2 2 2 2 2 2 …

我通过以下代码为以下分类数据(无错误和有缺陷)转换虚拟变量:

library(caret)
dmy <- dummyVars("~ .", data = data, fullRank = T)
trsf <- data.frame(predict(dmy, newdata = data))

虚拟变量创建后,虚拟变量的数据结构变为数值型:

> str(trsf)
'data.frame':   300 obs. of  4 variables:
 $ Phillippines.Error.Free: num  1 1 1 1 1 1 1 1 1 1 ...
 $ Indonesia.Error.Free   : num  1 1 0 1 1 1 0 1 1 1 ...
 $ Malta.Error.Free       : num  0 1 0 1 0 1 1 1 1 1 ...
 $ India.Error.Free       : num  1 0 1 1 1 1 1 1 1 1 ...

卡方的P值为1

> chisq.test(trsf)   

    Pearson's Chi-squared test

data:  trsf
X-squared = 112.75, df = 897, p-value = 1

Warning message:
In chisq.test(trsf) : Chi-squared approximation may be incorrect

我尝试应用as.factor 并执行卡方但得到以下错误:

trsf_2 <- as.factor(trsf)
str(trsf_2)
 Factor w/ 4 levels "c(1, 1, 1, 1, 1, 0, 0, 0, 0, 1)",..: NA NA NA NA
 - attr(*, "names")= chr [1:4] "Phillippines.Error.Free" "Indonesia.Error.Free" "Malta.Error.Free" "India.Error.Free"

> chisq.test(trsf_2)   
Error in chisq.test(trsf_2) : 
  all entries of 'x' must be nonnegative and finite
In addition: Warning message:
In Ops.factor(x, 0) : ‘<’ not meaningful for factors

【问题讨论】:

【参考方案1】:

你可以试试

数据集

但是,我不确定卡方是最适合二元变量的方法。我可以建议 Phi 系数吗?您可以在下面找到信息: https://en.wikipedia.org/wiki/Phi_coefficient.

但是,如果您不想为每组两个变量(即国家/地区)手动执行此操作,则需要创建一个循环。

【讨论】:

其实这是一个假设检验问题,想检查缺陷百分比是否在 4 个国家中心以 5% 的置信区间变化。我更新了上面的问题。我尝试使用您的代码,但得到错误`> dataset chisq.test(dataset)。错误:“chisq.test(数据集)”中出现意外符号。 对不起,我的错误。尝试在 2 个不同的行中运行它: dataset 我单独运行代码。 p 值相同。 &gt; dataset &lt;- as.data.frame(lapply(data, as.numeric)) &gt; chisq.test(dataset). Error: unexpected symbol in "chisq.test(dataset)." &gt; chisq.test(dataset) Pearson's Chi-squared test data: dataset X-squared = 44.655, df = 897, p-value = 1

以上是关于将虚拟变量从数字转换为 R 中卡方检验的因子的主要内容,如果未能解决你的问题,请参考以下文章

如何使用R语言进行卡方检验

R语言构建xgboost模型:特征因子化独热编码( one-hot encoding)卡方检验判断预测变量与目标变量的相关性

卡方检验详解

SPSS做卡方检验是报错了

白话“卡方检验”

请教:SPSS卡方检验的结果分析!! 【重要】