我想用调查权重对调查数据进行线性回归。
调查数据来自欧盟,每项观察都有一个权重。 (.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中处理调查权重的正确方法?
答案 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)
[[ 7.14285714]
[ 24.28571429]
[ 58.57142857]]
[[ 9.96051333]
[ 20.05923001]
[ 40.25666338]]
在第一个具有偶数权重的线性回归模型中,我们看到模型的行为与正态线性回归模型的预期一致。
然而,接下来,我们看到在第二个模型中,对最后一个值进行低权重时,几乎忽略了最后一个值。大部分培训都在这里加权到其他两个值。