El presente informe tiene como objetivo analizar el comportamiento financiero de las acciones de Apple (AAPL), Amazon (AMZN) y Google (GOOGL) mediante el uso del programa estadístico RStudio. Para ello, se utilizan herramientas de análisis financiero que permiten estudiar la volatilidad, el rendimiento promedio diario y la evolución de los precios de cierre de estas empresas en el mercado bursátil.

El análisis comprende la descarga de datos históricos de Yahoo Finance, el cálculo de indicadores estadísticos, la representación gráfica de los precios y la elaboración de calendarios financieros que permiten visualizar el comportamiento de las cotizaciones de Apple durante diferentes periodos.

# vamos a descargar el paquete quantmod

install.packages("quantmod")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.6'
## (as 'lib' is unspecified)
library(quantmod)
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: TTR
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
acciones <- c("AAPL","AMZN","GOOGL")
fecha_inicio<- "2025-10-16" 
fecha_fin<-  Sys.Date()

getSymbols(acciones,srf = "yahoo", from= fecha_inicio, to= fecha_fin)  
## [1] "AAPL"  "AMZN"  "GOOGL"
install.packages("DescTools")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.6'
## (as 'lib' is unspecified)
library(DescTools)

# vamos analizar la volatilidad de la accion
CoefVar(AAPL$AAPL.Close)
## [1] 0.1020192
CoefVar(AMZN$AMZN.Close)
## [1] 0.0815476
CoefVar(GOOGL$GOOGL.Close)
## [1] 0.09671826
# vamos analizar el rendimiento de la accion AAPL

diferencia<- diff(AAPL$AAPL.Close)

#precio de ayer
rezago<-(lag(AAPL$AAPL.Close))


rendimiento<- (diferencia/rezago)*100

#rendimiento promedio diario
mean(rendimiento, na.rm=T)
## [1] 0.1386025
# vamos analizar el rendimiento de la accion AMZN

#precio de hoy menos el precio de ayer
diferencia2<- diff(AMZN$AMZN.Close)

#precio de ayer
rezago2<-(lag(AMZN$AMZN.Close))


rendimiento2<- (diferencia2/rezago2)*100

#rendimiento promedio diario
mean(rendimiento2, na.rm=T)
## [1] 0.06688007
# vamos analizar el rendimiento de la accion GOOGL

#precio de hoy menos el precio de ayer
diferencia3<- diff(GOOGL$GOOGL.Close)

#precio de ayer
rezago3<-(lag(GOOGL$GOOGL.Close))


rendimiento3<- (diferencia3/rezago3)*100

#rendimiento promedio diario
mean(rendimiento3, na.rm=T)
## [1] 0.06356907
library(graphics)
library(ggplot2)

par(mfrow=c(3,1), mar= c(3,4,3,1))
plot(AAPL$AAPL.Close, main= "precio de cierre accion de APPLE", col = "brown", type="l", ylab="USD", xlab="fecha")
plot(AMZN$AMZN.Close, main= "precio de cierre accion de AMAZON", col = "blue", type="l", ylab="USD", xlab="fecha")
plot(GOOGL$GOOGL.Close, main= "precio de cierre accion de GOOGLE", col = "hotpink", type="l", ylab="USD", xlab="fecha")

Durante el periodo analizado, las acciones de Apple, Amazon y Google presentaron diferentes comportamientos. Apple mostró una tendencia generalmente positiva, con un crecimiento constante a pesar de algunas caídas. Amazon tuvo mayores fluctuaciones, con subidas y bajadas que reflejan cierta inestabilidad. Por su parte, Google presentó un crecimiento importante durante gran parte del periodo, aunque terminó con una caída considerable. En conclusión, Apple tuvo el comportamiento más estable, mientras que Amazon y Google mostraron mayores variaciones en sus precios.

En cuanto a volatilidad, Apple presentó el porcentaje más alto con un 10,20 %, lo que indica mayores variaciones en sus precios. Por su parte, Google registró un 9,67 %, mostrando un comportamiento intermedio, mientras que Amazon obtuvo el porcentaje más bajo, con un 8,15 %, siendo la empresa más estable durante el periodo analizado.

