[前言:我现在意识到我应该使用分类模型(可能是决策树),但我最终使用的是线性回归模型。]
我有一个pandas数据框:
我想用流派,年份,番茄米分数预测观众得分。但是按照构建的方式,每部电影的类型都列在一个列表中,所以我觉得需要隔离每个类型,将每个类型作为单独的变量传递给我的模型。
执行此操作后,我修改过的数据框看起来像这样,每部电影都有重复的行,但是该电影的每个类型元素都是孤立的(只有一部电影从数据框中拉出来显示):
现在,我的问题是,我可以将第二个数据帧传递给Patsy和statsmodel线性回归,还是行重复会将偏差引入我的模型?
y1, X1 = dmatrices('Q("Audience Score") ~ Year + Q("Tomato-meter") + Genre',
data=DF2, return_type='dataframe')
总之,为patsy和我的模型寻找一种方法来识别将每个类型视为单独的变量..但是要确保我不会通过以这种格式传递数据帧来捏造数字/模型数据(并不是每部电影都是同一种类型)。
答案 0 :(得分:1)
我发现这个方法存在两个问题:
参数估算:
如果重复观察的数量不同,则具有多个类别的观测值的权重将大于仅具有单个类别的观测值的权重。这可以通过使用线性模型中的权重来纠正。使用WLS的权重等于重复次数的倒数(或它的平方根?)。重量不适用于Poisson或Logit或GLM-Binomial等其他型号。如果"模式",即基础参数在具有不同类别数量的电影中没有系统地不同,则这不会对参数估计产生更大的差异。
推理,参数估算的标准误差:
所有基本模型,如OLS,泊松等,都假设每一行都是一个独立的观察。总行数将大于实际观测数量,并且将低估参数的估计标准误差。 (我们可以使用群集稳健的标准错误,但我从未检查它们在重复观察中的效果如何,即在几个观察中响应是相同的。)
<强>替代强>
作为重复观察的替代方法,我会将类别编码为非独占虚拟变量。例如,如果我们在此情况下有三个级别的分类变量(电影类别),那么如果观察结果为1
,我们会在每个对应列中添加"in"
。
Patsy并没有预先支持,因此电影类别的设计矩阵需要手工制作或作为各个虚拟矩阵的总和(不删除参考类别)。
替代模式
这与解释变量中的多个类别的问题没有直接关系。
响应变量电影评级必须介于0和100之间。线性模型可以很好地作为局部近似,但不会考虑观察到的评级在有限范围内,并且不会强制执行预测。
泊松回归可用于考虑非负性,但不会使用上限。两个更合适的替代方案是具有二项式族的GLM和每个观察组的总计数设置为100(最大可能的评级),或者使用二元模型,例如二元模型。 Logit或Probit,将评级重新调整为0到1之间。 后者对应于估计可用statsmodels二元响应模型估计的比例模型。要使推理即使数据不是二进制也是正确的,我们可以使用强大的标准错误。例如
result = sm.Logity(y_proportion, x).fit(cov_type='HC0')
答案 1 :(得分:0)
Patsy没有任何内置的方法来分离出多类别&#34;就像你的Genre
变量一样,据我所知,在Pandas中没有直接的方式来表示它。
我将Genre
分成一堆布尔列,每个类别一个:Mystery = True / False,Comedy = True / False等。这对于大熊猫和patsy来说都更合适&#39 ; s代表事物的方式。