Python statsmodels中缺少观测值和聚类标准错误吗?

问题描述 投票:1回答:1

仅对不丢失的数据运行回归并使用聚类标准错误的最干净,最Python方式是什么?

想象我有一个熊猫数据框all_data

有效的笨拙方法(创建一个数据框而不会丢失数据):

我可以创建一个没有缺失数据的新数据框,建立模型,并拟合模型:

import statsmodels.formula.api as smf

available_data = all_data.loc[:,['y', 'x', 'groupid']].dropna(how='any')
model  = smf.ols('y ~ x', data = available_data)
result = model.fit(cov_type = 'cluster', cov_kwds={'groups': available_data['groupid']})

[这感觉有点笨拙(尤其是当我在各处使用不同的右侧变量进行操作时。)而且我必须确保我的stats公式与dataframe变量匹配。

但是有一种方法可以使用缺少的参数来使其工作?

我可以通过设置缺少的参数来建立模型并拟合模型。

m = smf.ols('y ~ x', data = all_data, missing = 'drop')
result_nocluster = m.fit()`

对于默认的同位标准错误非常有用,但是我不知道该如何处理群集标准错误?如果我运行:

result = m.fit(cov_type = 'cluster', cov_kwds = {'groups': all_data['groupid']})

我收到错误ValueError: The weights and list don't have the same length.,大概是缺少观察值的行are n'tall_data['groupid']中删除,因此引发了错误。

python linear-regression missing-data statsmodels standard-error
1个回答
0
投票

(为时已晚,但可供其他用户使用)简而言之,如果您只想在smf.ols函数中使用缺少的参数,则没有办法使其起作用,并且考虑到程序包的当前状态,我认为不应该使用它。原因正像您提到的那样:“缺少观察值的行不会被删除”,并且它们不应该被删除。因为missing参数创建了输入数据的(惰性)副本而没有丢失值,并将其用作输入(输入数据:$ X $,所以惰性副本:$ \ hat {X} $)。此过程实际上不应删除原始数据($ X $)中的缺失值!同时,groups数组应引用模型使用的相同数据,即$ \ hat {X} $,但是在您的代码中,group变量来自原始数据($ X $),这是不同的而不是模型数据($ \ hat {X} $)。

[有人可能会争辩说groups应该只接受关键字。我想这是要在软件包的GitHub页面上进行更深入讨论的内容。

目前,针对您的问题的一种快速解决方案是在第二行中添加一个dropna,这违背了目的。所以看起来像这样:

result = m.fit(cov_type = 'cluster',
               cov_kwds = {'groups': alldata[['y', 'x', 'groupid']].dropna()['groupid']})

非常难看,效率低下且容易出错!因此,可能您原来的大块方法会更好。

© www.soinside.com 2019 - 2024. All rights reserved.