Lihat postingan sebelumnya di sini .
Regresi
Meskipun mungkin berguna untuk mengetahui bahwa kedua variabel tersebut berkorelasi, kami tidak dapat menggunakan informasi ini sendirian untuk memprediksi bobot perenang Olimpiade dengan adanya data tinggi badan, atau sebaliknya. Saat menetapkan korelasi, kami mengukur kekuatan dan tanda koneksi, tetapi bukan kemiringannya, yaitu. lereng. Untuk menghasilkan prediksi, Anda perlu mengetahui tingkat perubahan yang diharapkan dalam satu variabel untuk perubahan unit tertentu di variabel lain.
Kami ingin mendapatkan persamaan yang menghubungkan nilai spesifik dari satu variabel, yang disebut variabel independen, dengan nilai yang diharapkan dari variabel dependen lainnya. Misalnya, jika persamaan linier kita memprediksi berat untuk tinggi tertentu, pertumbuhannya adalah variabel bebas kita , dan bergantung pada berat .
Garis yang dijelaskan oleh persamaan ini disebut garis regresi . Istilah ini diciptakan oleh polymath Inggris abad ke-19, Sir Francis Galton. Dia dan muridnya Carl Pearson, yang memperoleh koefisien korelasi, mengembangkan sejumlah besar metode untuk mempelajari hubungan linier di abad ke-19, yang secara kolektif dikenal sebagai metode analisis regresi.
Ingatlah bahwa korelasi tidak menyiratkan sebab akibat, dan istilah "dependen" dan "independen" tidak berarti sebab akibat implisit. Mereka hanyalah nama untuk nilai matematika input dan output. Contoh klasik adalah korelasi yang sangat positif antara jumlah truk pemadam kebakaran yang dikirim untuk memadamkan api dan kerusakan yang disebabkan oleh kebakaran tersebut. Tentu saja, mengirimkan mobil pemadam kebakaran untuk memadamkan api tidak dengan sendirinya menyebabkan kerusakan. Tidak ada yang menyarankan pengurangan jumlah kendaraan yang dikirim untuk memadamkan api sebagai cara untuk mengurangi kerusakan. Dalam situasi seperti itu, kita harus mencari variabel tambahan yang secara kausal terkait dengan variabel lain dan menjelaskan korelasi di antara mereka. Dalam contoh ini, bisa jadi ukuran api... Penyebab mendasar seperti itu disebut variabel kebingungan karena mereka mendistorsi kemampuan kita untuk menentukan hubungan antara variabel dependen.
Persamaan linear
Kedua variabel, yang dapat kita nyatakan sebagai x dan y , dapat terkait satu sama lain secara ketat atau longgar. Hubungan paling sederhana antara variabel independen x dan variabel dependen y adalah langsung, yang dinyatakan dengan rumus berikut:
a b . a , b — , . , a = 32 b = 1.8. a b, :
10° x 10:
, , 10° 50°F, . Python pandas, , :
''' '''
celsius_to_fahrenheit = lambda x: 32 + (x * 1.8)
def ex_3_11():
''' '''
df = pd.DataFrame({'C':s, 'F':s.map(celsius_to_fahrenheit)})
df.plot('C', 'F', legend=False, grid=True)
plt.xlabel(' ')
plt.ylabel(' ')
plt.show()
:
, 0 32 . a — y, x 0.
b; 2. , . , , .
, , . y x. , , , , :
, ε — , , a b x y. y — ŷ, — :
. - , , , . , , , ( ).
a b , x , . , , , x y.
, , , , , . , , .
, , , . , , , .
, , . , . Ordinary Least Squares (OLS), :
, , , . , , , :
(a) — , X Y:
a b — , .
covariance
, variance
mean
, . :
def slope(xs, ys):
''' ( )'''
return xs.cov(ys) / xs.var()
def intercept(xs, ys):
''' ( Y)'''
return ys.mean() - (xs.mean() * slope(xs, ys))
def ex_3_12():
''' ( )
'''
df = swimmer_data()
X = df[', ']
y = df[''].apply(np.log)
a = intercept(X, y)
b = slope(X, y)
print(': %f, : %f' % (a,b))
: 1.691033, : 0.014296
0.0143 1.6910.
— ( ), () . np.exp
, np.log
. , 5.42 . , , .
, y x. , 1.014 . . , , , .
regression_line
x, ŷ a b.
''' '''
regression_line = lambda a, b: lambda x: a + (b * x) # fn(a,b)(x)
def ex_3_13():
'''
'''
df = swimmer_data()
X = df[', '].apply( jitter(0.5) )
y = df[''].apply(np.log)
a, b = intercept(X, y), slope(X, y)
ax = pd.DataFrame(np.array([X, y]).T).plot.scatter(0, 1, s=7)
s = pd.Series(range(150,210))
df = pd.DataFrame( {0:s, 1:s.map(regression_line(a, b))} )
df.plot(0, 1, legend=False, grid=True, ax=ax)
plt.xlabel(', .')
plt.ylabel(' ')
plt.show()
regression_line
x, a + bx.
, , ŷ y.
def residuals(a, b, xs, ys):
''' '''
estimate = regression_line(a, b) #
return pd.Series( map(lambda x, y: y - estimate(x), xs, ys) )
constantly = lambda x: 0
def ex_3_14():
''' '''
df = swimmer_data()
X = df[', '].apply( jitter(0.5) )
y = df[''].apply(np.log)
a, b = intercept(X, y), slope(X, y)
y = residuals(a, b, X, y)
ax = pd.DataFrame(np.array([X, y]).T).plot.scatter(0, 1, s=12)
s = pd.Series(range(150,210))
df = pd.DataFrame( {0:s, 1:s.map(constantly)} )
df.plot(0, 1, legend=False, grid=True, ax=ax)
plt.xlabel(', .')
plt.ylabel('')
plt.show()
— , Y X. , :
, , -, , . , . , , .
, , , . , . , , . , .
, . . , , , .. . , , , .
. , , , , .
R-
, , .. , . R2, R-, 0 1 . .
, R2 1, Y X. R2 :
var(ε) — var(Y) — Y. , - . , . var(Y), .. .
, , a + bx. .
var(ε)/var(Y) — , . . , . R2 — , .
r, R2 , . , .
R2 . — , R2. R2 .
, , , , f. , y. R2 y:
def r_squared(a, b, xs, ys):
''' (R-)'''
r_var = residuals(a, b, xs, ys).var()
y_var = ys.var()
return 1 - (r_var / y_var)
def ex_3_15():
''' R-
'''
df = swimmer_data()
X = df[', '].apply( jitter(0.5) )
y = df[''].apply(np.log)
a, b = intercept(X, y), slope(X, y)
return r_squared(a, b, X, y)
0.75268223613272323
0.753. , 75% , 2012 ., .
( ), R2 r :
r , Y X, R2 0.52, .. 0.25.
, . , . .
. , , β (), :
- , β1 = a β2 = b , x1 1, β1 — , , x1 () , .
β, , :
x1 xn , y. β1 βn , .
, : , , , . , , .
, x. pandas, , : .
Contoh kode sumber untuk posting ini ada di repo Github saya . Semua data sumber diambil dari gudang penulis buku.
Topik posting berikutnya, posting # 3 , adalah operasi matriks, persamaan normal dan kolinearitas.