This is the code I built to implement a simple linear regression to check the impact of variable A on B. I am not interested in predicting that's why the statistical approach is important for me to focus on the descriptive analytics such as the statsmodels summary and comparing RMSE of training set and test set to see if the model did a good job or not (I'm not looking to compare Dependent variable and RMSE to check prediction quality for example). Is there anything fundamentally wrong with this approach to a simple Linear Regression?
import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.api as sm from scipy import stats # Import Excel File data = pd.read_excel("C:\\Users\\AchourAh\\Desktop\\Simple_Linear_Regression\\SP Level Simple Linear Regression\\PL32_PMM_03_09_2018_SP_Level.xlsx",'Sheet1') #Import Excel file # Replace null values of the whole dataset with 0 data1 = data.fillna(0) print(data1) # Extraction of the independent and dependent variable X = data1.iloc[0:len(data1),1].values.reshape(-1, 1) #Extract the column of the COPCOR SP we are going to check its impact Y = data1.iloc[0:len(data1),2].values.reshape(-1, 1) #Extract the column of the PAUS SP # Data Splitting to train and test set 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=42) # Training the model and Evaluation of the Model from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error import math from sklearn import model_selection from sklearn.model_selection import KFold lm = LinearRegression() #create an lm object of LinearRegression Class lm.fit(X_train, Y_train) #train our LinearRegression model using the training set of data - dependent and independent variables as parameters. Teaching lm that Y_train values are all corresponding to X_train. kf = KFold(n_splits=6, random_state=None) for train_index, test_index in kf.split(X_train): print("Train:", train_index, "Validation:",test_index) X_train1, X_test1 = X[train_index], X[test_index] Y_train1, Y_test1 = Y[train_index], Y[test_index] results = -1 * model_selection.cross_val_score(lm, X_train1, Y_train1,scoring='neg_mean_squared_error', cv=kf) print(results) print(results.mean()) mse_test = mean_squared_error(X_test, Y_test) print(mse_test) #RMSE values interpretation test and train are similar no overfitting or underfitting the model performed well print(math.sqrt(mse_test)) print(math.sqrt(results.mean())) # Graph of the Training model plt.scatter(X_train, Y_train, color = 'red')#plots scatter graph of COP COR against PAUS for values in X_train and y_train plt.plot(X_train, lm.predict(X_train), color = 'blue')#plots the graph of predicted PAUS against COP COR. plt.title('SP000905974') plt.xlabel('COP COR Quantity') plt.ylabel('PAUS Quantity') plt.show()#Show the graph # Statistical Analysis of the training set with Statsmodels X2 = sm.add_constant(X_train) # add a constant to the model est = sm.OLS(Y_train, X2).fit() print(est.summary()) # print the results