我在 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)
请指教。
简短的回答:你不能。
没有统计测试可以告诉您包含 1 到 10 之间的整数的预测器是数字预测器(例如,孩子的数量)还是编码十个不同的类别。(如果预测变量包含负数,或者最小的数字大于一,或者它跳过整数,这可能会反对它是一种分类编码 - 或者它可能只是意味着分析师使用了非标准编码。)
唯一可以确定的方法是利用领域专业知识或数据集的密码本(应该始终存在)。
欢迎您使用适用于您的数据集的任何标准(或经验法则),但我们看不到您的数据。在任何情况下,这个问题都可以更好地解决,也不需要参考任何特定的软件。
它比你想象的更糟糕,即使你认为它比你想象的更糟糕。
@Stephan Kolassa 的回答已经提出了一个关键点。小整数可能表示计数而不是类别:3,表示 3 辆汽车或猫,与 3 不同,表示“人拥有汽车”或“人被猫拥有”。
小数点可能隐藏在分类变量中,作为编码分类的一部分,例如行业或疾病。
按照惯例,严格意义上的测量可能只是整数,例如,人的身高可能只是报告为整数厘米或英寸,而血压则报告为整数毫米汞柱。
不同(比“唯一”更好的术语,它仍然具有只出现一次的主要含义)值的数量也不是一个好的指导。中等样本中可能出现的不同身高的人数可能远少于不同宗教信仰或种族血统的人数。
好吧,我认为这比其他答案所暗示的还要糟糕:数据不是分类的或数字的子物种æternatis—— “测量水平”是分析师规定的,用于在特定场合回答特定问题。在此处查看 Glen_b 的答案。
理解这一点具有实际意义。例如,对于分类树,比率、区间和序数级别预测变量之间的区别是无关紧要的:唯一重要的区别是序数和名义预测变量之间的区别。约束算法以在沿线的一点处拆分预测变量,将较高值与较低值分开,可以对其预测性能产生显着影响——无论好坏,取决于(假定的序数)预测变量与响应的关系的平滑度& 数据集的大小。无论您将要进行的分析如何,仅根据对预测变量如何代表现实的思考来做出决定是没有明智的方法的,更不用说您在样本中发现的值了。
这是一个开放的研究问题。例如,参见 Valera 等人的工作。(论文)或扩展(例如,Dhir 等人的一篇 -论文)。
编辑:
统计和机器学习中的一种常见做法是假设变量的统计数据类型(例如,序数、分类或实值),并且通常,似然模型也是已知的。然而,随着现实世界数据的可用性增加,这种假设变得过于严格。数据通常是异构的、复杂的、不正确或不完整的记录。令人惊讶的是,尽管它们具有实际重要性,但仍然缺乏自动发现数据集中变量的统计类型以及适当的似然(噪声)模型的工具。
(来自瓦莱拉论文。)
因此,当我们说这是一个“悬而未决的问题”(奇怪地引用了我自己的话)时,我们的意思是说,目前没有很好的自动方法来推断给定有限样本的数据类型。如果您有无限样本,这将很容易,但由于这是不可能的,我们需要恢复到其他方式。