Está en la página 1de 45

Taller 2 de Programación parte II

Sergio Camilo Gomez Muñoz


Universidad Nacional de Colombia
Facultad de Ciencias
Estadı́stica

25 de octubre del 2020

1. La variable tiempo en el conjunto de datos ÇO2”, de la libreria (UsingR)”la


base de datos de CO2 se refiereneren a un experimento sobre la tolerancia
al frı́o de la especie herbácea Echinochloa crus-galli. Responda las siguien-
tes preguntas.

a)Realice un summary de los datos.


Respuesta
Despues de cargar la libreria en RStudio con el comando library(UsingR),
podemos trabajar a nuestra disposición la bas de datos de CO2. Ahora
bien, el summary sale simplemente con el comando ”summary”, veamos.
> summary(CO2)
Plant Type Treatment conc uptake
Qn1 : 7 Quebec :42 nonchilled:42 Min. : 95 Min. : 7.70
Qn2 : 7 Mississippi:42 chilled :42 1st Qu.: 175 1st Qu.:17.90
Qn3 : 7 Median : 350 Median :28.30
Qc1 : 7 Mean : 435 Mean :27.21
Qc3 : 7 3rd Qu.: 675 3rd Qu.:37.12
Qc2 : 7 Max. :1000 Max. :45.50
(Other):42

Como podemos ver, con respecto a las variables Plant,Type y Treatment


R solo nos muestra un analisis de frecuencias dado que son variables cua-
litativas, mientras que para las variables conc y uptake, el summary nos
da unas medidas de tendencia y posicionales como lo son , los cuartiles 1,
2 y 3, la media, el mı́nimo y el máximo...
Podemos observar, que R solo nos compila una parte de la informacion,
ya que si la recopilara toda seria una tabla muy extensa.
Para las variables cualitativas no hubo un resultado de frecuencias, sino

1
algunas medidas posicionales y de tendencia, como lo son , los cuartiles 1,
2 y 3, la media, el mı́nimo y el máximo.

b)Realice tablas de contingencia usando las variables ”Plant”, ”Type”,


”Treatment”. Rotule los nombres de las variables.
Respuesta
Primero usamos el comando attach(CO2) que nos sirve para acceder a
las variables de la base de datos por sus nombres. Luego para hacer las
tablas de contigencia, usare el comando table(Plant,Type,Treatment) que
nos realiza dos tablas de contingencia condicionales, la primera tabla de
contingencia es entre la variable Plant y Type dado que el la variable
Treatment toma el valor nochilled. La segunda tabla de contingencia es
igual mente de las variables Plant y Type pero en este caso es dado que
la variable Treatment toma el valor chilled.
> table(Plant,Type,Treatment)
, , Treatment = nonchilled

Type
Plant Quebec Mississippi
Qn1 7 0
Qn2 7 0
Qn3 7 0
Qc1 0 0
Qc3 0 0
Qc2 0 0
Mn3 0 7
Mn2 0 7
Mn1 0 7
Mc2 0 0
Mc3 0 0
Mc1 0 0

, , Treatment = chilled

Type
Plant Quebec Mississippi
Qn1 0 0
Qn2 0 0
Qn3 0 0
Qc1 7 0
Qc3 7 0
Qc2 7 0
Mn3 0 0
Mn2 0 0

2
Mn1 0 0
Mc2 0 7
Mc3 0 7
Mc1 0 7

Es importante recalcar que si los valores incertados en el código table() se


hubieran escrito en otro orden, habiramos obtenido otras tablas de contin-
gencia en donde la variable condicional no sea Treatment, sino mas bien
Type o Plant, y estas otras tablas tambien nos dan una perspectiva mas
amplia de los datos.

c)Realice un diagrama de boxplot y diagrama de puntos de los datos üse


la opción par(mfrow=c(, ))”. Use las dos (2) variables (çonc”, üptake”),
para realizar los gráficos de plot y boxplot.En los gráficos plot, rotule los
ejes e ingrese un comentario dentro del grafico. Ademas realice unbarplot
con las variables restantes.
Respuesta
Primero usamos la función par(mfrow=c(,)) que me permite agrupar va-
rias graficas en una misma imagen, en este caso lo hare para concatenar
el boxplot con el plot de cada variable cantitativa, usando el comando
mfrowc(1,2)), veamos.
par(mfrow=c(1,2))
boxplot(conc,col="red",ylab="Conc")
plot(Conc,col="red")

par(mfrow=c(1,2))
boxplot(uptake,col="blue",ylab="Uptake")
plot(uptake,col="blue")

y obtenemos los siguientes gráficos:


a) Gráfica 1

3
b) Gráfica 2

Ahora bien, para el barplot, procedere a usar el codigo par(mfrow=c(1,3))


que me permite adjuntar 3 gráficas en una misma imagen. asignare unos
valores a a, b, c y estos valores son tablas de contingencia hechas con las
tres variables de dos en dos. veamos el codigo.
> par(mfrow=c(1,3))
> a=table(Plant,Type)
> b=table(Plant,Treatment)
> c=table(Type,Treatment)
>
> barplot(a)
> barplot(b)
> barplot(c)
Con este codigo, obtendre el siguiente gráfico:

d)Realice la tabla anova usando la notación matricial.(Y=conc,X=uptake)

4
Para realizar la anova lo hare de dos metodos,el primero es con calculos
matriciales usando las propiedades de SCReg, SCRes y SCT y el segundo
usando directamente el comando que nos da RStudio de lm(y x), veamos.
Para calcular los datos de la tabla anova necesito calcular varias cosas
importantes, como la matriz de diseño, la matriz de proyección P x la
estimación de la variable dependiente Y y la media de Y , para empezar
asigo a la variable conc el valor y y a uptake el valor x luego defino la
matriz de diseño de la siguiente manera:
####matrix de dise~
no####
X=cbind(rep(1,84),x)

