0

[前言:我现在意识到我应该使用分类模型(也许是决策树),但我最终使用了线性回归模型。]

我有一个熊猫数据框:

在此处输入图像描述

我想使用流派、年份、番茄计分来预测观众得分。但是按照构造,每部电影的类型都列在一个列表中,所以我觉得有必要隔离每种类型,以便将每种类型作为单独的变量传递到我的模型中。

这样做之后,我修改后的数据框看起来像这样,每部电影都有重复的行,但该电影的每个流派元素都是孤立的(只有一部电影从数据框中拉出来显示):

在此处输入图像描述

现在,我的问题是,我可以将第二个数据帧按原样传递给 Patsy 和 statsmodel 线性回归,还是行重复会在我的模型中引入偏差?

y1, X1 = dmatrices('Q("Audience Score") ~ Year + Q("Tomato-meter") + Genre',
                   data=DF2, return_type='dataframe')

总之,寻找一种方法让 patsy 和我的模型将每种类型视为单独的变量.. 但要确保我不会通过传入这种格式的数据框作为数据来伪造数字/模型(因为不是每部电影都具有相同的#类型)。

4

2 回答 2

1

我发现这种方法有两个问题:

参数估计:

如果重复观察的数量不同,则具有多个类别的观察的权重将大于仅具有单个类别的观察。这可以通过使用线性模型中的权重来纠正。使用权重等于重复次数的倒数(或平方根?)的 WLS。权重不适用于 Poisson 或 Logit 或 GLM-Binomial 等其他模型。这不会对参数估计产生更大的差异,如果“模式”,即基础参数在具有不同类别数量的电影之间没有系统地不同。

推断,参数估计的标准误差:

OLS、Poisson 等所有基本模型都假设每一行都是一个独立的观察值。总行数将大于实际观察数,并且会低估参数的估计标准误差。(我们可以使用集群稳健标准误差,但我从未检查过它们在重复观察中的工作情况,即在多个观察中的响应是相同的。)

选择

作为重复观察的替代方法,我会将类别编码为非排他性虚拟变量。例如,如果我们有三个级别的分类变量,在这种情况下是电影类别,那么1如果观察是"in"该类别,我们在每个对应的列中添加一个。

Patsy 对此没有预先支持,因此电影类别的设计矩阵需要手动构建或作为单个虚拟矩阵的总和(不删除参考类别)。

替代模型

这与解释变量中的多个类别的问题没有直接关系。

响应变量电影收视率必然在 0 到 100 之间。线性模型可以很好地作为局部近似值,但不会考虑到观察到的收视率在有限范围内,也不会强制它进行预测。

泊松回归可用于考虑非负性,但不会使用上限。两个更合适的替代方案是具有二项式系列的 GLM,并且每个观察的总计数设置为 100(最大可能评级),或者在将评级重新调整为 0 和 1 之间后使用二元模型,例如 Logit 或 Probit。后者对应于估计可以使用 statsmodels 二元响应模型估计的比例模型。即使数据不是二进制的,为了得到正确的推断,我们可以使用稳健的标准错误。例如

result = sm.Logity(y_proportion, x).fit(cov_type='HC0')

于 2015-07-15T06:54:03.940 回答
0

Patsy 没有任何内置方法来分离像您的Genre变量这样的“多类别”,据我所知,在 Pandas 中也没有直接的方法来表示它。

我会将它们Genre分成一堆布尔列,每个类别一个:神秘 = 真/假,喜剧 = 真/假等。这更适合 pandas 和 patsy 表示事物的方式。

于 2015-07-15T07:29:50.950 回答