Regresión lineal simple: Examplo con Función - Y

R Ingenería de yacimientos

Uso de la función - Y para validar resultados de prueba de liberación diferencial usando R

Rigoberto Chandomi https://www.linkedin.com/in/rigobertochandomi/
2023-12-19

La presión de burbuja del aceite es el resultado mas importante de la prueba de liberación diferencial. La validación de esta prueba consiste en verificar que la Pb medida se ajuste a la tendencia teórica de los volúmenes relativos y presión

Los datos de volumen relativo suelen requerir un suavizado para corregir las imprecisiones de laboratorio en la medición del volumen total de hidrocarburos justo por debajo de la presión de saturación y también a presiones más bajas. Para suavizar los valores del volumen relativo se utiliza una función de compresibilidad adimensional, comúnmente denominada función Y. La función en su forma matemática sólo está definida por debajo de la presión de saturación y viene dada por la siguiente expresión:

\[ Y = \frac{P_{sat}-P}{P(V_{rel})-1}\]

donde:

\(P_{sat} = saturation \ pressure,\ psi\)

\(P = pressure,\ psi\)

\(V_{rel} = relative \ volumen \ at \ pressure \ p\)

En este ejemplo, los datos de liberación diferencial se ajustan utilizando una regresión lineal simple en R para validar los resultados del experimento. En primer lugar, los datos de liberación diferencial se cargan desde un archivo CSV. El conjunto de datos tiene dos columnas, presión y volumen relativo.

CCEdata <- read.csv("CCE.csv")
head(CCEdata)
  pressure     RV
1     1936 1.0000
2     1930 1.0014
3     1928 1.0018
4     1923 1.0030
5     1918 1.0042
6     1911 1.0058

Utilizando la ecuación anterior, se calcula la función Y a partir de los datos, para ello consideramos que la presión más alta es la presión de burbuja por lo que usamos la función max() para ubicarla. El resultado se almacena en una nueva columna llamada YFuncion en el dataset CCEdata, posteriormente generamos un gráfico usando paquete ggplot2

CCEdata$Yfunction <- (max(CCEdata$pressure)-CCEdata$pressure)/(CCEdata$pressure*(CCEdata$RV-1))
head(CCEdata)
  pressure     RV Yfunction
1     1936 1.0000       NaN
2     1930 1.0014  2.220577
3     1928 1.0018  2.305210
4     1923 1.0030  2.253423
5     1918 1.0042  2.234470
6     1911 1.0058  2.255544
library(ggplot2)
ggplot(data = CCEdata, aes(x = pressure, y = Yfunction)) + 
  geom_point()

Ahora, utilizando la función lm(), se define un modelo de regresión lineal, donde el valor de resultado (y) es la función Y y el predictor es la presión (x). Utilizando la función summary(), se muestran las características principales del modelo. Podemos ver que el coeficiente de determinación está muy cerca de 1, lo que significa un ajuste excelente. Además, la función Y no muestra una desviación superior o inferior.

FY_model <- lm(Yfunction ~ pressure, data = CCEdata)
summary(FY_model)

Call:
lm(formula = Yfunction ~ pressure, data = CCEdata)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.034747 -0.004077 -0.002536  0.001464  0.051041 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 1.141e+00  1.359e-02   83.93   <2e-16 ***
pressure    5.776e-04  8.795e-06   65.67   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.01755 on 14 degrees of freedom
  (1 observation deleted due to missingness)
Multiple R-squared:  0.9968,    Adjusted R-squared:  0.9965 
F-statistic:  4312 on 1 and 14 DF,  p-value: < 2.2e-16

Podemos añadir una columna al dataset CCEdata con los valores ajustados de la función Y para graficarlos juntos

CCEdata$Yfunction_fit <- c(NA, FY_model$fitted.values)

head(CCEdata)
  pressure     RV Yfunction Yfunction_fit
1     1936 1.0000       NaN            NA
2     1930 1.0014  2.220577      2.255324
3     1928 1.0018  2.305210      2.254169
4     1923 1.0030  2.253423      2.251281
5     1918 1.0042  2.234470      2.248393
6     1911 1.0058  2.255544      2.244350
ggplot(data = CCEdata) + 
  geom_point(aes(x = pressure, y = Yfunction)) + 
  geom_line(aes(x = pressure, y = Yfunction_fit))

Referencias Ahmed, T (2019) Reservoir Engineering Handbook. Fifth edition.