2017-06-15 4 views
1

Ich möchte eine lineare Regression auf Umfragedaten mit Umfragegewichten machen.Wie berechnen OLS Regression mit Survey Weights in Python.

Die Umfragedaten stammen aus der EU und jede Beobachtung hat ein Gewicht. (0,4 für eine Ein Teilnehmer, 1,5 für einen anderen.)

Dieses Gewicht wie beschrieben wird:

„The European Gewicht, variable 6 erzeugt eine repräsentative Stichprobe von der Europäischen Gemeinschaft als Ganzes, wenn Diese Variable passt die Größe jeder nationalen Stichprobe entsprechend dem Beitrag jedes Landes an die Bevölkerung der Europäischen Gemeinschaft an. "

Um meine Berechnung zu tun verwende ich sklearn.

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

X ist ein Pandas Datenrahmen. y ist ein numpy.darray. Gewichte ist eine Pandas-Serie.

Ich benutze 'sample_weight' richtig, ist dies der richtige Weg, um Umfragegewichte in scikit zu behandeln?

Antwort

0

TL DR; Ja.

Hier ist ein sehr einfaches Beispiel dafür arbeitet,

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]] 

Auf dem ersten Modell der linearen Regression mit noch Gewichte wir das Modell zu sehen Verhalten wie erwartet von einem normalen linearen Regr essionsmodell.

Als nächstes sehen wir, dass im zweiten Modell, mit niedrigen Wiegen auf den letzten Wert, fast ignoriert diesen letzten Wert. Der Großteil des Trainings wurde hier auf die anderen beiden Werte gewichtet.

+0

Dank einer Million, die wirklich nützlich war! –

+0

@ TiarnándeBurca Kein Problem. Wenn dies Ihre Frage beantwortet, sollten Sie es akzeptieren. Wenn nicht, dann kommentiere mit Punkten, die ich verpasst habe oder bearbeite deine Antwort, um sie auszuarbeiten. – josh

+1

Ich denke, ich habe es als akzeptiert markiert. (Ich habe versucht, es zu verbessern, weil ich dachte, dass das der Mechanismus war, aber ich habe nicht genug 'rep', um das zu tun.) Nochmals vielen Dank. –

Verwandte Themen