R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this: ##HECHO EN CLASE ## Primeros comandos en R

R es muy parecido a matlab y permite el trabajo con matrices

 A<-38
 A<-40
 B<-60
 C<-B-A
 C
## [1] 20
summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

uso de datasets o base de datos internos de R

Usando el comando data en la consola obtenemos distintos datos ya cargados en la base de datos de R, estos datos estan dado en la tabla de las cuales podemos elegir columnas específicas si escribimos $ despues de el comando de informacion especifico

Including Plots

You can also embed plots, for example:

funciones estadísticas

z1<-rnorm(350,22,5)
z1
##   [1] 24.031989 22.619098 20.913850 18.149949 28.804272 15.592718 23.349502
##   [8] 21.546596 26.216916 26.749104 13.292701 16.728234 23.483293 21.652535
##  [15] 12.683071 25.131361 29.266164 24.568252 26.871454 25.613086 24.003789
##  [22] 21.633052 25.509061 17.127626 19.839824 33.973246 17.597253 22.622572
##  [29] 31.937441 17.672562 17.147158 22.410081 30.483425 11.497034 23.837194
##  [36] 21.177989 20.284616 25.388702 11.293799 19.966878 21.751422 18.083825
##  [43] 26.545513 25.565351  8.311477 23.240525 29.753877 28.279063 13.426494
##  [50] 29.478662 28.098938 20.840559 31.834270 14.668495 19.455239 25.580743
##  [57] 25.539437 26.304318 20.442481 17.926005 19.838785 22.358212 31.272742
##  [64] 24.238387 22.440407 28.769473 17.790310 17.532141 23.826256 13.485971
##  [71] 15.546050 27.182719 16.260136 22.278746 17.256363 16.601083 30.699895
##  [78] 22.106965 19.493634 20.343039 28.986244 22.701175 21.472211 26.808480
##  [85] 16.046353 11.873809 28.864848 12.187072 15.303259 16.322591 19.526463
##  [92] 19.557735 19.293255 20.914969 26.345320 21.637642 29.129490 23.156586
##  [99] 21.573665 29.434205 25.155582 23.553737 27.766454 26.190879 18.840435
## [106] 23.341158 24.620115 12.759115 25.675006 19.396879 19.326497 16.804966
## [113] 25.281889 15.436486 19.874847 26.329786 19.803387 32.914204 19.165714
## [120] 18.688004 25.950896 20.553866 30.944860 24.591918 26.643518 17.308860
## [127] 23.976957 18.731203 22.464864 15.436287 12.621714 28.994287 25.344371
## [134] 29.571667 20.250523 25.996869 20.035188 26.777296 29.589386 19.106339
## [141] 24.887064 16.682674 17.588962 16.989668 38.085596 27.890205 21.337999
## [148] 24.425292 22.557075 20.753826 27.198791 27.460281 17.636112 29.720276
## [155] 17.863408 27.567693 19.843739 12.335519 18.732474 16.497672 21.936622
## [162] 28.360092 24.721322 10.003886 24.802854 22.293945 26.966615 27.898710
## [169] 21.985403 14.604257 24.616377 24.567456 20.999083 27.073617 19.965357
## [176] 22.386364 15.042869 24.228071 18.398226 25.591675 22.546109 20.330988
## [183] 17.184173 19.618419 30.912298 22.623604 22.591282 17.369739 23.739084
## [190] 12.041372 15.039795 20.967256 15.658622 10.453127 28.510725 24.210269
## [197] 18.778406 16.220578 22.570027 34.210175 20.023601 30.954602 17.461475
## [204] 23.006617 23.302854 24.402160 27.573920 17.312322 27.372910 28.322312
## [211] 15.936519 17.199302 23.400719 21.746494 20.716830 29.443360 24.969340
## [218] 21.857807 20.895832 25.548839 25.832802 20.079005 15.630526 25.575301
## [225] 23.352154 16.736863 20.141418 20.629805 28.496690 20.401052 27.039104
## [232] 19.966614 28.076093 19.287485 25.561402 22.636116 23.863499 20.057997
## [239] 16.480416 22.961516 20.926999 24.049213 25.043390 10.921850 28.442903
## [246] 14.823565 14.519495 19.309114 22.072821 31.688292 29.473621 24.646351
## [253] 21.867855 26.378876 15.254447 14.011952 18.430446 25.468975 21.161219
## [260] 20.693845 26.517351 29.565014 11.236538 29.874956 21.604477 27.294591
## [267] 27.144471 17.602811 19.522099 27.050000  9.685421 21.252592 25.706123
## [274] 23.630634 23.992080 19.113254 25.808309 23.175381 24.104574 17.717095
## [281] 15.190461 23.040291 16.350124 21.300762 23.607665 24.735612 21.863749
## [288] 18.353560 25.499930 17.397658 21.754736 25.725361 20.343268 23.864687
## [295] 18.545228 21.448315 19.786546 30.677402 14.277106 29.387729 21.020563
## [302] 23.902681 21.080201 23.038789 13.813836 21.005098 25.212392  9.529366
## [309] 24.321195 26.672058 20.287942 18.832601 26.058425 19.889219 27.397993
## [316] 15.452962 23.721634 19.403110 25.222455 17.812356 20.272684 22.857309
## [323] 19.784272 19.743778 16.924057 22.409925 13.794814 30.408331 24.230575
## [330] 14.544658 19.449720 21.927480 15.568451 13.807086 28.164909 29.785292
## [337] 19.941646 24.002288 25.285263 18.396597 21.969976 14.769292 18.130229
## [344] 22.872798 10.774067 33.056673 23.066892 19.928284 13.501184 20.376268
plot(z1)