ya que esta matriz esta formada por un vector de unos concatenado con
el vector de obsevaciones de la variable explicativa.
Luego calculamos la matriz de proyección de la siguiente manera:

P x = X ∗ (X t X)− X t

y en RStudio procedi de la siguiente manera.


Px=X%*%solve(t(X)%*%X)%*%t(X)
La estimacion de Y se calcula con:

Ŷ = P xY

y finalmente el Y lo calculo formando un vector de tamaño 84 cuyas com-


ponentes son la media del vector Y repedita, en RStudio lo defino asi.
medY=rep(mean(y),84)
###Repetimos la media de y 84 veces###
Ya con todo lo previo, puedo proceder a calcular los datos de la tabla
anova, para empezar, calculare SCReg la cual esta dada por

84
X
SCReg = (ŷi − ȳ)2
i=1

Que en forma matricial es :

SCReg = (Ŷ − Ȳ )t (Ŷ − Ȳ )

si remplazamos con lo anteriormente obtenido obtenemos lo siguiente si


usamos RStudio:

5
> Yest=Px%*%y
> medY=rep(mean(y),84)
> t(Yest-medY)%*%(Yest-medY)
[,1]
[1,] 1710960

SCReg = 1710960

como se puede ver en el codigo a Ŷ le asigne el nombre ”Yest a Ȳ le 2

asigne el nombre ”medY”


Ahora procedo a calcular SCRes la cual esta dada por:

84
X
SCRes = (yi − ŷi )2
i=1

que en forma matricial esta dad por:

SCRes = (Y − Ŷ )t (Y − Ŷ )

y si esto se simplifica a un más se puede llegar a que es igual a :

SCRes = Y t (I − P x)Y

donde I es la matriz identidad de orden 84.


a I la calculamos con el siguiente comando:
> I=matrix(rep(0,84^2),nrow=84)
> diag(I)=rep(1,84)
primero la llenamos de ceros y luego colamos unos en su diagonal.
y el codigo para calcular SCRes es el siguiente:
> I=matrix(rep(0,84^2),nrow=84)
> diag(I)=rep(1,84)
>
> t(y)%*%(I-Px)%*%y
[,1]
[1,] 5557440

SCRes = 5557440

y con SCRes y SCReg podemos calcular SCT con:

6
SCT = SCRes + SCReg

En este caso
SCT = 7268400
y con esto podemos hacer la tabla anova. veamos:

Causas de variación G.L S.C C.M F


Regresión 1 1710960 1710960
Residuos 82 5557440 67773,6 25.24522
Total 83 7268400

Si la hacemos directamente con RStudio, obtenemos la siguiente:


> y=conc
> x=uptake

> Rgrsn=lm(y~x)
> anova(Rgrsn)
Analysis of Variance Table

Response: y
Df Sum Sq Mean Sq F value Pr(>F)
x 1 1710960 1710960 25.245 2.906e-06 ***
Residuals 82 5557440 67774
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Como podemos observar, vimos dos maneras de hacer la tabla anova y
llegar a los mismos resultados.
e) Usando la libreria ploty realice los graficos del punto 1-c
respuesta usando la libreria ploty se obtienen los siguientes gráficos

7
gráficos de barras

uptake

conc

8
Box plots

9
gráficos de puntos

El código para obtener los gráficos es el siguiente


#######e
#graficos en ploty
par(mfrow=c(1,2))
library(plotly)
#histogramas
par(mfrow=c(1,2))
his_uptake <- plot_ly(x = uptake, type = "histogram")
his_uptake

his_conc<- plot_ly(x = conc, type = "histogram")


his_conc

#bloxplot

10
library(plotly)
plot_uptake <- plot_ly(x = ~uptake, type = "box")
plot_uptake

plot_conc<- plot_ly(x = ~conc, type = "box")


plot_conc
#de puntos
Puntos_uptake <- plot_ly(data = iris, x = ~uptake,type = "scatter")
Puntos_uptake
Puntos_conc<- plot_ly(data = iris, x = ~conc,type = "scatter")
Puntos_conc

2. Para el conjunto de datos ”Medicare”,de la libreria ÜsingR”, relacionada


con la base de datos con 10000 observaciones y datos sobre la facturación
de los procedimientos en hospitales diferentes.
a) Ordene de mayor a menor las variables ”DRG.Definition”, ”Provi-
der.Id”
Respuesta
Usare una libreria llamada ”dplyr”, la cual me permite usar una función
especial, que sirve para ordenar las columnas de un data.frame. Dicha
función es la de arrange(), que nos facilita la tarea de ordenarlo, veamos.
> library(dplyr)
> arrange(Medicare,DRG.Definition,Provider.Id)
DRG.Definition Provider.Id
1 039 - EXTRACRANIAL PROCEDURES W/O CC/MCC 40004
2 039 - EXTRACRANIAL PROCEDURES W/O CC/MCC 50058
3 039 - EXTRACRANIAL PROCEDURES W/O CC/MCC 50351
4 039 - EXTRACRANIAL PROCEDURES W/O CC/MCC 50424
5 039 - EXTRACRANIAL PROCEDURES W/O CC/MCC 80007
6 039 - EXTRACRANIAL PROCEDURES W/O CC/MCC 90001
7 039 - EXTRACRANIAL PROCEDURES W/O CC/MCC 100012

Dado la magnitud de los datos solo mostrare los primeros, como podemos
ver primero ordena segun la primera variable que ingresamos, en este caso
DRG.Definition y luego en base a esa ordenacion, ordenara la variabla
Provider.Id.
Ahora bien, si ingresamos las variables en distinto orden, la ordenación sera
similiar a la anterior, sino que en vez de organizar primero DRG.Definition,
organiza es la variable Provider.Id antes, veamos.
> arrange(Medicare,Provider.Id,DRG.Definition)
DRG.Definition Provider.Id

