如何使用Python中的Survey Weights计算OLS回归。

时间:2017-06-15 19:51:51

标签: python pandas numpy scikit-learn statsmodels

我想用调查权重对调查数据进行线性回归。

调查数据来自欧盟,每项观察都有一个权重。 (.4为一个受访者,1.5为另一个受访者。)

此重量描述为:

  

"欧洲权重,变量6,产生一个代表性的样本   整个欧洲共同体用于分析。这个变量   根据每个国家/地区调整每个国家样本的大小   对欧洲共同体人口的贡献。"

要进行我的计算,我使用sklearn。

from sklearn import linear_model
regr = linear_model.LinearRegression()
regr.fit(X,y, sample_weight = weights)

X是一个pandas DataFrame。你是一个numpy.ndarray。重量是熊猫系列。

我使用' sample_weight'这是否是在scikit中处理调查权重的正确方法?

1 个答案:

答案 0 :(得分:0)

TL DR;是。

这是一个非常简单的工作示例,

import numpy as np
import matplotlib.pylab as plt
from sklearn import linear_model
regr = linear_model.LinearRegression()

X = np.array([1, 2, 4]).reshape(-1, 1)
y = np.array([10, 20, 60]).reshape(-1, 1)
weights = np.array([1, 1, 1])

def weighted_lr(X, y, weights):
    """Quick function to run weighted linear regression and return a
    plot and some predictions"""

    regr.fit(X,y, sample_weight=weights)
    y_pred = regr.predict(X)
    plt.scatter(X, y)
    plt.plot(X, y_pred)
    plt.title('Weights: %s' % ', '.join(str(i) for i in weights))
    plt.show()
    return y_pred

y_pred = weighted_lr(X, y, weights)
print(y_pred)

weights = np.array([1000, 1000, 1])
y_pred = weighted_lr(X, y, weights)

print(y_pred)

enter image description here

[[  7.14285714]
 [ 24.28571429]
 [ 58.57142857]]

enter image description here

[[  9.96051333]
 [ 20.05923001]
 [ 40.25666338]]

在第一个具有偶数权重的线性回归模型中,我们看到模型的行为与正态线性回归模型的预期一致。

然而,接下来,我们看到在第二个模型中,对最后一个值进行低权重时,几乎忽略了最后一个值。大部分培训都在这里加权到其他两个值。