¿Mutuamente excluyentes?
ChatGPT vs. R
ChatGPT for R
ChatGPT with R
R leverages ChatGPT
Este es un tutorial sobre como utilizar una de las herramientas de IA generativa disponibles para asistir el uso de R.
Los enfoques modernos componen, no excluyen.
Jaime Mosquera Gutiérrez
Universidad Nacional
Parte 1: Conozcamos a ChatGPT
Parte 2: Usemos a ChatGPT como usuarios de R
Parte 3: Ideas finales

Parte 1: Conozcamos a ChatGPT
Parte 2: Usemos a ChatGPT como usuarios de R
Parte 4: Uso avanzado (desarrollador de R, tarea)
Prompt:
Estoy reunido con una audiencia que está compuesta principalmente por usuarios y desarrolladores de R. Muchos de ellos tienen bagaje en Estadística de nivel universitario. ¿Puedes explicar qué es ChatGPT y cómo funciona, de una manera que sea apropiada para esta audiencia.
Respuesta:
ChatGPT
OpenAI
Es un modelo entrenado para seguir las instrucciones en un prompt y proveer una respuesta detallada.
Su nombre tiene las pistas:
ChatGPT
Su nombre tiene las pistas:
ChatGPT
Chat: es un modelo creado específicamente para chatear (entrenado en texto y datos conversasionales).
G, Generative: puede generar texto (incluso de cero).
Su nombre tiene las pistas:
ChatGPT
Chat: es un modelo creado específicamente para chatear (entrenado en texto y datos conversasionales).
G, Generative: puede generar texto (incluso de cero).
P, Pretrained: un LLM (Large Language Model) ha sido entrenado sobre 45 TB de datos (internet y libros). Luego se hace fine-tuning con diálogos.
Su nombre tiene las pistas:
ChatGPT
Chat: es un modelo creado específicamente para chatear (entrenado en texto y datos conversasionales).
G, Generative: puede generar texto (incluso de cero).
P, Pretrained: un LLM (Large Language Model) ha sido entrenado sobre 45 TB de datos (internet y libros). Luego se hace fine-tuning con diálogos.
T, Transformer: es un tipo de red neuronal.
A partir de prompts.
Estructura de un prompt:
A partir de prompts.
Estructura de un prompt:
A partir de prompts.
Estructura de un prompt:
Instrucción: una tarea específica que deseas que el modelo realice.
Contexto: texto que involucra información externa o contexto adicional que puede dirigir al modelo a respuestas mejores.
A partir de prompts.
Estructura de un prompt:
Instrucción: una tarea específica que deseas que el modelo realice.
Contexto: texto que involucra información externa o contexto adicional que puede dirigir al modelo a respuestas mejores.
Datos de entrada: - es la entrada o pregunta para la que nos interesa encontrar una respuesta.
A partir de prompts.
Estructura de un prompt:
Instrucción: una tarea específica que deseas que el modelo realice.
Contexto: texto que involucra información externa o contexto adicional que puede dirigir al modelo a respuestas mejores.
Datos de entrada: es la entrada o pregunta para la que nos interesa encontrar una respuesta.
Indicador de salida: indica el tipo o formato de la salida.
Contexto:
Estoy reunido con una audiencia que está compuesta principalmente por usuarios y desarrolladores de R. Muchos de ellos tienen bagaje en Estadística de nivel universitario.
Instrucción/Entrada:
¿Puedes explicar qué es ChatGPT y cómo funciona, de una manera que sea apropiada para esta audiencia.
El prompt varía según la tarea:
Tarea de lenguaje natural:
Summarize the text below as a bullet point list of the most important points.
Text: """
{text input here}
"""
Tarea de código:
# Write a simple R function that
# 1. Ask me for a number in mile
# 2. It converts miles to kilometers
mile2km <- function(num)
🌐 Usaremos mayoritariamente la opción 1.
💸 Las opciones 2 y la 3 requieren API Key .
Ventajas
Desventajas
Ventajas
Desventajas
…y sigamos conociéndolo…
Ejercicio 2.1:
Cree una aplicación Shiny que cree un diagrama de dispersión a partir del conjunto de datos mtcars.
Prompt:
Genere el código para una aplicación Shiny que cree un diagrama de dispersión interactivo del conjunto de datos mtcars. Ponga un menú desplegable para la variable del eje x y un menú desplegable para la variable del eje y.
Original app1.R
Modificada app2.R
library(shiny)
library(ggplot2)
# Define la interfaz de usuario de la aplicación Shiny
ui <- fluidPage(
titlePanel("Diagrama de Dispersión de mtcars"),
# Crear menús desplegables para las variables del eje x y eje y
sidebarLayout(
sidebarPanel(
selectInput("x_var", "Eje X:", choices = colnames(mtcars)),
selectInput("y_var", "Eje Y:", choices = colnames(mtcars))
),
# Crear el área de visualización del gráfico
mainPanel(
plotOutput("scatterplot")
)
)
)# Define el servidor de la aplicación Shiny
server <- function(input, output) {
# Crear un gráfico de dispersión interactivo basado en las selecciones del usuario
output$scatterplot <- renderPlot({
ggplot(mtcars, aes_string(x = input$x_var, y = input$y_var)) +
geom_point() +
labs(x = input$x_var, y = input$y_var) +
theme_minimal()
})
}
# Ejecutar la aplicación Shiny
shinyApp(ui = ui, server = server)Un borrador.
# Define el servidor de la aplicación Shiny
server <- function(input, output) {
# Crear un gráfico de dispersión interactivo basado en las selecciones del usuario
output$scatterplot <- renderPlot({
ggplot(mtcars, aes_string(x = input$x_var, y = input$y_var)) +
geom_point(aes(colour = cyl), size = 3) +
labs(x = input$x_var, y = input$y_var) +
theme_minimal() +
theme(text = element_text(size = 40))
})
}
# Ejecutar la aplicación Shiny
shinyApp(ui = ui, server = server)Un borrador. Podemos agregar fácilmente nuevas características.
Ejercicio 2.2:
Escriba la documentación para el siguiente script bajo el estándar roxygen2:
Ejemplo:
Documentación de la distribución odd Weibull
#' The Odd Weibull Distribution
#'
#' @author Jaime Mosquera Gutiérrez \email{jmosquerag@unal.edu.co}
#'
#' @description
#' Density, distribution function, quantile function,
#' random generation and hazard function for the Odd Weibull distribution with
#' parameters \code{mu}, \code{sigma} and \code{nu}.
#'
#' @param x,q vector of quantiles.
#' @param p vector of probabilities.
...
#' @export
dOW <- function(x, mu, sigma, nu, log=FALSE){
...
prod1 <- (mu*x)^sigma
loglik <- log(sigma*nu) - log(x) + sigma*( log(mu) + log(x) ) +
(mu*x)^sigma + ( nu - 1 )*log(expm1( prod1 )) -
2*log1p( (expm1(prod1))^nu )
if (log == FALSE)
dens <- exp(loglik)
else
dens <- loglik
return(dens)
}Solución:
Prompt:
Consider the following R script:
```r
<<Pegar aquí el script>>
```
Document this script using the roxygen2 standard.
#' The New Modified Weibull distribution
Script: dRNMW.R
En acertijos.
Ejercicio 2.3:
Pídale que resuelva el siguiente acertijo,
Prompt:
Consider the # symbol for unknown letters. What word fits with the pattern #E#L#?
Extraído del portal The Conversation
Consejos para el usuario de ChatGPT:
En Diciembre 2022, ChatGPT inventaba referencias.
En Q1 2023, ChatGPT resolvía mal los acertijos y parecía seguro de sus respuestas.
Prompt Engieering Guide: https://www.promptingguide.ai/
Best practices for prompt engineering with OpenAI API: https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api
ChatGPT in RStudio with gptstudio - Better than GitHub Copilot? (Jaimes Wade) - https://www.youtube.com/watch?v=rZB0_53Cm1w&t=522s
Ingresar a Posit Cloud. Abrir la cuenta o registrarse.
Crear un proyecto nuevo de RStudio.
Preparar el ambiente:
Cmd + Shift + p en Mac, Ctrl + Shift + p en Windows. Seleccionar ChatGPT in Source.# Implement a barplot of the mtcars dataset for the mean wt per cyl with cyl along the x-axis and mean wt along the y-axis, using ggplot
Este prompt
# Implement a barplot of the mtcars dataset for the mean wt per cyl with cyl along the x-axis and mean wt along the y-axis, using ggplot
Se torna en código
# Load the necessary library
library(ggplot2)
# Calculate the mean weight (wt) per number of cylinders (cyl)
mean_wt_per_cyl <- aggregate(wt ~ cyl, data = mtcars, FUN = mean)
# Create a barplot using ggplot
ggplot(data = mean_wt_per_cyl, aes(x = cyl, y = wt)) +
geom_bar(stat = "identity", fill = "steelblue") +
xlab("Cylinders") +
ylab("Mean Weight (wt)") +
ggtitle("Mean Weight per Cylinders")