11
1 178 - RESPIRATORY INFECTIONS & INFLAMMATIONS W CC 10001
2 190 - CHRONIC OBSTRUCTIVE PULMONARY DISEASE W MCC 10001
3 202 - BRONCHITIS & ASTHMA W CC/MCC 10001
4 207 - RESPIRATORY SYSTEM DIAGNOSIS W VENTILATOR SUPPORT 96+ HOURS 10001
5 208 - RESPIRATORY SYSTEM DIAGNOSIS W VENTILATOR SUPPORT <96 HOURS 10001
6 286 - CIRCULATORY DISORDERS EXCEPT AMI, W CARD CATH W MCC 10001
7 690 - KIDNEY & URINARY TRACT INFECTIONS W/O MCC 10001
8 192 - CHRONIC OBSTRUCTIVE PULMONARY DISEASE W/O CC/MCC 10005
9 309 - CARDIAC ARRHYTHMIA & CONDUCTION DISORDERS W CC 10005

Como dije anterior mente, ahora ordena primero la variable Provider.Id y


en base a esa ordenacion ordena DRG.Dfeinition.
b)Realice los gráficos plot, y boxplot, de las variables ”Provider.Id”, (”Y=Average.Covered.Charges”,X=.A
, ”Provider.Zip.Code”,”Total.Discharges”, üse la opción par(mfrow=c( ,
))”. En los gráficos plot, rotule los ejes e ingrese un comentario dentro del
gráfico.
Respuesta
Para realizar los plot, boxplot y regresión, use el siguiente código en el
que uso la funcion col= para los colores, ylab para nombrar al eje y y xlab
para nombrar el eje x.
par(mfrow=c(1,2))
boxplot(Provider.Id,col="yellow")
plot(Provider.Id,col="yellow")

par(mfrow=c(1,2))
boxplot(Average.Covered.Charges,col="green",ylab="Average.Covered.Charges")
plot(Average.Covered.Charges,col="green")

par(mfrow=c(1,2))
boxplot(Average.Total.Payments,col="gray",ylab="Average.Total.Payments")
plot(Average.Total.Payments,col="gray")

par(mfrow=c(1,2))
boxplot(Provider.Zip.Code,col="orange1" ,ylab="Provider.Zip.Code")
plot(Provider.Zip.Code,col="orange1")

par(mfrow=c(1,2))
boxplot(Total.Discharges,col="violetred" ,ylab="Total.Discharges")
plot(Total.Discharges,col="violetred" )

12
P=lm(Average.Covered.Charges~Average.Total.Payments)
plot(P)

y obtengo los siguientes gráficos.

13
14
c) Realice los gráficos barplot de las variables ”Hospital.Referral.Region.Description”,”Provider.State”,
üse la opción par(mfrow=c( , ))”.
Respuesta
usamos el codigo table, para relizar una tabla de con cada una de las
variables y luego a esa tabla le aplicamos el comando barplot. veamos...
####C
par(mfrow=c(1,2))
a=table(Hospital.Referral.Region.Description)
b=table(Provider.State)
Provider.State
barplot(a,main="barplot a",xlab="Hospital.Referral.Region.Description")
barplot(b,main="barplot b",xlab="Provider.State")

con este código, obtenedriamos el siguiente gráfico.

15
d) Usando la libreria plotly realice los gráficos anteriores.
e) Realice la tabla anova usando la notación matricial. (Y=.Average.Covered.Charges”),
(X=.Average.Total.Payments”)
Respuesta
Para hacer la tabla anova primero calculare la suma de cuadrados de la
regresión usando que:

10000
X
SCReg = (ŷi − ȳ)2
i=1

Que en forma matricial es :

SCReg = (Ŷ − Ȳ )t (Ŷ − Ȳ )

Si se calcula la matriz de diseño y a Ŷ como se muestra en el punto 1, y


posteriormente se hacen los calculos con el siguiente codigo, obtendriamos

SCReg

16
####matrix de dise~
no####

X=cbind(rep(1,10000),x)
Px=X%*%solve(t(X)%*%X)%*%t(X)
> ###SCReg############################
> Yest=Px%*%y
> medY=rep(mean(y),10000)
> t(Yest-medY)%*%(Yest-medY)
[,1]
[1,] 7.721796e+12

SCReg = 7,721796e + 12

Ahora se procede a calcular SCRes el cual esta dado por:

10000
X
SCRes = (yi − ŷi )2
i=1

cuya forma matricial es :

SCRes = (Y − Ŷ )t (Y − Ŷ )

y si esto se simplifica a un más se puede llegar a que es igual a :

SCRes = Y t (I − P x)Y

donde I es la matriz identidad de orden 10000.


el calculo se hace con el siguiente comando, si ya se ha definido a X como
la matriz de diseño:
> Px=X%*%solve(t(X)%*%X)%*%t(X)
> I=matrix(rep(0,10000^2),nrow=10000)
> diag(I)=rep(1,10000)
>
> t(y)%*%(I-Px)%*%y
[,1]
[1,] 4.99994e+12

SCRes = 4,99994e + 12

y con SCRes y SCReg podemos calcular SCT con:

17
SCT = SCRes + SCReg

En este caso
SCT = 1,272174e + 13
y con esto se puede hacer la tabla anova.
Tabla anova.

Causas de variación G.L S.C C.M F


Regresión 1 7.7218*(1012 ) 7.7218*(1012 )
Residuos 9998 4.9999*(1012 ) 5.0009*(108 ) 2.2*(10−16 )
Total 9999 12.72174*(1013 )

Si se verifican los datos usando la función summary() , se obtendrian los


mismos resultados.
> y=Average.Covered.Charges
> x=Average.Total.Payments
> R=lm(y~x)
> anova(R)
Analysis of Variance Table

