La siguiente sesión tiene como objetivo presentarle algunas caracteristicas del entorno R mediante su uso. Muchas características del sistema le resultarán desconocidas y desconcertantes al principio, pero este desconcierto pronto desaparecerá.
x <- rnorm(50)
y <- rnorm(x)
La línea de código
plot(x, y, main = "Distribución normal", xlab = "x", ylab = "y")
crea un diagrama de dispersión básico en R. Aquí hay un desglose de lo
que hace cada parte:
plot(x, y): Esta es la función principal que crea la
trama. Toma dos vectores, x e y, y los usa
para definir las coordenadas de los puntos que se van a trazar.main="Distribución normal": Este argumento fija el
título principal de la trama. Aquí pone el título a “Distribución
normal”.xlab = "x": Este argumento establece la etiqueta para
el eje x. Aquí, establece la etiqueta en “x”.ylab = "y": este argumento establece la etiqueta para
el eje y. Aquí, establece la etiqueta en “y”.plot(x, y, main = "Distribución normal", xlab = "x", ylab = "y")
ls()
## [1] "x" "y"
La línea de código rm(x, y) elimina los objetos “x” e “y” del entorno actual en R. Esto significa que ya no podrás acceder a ellos ni usarlos en tu código.
Es recomendable usar rm() cuando ya no necesites un objeto para liberar memoria y evitar que el entorno se llene de variables innecesarias. Esto puede ser útil, especialmente si estás trabajando con conjuntos de datos grandes o realizando análisis complejos.
rm(x, y)
x <- 1:20
w <- 1 + sqrt(x)/2
La línea de código dummy <- data.frame(x = x, y = x + rnorm(x)*w) crea un nuevo marco de datos llamado dummy con dos variables:
x: Esta variable contiene los mismos valores que el vector x original.
y: Esta variable se calcula sumando a cada valor de x un valor aleatorio generado por la función rnorm(x) multiplicado por w.
dummy <- data.frame(x = x, y = x + rnorm(x)*w)
El código fm <- lm(y ~ x, data = dummy) seguido de
summary(fm) realiza un análisis de regresión lineal en R.
Aquí hay un desglose de lo que hace cada parte:
fm <- lm(y ~ x, datos = ficticio):
- `lm`: esta función significa "modelo lineal" y se utiliza para ajustar un modelo de regresión lineal a los datos.
- `y ~ x`: Esta parte de la fórmula especifica la relación entre la variable dependiente (`y`) y la variable independiente (`x`). La tilde (`~`) indica que estamos modelando `y` como una función de `x`.
- `data = dummy`: este argumento especifica el marco de datos (`dummy`) que contiene las variables `y` y `x`. El modelo se ajustará utilizando los datos de este marco.
En términos más simples esta línea ajusta una línea recta a los
valores “y” según su relación con los valores “x” en el marco de datos
“ficticio”. El resultado se almacena en el objeto fm
fm <- lm(y ~ x, data = dummy)
summary(fm)
##
## Call:
## lm(formula = y ~ x, data = dummy)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.8978 -1.7823 -0.9308 1.2830 6.9923
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.8182 1.2395 0.660 0.518
## x 0.8032 0.1035 7.762 3.76e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.668 on 18 degrees of freedom
## Multiple R-squared: 0.77, Adjusted R-squared: 0.7572
## F-statistic: 60.25 on 1 and 18 DF, p-value: 3.756e-07
Esta salida resume los resultados de un modelo de regresión lineal
ajustado usando la fórmula y ~ x en los datos del marco de
datos dummy.
Desglose:
Call: Esta línea muestra la fórmula utilizada
para ajustar el modelo (y ~ x) y el marco de datos
(dummy) utilizado.
Residuals: Esta sección muestra los valores
mínimo, primer cuartil (Q1), mediana, tercer cuartil (Q3) y máximo de
los residuos. Los residuos representan la diferencia entre los valores
reales de y y los valores predichos por el modelo
ajustado.
Coefficients: Esta tabla es la parte más importante de la salida. Muestra:
y cuando
x es cero.y para un
aumento de una unidad en x. En este caso, y
aumenta aproximadamente 1.08 por cada unidad que aumenta
x.Signif. codes: Esta línea muestra códigos que indican el nivel de significancia de cada valor p. Aquí, “***” indica un valor p altamente significativo (menor que 0.001).
Residual standard error: Este valor (2.196) representa la desviación estándar de los residuos. Un valor más bajo indica un mejor ajuste del modelo.
Multiple R-squared (0.8993): Este valor
representa la proporción de la varianza en y explicada por
el modelo lineal. En este caso, el 89.93% de la variación en
y puede explicarse por la relación lineal con
x.
Adjusted R-squared (0.8937): Este ajusta el
valor R-squared para tener en cuenta el número de predictores en el
modelo (en este caso, un predictor: x). A menudo se
considera una medida de ajuste más confiable.
F-statistic (160.7) and p-value (2.072e-10): La
estadística F prueba la significancia general del modelo. Una
estadística F alta y un valor p bajo (aquí, altamente significativo)
indican que el modelo es estadísticamente significativo, lo que
significa que la relación entre x e y es poco
probable que se deba al azar.
Basándonos en esta salida, podemos concluir lo siguiente:
x e y.x, esperamos que
y aumente en aproximadamente 1.08 en promedio.y (casi el 90%).Nota: Este análisis asume que los datos cumplen con los supuestos de la regresión lineal (por ejemplo, linealidad, normalidad de los residuos, homocedasticidad). Es importante verificar estos supuestos para una comprensión más completa de la validez del modelo.
La línea de código
fm1 <- lm(y ~ x, data = dummy, weight = 1/w^2) seguida
de summary(fm1) realiza un análisis de regresión lineal
ponderada en R. Aquí te lo explico paso a paso:
1.
fm1 <- lm(y ~ x, data = dummy, weight = 1/w^2):
lm: Esta función representa “modelo lineal” y se
utiliza para ajustar un modelo de regresión lineal a los datos.y ~ x: Esta parte de la fórmula especifica la relación
entre la variable dependiente (y) y la variable
independiente (x). La tilde (~) indica que
estamos modelando y como una función de
x.data = dummy: Este argumento especifica el marco de
datos (dummy) que contiene las variables y y
x. El modelo se ajustará utilizando los datos en este
marco.weight = 1/w^2: Esta es la parte clave que introduce la
ponderación en el análisis. Aquí:
weight: Indica que se utilizará un vector de pesos para
ponderar las observaciones en el modelo.1/w^2: Define el vector de pesos. En este caso, el peso
de cada observación se calcula como el inverso del cuadrado de
w.En resumen: Esta línea ajusta una línea recta
ponderada a los valores y en función de su relación con los
valores x en el marco de datos dummy. Los
pesos se calculan a partir del vector w y se usan para dar
más o menos importancia a cada observación en el modelo. El resultado se
almacena en el objeto fm1.
2. summary(fm1):
summary(fm1): Esta función toma el objeto del modelo
ajustado (fm1) como entrada y proporciona un resumen de los
resultados. La salida es similar a la del análisis de regresión lineal
regular (que viste anteriormente) e incluye:
Pero, ¿por qué usar pesos?
Se utilizan pesos para ponderar las observaciones en un análisis de
regresión lineal cuando la varianza de los errores no es constante
(heteroscedasticidad). Es decir, si la varianza de los residuos (la
diferencia entre los valores reales de y y los predichos
por el modelo) no es la misma para todas las observaciones. En este
caso:
w más altos tendrán
pesos más bajos (1/w^2 será más pequeño).w más bajos tendrán
pesos más altos (1/w^2 será más grande).Al ponderar de esta manera, se da más importancia a las observaciones con mayor confianza (menos varianza) y menos importancia a las que tienen mayor varianza (menor confianza). Esto puede conducir a un modelo más preciso.
Ten en cuenta que:
w) depende del
problema específico y del conocimiento previo que tengas sobre los
datos.fm1 <- lm(y ~ x, data = dummy, weight = 1/w^2)
summary(fm1)
##
## Call:
## lm(formula = y ~ x, data = dummy, weights = 1/w^2)
##
## Weighted Residuals:
## Min 1Q Median 3Q Max
## -1.4635 -0.5969 -0.3249 0.5819 2.3757
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.75990 0.90763 0.837 0.413
## x 0.80816 0.09255 8.732 6.89e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.003 on 18 degrees of freedom
## Multiple R-squared: 0.809, Adjusted R-squared: 0.7984
## F-statistic: 76.25 on 1 and 18 DF, p-value: 6.887e-08
Esta salida resume los resultados de un análisis de regresión lineal
ponderada donde se modeló y en función de x
utilizando el marco de datos dummy. Se aplicaron pesos a
las observaciones para tener en cuenta la varianza desigual de los
errores.
Desglose:
Call: Esta línea muestra la fórmula utilizada
para ajustar el modelo (y ~ x), el marco de datos
(dummy) y la indicación de que se usaron pesos
(weights = 1/w^2).
Weighted Residuals: Esta sección muestra el
mínimo, primer cuartil (Q1), mediana, tercer cuartil (Q3) y máximo de
los residuos ponderados. Los residuos ponderados representan la
diferencia entre los valores reales de y y los valores
predichos por el modelo ajustado, teniendo en cuenta los pesos asignados
a cada observación.
Coefficients: Esta tabla es similar a la regresión lineal regular, pero ahora tenemos:
y cuando x es cero.y para un
aumento de una unidad en x, considerando los pesos.Signif. codes: Muestra la significancia de los p-valores. Las tres estrellas (“***“) indican alta significancia (p-valor < 0.001).
Residual standard error: Desviación estándar de los residuos ponderados (un valor más bajo indica mejor ajuste).
Multiple R-squared y Adjusted R-squared:
Proporciones de la varianza en y explicada por el modelo
ponderado. En este caso, son bastante altas (alrededor del
86-87%).
F-statistic y p-value: Prueban la significancia
general del modelo. Un F alto y un p-valor bajo (muy bajo aquí) indican
que el modelo es estadísticamente significativo, es decir, la relación
entre x e y no se debe solo al azar.
En base a esta salida, podemos concluir lo siguiente:
x e y, teniendo en cuenta los pesos
aplicados a las observaciones.x, esperamos que
y aumente en aproximadamente 0.928 en promedio,
considerando la ponderación.y (alrededor del 86-87%).Comparación con la regresión lineal sin ponderar:
Nota:
w) y la interpretación
de los resultados de la regresión lineal ponderada dependen del contexto
específico y los supuestos del modelo.attach(dummy)
## The following object is masked _by_ .GlobalEnv:
##
## x
La línea de código lrf <- lowess(x, y) en R realiza un suavizado local de la nube de puntos (LOWESS) para crear una curva suave que se ajusta a los puntos de datos representados por los vectores x e y.
lrf <- lowess(x, y)
plot(x, y)
La línea de regresión se inclina hacia arriba, lo que indica una relación positiva entre las variables. Esto significa que a medida que la variable independiente aumenta, la variable dependiente también tiende a aumentar.
La pendiente de la línea de regresión es de 0.5, lo que indica que por cada unidad que aumenta la variable independiente, la variable dependiente aumenta en 0.5 unidades en promedio.
El coeficiente de determinación (R2) es de 0.8, lo que indica que la variable independiente explica el 80% de la varianza en la variable dependiente.
El intervalo de confianza indica que la verdadera relación lineal se encuentra dentro de la zona sombreada con un 95% de confianza
El código combina tres líneas para crear un gráfico que muestra la curva LOWESS ajustada a los datos:
1. plot.new()
plot.new() y ya tienes un gráfico
previo, las líneas del nuevo gráfico se añadirán al existente.2. lines(x, lrf$y)
x: Representa el vector de valores de la variable
independiente que ya conoces.lrf$y: Representa los valores de la curva LOWESS
ajustada, almacenados en el elemento y del objeto
lrf. Al acceder a lrf$y, se extraen
específicamente los valores y del objeto.lrf$y) en función de los valores de
la variable independiente (x).3. axis(1, xlab = “x”) axis(2, ylab = “y”)
axis(1, xlab = "x"): Crea el eje x y lo etiqueta como
“x”. El 1 indica que se está trabajando con el eje 1 (eje
inferior).axis(2, ylab = "y"): Crea el eje y y lo etiqueta como
“y”. El 2 indica que se está trabajando con el eje 2 (eje
lateral).En resumen,
Este código inicializa un nuevo gráfico, dibuja las líneas de la
curva LOWESS ajustada y agrega los ejes con sus etiquetas para crear una
visualización adecuada de la relación entre tus datos (representados por
x) y la curva LOWESS (lrf$y).
plot.new()
lines(x,lrf$y)
axis(1, xlab = "x") # Add x-axis
axis(2, ylab = "y") # Add y-axis
La curva LOESS aumenta a medida que la variable independiente aumenta,
lo que indica una relación positiva entre las variables.
La banda de confianza indica que la verdadera tendencia local se encuentra dentro de la zona sombreada con un 95% de confianza.
La curva LOESS no es una línea recta, lo que indica que la relación entre las variables no es lineal. La curva se ajusta a la forma de los datos, mostrando una tendencia más compleja.
Esta línea añade una línea al diagrama actual (creado por plot.new()).
abline(0, 1) define la ecuación de la línea. En este caso, es una línea con una pendiente de 1 (y = x) y una intersección de 0 (la línea pasa por el origen).
lty = 3 define el estilo de la línea como discontinua (3 es un código común para líneas discontinuas en R).
plot(x,y)
plot.new()
abline(0, 1, lty = 3)
axis(1, xlab = "x") # Add x-axis
axis(2, ylab = "y") # Add y-axis
La línea de código abline(coef(fm)) se utiliza en R para añadir una línea al gráfico actual que representa la regresión lineal ajustada a un conjunto de datos.
coef(fm): Esta función extrae los coeficientes de regresión del objeto fm. El objeto fm puede ser el resultado de una regresión lineal, una regresión logística, un análisis de varianza, entre otros tipos de análisis.
abline(): Esta función añade una línea al gráfico actual. La línea se define por los coeficientes de regresión:
La pendiente de la línea es igual al coeficiente de la variable independiente.
La intersección con el eje Y es igual al coeficiente de intercepción.
plot(x,y)
plot.new()
abline(coef(fm))
axis(1, xlab = "x") # Add x-axis
axis(2, ylab = "y") # Add y-axis
abline(coef(fm1), col = "red")Esta línea de código se utiliza en R para agregar una línea al gráfico actual que representa la regresión lineal ajustada a un conjunto de datos, con la característica adicional de que la línea se muestra en color rojo.
Desglose de la línea:
abline(coef(fm1)):
abline(): Función para agregar una línea al gráfico
actual.coef(fm1): Función que extrae los coeficientes
de regresión del objeto fm1. fm1
representa un modelo de regresión lineal ajustado previamente.col = "red": Especifica el color de la
línea como rojo.plot(x,y)
plot.new()
abline(coef(fm1), col = "red")
axis(1, xlab = "x") # Add x-axis
axis(2, ylab = "y") # Add y-axis
detach()
Esta línea de código crea un diagrama de dispersión en R que muestra los residuos frente a los valores ajustados de un modelo de regresión lineal.
Desglose de la línea:
library(ggplot2): Carga la biblioteca ggplot2, que es una biblioteca popular para crear visualizaciones de datos en R.
ggplot(data.frame(fitted = fitted(fm), resid = resid(fm)), aes(x = fitted, y = resid)):
ggplot(): Función principal para crear un diagrama ggplot2. data.frame(fitted = fitted(fm), resid = resid(fm)): Crea un marco de datos con dos variables: fitted: Los valores ajustados del modelo de regresión lineal (fm). resid: Los residuos del modelo de regresión lineal (fm). aes(x = fitted, y = resid): Define la estética del diagrama, especificando que: El eje X representa los valores ajustados (fitted). El eje Y representa los residuos (resid). geom_point(): Añade una capa al diagrama con puntos que representan cada observación en el conjunto de datos.
labs(x = “Valores ajustados”, y = “Residuales”, title = “Residuales frente a ajustados”): Personaliza las etiquetas de los ejes y el título del diagrama.
En resumen:
Esta línea de código crea un diagrama de dispersión que permite:
Visualizar la distribución de los residuos del modelo de regresión lineal. Identificar posibles patrones en los residuos, como heterocedasticidad o puntos influyentes. Evaluar la bondad de ajuste del modelo de regresión lineal.
library(ggplot2)
ggplot(data.frame(fitted = fitted(fm), resid = resid(fm)), aes(x = fitted, y = resid)) +
geom_point() +
labs(x = "Valores ajustados", y = "Residuales", title = "Residuales frente a ajustados")
Esta línea de código crea un gráfico QQ (cuantil-cuantil) de los residuos de un modelo de regresión lineal.
Desglose de la línea:
qqnorm(resid(fm)):
qqnorm(): Función para crear un gráfico QQ.
resid(fm): Función que extrae los residuos del modelo de regresión lineal (fm).
main = “Gráfico Rankit de residuales”: Especifica el título del gráfico como “Gráfico Rankit de residuales”
qqnorm(resid(fm), main = "Gráfico Rankit de residuales")
rm(fm, fm1, lrf, x, dummy)
La línea de código:
filepath <- system.file("data", "morley.tab", package = "datasets")
Sirve para obtener la ruta completa de un archivo de datos dentro de un paquete de R.
Veamos desglosado cómo funciona:
filepath <-: Asigna el resultado de la expresión del
lado derecho a la variable filepath.system.file(): Es una función de R que devuelve la ruta
a un archivo dentro del directorio R."data", "morley.tab": Indican la ubicación
del archivo dentro del paquete.
"data": Especifica la carpeta “data” donde se almacenan
generalmente los archivos de datos dentro de un paquete de R."morley.tab": Es el nombre específico del archivo de
datos que se busca.package = "datasets": Especifica el nombre del paquete
donde se encuentra el archivo de datos. En este caso, se busca el
archivo “morley.tab” dentro del paquete “datasets” que se asume está
cargado en la sesión de R.En resumen, este código busca la ruta completa del
archivo “morley.tab” dentro del paquete “datasets” y la almacena en la
variable filepath. Esta variable luego podría utilizarse
para cargar el archivo de datos utilizando funciones como
read.table() o read.csv() dependiendo del
formato del archivo.
filepath <- system.file("data", "morley.tab", package = "datasets")
rutaarchivo <- filepath
file.show(rutaarchivo)
La línea de código mm <- read.table(filepath) se
utiliza para leer un archivo de datos de formato tabla y
almacenarlo en una variable de R.
Desglose de la línea:
mm <-: Asigna el resultado de la función
read.table() a la variable mm.read.table(): Función de R que lee un archivo de datos
de formato tabla y lo devuelve como un objeto de tipo
data.frame.filepath: Es la ruta completa del archivo que se desea
leer. Esta ruta puede ser una cadena de caracteres o una variable que
contenga la ruta.**Argumentos adicionales de read.table():
header = TRUE: Indica si la primera fila del archivo
contiene los nombres de las variables. Si se omite este argumento, se
asume que la primera fila contiene datos.sep = ",": Especifica el caracter que separa las
columnas en el archivo.dec = ".": Especifica el caracter que se usa como punto
decimal en los números.En resumen:
La línea de código mm <- read.table(filepath) es una
herramienta útil para leer archivos de datos de formato tabla y
almacenarlos en R para su posterior análisis.
mm <- read.table(filepath)
mm$Expt <- factor(mm$Expt)
mm$Run <- factor(mm$Run)
attach(mm)
La línea de código
boxplot(Speed ~ Expt, main = "Datos velocidad de la luz", xlab = "Nº experimento")
crea un diagrama de cajas para visualizar la distribución de la variable
Speed en función de la variable Expt en un
conjunto de datos.
Desglose de la línea:
boxplot(): Función de R para crear un diagrama de
cajas.Speed ~ Expt: Especifica la relación entre las
variables.
Speed: La variable que se muestra en el eje Y del
diagrama de cajas.Expt: La variable que se muestra en el eje X del
diagrama de cajas y que define las diferentes categorías para comparar
la distribución de Speed.main = "Datos velocidad de la luz": Título del diagrama
de cajas.xlab = "Nº experimento": Etiqueta del eje X del
diagrama de cajas.Interpretación del diagrama de cajas:
En resumen:
Este código crea un diagrama de cajas que ayuda a visualizar:
boxplot(Speed ~ Expt, main = "Datos velocidad de la luz", xlab = "Nº experimento")
La línea de código
fm <- aov(Speed ~ Run + Expt, data = mm) en R realiza un
análisis de varianza (ANOVA) para un modelo lineal.
Veamos paso a paso lo que hace:
1. fm <-:
aov()) a la variable
fm. Esta variable almacenará información sobre el modelo
ajustado.2.
aov(Speed ~ Run + Expt, data = mm):
aov(): Es la función de R para realizar un análisis de
varianza.Speed ~ Run + Expt: Define la fórmula del modelo
lineal.
Speed: La variable dependiente (aquella que se quiere
explicar o predecir).~: Separador entre la variable dependiente y las
variables independientes.Run + Expt: Las variables independientes (factores) que
se cree que afectan a la variable dependiente. En este caso, se incluyen
dos factores: “Run” y “Expt”.data = mm: Especifica el marco de datos
(mm) que contiene las variables utilizadas en el
modelo.En resumen:
Esta línea de código ajusta un modelo lineal donde la variable
“Speed” se explica por los factores “Run” y “Expt” usando los datos del
marco de datos mm. El resultado del análisis se almacena en
la variable fm.
¿Qué es un análisis de varianza (ANOVA)?
El ANOVA es una técnica estadística que se utiliza para comparar los medios de dos o más grupos y determinar si esas diferencias son estadísticamente significativas. En este caso, el ANOVA se está utilizando para comparar la media de la variable “Speed” entre diferentes niveles de los factores “Run” y “Expt”.
Salida del análisis:
La función aov() devuelve un objeto de la clase
lm que contiene información sobre el modelo ajustado,
como:
Uso posterior del modelo:
La variable fm que almacena el modelo ajustado se puede
utilizar para realizar varias tareas, como:
En resumen:
La línea de código
fm <- aov(Speed ~ Run + Expt, data = mm) realiza un
análisis de varianza para un modelo lineal. Esta técnica permite
estudiar si los factores “Run” y “Expt” tienen un efecto significativo
sobre la variable “Speed” utilizando los datos del marco de datos
mm.
fm <- aov(Speed ~ Run + Expt, data = mm)
summary(fm)
## Df Sum Sq Mean Sq F value Pr(>F)
## Run 19 113344 5965 1.105 0.36321
## Expt 4 94514 23629 4.378 0.00307 **
## Residuals 76 410166 5397
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
La línea de código fm0 <- update(fm, . ~ . - Run) en
R actualiza el modelo lineal fm eliminando el factor
Run del modelo. Veamos paso a paso lo que hace:
1. fm0 <-:
update() a la
variable fm0. Esta variable almacenará el modelo
actualizado.2. update(fm, . ~ . - Run):
update(): Función de R para actualizar un modelo
previamente ajustado.fm: El modelo que se desea actualizar (en este caso, el
modelo almacenado en la variable fm).~: Separador entre la fórmula original del modelo y la
nueva fórmula..: Representa la fórmula original del modelo.- Run: Indica que se debe eliminar el factor
Run del modelo.En resumen:
Esta línea de código elimina el factor Run del modelo
fm y crea un nuevo modelo actualizado (fm0)
que solo incluye el factor Expt como variable
independiente.
fm0 <- update(fm, . ~ . - Run)
La línea de código anova(fm0, fm) en R realiza un
análisis de varianza (ANOVA) para comparar dos modelos
lineales: fm0 y fm. Veamos paso a paso lo que
hace:
1. anova(): Función de R para realizar un
análisis de varianza.
2. fm0: El primer modelo que se desea comparar.
En este caso, el modelo actualizado que no incluye el factor
Run.
3. fm: El segundo modelo que se desea comparar.
En este caso, el modelo original que incluye los factores
Run y Expt.
En resumen:
Esta línea de código compara dos modelos lineales para determinar si
la eliminación del factor Run del modelo fm
tiene un efecto significativo en la capacidad explicativa del
modelo.
anova(fm0, fm)
detach()
rm(fm, fm0)
La línea de código x <- seq(-pi, pi, length = 50) en
R crea un vector llamado x que contiene 50 valores
espaciados uniformemente entre -π y π. Veamos paso a paso lo que
hace:
1. x <-:
seq() a la variable
x.2. seq(-pi, pi, length = 50):
seq(): Función de R para crear una secuencia de
números.-pi: El valor inicial de la secuencia.pi: El valor final de la secuencia.length = 50: Especifica que la secuencia debe tener 50
elementos.En resumen:
Esta línea de código crea un vector llamado x que
contiene 50 valores que van desde -π hasta π, con una separación
uniforme entre ellos.
x <- seq(-pi, pi, length = 50)
La línea de código y <- x en R asigna el valor de la
variable x a la variable y. Es decir, crea una
copia del contenido de x en y.
1. y <-:
**2. x:
En resumen:
Esta línea de código crea una nueva variable y con el
mismo valor que la variable x.
y <- x
La línea de código define una función en R llamada
z que toma dos argumentos (x e y)
y devuelve el valor de la expresión cos(y) / (1 + x^2).
Veamos paso a paso lo que hace:
1. z <-:
function() a la
variable z.2. function(x, y):
function: Función de R para definir una nueva
función.x: Primer argumento de la función.y: Segundo argumento de la función.3. cos(y) / (1 + x^2):
cos(y): Función coseno de y.1 + x^2: Expresión que eleva al cuadrado x
y le suma 1.En resumen:
Esta línea de código define una función z que calcula el
cociente entre el coseno de y y la suma de 1 y el cuadrado
de x.
z <- function(x, y) {
cos(y) / (1 + x^2)
}
1. f <-:
Asigna el resultado de la expresión a la derecha a la variable
f.
2. outer(x, y, z):
outer(): Es una función en R que realiza operaciones
elemento a elemento en dos vectores y devuelve una
matriz. Se puede pensar como una especie de bucle anidado que itera por
cada elemento de x e y.x: El primer vector que se utilizará en el bucle
exterior de la operación.y: El segundo vector que se utilizará en el bucle
interior de la operación.z: No es directamente un vector, sino una
función que define la operación que se realiza en cada
combinación de elementos de x e y.Comprensión de z:
En tu ejemplo de código anterior, z se definió como una
función que toma dos argumentos (x e y) y
devuelve cos(y) / (1 + x^2). Esta función se aplicará a
cada combinación de elementos de x e y.
Matriz resultante:
La matriz resultante f tendrá dimensiones basadas en las
longitudes de x e y. Para cada elemento
f[i, j] en la matriz:
i corresponde al índice de un elemento en
x.j corresponde al índice de un elemento en
y.f[i, j] será el resultado de aplicar la
función z al i-ésimo elemento de
x y al j-ésimo elemento de
y.En resumen:
La línea de código f <- outer(x, y, z) crea una
matriz f aplicando la función z a todas las
combinaciones posibles de elementos de los vectores x e
y. La matriz resultante refleja las operaciones elemento a
elemento definidas por la función z.
f <- outer(x, y, z)
oldpar <- par(no.readonly = TRUE); par(pty = "s"):1.
oldpar <- par(no.readonly = TRUE):
par(): Función en R que devuelve una lista con los
parámetros gráficos actuales.no.readonly = TRUE: Especifica que la configuración de
los parámetros no se debe considerar de solo lectura.Efecto:
Esta línea guarda la configuración actual de los parámetros gráficos
en una variable llamada oldpar. Esto permite modificar
temporalmente algunos parámetros sin afectar la configuración
original.
2. par(pty = "s"):
par(): Función para modificar la configuración de los
parámetros gráficos.pty: Parámetro que controla el tipo de línea que se
utiliza en gráficos."s": Valor que indica que se debe usar una línea
sólida.Efecto:
Esta línea cambia el tipo de línea a sólida para los gráficos que se generen posteriormente.
En resumen:
La línea de código
oldpar <- par(no.readonly = TRUE); par(pty = "s")
realiza dos acciones:
oldpar.oldpar <- par(no.readonly = TRUE)
par(pty = "s")
contour(x, y, f):1. contour():
2. x:
3. y:
4. f:
Efecto:
La función contour() crea un gráfico de contorno que
muestra la forma de la superficie definida por la función
f. Los contornos se dibujan para diferentes valores de la
función, lo que permite visualizar la variación de la superficie.
contour(x, y, f)
plot.new()
contour(x, y, f, nlevels = 15, add = TRUE)
axis(1, xlab = "x") # Add x-axis
axis(2, ylab = "y") # Add y-axis
La línea de código fa <- (f - t(f)) / 2 en R realiza
una operación en una matriz f y almacena el resultado en
una nueva matriz fa. Vamos a desglosarlo paso a paso:
1. fa <-:
fa. En este caso, fa se convertirá en una
nueva matriz.2. f - t(f):
f: Esta representa una matriz existente en su
código.t(f): Esta parte aplica la función t() a
la matriz f. La función t() realiza la
transpuesta de una matriz. La transpuesta intercambia
las filas y las columnas.Entonces, f - t(f) realiza la resta de la matriz
original f y su transpuesta.
3. / 2:
f y su
transpuesta) por 2.Entendiendo la operación:
f de su transpuesta, se obtienen
valores que representan las diferencias entre los elementos
correspondientes en las filas y columnas.f.Dependiendo del tipo de matriz f:
f es una matriz simétrica (donde
los valores f[i, j] son iguales a f[j, i]), la
resta eliminará esos valores duplicados y la división por 2 podría dar
como resultado una matriz con ceros en la parte superior o inferior
triangular (dependiendo del orden de las filas y columnas).f no es simétrica, la resta y la división podrían
realzar algunas diferencias entre elementos relacionados por filas y
columnas.En resumen:
La línea de código fa <- (f - t(f)) / 2 crea una
nueva matriz fa que contiene las diferencias entre
elementos correspondientes en filas y columnas de la matriz original
f, posiblemente eliminando componentes simétricos y
escalando el resultado. Su significado específico depende del tipo de
matriz f que se esté usando.
fa <- (f - t(f)) / 2
1. contour():
2. x:
3. y:
4. fa:
5. nlevels = 15:
Efecto:
La función contour() crea un gráfico de contorno que
muestra la forma de la superficie definida por la matriz
fa. Se dibujan 15 contornos para diferentes valores de la
función, lo que permite visualizar la variación de la superficie con
mayor detalle.
contour(x, y, fa, nlevels = 15)
par(oldpar):1. par():
2. oldpar:
Efecto:
La línea de código par(oldpar) restaura la configuración
de los parámetros gráficos a la que estaba almacenada en la variable
oldpar.
par(oldpar)
1. image():
2. x:
3. y:
4. f:
Efecto:
La función image() crea una imagen ráster a partir de la
matriz f. Los valores de la matriz f se mapean
a colores, y cada píxel de la imagen se rellena con el color
correspondiente.
image(x, y, f)
image(x, y, fa):1. image():
2. x:
3. y:
4. fa:
Efecto:
La función image() crea una imagen ráster a partir de la
matriz fa. Los valores de la matriz fa se
mapean a colores, y cada píxel de la imagen se rellena con el color
correspondiente.
image(x, y, fa)
objects(); rm(x, y, f, fa)
## [1] "f" "fa" "filepath" "mm" "oldpar"
## [6] "rutaarchivo" "w" "x" "y" "z"
1. th <-:
th.2. seq(-pi, pi, length = 100):
seq() que genera una secuencia de números.Parámetros:
Efecto:
La variable th se convierte en un vector que contiene
100 valores espaciados uniformemente entre -π y π.
th <- seq(-pi, pi, length = 100)
z <- exp(1i * th)
en español:1. z <-:
z.2. exp(1i * th):
exp(): Función en R que calcula el exponencial de un
número (e elevado a la potencia del argumento).1i: Representa la unidad imaginaria, que es igual a la
raíz cuadrada de -1. En números complejos, se utiliza para denotar la
componente imaginaria.th: Se refiere a la variable creada en la línea
anterior de código (th <- seq(-pi, pi, length = 100)).
Recordemos que th es un vector que contiene 100 valores
entre -π y π.Efecto:
Esta expresión calcula el exponencial complejo de
1i * th. El resultado es un vector de números complejos
almacenados en la variable z.
Comprensión del cálculo:
1i multiplicada por cualquier
ángulo theta (representado por los valores en
th) da como resultado un número complejo donde la
componente imaginaria es theta en sí.exp() luego calcula el exponencial de este
número complejo. En la fórmula de Euler, el exponencial de un número
complejo se puede expresar como
cos(theta) + i * sin(theta).Por lo tanto, los valores en z serán números
complejos con:
theta (valores
en el vector th).theta
(valores en el vector th).z <- exp(1i * th)
par(pty = "s") y
plot(z, type = "l"):1. par(pty = "s"):
par() es una función que permite modificar varios
aspectos del gráfico.pty es un argumento que especifica qué tipo de
parámetros se van a modificar."s" indica que se van a modificar los parámetros
relacionados con el tamaño del gráfico.Efecto:
Al ejecutar esta línea, se cambia el tamaño del gráfico por defecto a un tamaño más pequeño.
2. plot(z, type = "l"):
plot() es una función que genera una gráfica a partir
de un vector de datos.z es el vector que contiene los datos que se van a
graficar.type es un argumento que especifica el tipo de gráfica
que se va a crear."l" indica que se va a crear una gráfica de
líneas.Efecto:
Al ejecutar esta línea, se crea una gráfica de líneas que representa
los valores del vector z.
En conjunto:
Las dos líneas de código juntas primero cambian el tamaño del gráfico
por defecto a un tamaño más pequeño y luego crean una gráfica de líneas
que representa los valores del vector z.
par(pty = "s")
plot(z, type = "l")
w <- rnorm(100) + rnorm(100) * 1i:1. w <-:
w.2. rnorm(100):
3. +:
4. rnorm(100) * 1i:
1i.5. *:
Efecto:
La variable w se convierte en un vector que contiene 100
números complejos. La parte real de cada número complejo se genera a
partir de una distribución normal estándar, y la parte imaginaria se
genera a partir de otra distribución normal estándar y se multiplica por
1i.
En resumen:
La línea de código w <- rnorm(100) + rnorm(100) * 1i
crea un vector w de 100 números complejos aleatorios con
distribución normal estándar en ambas partes (real e imaginaria).
w <- rnorm(100) + rnorm(100) * 1i
w <- ifelse(Mod(w) > 1, 1/w, w):1. w <-:
w.2. ifelse(condition, then, else):
3. Mod(w):
4. 1/w:
w.5. >:
TRUE si el
primer valor es mayor que el segundo valor.Efecto:
La variable w se convierte en un vector que contiene los
mismos valores que el vector original, excepto que los valores con un
módulo mayor que 1 se reemplazan por su inverso.
En resumen:
La línea de código w <- ifelse(Mod(w) > 1, 1/w, w)
reemplaza los valores en w con un módulo mayor que 1 por su
inverso.
w <- ifelse(Mod(w) > 1, 1/w, w)
Esta línea de código crea un diagrama de dispersión y luego agrega una línea a ese diagrama en R. Vamos a analizarlo paso a paso:
Primera parte: plot(w, xlim = c(-1, 1), ylim = c(-1, 1), pch = “+”, xlab = “x”, ylab = “y”)
plot(w, ...): Esta es la función principal para crear
un diagrama de dispersión. Toma a w como el vector de datos
(presumiblemente contiene números complejos de las líneas
anteriores).xlim = c(-1, 1): Esto establece los límites del eje x
para que vayan de -1 a 1. Define el área visible del diagrama en el eje
x.ylim = c(-1, 1): De manera similar, esto establece los
límites del eje y para que vayan de -1 a 1.pch = "+": Esto especifica el símbolo del diagrama
utilizado para los puntos de datos. Aquí, se usa “+”, lo que
representará pequeños signos más para cada punto de datos en
w.xlab = "x": Esto establece la etiqueta del eje x como
“x”.ylab = "y": Esto establece la etiqueta del eje y como
“y”.Efecto:
Esta parte del código genera un diagrama de dispersión con las siguientes características:
w.Segunda parte: lines(z)
lines(z): Esto agrega una línea al diagrama existente.
Toma a z como el vector de datos, que sabemos que contiene
números complejos de líneas de código anteriores.Efecto:
Esta parte del código traza una línea que conecta los puntos en el
vector z. Dado que z probablemente contiene
números complejos, esta línea representará la trayectoria de la función
de valor complejo en el rango especificado.
En resumen:
Esta línea de código primero crea un diagrama de dispersión de los
datos en w y luego superpone un diagrama lineal de los
datos en z. Esto le permite visualizar ambos conjuntos de
datos en el mismo gráfico.
Notas adicionales:
w y z, el
diagrama resultante podría mostrar un grupo de puntos con una línea que
los atraviesa o una visualización más compleja según la naturaleza de
los números complejos.plot y lines
para personalizar la apariencia del diagrama, como cambiar colores,
estilos de línea y agregar títulos.plot(w, xlim = c(-1, 1), ylim = c(-1, 1), pch = "+", xlab = "x", ylab = "y")
lines(z)
w <- sqrt(runif(100)) * exp(2 * pi * runif(100) * 1i) en
R:Esta línea de código crea un vector de 100 números complejos aleatorios uniformemente distribuidos sobre la circunferencia de un círculo unitario en el plano complejo. Vamos a desglosarlo paso a paso:
1. w <-:
w.2. runif(100):
runif() se utiliza para generar
números aleatorios con una distribución uniforme.3. sqrt(.):
sqrt() calcula la raíz cuadrada de cada
elemento en el vector generado por runif(100).4. * (multiplicación):
* multiplica el vector con la raíz cuadrada
de los números aleatorios por el resultado de la siguiente
expresión.5. exp(2 * pi * runif(100) * 1i):
exp(): Función que calcula el exponencial de un número
(e elevado a la potencia del argumento).2 * pi: Multiplica el número π (pi) por 2.runif(100) * 1i: Genera otro vector de 100 números
aleatorios uniformes entre 0 y 1 y los multiplica por la unidad
imaginaria 1i.Efecto:
w proviene de
la raíz cuadrada de un número aleatorio uniforme entre 0 y 1.w
proviene de otro número aleatorio uniforme entre 0 y 1 multiplicado por
1i.En resumen:
Esta línea de código crea un vector w con 100 números
complejos aleatorios. Cada número complejo tiene una magnitud (distancia
al origen) menor o igual a 1 debido a la raíz cuadrada, y su ángulo
(dirección en el plano complejo) está distribuido uniformemente entre 0
y 2π gracias al uso de runif(100) multiplicado por 2π en el
exponencial.
w <- sqrt(runif(100)) * exp(2 * pi * runif(100) * 1i)
Esta línea de código en R crea una visualización con dos partes:
1. Diagrama de dispersión de w:
plot(w, ...): Esta es la función principal para crear
un diagrama de dispersión. Toma a w como el vector de
datos, que sabemos por explicaciones anteriores que contiene 100 números
complejos.xlim = c(-1, 1): Establece los límites del eje x para
que vayan de -1 a 1. Define el área visible del diagrama en el eje
x.ylim = c(-1, 1): De manera similar, establece los
límites del eje y para que vayan de -1 a 1.pch = "+": Define el símbolo del diagrama utilizado
para los puntos de datos. Aquí, se usa “+”, lo que representará pequeños
signos más para cada número complejo en w.xlab = "x": Establece la etiqueta del eje x como
“x”.ylab = "y": Establece la etiqueta del eje y como
“y”.Efecto:
Esta parte genera un diagrama de dispersión con las siguientes características:
w se grafican como
símbolos “+”.Nota importante:
Como los números complejos tienen componentes reales e imaginarias, no se pueden trazar directamente en un diagrama de dispersión 2D estándar (que requiere valores x e y separados). Sin embargo, R ingeniosamente traza la parte real de cada número complejo en el eje x y la parte imaginaria en el eje y. Esto le permite visualizar la distribución de los números complejos en el plano.
2. Diagrama lineal de z (opcional):
lines(z): Esto agrega un diagrama lineal sobre el
diagrama de dispersión existente. Toma a z como el vector
de datos, que podría contener números complejos adicionales (dependiendo
del contexto).Efecto:
Esta parte (si z tiene valores) traza una línea que
conecta los puntos en el vector z. Dado que z
probablemente también contiene números complejos, esta línea
representará la trayectoria de estos puntos de valor complejo en el
rango especificado.
En resumen:
Esta línea de código crea un diagrama de dispersión que proporciona
una representación visual de los números complejos en w. El
diagrama lineal opcional con z (si está presente) agrega
otra capa de información a la visualización.
Consideraciones adicionales:
w y z, el
diagrama resultante podría mostrar un grupo de símbolos “+” con una
línea que los atraviesa, o una visualización más compleja según la
naturaleza de los números complejos.plot y lines
para personalizar la apariencia del diagrama, como cambiar colores,
estilos de línea y agregar títulos.plot(w, xlim = c(-1, 1), ylim = c(-1, 1), pch = "+", xlab = "x", ylab = "y")
lines(z)
rm(th, w, z)
```