<jupyter_start><jupyter_text>ANOVA(분산분석)- 종속변수의 분산과 독립변수의 분산간의 관계를 사용하여 선형회귀분석의 성능을 평가하고자 하는 방법    - 서로 다른 두 개의 선형회귀분석의 성능 비교    - 독립변수가 카테고리 변수인 경우 각 카테고리 값에 따른 영향을 정량적으로 분석하는데도 사<jupyter_code>from sklearn.datasets import make_regression

X0, y, coef = make_regression(n_samples=100, n_features=1, noise=30, coef=True, random_state=0)
dfX0 = pd.DataFrame(X0, columns=["X"])
dfX = sm.add_constant(dfX0)
dfy = pd.DataFrame(y, columns=["Y"])
df = pd.concat([dfX, dfy], axis=1)

model = sm.OLS.from_formula("Y ~ X", data=df)
result = model.fit()<jupyter_output><empty_output><jupyter_text>TSS = ESS + RSS 임을 알 수 있다.- 예측치가 정확하면 정확할수록 TSS의 움직임의 크기를 따라간다.<jupyter_code>print("TSS = ", result.uncentered_tss)
print("ESS = ", result.mse_model)
print("RSS = ", result.ssr)
print("ESS + RSS = ", result.mse_model + result.ssr)
print("R squared = ", result.rsquared)
sns.distplot(y, 
             kde=False, fit=sp.stats.norm, hist_kws={"color": "r", "alpha": 0.2}, fit_kws={"color": "r"}, 
             label="TSS")
sns.distplot(result.fittedvalues, 
             kde=False, hist_kws={"color": "g", "alpha": 0.2}, fit=sp.stats.norm, fit_kws={"color": "g"}, 
             label="ESS")
sns.distplot(result.resid, 
             kde=False, hist_kws={"color": "b", "alpha": 0.2}, fit=sp.stats.norm, fit_kws={"color": "b"}, 
             label="RSS")
plt.legend()
plt.show()
sm.stats.anova_lm(result)
sns.jointplot(result.fittedvalues, y)
plt.show()<jupyter_output><empty_output><jupyter_text>F검정을 사용하여 변수 중요도 비교하기- F값이 크고, F의 p-value가 작을 수록 중요하다.(상대적 개념)- typ=2로 지정하면 각 변수의 중요도를 볼 수 있다.<jupyter_code>from sklearn.datasets import load_boston

boston = load_boston()
dfX0_boston = pd.DataFrame(boston.data, columns=boston.feature_names)
dfy_boston = pd.DataFrame(boston.target, columns=["MEDV"])
dfX_boston = sm.add_constant(dfX0_boston)
df_boston = pd.concat([dfX_boston, dfy_boston], axis=1)
model_boston = sm.OLS.from_formula("MEDV ~ CRIM + ZN + INDUS + NOX + RM + AGE + DIS + RAD + TAX + PTRATIO + B + LSTAT + CHAS", data=df_boston)
result_boston = model_boston.fit()
sm.stats.anova_lm(result_boston, typ=2)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.1605461393596987, 'fraction_numerical': 0.010828625235404897, 'mean_word_length': 4.681818181818182, 'pattern_counts': {'":': 9, '<': 13, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '571431', 'license': 'MIT', 'n_tokens_mistral': 1061, 'n_tokens_neox': 1154, 'n_words': 178, 'path': 'machinelearning/statsmodels/ANOVA.ipynb', 'repo_name': 'Junhojuno/TIL', 'size': '2124'}