Response: y
Df Sum Sq Mean Sq F value Pr(>F)
x 1 7.7218e+12 7.7218e+12 15441 < 2.2e-16 ***
Residuals 9998 4.9999e+12 5.0009e+08
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
3. El conjunto de datos .alltime.movies”de la libreria ÜsingR”Las mejores
peliculas de todos los tiempos. Las 79 peliculas más importantes de todos
los tiempos a partir de 2003 por ingresos brutos nacionales (EE. UU.)
1) Use names() y seq() para agregar los nombres de año al vector de datos.
Respuesta
4. El conjunto de datos Ïndometh”de la libreria ÜsingR”. La base de datos
de Indometh sobre la farmacocinética de la indometacina . De las variables
compare la mediana y la media. Explique la diferencia.
Respuesta
Para calcular la media y la mediana de las variables ”time çoncüsamos el
2

comando de mean y median respectivamente. al calcularlas con RStudio


obtenemos lo siguiente:

18
> mean(time)
[1] 2.886364
> median(time)
[1] 2
>
> mean(conc)
[1] 0.5918182
> median(conc)
[1] 0.34

Como podemos ver, en ambas variables las medidas calculadas difieren,


siendo en ambos casos la media mayor que la mediana, estas situaciones
ocurren porque existe la presencia de valores atipicos en relacion a la
muestra a la que pertenecen, si nos fijamos en la dimensionalidad y escala
de los datos, podemos ver que la diferencia de medias en la variable time es
mas despreciable ya que esta tiene un rango mucho mas grande en donde
la variable toma valores que difieren en varias unidades enteras, mientras
que la variable conc al tener una escala mas en decimales, su diferencia en
las medidas calculadas pueden ser mas importante y significativa.
si usamos los comandos arrange(Indometh,time) y arrange(Indometh,conc)
podemos notar que en ambas variables hay valores grandes, sin embargo
estos parecen estar mas atipicos en la variable conc, pues el max de conc
es 2.72 y este numero es bastante grande en relacion con los otros que
toma la variable.
1)Realice un boxplot y plot de las variables x=”time y=çonc”, üse la
2

opción par(mfrow=c( , ))”. En los gra


cos plot, rotule los ejes e ingrese un comentario dentro del gráfico.
Respuesta
Para realizar los graficos se usa las funciones plot() y boxplot(), ademas
para nombrar los ejes usamos xlab y ylab, tambien se usa col para cambiar
el color. veamos
par(mfrow=c(1,2))
boxplot(time,col="yellow",ylab="time")
plot(time,col="yellow",xlab="#observaciones")

par(mfrow=c(1,2))
boxplot(conc,col="green",ylab="conc")
plot(conc,col="green",xlab="#observaciones")

19
como podemos ver, la grafica nos confirma que los valores atipicos estan
en la variable conc, mas no en la variable time.

20
2) Usando la libreria plotly realice los gráficos.
Respuesta

Box plot y gráfico de puntos de la variable time

21
Box plot y gráfico de puntos de la variable conc

El código es el siguiente
#graficos en ploty

library(plotly)

#bloxplot
library(plotly)
plot_time <- plot_ly(x = ~time, type = "box")
plot_time

plot_conc<- plot_ly(x = ~conc, type = "box")


plot_conc
#de puntos
Puntos_time <- plot_ly(data = iris, x = ~time,type = "scatter")
Puntos_time
Puntos_conc<- plot_ly(data = iris, x = ~conc,type = "scatter")

22
Puntos_conc
5. Para los conjuntos de datos ”Loblolly”, de la libreria UsingR, realice his-
togramas. Halle la media, la mediana y la desviación estandar.
Respuesta
Para hallar la media, la mediana y la desviación estándar, usamos los
comandos mean(),median() y sd() respectivamente.
Acontinuación el código:

> mean(height)
[1] 32.3644
> median(height)
[1] 34
> sd(height)
[1] 20.6736
>
> mean(age)
[1] 13
> median(age)
[1] 12.5
> sd(age)
[1] 7.899977

como se puede ver, en ambas variables tanto la media como la mediana


difieren bastante poco, lo cual es un indicador de que probablemente la
verdadera media de la población este muy proxima a esos valores.
la desviación estandar parece bastante amplia en ambos casos y eso puede
indicar mucha variabilidad entre los mismos, lo cual es algo negativo ya
que esto es un indicador de poca homogeneidad entre los datos.
si calculo en coeficiente de variación de la variable heigth obtengo un valor
de 0.638 lo cual es bastante alto y confima lo anteriormente dicho con la
homogeneidad, analogamente al revisar el coeficiente de variación de la
variable age obtengo un resultado de 0.60 y al igual que el otro coeficiente,
este es muy alto y por ende en esta variable tambien parece haber poca
homogeneidad entre los datos, en los siguientes literales se trabajara el
boxplot para confirmarlo.
a)Realice los gráficos histograma, boxplot y diagrama de puntos de los
datos üse la opción par(mfrow=c( , ))”.En los gráficos plot, rotule los ejes
e ingrese un comentario dentro del gráfico.
Respuesta

23
primero los histogramas, el código es el siguiente.
> hist(height)
> hist(age)

y el Programa nos da estos gráficos.

24
Ahora las otras graficas.El plot y el boxplot de cada variable las adjuntare
en una misma imagen con la función par(mfrow=c()) , el código es el
siguiente.
par(mfrow=c(1,2))
boxplot(height,col="orange1" ,ylab="height")
plot(height,col="orange1",xlab="#observaciones")

par(mfrow=c(1,2))
boxplot(age,col="violetred" ,ylab="age")
plot(age,col="violetred" ,xlab="#observaciones")

y al compilar, RStudio me da las siguientes gráficas.

25
como podemos ver, se confirma que hay una variabilidad considerable en
los datos, pues la altura de las cajas en el boxplot, es una indicadora de
buena variabilidad entre los datos centrales de la muestra, ademas no hay
presencia de datos atipicos.
b) Usando la librerı́a plotly realice los gráficos anteriores.
Respuesta
Histograma-height

