Prueba de Normalidad

Utilizando pruebas de JB, KS y SW

Se utilizará la base del dataframe “hprice1”, disponible en el paquete wooldridge:

##   price assess bdrms lotsize sqrft colonial   lprice  lassess llotsize   lsqrft
## 1   300  349.1     4    6126  2438        1 5.703783 5.855359 8.720297 7.798934
## 2   370  351.5     3    9903  2076        1 5.913503 5.862210 9.200593 7.638198
## 3   191  217.7     3    5200  1374        0 5.252274 5.383118 8.556414 7.225482
## 4   195  231.8     3    4600  1448        1 5.273000 5.445875 8.433811 7.277938
## 5   373  319.1     4    6095  2514        1 5.921578 5.765504 8.715224 7.829630

##Problemas a resolver

  1. Estimación del modelo: price = ˆα + ˆα1(lotsize) + ˆα2(sqrft) + ˆα3(bdrms) + ϵ Utilizando Stargazer
## 
## Modelo estimado
## ===============================================
##                         Dependent variable:    
##                     ---------------------------
##                                 NA             
## -----------------------------------------------
## assess                       1.233***          
##                               (0.097)          
##                                                
## bdrms                          2.652           
##                               (2.118)          
##                                                
## lotsize                       0.00003          
##                              (0.0003)          
##                                                
## sqrft                          0.008           
##                               (0.019)          
##                                                
## colonial                      -0.410           
##                               (3.390)          
##                                                
## lprice                      276.094***         
##                              (10.186)          
##                                                
## lassess                     -396.819***        
##                              (38.182)          
##                                                
## llotsize                       1.755           
##                               (5.791)          
##                                                
## lsqrft                        -3.954           
##                              (41.502)          
##                                                
## Constant                     606.372**         
##                              (246.442)         
##                                                
## -----------------------------------------------
## Observations                    88             
## R2                             0.986           
## Adjusted R2                    0.984           
## Residual Std. Error      12.921 (df = 78)      
## F Statistic           602.196*** (df = 9; 78)  
## ===============================================
## Note:               *p<0.1; **p<0.05; ***p<0.01
  1. Verifique el supuesto de normalidad, a través de: Se puede comprobar por medio de la librería fitdistrplus, como se muestra a continuación, pero de igual forma por medio de las purebas JB, KS y SW.

summary(fit_normal) ##se pueden visualizar los datos de otra forma
## Fitting of the distribution ' norm ' by maximum likelihood 
## Parameters : 
##          estimate Std. Error
## mean 1.627880e-16  1.2967563
## sd   1.216465e+01  0.9169452
## Loglikelihood:  -344.7376   AIC:  693.4752   BIC:  698.4299 
## Correlation matrix:
##      mean sd
## mean    1  0
## sd      0  1

-Prueba de Jaque-Bera (JB) Se han utilizado diversas librerías, se presenta la librería tseries:

library(tseries) ##se utiliza para estimar la prueba Jarque Bera
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
salida_JB<-jarque.bera.test(modelo_estimado$residuals)##se establece el vector de residuo que se desea trabajar
print(salida_JB) ##Se muestran los resultados
## 
##  Jarque Bera Test
## 
## data:  modelo_estimado$residuals
## X-squared = 86.125, df = 2, p-value < 2.2e-16

Utilizando la librería fastgraph:

library(fastGraph) ##Librería se utiliza para poder mostrar graficamente el modelo, 
alpha_sig<-0.05 ##se establece el valor de alfa o nivel de significancia
JB<-salida_JB$statistic ##Se establece el valor de la estadística del valor JB
gl<-salida_JB$parameter## se establecen los grados de libertad como parámetro
VC<-qchisq(1-alpha_sig, gl, lower.tail = TRUE)
shadeDist(JB, ddist = "dchisq",
          parm1 = gl,
          lower.tail = FALSE, xmin = 0,
          sub=paste("VC:", round(VC,2), "-", "JB:", round(JB,2))) ##Se establece el valor crítico, nombre de las variables.

-Prueba de Kolmogorov-Smirnov - lilliefors a continuación se muestra el cálculo manual:

library(dplyr) #esta librería nos permite manipular los datos con diferentes fomatos
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:MASS':
## 
##     select
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(gt)#permite crear tablas
library(gtExtras) #permite agregar funcionalidades a las tablas de la librería gt.
## 
## Attaching package: 'gtExtras'
## The following object is masked from 'package:MASS':
## 
##     select
residuos<-modelo_estimado$residuals #se establece el vector de residuos
residuos%>% #se encadenan los siguientes códigos al vector de residuos
  as_tibble() %>% #el vector residuos se convierte en una tabla con una columna
  mutate(posicion=row_number()) %>% #se coloca una columna llamada "posición"
  arrange(value) %>%  #se ordenan los datos de forma creciente
  mutate(dist1=row_number()/n()) %>%#se agrega una columna llamada "dist1"
  mutate(dist2=row_number()-1/n()) %>%#igual que la anterior, pero con el nombre de "dist2"
  mutate(zi=as.vector(scale(value,center=TRUE))) %>%#se crea una columna "zi" con los valores de residuos escalados para tener media cero y varianza uno
  mutate(pi=pnorm(zi,lower.tail = TRUE)) %>% #Agrega una columna "pi" con los valores de la función de distribución acumulada, tomando en cuenta los valores de zi
  mutate(dif1=abs(dist1-pi)) %>% #Agrega una columna "dif1" calcula las diferencias absolutas entre los percentiles según la posición y los valores de pi
  mutate(dif2=abs(dist2-pi)) %>% #se agrega una columna llamada "dif2" con las diferencias absolutas entre los percentiles ajustados según la posición y los valores de pi
  rename(residuales=value)-> Tabla_KS# Se cambia el nombre de "residuales" por "valor" y el nombre de la tabla

head(Tabla_KS, n=5)
## # A tibble: 5 × 8
##   residuales posicion  dist1 dist2    zi       pi    dif1  dif2
##        <dbl>    <int>  <dbl> <dbl> <dbl>    <dbl>   <dbl> <dbl>
## 1      -41.3       68 0.0114 0.989 -3.38 0.000368 0.0110  0.988
## 2      -23.3       53 0.0227 1.99  -1.91 0.0283   0.00559 1.96 
## 3      -22.6       69 0.0341 2.99  -1.84 0.0326   0.00152 2.96 
## 4      -20.9       37 0.0455 3.99  -1.71 0.0437   0.00180 3.94 
## 5      -20.1       12 0.0568 4.99  -1.64 0.0502   0.00665 4.94

calculo del estadístico D:

D<-max(max(Tabla_KS$dif1), max(Tabla_KS$dif2))
print(D)
## [1] 86.98864

Utilizando nortest:

library(nortest)
prueba_KS<-lillie.test(modelo_estimado$residuals)
prueba_KS
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  modelo_estimado$residuals
## D = 0.13815, p-value = 0.0002732
p.value<-prueba_KS$p.value
print(p.value)
## [1] 0.0002731941

p es menor que el valor alfa 0.05, por lo cual se rechaza la hipótesis nula, no hay una distribución normal.

  1. Prueba de Shapiro-Wilk

usando librería stats:

salida_SW<-shapiro.test(modelo_estimado$residuals)
print(salida_SW)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo_estimado$residuals
## W = 0.89732, p-value = 3.831e-06