w1<-length(z1)
w1
## [1] 350
x1<-(500:849)
x1
##   [1] 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517
##  [19] 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535
##  [37] 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553
##  [55] 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571
##  [73] 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589
##  [91] 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607
## [109] 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625
## [127] 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643
## [145] 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661
## [163] 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679
## [181] 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697
## [199] 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715
## [217] 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733
## [235] 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751
## [253] 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769
## [271] 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787
## [289] 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805
## [307] 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823
## [325] 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841
## [343] 842 843 844 845 846 847 848 849
plot(z1,x1)

hist(z1, main="Histograma de z1", col="lightblue")

density(z1)
## 
## Call:
##  density.default(x = z1)
## 
## Data: z1 (350 obs.); Bandwidth 'bw' = 1.433
## 
##        x                y            
##  Min.   : 4.012   Min.   :8.885e-06  
##  1st Qu.:13.605   1st Qu.:1.193e-03  
##  Median :23.199   Median :1.568e-02  
##  Mean   :23.199   Mean   :2.601e-02  
##  3rd Qu.:32.792   3rd Qu.:4.944e-02  
##  Max.   :42.385   Max.   :7.291e-02
plot(density(z1))

## Pedir lo de aca

Ejercicio 1 de algoritmos

Consigna: Las ultimas 3 cifras de mi DNI son 126, consigna crear una variable que tenga ese número

DNI=126

consigna: crear un vector que tenga todos los números desde el 1 hasta el 126

SECUENCIADNI<-(1:126)
SECUENCIADNI
##   [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18
##  [19]  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36
##  [37]  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54
##  [55]  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72
##  [73]  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90
##  [91]  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108
## [109] 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126

Ejercicio 2

Calcular la suma de todos los valores del vector SECUENCIADNI

TOTAL<-0
VALORFINAL<-length(SECUENCIADNI)
for (i in 1:VALORFINAL){
  TOTAL<-TOTAL+i }
TOTAL
## [1] 8001

##Ejercicio 3 ##Repetir el ejercicio anterior pero en Python

suma=0
for i in range (1,127): 
  # range llega hasta uno antes del final, por eso 127
  suma+=i # <--- Esta línea DEBE tener un espacio al principio
print(suma)
## 8001

##Ejercicio 4 ##Hacer lo mismo en Julia ## no funciona ## hacer las consignas del pdf en github del profe, en industrial

##HASTA ACÁ LLEGA LO HECHO EN CLASE

1.4 Generar un vector secuencia

# Método con for
A <- 0
start_for <- Sys.time()
for (i in 1:50000) { A[i] <- (i*2) }
end_for <- Sys.time()
tiempo_for <- end_for - start_for

# Método con seq() de R
start_seq <- Sys.time()
B <- seq(2, 100000, by = 2)
end_seq <- Sys.time()
tiempo_seq <- end_seq - start_seq

# Mostrar resultados
head(A)
## [1]  2  4  6  8 10 12
tail(A)
## [1]  99990  99992  99994  99996  99998 100000
head(B)
## [1]  2  4  6  8 10 12
tail(B)
## [1]  99990  99992  99994  99996  99998 100000
# Comparar tiempos
print(paste('Tiempo for:', tiempo_for))
## [1] "Tiempo for: 0.0139102935791016"
print(paste('Tiempo seq:', tiempo_seq))
## [1] "Tiempo seq: 0.00161170959472656"

1.5 Implementación de una serie Fibonachi o Fibonacci

fibonacci <- function(n) {
  fib <- c(0, 1)
  while (tail(fib, 1) < n) {
    len <- length(fib)
    fib <- c(fib, fib[len] + fib[len - 1])
  }
  return(fib)
}

