2017-08-17 7 views
0

私はプログラミングが新しく、データ解析や機械学習に慣れるためにPythonに飛びついています。[Statsmodels]:OLSオブジェクトのpvalueを返すためにstatsmodelを取得するにはどうすればよいですか?

私は、複数回線形回帰の後方除去に関するチュートリアルに従っています。ここでのコードは今ある:

# Importing the libraries 
import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 

# Importing the dataset 
dataset = pd.read_csv('50_Startups.csv') 
X = dataset.iloc[:, :-1].values 
y = dataset.iloc[:, 4].values 

#Taking care of missin' data 
#np.set_printoptions(threshold=100) 
from sklearn.preprocessing import Imputer 
imputer = Imputer(missing_values = 'NaN', strategy = 'mean', axis = 0) 
imputer = imputer.fit(X[:, 1:3]) 
X[:, 1:3] = imputer.transform(X[:, 1:3]) 

#Encoding categorical data 
from sklearn.preprocessing import LabelEncoder, OneHotEncoder 
labelEncoder_X = LabelEncoder() 
X[:, 3] = labelEncoder_X.fit_transform(X[:, 3]) 
onehotecnoder = OneHotEncoder(categorical_features = [3]) 
X = onehotecnoder.fit_transform(X).toarray() 

#Avoid the Dummy Variables Trap 
X = X[:, 1:] 

#Splitting data in train and test 
from sklearn.model_selection import train_test_split 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0) 

#Fitting multiple Linear Regression to Training set 
from sklearn.linear_model import LinearRegression 
regressor = LinearRegression() 
regressor.fit(X_train, y_train) 

#Predict Test set 
regressor = regressor.predict(X_test) 

#Building the optimal model using Backward Elimination 
import statsmodels.formula.api as sm 
a = 0 
b = 0 
a, b = X.shape 
X = np.append(arr = np.ones((a, 1)).astype(int), values = X, axis = 1) 
print (X.shape) 

X_optimal = X[:,[0,1,2,3,4,5]] 
regressor_OLS = sm.OLS(endog = y, exog = X_optimal).fit() 
regressor_OLS.summary() 
X_optimal = X[:,[0,1,3,4,5]] 
regressor_OLS = sm.OLS(endog = y, exog = X_optimal).fit() 
regressor_OLS.summary() 
X_optimal = X[:,[0,3,4,5]] 
regressor_OLS = sm.OLS(endog = y, exog = X_optimal).fit() 
regressor_OLS.summary() 
X_optimal = X[:,[0,3,5]] 
regressor_OLS = sm.OLS(endog = y, exog = X_optimal).fit() 
regressor_OLS.summary() 
X_optimal = X[:,[0,3]] 
regressor_OLS = sm.OLS(endog = y, exog = X_optimal).fit() 
regressor_OLS.summary() 

さて、消去が実行される方法は私には本当にマニュアルようだ、と私はそれを自動化したいと思います。そうするためには、回帰分析のpvalueを何らかの形で返す方法があるかどうかを知りたいと思っています(たとえば、統計モデルでそのような方法がある場合)。そのようにして、私はX_optimal配列の機能をループすることができ、pvalueが自分のSLよりも大きいかどうかを調べ、それを排除することができるはずです。

ありがとうございました!

答えて

0

同じ問題があります。

あなたは彼らが科学表記法でfloat64sの配列として格納されている

regressor_OLS.pvalues 

を通じてp値にアクセスすることができます。私はPythonには少し新しく、よりクリーンで洗練されたソリューションがあると確信していますが、これは私のものでした:

sigLevel = 0.05 

X_opt = X[:,[0,1,2,3,4,5]] 
regressor_OLS = sm.OLS(endog = y, exog = X_opt).fit() 
regressor_OLS.summary() 
pVals = regressor_OLS.pvalues 

while np.argmax(pVals) > sigLevel: 
    droppedDimIndex = np.argmax(regressor_OLS.pvalues) 
    keptDims = list(range(len(X_opt[0]))) 
    keptDims.pop(droppedDimIndex) 
    print("pval of dim removed: " + str(np.argmax(pVals))) 
    X_opt = X_opt[:,keptDims] 
    regressor_OLS = sm.OLS(endog = y, exog = X_opt).fit() 
    pVals = regressor_OLS.pvalues 
    print(str(len(pVals)-1) + " dimensions remaining...") 
    print(pVals) 

regressor_OLS.summary() 
関連する問題