library(quantmod)
library(calendR)
## ~~ Package calendR
## Visit https://r-coder.com/ for R tutorials ~~
library(dplyr)
## 
## ######################### Warning from 'xts' package ##########################
## #                                                                             #
## # The dplyr lag() function breaks how base R's lag() function is supposed to  #
## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or       #
## # source() into this session won't work correctly.                            #
## #                                                                             #
## # Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #
## # conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop           #
## # dplyr from breaking base R's lag() function.                                #
## #                                                                             #
## # Code in packages is not affected. It's protected by R's namespace mechanism #
## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning.  #
## #                                                                             #
## ###############################################################################
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:xts':
## 
##     first, last
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(zoo)

getSymbols("AAPL", src = "yahoo")
## [1] "AAPL"
precios <- data.frame(Fecha  = index(AAPL),
                      Cierre = as.numeric(AAPL$AAPL.Close))

año_actual <- as.numeric(format(Sys.Date(), "%Y"))
fechas_año <- data.frame(Fecha = seq(as.Date(paste0(año_actual, "-01-01")),
                                     as.Date(paste0(año_actual, "-12-31")),
                                     by = "day"))

precios_completos <- left_join(fechas_año, precios, by = "Fecha") %>%
  mutate(Cierre = zoo::na.locf(zoo::na.locf(Cierre, na.rm = FALSE),
                               fromLast = TRUE))

vector_precios <- as.numeric(precios_completos$Cierre)

calendR(year = año_actual,
        special.days = vector_precios,
        low.col = "hotpink",
        special.col = "yellow",
        gradient = TRUE,
        legend.pos = "right",
        orientation = "landscape",
        title = paste("Calendario de Precios año", año_actual, "- APPLE"))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## ℹ The deprecated feature was likely used in the calendR package.
##   Please report the issue to the authors.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

En el calendario de precios de Apple para 2026 se observa que los precios de sus acciones fueron más bajos durante los primeros meses del año, especialmente entre enero y abril, representados con tonos rosados. A partir de mayo comenzaron a mejorar progresivamente, pasando a tonos amarillos. Durante los últimos meses del año se mantienen en niveles más altos y relativamente estables. Esto indica una tendencia general de crecimiento en el precio de las acciones de Apple durante 2026.

library(calendR)
library(quantmod)
library(dplyr)
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
library(zoo)

# Descargar precios históricos de APPLE
getSymbols(
  "AAPL",
  src = "yahoo",
  from = "2022-12-30",
  to = "2026-11-02"
)
## [1] "AAPL"
# Base de precios de cierre
precios <- data.frame(
  Fecha = as.Date(index(AAPL)),
  Cierre = as.numeric(Cl(AAPL))
) %>%
  filter(!is.na(Cierre)) %>%
  distinct(Fecha, .keep_all = TRUE) %>%
  arrange(Fecha)

# Función para generar el calendario
crear_calendario <- function(anio, precios) {
  
  # Filtrar cotizaciones del año
  precios_anio <- precios %>%
    filter(year(Fecha) == anio) %>%
    arrange(Fecha)
  
  if (nrow(precios_anio) == 0) {
    stop("No hay cotizaciones para el año ", anio)
  }
  
  # Crear todas las fechas del año
  fechas_anio <- data.frame(
    Fecha = seq(
      as.Date(paste0(anio, "-01-01")),
      as.Date(paste0(anio, "-12-31")),
      by = "day"
    )
  )
  
  # Unir fechas con cotizaciones
  precios_completos <- left_join(
    fechas_anio, precios_anio, by = "Fecha"
  )
  
  # Rellenar días anteriores a la primera cotización
  precios_completos$Cierre <- na.locf(
    precios_completos$Cierre,
    na.rm = FALSE
  )
  
  precios_completos$Cierre <- na.locf(
    precios_completos$Cierre,
    fromLast = TRUE,
    na.rm = FALSE
  )
  
  # Comprobar datos faltantes
  stopifnot(!anyNA(precios_completos$Cierre))
  
  # Generar calendario
  calendR(
    year = anio,
    special.days = precios_completos$Cierre,
    low.col = "yellow",
    special.col = "blue",
    gradient = TRUE,
    legend.pos = "right",
    orientation = "landscape",
    title = paste("Calendario de precios de APPLE -", anio)
  )
}

# Calendario de 2023
crear_calendario(2025, precios)

En el calendario de precios de Apple para 2025 se observa que durante los primeros meses las acciones mantuvieron precios relativamente bajos. A partir de abril comenzaron a subir, aunque presentaron algunas variaciones entre julio y septiembre. Sin embargo, durante octubre, noviembre y diciembre alcanzaron sus valores más altos, representados en color azul. Esto muestra una tendencia de crecimiento importante en el precio de las acciones hacia el final del año.