¨Modelos de regresión: Regresión múltiple lineal
Profundidad del pozo en función de la longitud de perforación propuesto y la elevación sobre el nivel del mar
Cargamos las librería
library(PASWR)
## Loading required package: lattice
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(readr)
library(scatterplot3d)
Carga los datos (Conjunto de datos)
setwd("/cloud/project")
read_csv("P_oil-gas-other-regulated-wells-beginning-1860.csv")
## Rows: 42045 Columns: 52
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (19): Well Name, Company Name, Well Type, Map Symbol, Well Status, Conf...
## dbl (22): API Well Number, County Code, API Hole Number, Sidetrack, Complet...
## lgl (1): Financial Security
## dttm (10): Status Date, Permit Application Date, Permit Issued Date, Date Sp...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
## # A tibble: 42,045 × 52
## `API Well Number` `County Code` `API Hole Number` Sidetrack Completion
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 3.10e13 1 1072 0 0
## 2 3.10e13 1 1073 0 0
## 3 3.10e13 1 21007 0 0
## 4 3.10e13 1 21008 0 0
## 5 3.10e13 1 21009 0 0
## 6 3.10e13 1 21010 0 0
## 7 3.10e13 1 21011 0 0
## 8 3.10e13 1 21014 0 0
## 9 3.10e13 1 21015 0 0
## 10 3.10e13 1 21016 0 0
## # ℹ 42,035 more rows
## # ℹ 47 more variables: `Well Name` <chr>, `Company Name` <chr>,
## # `Operator Number` <dbl>, `Well Type` <chr>, `Map Symbol` <chr>,
## # `Well Status` <chr>, `Status Date` <dttm>,
## # `Permit Application Date` <dttm>, `Permit Issued Date` <dttm>,
## # `Date Spudded` <dttm>, `Date of Total Depth` <dttm>,
## # `Date Well Completed` <dttm>, `Date Well Plugged` <dttm>, …
datos2<- read.csv("point_oil-gas-other-regulated-wells-beginning-1860.csv", header = T, sep = ",", dec = ".",na.strings = "-")
Limpiamos los datos
# Filtrar datos válidos: sin NA y mayores que 0
datos_filtrados <- datos2 %>%
filter(!is.na(Drilled.Depth.ft),
!is.na(Proposed.Depth.ft),
!is.na(Elevation.ft),
Drilled.Depth.ft > 0,
Proposed.Depth.ft > 0)
1) Identificamos la variable dependiente y la independiente y relizamos diagrama de disperción.
# Definir variables
y <- datos_filtrados$Drilled.Depth.ft # Dependiente
x1 <- datos_filtrados$Proposed.Depth.ft # Independiente 1
x2 <- datos_filtrados$Elevation.ft # Independiente 2
# Gráfico 3D
grafico <- scatterplot3d(x1, x2, y,angle = 60,
main = "Grafica N° 15.1:Profundidad perforada del pozo en relación a la elevación y \nla propuesta de perforación de cada uno de los pozos \nde hidrocarburos en el estado de Nueva York",
xlab = "Propuesta (ft)",ylab = "Elevación (ft)",zlab = "Profundidad perforada (ft)",color = "blue", pch = 20)
2)Conjeturamos el modelo de regresión en este caso es un plano en las tres dimensiones, asi que realizamos la regresión para obtener los coeficiente de la ecuación de tipo:
y=ax1+bx2+c
# Modelo de regresión
RegresionMultiple <- lm(y ~ x1 + x2)
plot.new()
grafico <- scatterplot3d(x1, x2, y,angle = 120,
main = "Grafica N° 15.2:Profundidad perforada del pozo en relación a la elevación y \nla propuesta de perforación de cada uno de los pozos \nde hidrocarburos en el estado de Nueva York",
xlab = "Propuesta (ft)",ylab = "Elevación (ft)",zlab = "Profundidad perforada (ft)",color = "blue", pch = 20)
grafico$plane3d(RegresionMultiple, col = "red")
# Resumen del RegresionMultiple
summary(RegresionMultiple)
##
## Call:
## lm(formula = y ~ x1 + x2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -7923.2 -267.4 -21.1 396.8 12166.3
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.157e+02 2.477e+01 20.819 < 2e-16 ***
## x1 7.035e-01 4.492e-03 156.604 < 2e-16 ***
## x2 9.416e-02 1.476e-02 6.378 1.85e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 872.7 on 13441 degrees of freedom
## Multiple R-squared: 0.6489, Adjusted R-squared: 0.6489
## F-statistic: 1.242e+04 on 2 and 13441 DF, p-value: < 2.2e-16
Determinamos los coeficientes
# Coeficientes del RegresionMultiple
a <- RegresionMultiple$coefficients[2] # x1
b <- RegresionMultiple$coefficients[3] # x2
c <- RegresionMultiple$coefficients[1] # intercepto
# Mostrar ecuación
cat("Ecuación del RegresionMultiple:\n")
## Ecuación del RegresionMultiple:
cat(paste0("y = ", round(c, 2), " + ", round(a, 3), "*x1 + ", round(b, 3), "*x2\n"))
## y = 515.71 + 0.704*x1 + 0.094*x2
3) Test de bondad
# Evaluar bondad del RegresionMultiple
r1 <- summary(RegresionMultiple)$r.squared^0.5 # Correlación múltiple
r1
## [1] 0.8055469
r2 <- summary(RegresionMultiple)$r.squared # R cuadrado
r2
## [1] 0.6489058
# Tabla resumen
Variables <- c("Longitud propuesta", "Elevación", "Profundidad perforada")
Unidades <- c("ft", "ft", "ft")
Tipo <- c("Independiente", "Independiente", "Dependiente")
Test <- c(round(r1, 2), round(r1, 2), " ")
Correlación <- c(round(r2, 2), round(r2, 2), " ")
Tabla_resumen <- data.frame(Variables, Unidades, Tipo, Test, Correlación)
library(knitr)
kable(Tabla_resumen, format = "markdown", caption = "Tabla 15.1: Modelo de regresión con Elevación y Propuesta")
Variables | Unidades | Tipo | Test | Correlación |
---|---|---|---|---|
Longitud propuesta | ft | Independiente | 0.81 | 0.65 |
Elevación | ft | Independiente | 0.81 | 0.65 |
Profundidad perforada | ft | Dependiente |
4)Restricciones: en este tipo de variables, el dominio de ambas es todos los reales positivos unidos al cero, por lo que no presenta restricciones.
5)Cálculo de probabilidades
¿Cuál será la profundidad perforada si la elevación es 1200 ft y la propuesta fue 6000 ft?
x1_nueva <- 6000
x2_nueva <- 1200
y_pred <- a * x1_nueva + b * x2_nueva + c
cat("\nProfundidad perforada estimada:", round(y_pred, 2), "ft\n")
##
## Profundidad perforada estimada: 4849.92 ft
CONCLUSIONES: Entre la longitud de perforación propuesto(ft), la elevación sobre el nivel del mar (ft) y la profundidad del pozo (ft) existe una relación de tipo múltiple lineal y su ecuación es y = 515.71 + 0.704x1 + 0.094x2 , donde profundidad es mi variable dependiente, la longitud de perforación propuesto, la elevación sobre el nivel del mar, no presenta restricciones en el conjunto de los reales, y entonces, por ejemplo, si tenemos una elevación es 1200 ft y propusieron 6000 ft, tendremos una profundidad de 4849.92 ft.
.