[PR]当サイトはアフィリエイト広告を利用しています。
以前このブログで作物の高さを数量化1類で分析しました。
このとき多重共線性について書いたのですが、化成肥料も液肥もなしの場合の話をしていなかったので今回記事にします。
詳細は以前の記事に譲るとして、まず前回の分析対象のデータは以下となっていたのでした。
化成なし | 化成あり | 液肥なし | 液肥2週に一回 | 液肥週1 | 日照短い | 日照長い | 作物高さ |
0 | 1 | 1 | 0 | 0 | 1 | 0 | 51 |
0 | 1 | 1 | 0 | 0 | 1 | 0 | 52 |
1 | 0 | 0 | 1 | 0 | 1 | 0 | 50 |
1 | 0 | 0 | 1 | 0 | 1 | 0 | 51 |
1 | 0 | 0 | 0 | 1 | 1 | 0 | 51 |
1 | 0 | 0 | 0 | 1 | 1 | 0 | 49 |
0 | 1 | 1 | 0 | 0 | 0 | 1 | 60 |
0 | 1 | 1 | 0 | 0 | 0 | 1 | 61 |
1 | 0 | 0 | 1 | 0 | 0 | 1 | 61 |
1 | 0 | 0 | 1 | 0 | 0 | 1 | 62 |
1 | 0 | 0 | 0 | 1 | 0 | 1 | 60 |
1 | 0 | 0 | 0 | 1 | 0 | 1 | 61 |
このとき多重共線性で「化成なし」「化成あり」「液肥なし」「日照短い」を削除して分析しました。
今回の記事では以下のデータを用います。
化成なし | 化成あり | 液肥なし | 液肥2週に1 | 液肥週1 | 日照短い | 日照長い | 作物高さ |
0 | 1 | 1 | 0 | 0 | 1 | 0 | 51 |
0 | 1 | 1 | 0 | 0 | 1 | 0 | 52 |
1 | 0 | 0 | 1 | 0 | 1 | 0 | 50 |
1 | 0 | 0 | 1 | 0 | 1 | 0 | 51 |
1 | 0 | 0 | 0 | 1 | 1 | 0 | 51 |
1 | 0 | 0 | 0 | 1 | 1 | 0 | 49 |
0 | 1 | 1 | 0 | 0 | 0 | 1 | 60 |
0 | 1 | 1 | 0 | 0 | 0 | 1 | 61 |
1 | 0 | 0 | 1 | 0 | 0 | 1 | 61 |
1 | 0 | 0 | 1 | 0 | 0 | 1 | 62 |
1 | 0 | 0 | 0 | 1 | 0 | 1 | 60 |
1 | 0 | 0 | 0 | 1 | 0 | 1 | 61 |
1 | 0 | 1 | 0 | 0 | 1 | 0 | 45 |
1 | 0 | 1 | 0 | 0 | 1 | 0 | 44 |
データが二行追加されています。
化成なし、液肥なし、日照短いが1になっているデータです。
早速ですがこのデータが入ることで多重共線性のために削除するデータは以下となります。
(1)化成なし
(2)液肥なし
(3)日照短い
以上3列です。
解説していきます。
(1)化成なし
これは化成ありと足し合わせると必ず1になるので削除します。
(2)液肥なし
液肥週1と液肥2週に1と液肥なしを足すと必ず1なので削除します。
(3)日照短い
日照長いと短いを足すと必ず1なので削除します。
これではなぜ化成ありを残したのか説明できていません。
そこを説明していきます。
前回は液肥なしが1なら必ず化成ありが0でした。その逆も然りです。足すと必ず1だったのです。
このため化成ありを削除してもよかったわけです。
しかし今回は液肥なしが1でも化成なしが1になることもあれば、化成ありが1になるときもあります。
つまり液肥なしの値だけでは化成のあるなしを説明できないのです。
足すと必ず1になるという前提が崩れています。
こうなると化成ありなしのどちらかを使わないときちんと状態を説明できなくなります。
多重共線性での削除をしてはいけなくなります。
以上より分析するために残す列は以下。
化成あり | 液肥2週に1 | 液肥週1 | 日照長い | 作物高さ |
1 | 0 | 0 | 0 | 51 |
1 | 0 | 0 | 0 | 52 |
0 | 1 | 0 | 0 | 50 |
0 | 1 | 0 | 0 | 51 |
0 | 0 | 1 | 0 | 51 |
0 | 0 | 1 | 0 | 49 |
1 | 0 | 0 | 1 | 60 |
1 | 0 | 0 | 1 | 61 |
0 | 1 | 0 | 1 | 61 |
0 | 1 | 0 | 1 | 62 |
0 | 0 | 1 | 1 | 60 |
0 | 0 | 1 | 1 | 61 |
0 | 0 | 0 | 0 | 45 |
0 | 0 | 0 | 0 | 44 |
化成ありは化成なしの列に置き換えてもいいです。それでもすべての状態を説明できますからね。
そしてこれを分析するプログラムが以下。
#pandas v1.2.0
#Copyright (c) 2008-2021 the pandas development team.
#Released under the BSD 3-Clause License
#https://pandas.pydata.org/pandas-docs/stable/getting_started/overview.html
#scikit-learn v0.24.0
#Copyright (c) 2007 - 2020 scikit-learn developers.
#Released under the BSD 3-Clause License
#https://github.com/scikit-learn/scikit-learn/blob/main/COPYING
import pandas as pd
from sklearn import linear_model
df = pd.read_csv("input.csv", encoding="shift-jis")
x = df.iloc[:, :-1]
y = df.iloc[:, -1]
clf = linear_model.LinearRegression()
clf.fit(x, y)
a = clf.coef_
b = clf.intercept_
print("説明変数:", x)
print("回帰係数:", a)
print("切片:", b)
print("決定係数:", clf.score(x, y))
出力は以下。
説明変数: 化成あり 液肥2週に1 液肥週1 日照長い
0 1 0 0 0
1 1 0 0 0
2 0 1 0 0
3 0 1 0 0
4 0 0 1 0
5 0 0 1 0
6 1 0 0 1
7 1 0 0 1
8 0 1 0 1
9 0 1 0 1
10 0 0 1 1
11 0 0 1 1
12 0 0 0 0
13 0 0 0 0
回帰係数: [ 6.41666667 6.41666667 5.66666667 10.16666667]
切片: 44.5
決定係数: 0.9866222222222222
前回の記事では液肥2週に1の係数が0、液肥週1の係数が-0.75、日照長いが約10.1667で、ほとんど日照の影響が作物高さに影響するという結果だったことを考えると、化成ありと液肥ありの場合に正の影響が増えたことがわかります。肥料も作物高さに影響するということになりました。
まあ仮のデータなので実際にこの通りに作物が成長するとは限りません。
今回は多重共線性について少し解説してみました。
やはり自分で作物を育ててみて実験してみたいところです。