26
Histograma-age

Boxplot-height

27
Boxplot-age

Diagrama de puntos age

Diagrama de puntos height

El comando para usar la libreria ploty y hacer las graficas el siguiente:


#######b
#graficos en ploty
par(mfrow=c(1,2))
library(plotly)
#histogramas
par(mfrow=c(1,2))
his_height <- plot_ly(x = height, type = "histogram")
his_height

his_age <- plot_ly(x = age, type = "histogram")


his_age

28
#bloxplot
library(plotly)
plot_height <- plot_ly(x = ~height, type = "box")
plot_height

plot_age<- plot_ly(x = ~age, type = "box")


plot_age
#de puntos
Puntos_age <- plot_ly(data = iris, x = ~age,type = "scatter")
Puntos_age
Puntos_height <- plot_ly(data = iris, x = ~height,type = "scatter")
Puntos_height

6. Genere una matriz de 6000 datos en 6 columnas,usando las distribuciones,


Uniforme normal, t-student(12 df), chicuadrada (12 df).
Respuesta para generar los datos usamos la funcion runif(6000) para la
uniforme, rnorm(6000) para los de la normal, rchisq(6000,df=12) para los
de la chi cuadrado y rt(6000,df=12) para la t-student, veamos.
##Distribuciones###

uni=runif(6000)
normal=rnorm(6000)
Chi=rchisq(6000,df=12)
Tstudent=rt(6000,df=12)

como se puede ver, el r previo al nombre de la distribucion hace referencia


a ramdom y el valor que se ingresa es la cantidad de datos aleatorios a
generar.
a) üse la opción par(mfrow=c( ,))”,con cada distribución. Realice histo-
gramas, con la linea de densidad.
Respuesta
para realizar el histograma usamos el comando hist(,freq=F) en donde la
primera entrada son los datos aleatorios generados. y para que la curva
quede sobrepuesta en la gráfica usamos el comando curve(,add=T,col=”x”)
en donde la primera entrada es una distribución con sus respectivos pa-
rametros, la segunta entrada add sirve para super poner la curva sobre el
histograma y la tercera la use para agregarle color, veamos el código.
####a
par(mfrow=c(1,4))

hist(uni,freq=F)

29
curve(dunif(x),add=T,col="green")

hist(normal,freq=F)
curve(dnorm(x),add=T,col="tan4")

hist(Chi,freq=F)
curve(dchisq(x,df=12),add=T,col="red")

hist(Tstudent,freq=F)
curve(dt(x,df=12),add=T,col="blue")

Este codigo genera las siguientes gráficas:

b) Realice plot, üse la opción par(mfrow=c( , ))”,con cada distribución.


Respuesta Usando par(mfrow=c(1,4)) y plot() con cada una de las va-
riables, obtenemos las graficas el código es:
####B####
par(mfrow=c(1,4))
plot(uni)
plot(normal)
plot(Chi)
plot(Tstudent)
. RStudio nos genera el siguiente gráfico:

30
c) Usar la libreria plotly para los gráficos anteriores.
Respuesta

Graficas de barras

Uniforme

31
Normal

Chi Cuadrado

32
T-Student

Graficas de puntos

33
7. El conjunto de datos ”diamonds”, ÜsingRÜn conjunto de datos que con-
tiene los precios y otros atributos de casi 54.000 diamantes.
a) Realice los summary de las variables.
Respuesta Al hacerle el summary a la base de datos diamonds, RStudio
nos da el siguiente resultado
>
> summary(diamonds)
carat cut color clarity depth
Min. :0.2000 Fair : 1610 D: 6775 SI1 :13065 Min. :43.00
1st Qu.:0.4000 Good : 4906 E: 9797 VS2 :12258 1st Qu.:61.00
Median :0.7000 Very Good:12082 F: 9542 SI2 : 9194 Median :61.80
Mean :0.7979 Premium :13791 G:11292 VS1 : 8171 Mean :61.75
3rd Qu.:1.0400 Ideal :21551 H: 8304 VVS2 : 5066 3rd Qu.:62.50
Max. :5.0100 I: 5422 VVS1 : 3655 Max. :79.00
J: 2808 (Other): 2531
table price x y z
Min. :43.00 Min. : 326 Min. : 0.000 Min. : 0.000 Min. : 0.000
1st Qu.:56.00 1st Qu.: 950 1st Qu.: 4.710 1st Qu.: 4.720 1st Qu.: 2.910

34
Median :57.00 Median : 2401 Median : 5.700 Median : 5.710 Median : 3.530
Mean :57.46 Mean : 3933 Mean : 5.731 Mean : 5.735 Mean : 3.539
3rd Qu.:59.00 3rd Qu.: 5324 3rd Qu.: 6.540 3rd Qu.: 6.540 3rd Qu.: 4.040
Max. :95.00 Max. :18823 Max. :10.740 Max. :58.900 Max. :31.800
Algo destacable del summary es que hay tres variables cualitativas, las
cuales son cut,color y clarity, el resto son cuantitativas, esto hay que te-
nerlo presente para las tablas de contingencia del siguiente literal. Tambien
tenemos a disposicion las medidas posicionales de la muestra en las varia-
bles cuantitativas, estas medidas son mı́nimo, cuartil 1, ,cuartil 2,cuartil
3, media y máximo.
b) realice tablas de contingencia, rotule las filas y las columnas.
Respuesta Para realizar las tablas de contingencia usamos el comando
table(,) cuyas entradas seran un par de variables, como tengo 3 variables,
procedere a hacer tres tablas de contingencia dos a dos para poderlas
considerar a las tres, veamos el codigo.
> table(cut,color)
color
cut D E F G H I J
Fair 163 224 312 314 303 175 119
Good 662 933 909 871 702 522 307
Very Good 1513 2400 2164 2299 1824 1204 678
Premium 1603 2337 2331 2924 2360 1428 808
Ideal 2834 3903 3826 4884 3115 2093 896
> table(cut,clarity)
clarity
cut I1 SI2 SI1 VS2 VS1 VVS2 VVS1 IF
Fair 210 466 408 261 170 69 17 9
Good 96 1081 1560 978 648 286 186 71
Very Good 84 2100 3240 2591 1775 1235 789 268
Premium 205 2949 3575 3357 1989 870 616 230
Ideal 146 2598 4282 5071 3589 2606 2047 1212
> table(color,clarity)
clarity
color I1 SI2 SI1 VS2 VS1 VVS2 VVS1 IF
D 42 1370 2083 1697 705 553 252 73
E 102 1713 2426 2470 1281 991 656 158
F 143 1609 2131 2201 1364 975 734 385
G 150 1548 1976 2347 2148 1443 999 681
H 162 1563 2275 1643 1169 608 585 299
I 92 912 1424 1169 962 365 355 143
J 50 479 750 731 542 131 74 51
c) la variable precio registra el precio en dólares de Singapur y la variable
quilate(carat) registra el tamaño del diamante. REalice un diagrama de

