#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Mar  3 13:10:07 2019

@author: juangabriel
"""

# Regresión Lineal Múltiple

# Cómo importar las librerías
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importar el data set
dataset = pd.read_csv('50_Startups.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values


# Codificar datos categóricos
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.compose import make_column_transformer

labelencoder_X = LabelEncoder()
X[:, 3] = labelencoder_X.fit_transform(X[:, 3]) #la comuna de estados, pasa a numeros
onehotencoder = make_column_transformer((OneHotEncoder(), [3]), remainder = "passthrough") #pasa a variables dummy, pone las dymmy en primer lugar
X = onehotencoder.fit_transform(X)

# Evitar la trampa de las variables ficticias
X = X[:, 1:] # elimino una para evitar multicolinealidad

# Dividir el data set en conjunto de entrenamiento y conjunto de testing
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)


# Escalado de variables
"""from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)"""

# Ajustar el modelo de Regresión lineal múltiple con el conjunto de entrenamiento
from sklearn.linear_model import LinearRegression
regression = LinearRegression()
regression.fit(X_train, y_train)

# Predicción de los resultados en el conjunto de testing
y_pred = regression.predict(X_test)

# Construir el modelo óptimo de RLM utilizando la Eliminación hacia atrás
import statsmodels.api as sm
X = np.append(arr = np.ones((50,1)).astype(int), values = X, axis = 1) #agrega una columna de 1 por el término cte del modelo
SL = 0.05 #paso 1

#Se ha añadido el modificador .tolist() al X_opt para adaptarse a Python 3.7

X_opt = X[:, [0, 1, 2, 3, 4, 5]] # guarda las variables estadisticamente significativas
regression_OLS = sm.OLS(endog = y, exog = X_opt.tolist()).fit() #creo otro modelo con statsmodel - paso 2
#ojo que no ocupa valores de entrenamiento, usa mínimos cuadrados
regression_OLS.summary() #me devuelve un p valor para cada variable independiente (ver el display)
#x2 es la variable con p valor mayor(luego de mirar el display en la consola)

X_opt = X[:, [0, 1, 3, 4, 5]]
regression_OLS = sm.OLS(endog = y, exog = X_opt.tolist()).fit()
regression_OLS.summary()
#x1 es la variable con p valor mas grande

X_opt = X[:, [0, 3, 4, 5]]
regression_OLS = sm.OLS(endog = y, exog = X_opt.tolist()).fit()
regression_OLS.summary()

X_opt = X[:, [0, 3, 5]]
regression_OLS = sm.OLS(endog = y, exog = X_opt.tolist()).fit()
regression_OLS.summary()

X_opt = X[:, [0, 3]]
regression_OLS = sm.OLS(endog = y, exog = X_opt.tolist()).fit()
regression_OLS.summary()

#brigido, terminó siendo un modelo lineal simple jaja
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Mar  3 13:10:07 2019

@author: juangabriel
"""

# Regresión Lineal Múltiple

# Cómo importar las librerías
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importar el data set
dataset = pd.read_csv('50_Startups.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values


# Codificar datos categóricos
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.compose import make_column_transformer

labelencoder_X = LabelEncoder()
X[:, 3] = labelencoder_X.fit_transform(X[:, 3]) #la comuna de estados, pasa a numeros
onehotencoder = make_column_transformer((OneHotEncoder(), [3]), remainder = "passthrough") #pasa a variables dummy, pone las dymmy en primer lugar
X = onehotencoder.fit_transform(X)

# Evitar la trampa de las variables ficticias
X = X[:, 1:] # elimino una para evitar multicolinealidad

# Dividir el data set en conjunto de entrenamiento y conjunto de testing
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)


# Escalado de variables
"""from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.transform(X_test)"""

# Ajustar el modelo de Regresión lineal múltiple con el conjunto de entrenamiento
from sklearn.linear_model import LinearRegression
regression = LinearRegression()
regression.fit(X_train, y_train)

# Predicción de los resultados en el conjunto de testing
y_pred = regression.predict(X_test)

# Construir el modelo óptimo de RLM utilizando la Eliminación hacia atrás
import statsmodels.api as sm
X = np.append(arr = np.ones((50,1)).astype(int), values = X, axis = 1) #agrega una columna de 1 por el término cte del modelo
SL = 0.05 #paso 1

#Se ha añadido el modificador .tolist() al X_opt para adaptarse a Python 3.7

X_opt = X[:, [0, 1, 2, 3, 4, 5]] # guarda las variables estadisticamente significativas
regression_OLS = sm.OLS(endog = y, exog = X_opt.tolist()).fit() #creo otro modelo con statsmodel - paso 2
#ojo que no ocupa valores de entrenamiento, usa mínimos cuadrados
regression_OLS.summary() #me devuelve un p valor para cada variable independiente (ver el display)
#x2 es la variable con p valor mayor(luego de mirar el display en la consola)

X_opt = X[:, [0, 1, 3, 4, 5]]
regression_OLS = sm.OLS(endog = y, exog = X_opt.tolist()).fit()
regression_OLS.summary()
#x1 es la variable con p valor mas grande

X_opt = X[:, [0, 3, 4, 5]]
regression_OLS = sm.OLS(endog = y, exog = X_opt.tolist()).fit()
regression_OLS.summary()

X_opt = X[:, [0, 3, 5]]
regression_OLS = sm.OLS(endog = y, exog = X_opt.tolist()).fit()
regression_OLS.summary()

X_opt = X[:, [0, 3]]
regression_OLS = sm.OLS(endog = y, exog = X_opt.tolist()).fit()
regression_OLS.summary()

#brigido, terminó siendo un modelo lineal simple jaja
#!/usr/bin/env python3 # -*- coding: utf-8 -*- Created on Sun Mar  3 13:10:07 2019  @author: juangabriel # Regresión Lineal Múltiple # Cómo importar las librerías # Importar el data set # Codificar datos categóricos #la comuna de estados, pasa a numeros #pasa a variables dummy, pone las dymmy en primer lugar # Evitar la trampa de las variables ficticias # elimino una para evitar multicolinealidad # Dividir el data set en conjunto de entrenamiento y conjunto de testing # Escalado de variables from sklearn.preprocessing import StandardScaler sc_X = StandardScaler() X_train = sc_X.fit_transform(X_train) X_test = sc_X.transform(X_test) # Ajustar el modelo de Regresión lineal múltiple con el conjunto de entrenamiento # Predicción de los resultados en el conjunto de testing # Construir el modelo óptimo de RLM utilizando la Eliminación hacia atrás #agrega una columna de 1 por el término cte del modelo #paso 1 #Se ha añadido el modificador .tolist() al X_opt para adaptarse a Python 3.7 # guarda las variables estadisticamente significativas #creo otro modelo con statsmodel - paso 2 #ojo que no ocupa valores de entrenamiento, usa mínimos cuadrados #me devuelve un p valor para cada variable independiente (ver el display) #x2 es la variable con p valor mayor(luego de mirar el display en la consola) #x1 es la variable con p valor mas grande #brigido, terminó siendo un modelo lineal simple jaja