# Generar hasta superar 1.000.000
resultado <- fibonacci(1000000)
print(resultado)
##  [1]       0       1       1       2       3       5       8      13      21
## [10]      34      55      89     144     233     377     610     987    1597
## [19]    2584    4181    6765   10946   17711   28657   46368   75025  121393
## [28]  196418  317811  514229  832040 1346269
print(paste('Iteraciones necesarias:', length(resultado)))
## [1] "Iteraciones necesarias: 32"
print(paste('Ultimo numero mayor a 1.000.000:', tail(resultado, 1)))
## [1] "Ultimo numero mayor a 1.000.000: 1346269"

1.7 Ordenación de un vector por método burbuja

# Cargamos la librería para medir performance
library(microbenchmark)

# 1. Creamos la muestra de tamaño 20.000 
x <- sample(1:100000, 20000)

# 2. Definimos la función de la burbuja
burbuja <- function(x) {
  n <- length(x)
  for (j in 1:(n - 1)) {
    for (i in 1:(n - j)) {
      if (x[i] > x[i + 1]) {
        temp <- x[i]
        x[i] <- x[i + 1]
        x[i + 1] <- temp
      }
    }
  }
  return(x)
}

# 3. Comparamos la performance
comparacion <- microbenchmark(
  Metodo_Burbuja = burbuja(x),
  Metodo_Sort_R = sort(x),
  times = 1
)

# 4. Mostramos el resultado
print(comparacion)
## Unit: milliseconds
##            expr          min           lq         mean       median
##  Metodo_Burbuja 20766.630780 20766.630780 20766.630780 20766.630780
##   Metodo_Sort_R     1.039481     1.039481     1.039481     1.039481
##            uq          max neval
##  20766.630780 20766.630780     1
##      1.039481     1.039481     1

1.8 La penitencia de Newton

# Metodo 1: suma con for
metodo_for <- function() {
  numeros <- 1:1e10
  suma <- 0
  for (i in numeros) {
    suma <- suma + i
  }
  return(suma)
}

# Metodo 2: formula matematica de Gauss
metodo_formula <- function() {
  n <- 1e10
  suma <- n * (n + 1) / 2
  return(suma)
}

# Medir tiempo metodo for (advertencia: puede tardar mucho)
# Para prueba rapida usar 1:1e6 en lugar de 1:1e10
tiempo_for <- system.time({
  resultado_for <- metodo_for()
})

# Medir tiempo metodo formula
tiempo_formula <- system.time({
  resultado_formula <- metodo_formula()
})

# Mostrar resultados
print(resultado_for)
## [1] 5e+19
print(resultado_formula)
## [1] 5e+19
# Mostrar tiempos
print(tiempo_for)
##    user  system elapsed 
## 177.985   0.236 179.351
print(tiempo_formula)
##    user  system elapsed 
##       0       0       0

El algoritmo Bubble Sort (Burbuja) tiene una complejidad computacional de O(n^2). Esto significa que si duplicamos la cantidad de datos, el tiempo de procesamiento se cuadruplica. Es un método “pesado” porque realiza múltiples pasadas e intercambios manuales.Por otro lado, la función sort() de R utiliza algoritmos avanzados (como Quicksort o Shellsort) con una complejidad de O elevado a la 2, además de estar implementada en lenguaje C, lo que la hace órdenes de magnitud más eficiente.

library(microbenchmark)
library(ggplot2)

# Implementación simple de bubble sort
bubble_sort <- function(x) {
  n <- length(x)
  for (i in 1:(n-1)) {
    for (j in 1:(n-i)) {
      if (x[j] > x[j+1]) {
        temp <- x[j]
        x[j] <- x[j+1]
        x[j+1] <- temp
      }
    }
  }
  return(x)
}
# Datos de prueba
set.seed(123)
vec <- sample(1:1000, 100)

# Benchmark
bench <- microbenchmark(
  bubble = bubble_sort(vec),
  sortR = sort(vec),
  times = 50
)

# Gráfico de violín
autoplot(bench)
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## ℹ The deprecated feature was likely used in the microbenchmark package.
##   Please report the issue at
##   <https://github.com/joshuaulrich/microbenchmark/issues/>.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

El K-means es un algoritmo de particionamiento de datos (Clustering) que agrupa observaciones en k grupos basándose en la distancia a un centroide. Es un proceso iterativo que: 1. Define k centros iniciales. 2. Asigna cada punto al centroide más cercano (distancia euclidiana). 3. Recalcula el centroide como el promedio de los puntos asignados.Este ciclo se repite hasta que las asignaciones no cambian o se alcanza un límite de iteraciones. Es ampliamente usado en ingeniería para segmentación de mercado, detección de anomalías y compresión de datos.

library(microbenchmark)
library(ggplot2)

set.seed(123)
data <- matrix(rnorm(1000), ncol=2)

bench_kmeans <- microbenchmark(
  kmeans2 = kmeans(data, centers=2),
  kmeans5 = kmeans(data, centers=5),
  times = 50
)

autoplot(bench_kmeans)