一个疑惑:解释变量中类别变量的处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个疑惑:解释变量中类别变量的处理相关的知识,希望对你有一定的参考价值。
参考技术A 我们知道,当分类自变量的类别大于两个的时候,需要建立一组虚拟变量(哑变量)来代表变量的归属性质。一般虚拟变量的数目比分类变量的数目少一个,少掉的那个就作为参照类(reference category),参照类的选取是随意的。问题来了:为什么要这么做呢?如果把这个类别变量(尤其是有序变量)当做连续变量处理,有什么不对的地方吗?
举个栗子:教育变量在回归中作为控制变量。按教育程度由低到高依次记为 1~6,回归中把教育作为一个连续变量 edu 和作为 6 个哑变量 edu1~edu6 处理有何不同?
从系数含义来讲,作为连续变量的 edu, 其系数代表每提升一个教育程度对因变量的影响。由于结果中只有一个系数,其潜在假设是 edu1 和 edu2 对因变量影响的差异 = edu2 和 edu3 对因变量影响的差异 = edu3 和 edu4 对因变量影响的差异 = ……。现实中满足这种假设的情形极为少见。
若作为哑变量处理,参照类的系数为 0,其余哑变量的系数代表与参照类相比对因变量的影响多多少(高出的截距)。它允许各类之间的影响存在差异,可以刻画的情形更多,适用范围更广。
从模型上看,作为连续变量处理的模型为
作为虚拟变量处理的模型为
引入虚拟变量的本质是对不同类别的子样本使用不同的截距项(引入虚拟变量的交乘项则是使用不同斜率)。该式子等价于
回到问题上,在类别变量是有序的,且编码间隔为 1, 且已知相邻类别间对因变量的影响大致相等的情况下,作为连续变量处理的模型估计出来的系数 是不是无偏的?此时的 与 有什么关系?
(亲身实践表明,确实会有偏误,系数和 t 统计量都会偏大(负数的话绝对值更小)。在样本量较小、类别变量较多的情况下,比如用子样本回归,用连续变量处理会使不显著的会变为显著。另一个问题是:当模型中的哑变量太多,是否会降低系数的显著性?)
在通常情况下,虚拟变量往往用作控制变量。如果不关心 的系数准确性,这样的模型设定会不会影响核心解释变量的估计量 的准确性?
建立一个饼图
我试图制作一个分类变量“回收”的饼图。此变量有8个类别。我写了这段代码:
data.plot.pie(y='Reclaim', figsize=(5, 5))
'str'和'int'的实例之间不支持“TypeError:'<'错误”你能解释一下这里不支持的内容吗?这里有什么问题? int是如何发挥作用的,因为我纯粹处理str类别?
这是来自我的Jupyter笔记本的粘贴:
> import pandas as pd
> data=pd.read_csv("reclaims1.txt")
> data.head()
> data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 122 entries, 0 to 121
Data columns (total 3 columns):
Reclaim 122 non-null object
Person 122 non-null object
Processing time 122 non-null float64
dtypes: float64(1), object(2)
memory usage: 2.9+ KB
> import matplotlib.pyplot as plt
> import seaborn as sns
%matplotlib inline data.plot.pie(y='Reclaim', figsize=(5, 5))
这是一些示例数据:
data['Reclaim'].head(5)
0 Account closing
1 IBAN
2 Status info
3 Matching
4 Billing
Name: Reclaim, dtype: object
我想看看例如发生的百分比。饼图上数据集中的“IBAN”类别。共有8个类别。我想看看他们在那里经常出现的频率。
答案
IIUC,我认为你首先需要Series.value_counts
。尝试:
data.Reclaim.value_counts().plot(kind='pie', figsize=(5, 5))
以上是关于一个疑惑:解释变量中类别变量的处理的主要内容,如果未能解决你的问题,请参考以下文章