35
dispersion de quilates versus precio. Use pch=5 para graficar con diaman-
tes.Agregue la linea de regresion y prediga la cantidad que costaria un
anillo de diamantes de un tercio de quilate.
Respuesta Para realizar un diagrama de disperción entre ambas varia-
bles, basta con usar el comando plot e introducir las dos variables junto
con pch=5 y para poner la linea de regresión usamos el comando abline() y
en la entrada introducimos una regresion entre price y cara con lm, aparte
agregamos un color. veamos el código
plot(carat,price,pch=5)
abline(reg=lm(price ~ carat),col="yellow2")

Viendo el gráfico, al parecer se evidencia una buena asociación directa


entre el la cantidad de quitales y el precio de los diamantes.
para hacer una estimacion necesito saber el intercepto y la pendiente del
modelo, si realizamos un summary a la regrecion hecha entre ambas va-
riables obtendriamos dichos coeficientes.
> y=price
> x=carat
> reg=lm(y~x)
> summary(reg)

Call:
lm(formula = y ~ x)

Residuals:
Min 1Q Median 3Q Max
-18585.3 -804.8 -18.9 537.4 12731.7

Coefficients:
Estimate Std. Error t value Pr(>|t|)

36
(Intercept) -2256.36 13.06 -172.8 <2e-16 ***
x 7756.43 14.07 551.4 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1549 on 53938 degrees of freedom


Multiple R-squared: 0.8493,Adjusted R-squared: 0.8493
F-statistic: 3.041e+05 on 1 and 53938 DF, p-value: < 2.2e-16

el modelo seria

ŷ = −2256,36 + 7756,43X + e

si x= 13 es decir si hay un tercio de quilate, entonces se espera un precio


de 329.11 , realmente el modelo es bueno, pues no solo el valor-p de cada
coeficiente es muy pequeño sino que ademas el R2 nos dice que en el
modelo explica aproximadamente el 85 % de la variablidad de y, es decir
del precio.
d) Realice la tabla anova, usando la notación matricial.
Respuesta
para realizar la tabla anova uso el comando de RStudio de anova(), en
donde la entrada es una linea de regresión. Al hacerlo obtengo una ta-
bla bastante completa con la que solo basta interpretar su información,
veamos.
> reg=lm(price ~ carat)
> anova(reg)
Analysis of Variance Table

Response: price
Df Sum Sq Mean Sq F value Pr(>F)
carat 1 7.2913e+11 7.2913e+11 304051 < 2.2e-16 ***
Residuals 53938 1.2935e+11 2.3980e+06
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘
teniendo la SCReg, SCRes y los grados de libertad, ya se pueden deducir
todos los demas valores que conforman la tabla anova y organizarlos de
una forma mas clara.

Causas de variación G.L S.C C.M F


Regresión 1 7.2913*(1011 ) 7.2913*(1011 )
Residuos 53938 1.2935*(1011 ) 2.3980*(106 ) 2.2*(10−16 )
Total 53939 8.5848*(1011 ) 15915756.69

37
e) Realice los gráficos histograma, boxplot,diagrama de puntos de los da-
tos,barplot üse la opción par(mfrow=c( , ))”. Use dos (2) variables para
realizar los gráficos de plot.
Respuesta Usare las variables x e y de la base de datos para realizar los
graficos.

las graficas muestran la presencia de valores atipicos, tanto en la variable


y como x, y ademas los valores atipicos en y parecen aun mas serios ya
que parecen muy distantes de la mayoria de los otros datos centrales de
la muestra .
* Ahora procedo con los gráficos de puntos de las variables X y Y que hay
en la base de datos.

38
Tambien se puede hacer un cambio en la dimensionalidad de los ejes,
para tener una perspectiva del comportamiento de las variables. como tal,
cambiare la dimension de los ejes en la dispersión tanto de x como de
y, pues si descartamos los valores atipicos de la dispersión, podremos ver
cierta similitud entre las variables. En los siguientes gráficos esto quedara
en evidencia:

hay un comportamimento bastante semejante en amabas variables si se


descartan los valores atipicos y esto es facil de ver con RStudio, el codigo

39
de la gráfica anterior es el siguiente:

par(mfrow=c(1,2))
plot(x,xlab=" # de observaciones",main="Disperción x",ylim=c(3,11))
plot(y,xlab=" # de observaciones",main="Disperción y",ylim=c(0,15))

ylim=c(), nos ayuda a cambiar la dimensionalidad de los ejes, xlab sirve


para nombrar al eje x y main, sirve para ponerle titulo al gráfico.
*Ahora el barplot. Primero se crea una tabla con cada una de las dos
variables y se les asigna un nombre, yo use a y b, luego con el comando
barplot() obtendriamos el barplot de cada una.
par(mfrow=c(1,2))
a=table(x)
barplot(a,main="barplot x",ylab="frecuencias",xlab="variable x")

