我在python中有一个数据框,我需要在其中查找所有类别变量。检查列的类型并不总是可行的,因为int
类型也可以是分类的。
因此,我在寻找正确的假设检验方法以识别列是否为分类方面寻求帮助。
我正在尝试进行卡方检验以下的测试,但是我不确定这是否足够好
import numpy as np
data = np.random.randint(0,5,100)
import scipy.stats as ss
ss.chisquare(data)
请指教。
我在python中有一个数据框,我需要在其中查找所有类别变量。检查列的类型并不总是可行的,因为int
类型也可以是分类的。
因此,我在寻找正确的假设检验方法以识别列是否为分类方面寻求帮助。
我正在尝试进行卡方检验以下的测试,但是我不确定这是否足够好
import numpy as np
data = np.random.randint(0,5,100)
import scipy.stats as ss
ss.chisquare(data)
请指教。
Answers:
简短的答案:您不能。
没有统计测试可以告诉您包含1到10之间的整数的预测变量是数字预测变量(例如,子代数)还是编码十个不同类别。(如果预测变量包含负数,或者最小的变量大于1,或者它跳过整数,则可能会反对它是分类编码-或仅表示分析人员使用了非标准编码。)
确保唯一的方法是利用领域专业知识或数据集的密码本(应始终存在)。
无论您采用哪种准则或经验法则,都欢迎使用您的数据集,但是我们看不到您的数据。在任何情况下,通常都可以更好地解决该问题,并且也无需参考任何特定软件。
即使您认为比您想像的还要糟糕,它也比您想像的要糟糕。
@Stephan Kolassa的答案已经提出了一个重点。小整数可能表示计数而不是类别:3(表示3辆汽车或猫)与3(表示“人拥有汽车”或“人归猫所拥有”)不同。
小数点可能会潜伏在分类变量中,作为编码分类(例如,行业或疾病)的一部分。
严格意义上来说,测量值只能是整数,例如,人们的身高可能只是报告为整数厘米或英寸,血压是整数mm Hg。
唯一值(比“唯一”更好的术语,它仍然具有只发生一次的主要含义)的数量也不是一个好的指导。在中等样本中可能出现的不同身高的人数可能远少于不同宗教信仰或民族血统的人数。
好吧,我认为它甚至比其他答案更糟糕:数据不是分类的或数字的亚种 -分析人员规定,“度量级别”是在特定场合回答特定问题的方法。在此处查看Glen_b的答案。
了解这一点非常重要。例如,对于分类树,比率,间隔和序数水平预测变量之间的区别不重要:唯一重要的区别是序数和名义预测变量之间的区别。限制算法以沿一条线的某个点分割预测变量,将较高的值与较低的值分隔开,会对预测性能产生重大影响(无论好坏),这取决于(假定是有序的)预测变量与响应之间的关系的平滑度以及数据集的大小。无论您要进行何种分析,都没有一种明智的方法来单纯地基于对预测变量如何表示现实的思考来做出决定,更不用说您在样本中发现的价值了。
这是一个开放的研究问题。参见例如Valera等人的著作。(纸)或扩展名(例如Dhir等人的论文 - 纸)。
编辑:
统计和机器学习中的一种常见做法是假定变量的统计数据类型(例如,有序,分类或实值),并且通常也知道似然模型。但是,随着现实世界数据可用性的提高,这种假设变得过于严格。数据通常是异类,复杂的,并且记录不当或不完整。令人惊讶的是,尽管它们具有实际的重要性,但是仍然缺乏自动发现数据集中变量的统计类型以及适当的似然(噪声)模型的工具。
(摘自Valera论文。)
因此,当我们说这是一个“开放性问题”时(足够多地引用自己的话),我们的意思是说,在给定有限样本的情况下,目前尚无良好的自动方法来推断数据类型。如果您有无限的样本,这将很容易,但是由于这是不可能的,因此我们需要恢复到其他方法。