b=table(y)
barplot(b,main="barplot y",ylab="frecuencias",xlab="variable y")

8.
9. Utilice el archivo agsrs.xls que fue compartido en Google Classroom. Lea
este archivo en R como un archivo .csv. Este archivo corresponde a una
muestra aleatoria simple de 300 condados del Censo Agrı́cola de los Esta-
dos Unidos. Intente suponer a que corresponde cada una de las variables.
Calcule la matriz de correlación de todas las variables cuantitativas in-
cluidas en este archivo. A través de una regresión lineal simple intente
pronosticar el número de acres sembrados en 1992 en función de los acres
sembrados en 1982. Para un condado
cticio de 100,000 acres en 1982 cuanto se pronostica tendra en acres pa-

40
ra 1992? A través del paquete sqldf obtenga la base de condados con un
número de ncas grandes mayor a 40 en 1982. Repita la función de correla-
ción para esta base reducida ası́ como responda de nuevo a la pregunta de
cuanto se pronostica el numero de acres en 1992 para un condado cticio
de 250,000 acres en 1982.
Respuesta
para leer el archivo a RStudio, hay que abrir el programa, ir a file, import
Dataset y luego de en From excel e import. Con eso ya se puede proceder
a analizar.
Se usa attach() para poder emplear las variables del data frame, luego con
head(agsrs) se podra tener un bosquejo de los datos para poder ver las
variables y sus tipos:
> head(agsrs)
# A tibble: 6 x 14
county state acres92 acres87 acres82 farms92 farms87 farms82 largef92 largef87 largef82
<chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 COFFE~ AL 175209 179311 194509 760 842 944 29 28
2 COLBE~ AL 138135 145104 161360 488 563 686 37 41
3 LAMAR~ AL 56102 59861 72334 299 362 447 4 4
4 MAREN~ AL 199117 220526 231207 434 471 622 48 66
5 MARIO~ AL 89228 105586 113618 566 658 748 7 9
6 TUSCA~ AL 96194 120542 134616 436 521 650 20 17
# ... with 3 more variables: smallf92 <dbl>, smallf87 <dbl>, smallf82 <dbl>
como se puede ver, hay dos variables cualitativas y 9 cuantitativas.
La variable contry sirve para distinguir a los individuos dependiendo de la
categoria al a que pertenezcan, es una variable que funciona casi como un
nombre. La variable state, nos habla del estado de EU en que se encuen-
tra el individuo observado de la muestra. Las variables acres82,acres87 y
acres92 son las hectareas que registra cada observacion en los años 1982,
1987 y 1992 respectivamente.
Las variables farms82,farms87 y farms92 nos dice el numero de granjas que
registra cada observacion en los años 1982, 1987 y 1992 respectivamente.
las variables largef82,largef87,largef92,smallf82,smallf87,smallf92, nos ha-
blan de cuantas fincas habian grandes o pequeñas por año.
Para calcular la matriz de correlacion, en mi desarrollo, se procedera a
extraer las varibles cuantitativas de la base de datos y concatenarlas en
una matriz a la cual se le aplicara la funcion cor(), esta funcion da como
resultado la matriz de correlación de las variables.
x=cbind(acres82,acres87,acres92,farms82,farms87,farms92,largef82,largef87,largef92,smal
> cor(x)
acres82 acres87 acres92 farms82 farms87 farms92 largef82 largef

41
acres82 1.00000000 0.99729828 0.99242608 0.02519097 0.06645005 0.07326679 0.73038
acres87 0.99729828 1.00000000 0.99580596 0.01794148 0.06174832 0.06784329 0.73648
acres92 0.99242608 0.99580596 1.00000000 0.01475093 0.05964677 0.06781408 0.74344
farms82 0.02519097 0.01794148 0.01475093 1.00000000 0.98899906 0.97853224 -0.02083
farms87 0.06645005 0.06174832 0.05964677 0.98899906 1.00000000 0.99331729 0.02357
farms92 0.07326679 0.06784329 0.06781408 0.97853224 0.99331729 1.00000000 0.02388
largef82 0.73038071 0.73648863 0.74344431 -0.02083948 0.02357243 0.02388612 1.00000
largef87 0.73559496 0.74388997 0.75043244 0.01170729 0.05659190 0.05394729 0.99389
largef92 0.73472042 0.74193116 0.75060225 0.04418911 0.08743336 0.08284760 0.98598
smallf82 -0.04948892 -0.05726054 -0.05998898 0.66206158 0.66482784 0.67162551 -0.12622
smallf87 -0.00654048 -0.01517402 -0.01721513 0.63770620 0.66128558 0.67015929 -0.09460
smallf92 -0.03176990 -0.04039094 -0.04244694 0.62018743 0.64451336 0.66363423 -0.12125
>
a pesar de que al usar la función verbatim, la matriz del codigo de RStudio
no quede perfectamente alineada, el programa si muestra claramente la
matriz de correlación, por ejemplo la diagonal es de unos, es simetrica y
sus escalares oscilan entre 0 y 1.
*A través de una regresión lineal simple intente pronosticar el
número de acres sembrados en 1992 en función de los acres sem-
brados en 1982.
Respuesta
Para hacer el modelo se usara la forma matricial.Se debe considerar a la
matriz de diseño formada por un vector de unos de tamaño 300 conca-
tenado con el vector de acres 82, luego se debe usar el hecho de que la
estimacion de el vector β cuyas componentes escalares son el intercepto y
el la pendiente del modelo,estan dados por :
 
β1
B = (X t X)− X t Y =
β2

donde Y es el vector de observaciones de la variable acres 82.


el siguiente codigo ilustra el proceso de realizacion de la matriz de diseño,
e usaron comandos como el de rep, para crear la matriz de diseño con el
vector de unos. y se hacen calculos matriciales como el producto, la inversa
y la transpuesta.
> ###Regresión
> ###matriz de dise~
no#
> y=acres92
> x=acres82
> X=cbind(rep(1,300),x)
>
> ###betas

42
>
> Beta= solve(t(X)%*%X)%*%t(X)%*%y
> Beta
[,1]
-10883.131737
x 1.014317
el modelo se puede confirmar tambien usando el comando lm para hacer
la regresion entre las variables y realizando el summary pues alli veremos
tambien estos valores que determian el modelo.
contenidos...
el modelo es el siguiente:

yi = −10883,131737 + 1,014317xi

donde y es acres92 y x acres82


Este modelo sirve para pronosticar el numero de acres en 1992 como fun-
cion de acres en 1982.
Para un condado
ficticio de 100,000 acres en 1982 cuanto se pronostica 3 tendra
en acres para 1992?
Respuesta Para un condado ficticio de 100,000 acres en 1982 se pronos-
tica unos 90548 en 1992 .

−10883,131737 + 1,014317(100,000) ≈ 90548

A través del paquete sqldf obtenga la base de condados con un


número de fincas grandes mayor a 40 en 1982
Respuesta.
Primero se inicia la libreria sqldf, luego para obtener la base de condados
con un numero de fincas grandes mayor a 40 en 1982 usamos el comando
sqldf() y en su entrada ingresamos ”selec (todas la variables) from agsrs
where largef82¿=40”.

library(sqldf)

A=sqldf("select acres82,acres87,acres92,farms82,farms87,farms92,largef82,largef87,large
A

43
Repita la función de correlación para esta base reducida ası́ co-
mo responda de nuevo a la pregunta de cuanto se pronostica el
numero de acres en 1992 para un condado cticio de 250,000 acres
en 1982.
Matriz de correlacion
cor(A)
acres82 acres87 acres92 farms82 farms87 farms92 largef82 largef8
acres82 1.0000000 0.9960496 0.9900799 -0.27061038 -0.23677110 -0.22765564 0.586578
acres87 0.9960496 1.0000000 0.9946839 -0.27246165 -0.23698982 -0.22992612 0.595590
acres92 0.9900799 0.9946839 1.0000000 -0.27734006 -0.24015509 -0.22985974 0.609522
farms82 -0.2706104 -0.2724617 -0.2773401 1.00000000 0.99108024 0.97413242 -0.161644
farms87 -0.2367711 -0.2369898 -0.2401551 0.99108024 1.00000000 0.99115566 -0.124786
farms92 -0.2276556 -0.2299261 -0.2298597 0.97413242 0.99115566 1.00000000 -0.133172
largef82 0.5865788 0.5955904 0.6095229 -0.16164482 -0.12478638 -0.13317241 1.000000
largef87 0.5923395 0.6039056 0.6163158 -0.11863889 -0.08201982 -0.09677654 0.991548
largef92 0.5795597 0.5895768 0.6052979 -0.07942343 -0.04563183 -0.06317173 0.980879
smallf82 -0.1652891 -0.1685325 -0.1769131 0.64794395 0.68078029 0.70440059 -0.164026
smallf87 -0.1500537 -0.1559749 -0.1634602 0.63642906 0.67409563 0.70300503 -0.168190
smallf92 -0.1624047 -0.1680221 -0.1752266 0.61466131 0.65425535 0.68985552 -0.181944
largef92 smallf82 smallf87 smallf92
acres82 0.57955970 -0.1652891 -0.1500537 -0.1624047
acres87 0.58957685 -0.1685325 -0.1559749 -0.1680221
acres92 0.60529795 -0.1769131 -0.1634602 -0.1752266
farms82 -0.07942343 0.6479439 0.6364291 0.6146613
farms87 -0.04563183 0.6807803 0.6740956 0.6542554
farms92 -0.06317173 0.7044006 0.7030050 0.6898555
largef82 0.98087933 -0.1640265 -0.1681907 -0.1819447
largef87 0.99175564 -0.1486903 -0.1550445 -0.1715143
largef92 1.00000000 -0.1494649 -0.1560174 -0.1731470
smallf82 -0.14946491 1.0000000 0.9918495 0.9842609
smallf87 -0.15601737 0.9918495 1.0000000 0.9905071
smallf92 -0.17314703 0.9842609 0.9905071 1.0000000
para responder la pregunta sobre el pronostico, se debe realizar un nuevo
modelo con estas condiciones. A la base de datos reducidas llamda A,
le extraemos el primer y segundo vector para poderlos trabjar, ya que
estos vectores son las variables acres82 y acres92 respectivamente, luego
les asignamos el nombre x y y para trabajarlas mas facilmente y hacerles
un modelo de regresión con el comando lm(), finalmente se le realiza el
summary al modelo de regresión para saber el intercepto y la pendinte y
asi poder hacer el pronostico. el código es el siguiente.
> A=sqldf("select acres82,acres87,acres92,farms82,farms87,farms92,largef82,largef87,lar
> acres82red=A[,1]
> acres92red=A[,3]
> x=acres82red

44
> y=acres92red
> r2=lm(y~x)
> summary(r2)

Call:
lm(formula = y ~ x)

Residuals:
Min 1Q Median 3Q Max
-304067 -18280 -4651 25182 169824

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -7359.8504 9422.0912 -0.781 0.436
x 1.0128 0.0137 73.905 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 56350 on 110 degrees of freedom


Multiple R-squared: 0.9803,Adjusted R-squared: 0.9801
F-statistic: 5462 on 1 and 110 DF, p-value: < 2.2e-16
y el modelo esta dado por:

y = −7359,8504 + 1,0128x

para responder la pregunta solo remplazamos a x con 250.000 y el resultado


seria 245840.

45

También podría gustarte