library(wooldridge)
data(hprice1)
head(force(hprice1),n=5) #mostrar las primeras 5 observaciones
##   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

Estimación del modelo

library(stargazer)
## 
## Please cite as:
##  Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
modelo_estimado<-lm(price~lotsize+sqrft+bdrms,data = hprice1)
head(modelo_estimado)
## $coefficients
##   (Intercept)       lotsize         sqrft         bdrms 
## -21.770308148   0.002067707   0.122778185  13.852521744 
## 
## $residuals
##           1           2           3           4           5           6 
##  -45.639765   74.848732   -8.236558  -12.081520   18.093192   62.939597 
##           7           8           9          10          11          12 
##   40.320875   69.843246  -43.142550  -17.817835  -47.855859  -85.461169 
##          13          14          15          16          17          18 
##  -54.466158  -54.300415  -52.129801  -29.766931  -51.441108   32.675968 
##          19          20          21          22          23          24 
##   67.603959   33.275839  -16.596960  -26.696234  -24.271531 -107.080889 
##          25          26          27          28          29          30 
##   30.924022    5.363331  -40.869022   46.907165  -48.350295   44.334467 
##          31          32          33          34          35          36 
##   -6.707262  -77.172687   19.168108  -37.749811   55.091131  -59.845223 
##          37          38          39          40          41          42 
##  -33.801248   18.801816  -65.502849   26.236229    9.099900  198.660139 
##          43          44          45          46          47          48 
##   -3.537785   55.470305   32.253952   12.433611  -48.704980  -91.243980 
##          49          50          51          52          53          54 
##   32.529367   66.478628  -11.629207   36.031430    6.700640  -74.702719 
##          55          56          57          58          59          60 
##    1.399296  -13.815798  -41.749618  -16.271207   20.334434  -16.762094 
##          61          62          63          64          65          66 
##   -2.824941   16.718018   67.426518   69.707122   -0.195089  112.729191 
##          67          68          69          70          71          72 
##   -6.752801   -2.745208  -63.699108   -7.662789  -36.663785   19.219211 
##          73          74          75          76          77          78 
##  163.795081  -11.312669  -13.462160  209.375830 -115.508697   24.909926 
##          79          80          81          82          83          84 
##  -36.646568    7.386314 -120.026447   -5.446904  -62.566594   37.147186 
##          85          86          87          88 
##   -6.402439  -23.651448   54.418366  -19.683427 
## 
## $effects
##   (Intercept)       lotsize         sqrft         bdrms               
## -2753.7058885  -332.5616495   705.7416406    91.9901445    24.5834978 
##                                                                       
##    66.8527560    44.8832440    76.5989953   -36.2017162    -8.2714140 
##                                                                       
##   -41.3451966   -80.3333083   -52.1490911   -47.6962279   -45.4396010 
##                                                                       
##   -21.4606182   -44.9756580    38.6921166    74.7127636    37.4752905 
##                                                                       
##    -9.1467971   -21.1247447   -17.3328476  -100.1217461    34.9310630 
##                                                                       
##    12.2638846   -34.4604306    51.8314167   -45.2788593    47.6377835 
##                                                                       
##     0.5400987   -78.0011614    26.2598840   -31.7170779    59.0374055 
##                                                                       
##   -51.4777607   -31.1935976    17.2480483   -59.4795824    31.3027063 
##                                                                       
##    15.7472963   186.5292347     1.8843622    62.7904146    37.6090149 
##                                                                       
##    17.8596096   -37.3104404   -86.0209705    39.5186686    72.2168253 
##                                                                       
##    -5.1473111    35.8444169    14.2293000   -67.7612398     6.3361415 
##                                                                       
##    -7.1769528   -35.1247118   -10.3524247    27.2772785    -9.8686202 
##                                                                       
##     2.7580175    23.4354132    72.9339571    67.5762995     4.6416417 
##                                                                       
##   114.4137877    -2.4100430    -3.6676503   -61.0775917    -1.0282994 
##                                                                       
##   -34.3312543    26.0846967   149.4864995    -2.7756414   -17.8966533 
##                                                                       
##   216.6223093  -180.7567259    30.1896218   -30.2227630     3.5758697 
##                                                                       
##  -112.3861904     2.2509979   -57.6987297    44.0646274     0.6634092 
##                                           
##   -17.0550424    61.4863214   -12.4893671 
## 
## $rank
## [1] 4
## 
## $fitted.values
##        1        2        3        4        5        6        7        8 
## 345.6398 295.1513 199.2366 207.0815 354.9068 403.3354 292.1791 245.1568 
##        9       10       11       12       13       14       15       16 
## 249.1425 257.8178 332.8559 385.4612 459.4662 266.3004 317.1298 257.1669 
##       17       18       19       20       21       22       23       24 
## 291.4411 252.3240 200.3960 276.7242 282.5970 296.6962 249.2715 257.0809 
##       25       26       27       28       29       30       31       32 
## 216.0760 269.6367 270.8690 296.0928 525.8503 305.6655 236.7073 412.1727 
##       33       34       35       36       37       38       39       40 
## 231.8319 272.7498 305.9089 249.8452 393.8012 556.1982 274.5039 198.7638 
##       41       42       43       44       45       46       47       48 
## 236.9001 514.8399 251.5378 174.5297 342.7460 252.5664 361.7050 508.7440 
##       49       50       51       52       53       54       55       56 
## 220.4706 248.5214 275.6292 218.9686 203.2994 254.7027 248.6007 263.8158 
##       57       58       59       60       61       62       63       64 
## 250.7496 274.2712 268.6656 332.7621 227.8249 249.2820 242.5735 401.5429 
##       65       66       67       68       69       70       71       72 
## 335.1951 382.2708 286.2528 382.7452 388.6991 227.6628 251.6638 220.7808 
##       73       74       75       76       77       78       79       80 
## 561.2049 241.3127 319.4622 215.6242 433.5087 305.0901 282.6466 217.6137 
##       81       82       83       84       85       86       87       88 
## 231.0264 273.5719 306.5666 257.8528 242.4024 226.1514 164.5816 261.6834 
## 
## $assign
## [1] 0 1 2 3

Ajuste de los residuos a la Distribución Normal

library(fitdistrplus)
## Loading required package: MASS
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:wooldridge':
## 
##     cement
## Loading required package: survival
fit_normal<-fitdist(data = modelo_estimado$residuals,distr = "norm")
plot(fit_normal)

summary(fit_normal)
## Fitting of the distribution ' norm ' by maximum likelihood 
## Parameters : 
##           estimate Std. Error
## mean -2.321494e-15   6.231624
## sd    5.845781e+01   4.406423
## Loglikelihood:  -482.8775   AIC:  969.7549   BIC:  974.7096 
## Correlation matrix:
##      mean sd
## mean    1  0
## sd      0  1
  1. Verifique el supuesto de normalidad, a través de:
  1. La prueba JB (Cálculo manual)
library(tseries)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
salida_JB<-jarque.bera.test(modelo_estimado$residuals)
salida_JB
## 
##  Jarque Bera Test
## 
## data:  modelo_estimado$residuals
## X-squared = 32.278, df = 2, p-value = 9.794e-08
library(fastGraph)
alpha_sig<-0.05
JB<-salida_JB$statistic
gl<-salida_JB$parameter
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)))

  1. La prueba KS
library(dplyr)  # Carga la librería dplyr para manipulación de datos
## 
## 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)  # Carga la librería gt para crear tablas de datos
residuos<-modelo_estimado$residuals  # Crea un vector con los residuos del modelo estimado
residuos %>%  # Utiliza el operador %>% para encadenar las operaciones siguientes al vector residuos
  as_tibble() %>%  # Convierte el vector residuos en una tibble (tabla) de una columna
  mutate(posicion=row_number()) %>%  # Agrega una columna llamada "posicion" con el número de fila
  arrange(value) %>%  # Ordena la tabla por los valores de residuos en orden ascendente
  mutate(dist1=row_number()/n()) %>%  # Agrega una columna "dist1" con los percentiles según su posición en la tabla (usando la función row_number() y n() para obtener el número de filas)
  mutate(dist2=(row_number()-1)/n()) %>%  # Agrega una columna "dist2" con los percentiles según su posición en la tabla, pero ajustando en una unidad para evitar problemas con los extremos de la distribución
  mutate(zi=as.vector(scale(value,center=TRUE))) %>%  # Agrega 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 (CDF) de una distribución normal estándar evaluada en los valores de zi
  mutate(dif1=abs(dist1-pi)) %>%  # Agrega una columna "dif1" con las diferencias absolutas entre los percentiles según la posición y los valores de pi
  mutate(dif2=abs(dist2-pi)) %>%  # Agrega una columna "dif2" con las diferencias absolutas entre los percentiles ajustados según la posición y los valores de pi
  rename(residuales=value) -> tabla_KS  # Renombra la columna "value" como "residuales" y asigna la tabla resultante a la variable tabla_KS

#Formato
 tabla_KS %>%  # Utiliza el operador %>% para encadenar las operaciones siguientes a la tabla tabla_KS
  gt() %>%  # Crea una tabla con la función gt()
  tab_header("Tabla para calcular el Estadistico KS") %>%  # Agrega un encabezado a la tabla
  tab_source_note(source_note = "Fuente: Elaboración propia") %>%  # Agrega una nota de fuente a la tabla
  tab_style(  # Cambia el estilo de algunas celdas de la tabla
    style = list(
      cell_fill(color = "#A569BD"),  # Cambia el color de fondo de las celdas a un tono de morado
      cell_text(style = "italic")  # Cambia el estilo de texto de las celdas a itálico
      ),
    locations = cells_body(  # Aplica el estilo a las celdas del cuerpo de la tabla que cumplan las siguientes condiciones:
      columns = dif1,  # Que pertenezcan a la columna "dif1"
      rows = dif1==max(dif1)  # Que pertenezcan a la fila donde el valor de "dif1" es máximo
    )) %>%
   tab_style(  # Cambia el estilo de algunas celdas de la tabla
    style = list(
      cell_fill(color = "#3498DB"),  # Cambia el color de fondo de las celdas a un tono de azul
      cell_text(style = "italic")  # Cambia el estilo de texto de las celdas a itálico
      ),
    locations = cells_body(  # Aplica el estilo a las celdas del cuerpo de la tabla que cumplan las siguientes condiciones:
      columns = dif2,  # Que pertenezcan a la columna "dif2"
      rows = dif2==max(dif2)  # Que pertenezcan a la fila donde el valor de "dif2" es máximo
    ))
Tabla para calcular el Estadistico KS
residuales posicion dist1 dist2 zi pi dif1 dif2
-120.026447 81 0.01136364 0.00000000 -2.041515459 0.02059981 0.0092361731 0.0205998094
-115.508697 77 0.02272727 0.01136364 -1.964673586 0.02472601 0.0019987418 0.0133623781
-107.080889 24 0.03409091 0.02272727 -1.821326006 0.03427866 0.0001877487 0.0115513850
-91.243980 48 0.04545455 0.03409091 -1.551957925 0.06033615 0.0148816002 0.0262452366
-85.461169 12 0.05681818 0.04545455 -1.453598781 0.07302879 0.0162106057 0.0275742421
-77.172687 32 0.06818182 0.05681818 -1.312620980 0.09465535 0.0264735301 0.0378371665
-74.702719 54 0.07954545 0.06818182 -1.270609602 0.10193378 0.0223883300 0.0337519664
-65.502849 39 0.09090909 0.07954545 -1.114130117 0.13261169 0.0417025941 0.0530662305
-63.699108 69 0.10227273 0.09090909 -1.083450505 0.13930425 0.0370315271 0.0483951634
-62.566594 83 0.11363636 0.10227273 -1.064187703 0.14362184 0.0299854747 0.0413491110
-59.845223 36 0.12500000 0.11363636 -1.017900230 0.15436269 0.0293626861 0.0407263225
-54.466158 13 0.13636364 0.12500000 -0.926408352 0.17711690 0.0407532663 0.0521169027
-54.300415 14 0.14772727 0.13636364 -0.923589260 0.17785010 0.0301228311 0.0414864675
-52.129801 15 0.15909091 0.14772727 -0.886669532 0.18762842 0.0285375141 0.0399011505
-51.441108 17 0.17045455 0.15909091 -0.874955638 0.19079902 0.0203444766 0.0317081129
-48.704980 47 0.18181818 0.17045455 -0.828417174 0.20371714 0.0218989601 0.0332625965
-48.350295 29 0.19318182 0.18181818 -0.822384375 0.20542908 0.0122472664 0.0236109028
-47.855859 11 0.20454545 0.19318182 -0.813974573 0.20782976 0.0032843043 0.0146479407
-45.639765 1 0.21590909 0.20454545 -0.776281294 0.21879146 0.0028823668 0.0142460032
-43.142550 9 0.22727273 0.21590909 -0.733806463 0.23153335 0.0042606233 0.0156242596
-41.749618 57 0.23863636 0.22727273 -0.710114247 0.23881665 0.0001802823 0.0115439187
-40.869022 27 0.25000000 0.23863636 -0.695136302 0.24348494 0.0065150566 0.0048485798
-37.749811 34 0.26136364 0.25000000 -0.642082009 0.26040997 0.0009536682 0.0104099682
-36.663785 71 0.27272727 0.26136364 -0.623609925 0.26644190 0.0062853771 0.0050782592
-36.646568 79 0.28409091 0.27272727 -0.623317083 0.26653809 0.0175528221 0.0061891857
-33.801248 37 0.29545455 0.28409091 -0.574921384 0.28267223 0.0127823120 0.0014186757
-29.766931 16 0.30681818 0.29545455 -0.506302171 0.30632227 0.0004959124 0.0108677240
-26.696234 22 0.31818182 0.30681818 -0.454073044 0.32488813 0.0067063089 0.0180699452
-24.271531 23 0.32954545 0.31818182 -0.412831567 0.33986501 0.0103195566 0.0216831929
-23.651448 86 0.34090909 0.32954545 -0.402284648 0.34373728 0.0028281851 0.0141918214
-19.683427 88 0.35227273 0.34090909 -0.334793052 0.36889060 0.0166178738 0.0279815102
-17.817835 10 0.36363636 0.35227273 -0.303061413 0.38092153 0.0172851663 0.0286488027
-16.762094 60 0.37500000 0.36363636 -0.285104441 0.38778206 0.0127820638 0.0241457002
-16.596960 21 0.38636364 0.37500000 -0.282295711 0.38885839 0.0024947507 0.0138583870
-16.271207 58 0.39772727 0.38636364 -0.276755010 0.39098411 0.0067431583 0.0046204781
-13.815798 56 0.40909091 0.39772727 -0.234991254 0.40710776 0.0019831485 0.0093804879
-13.462160 75 0.42045455 0.40909091 -0.228976273 0.40944368 0.0110108666 0.0003527698
-12.081520 4 0.43181818 0.42045455 -0.205493119 0.41859344 0.0132247451 0.0018611087
-11.629207 51 0.44318182 0.43181818 -0.197799788 0.42160086 0.0215809622 0.0102173258
-11.312669 74 0.45454545 0.44318182 -0.192415834 0.42370825 0.0308372092 0.0194735728
-8.236558 3 0.46590909 0.45454545 -0.140094626 0.44429261 0.0216164775 0.0102528411
-7.662789 70 0.47727273 0.46590909 -0.130335452 0.44815052 0.0291222111 0.0177585748
-6.752801 67 0.48863636 0.47727273 -0.114857588 0.45427900 0.0343573625 0.0229937262
-6.707262 31 0.50000000 0.48863636 -0.114083016 0.45458599 0.0454140074 0.0340503710
-6.402439 85 0.51136364 0.50000000 -0.108898313 0.45664157 0.0547220642 0.0433584278
-5.446904 82 0.52272727 0.51136364 -0.092645733 0.46309251 0.0596347676 0.0482711313
-3.537785 43 0.53409091 0.52272727 -0.060173762 0.47600862 0.0580822876 0.0467186512
-2.824941 61 0.54545455 0.53409091 -0.048049090 0.48083856 0.0646159857 0.0532523493
-2.745208 68 0.55681818 0.54545455 -0.046692922 0.48137899 0.0754391961 0.0640755598
-0.195089 65 0.56818182 0.55681818 -0.003318245 0.49867621 0.0695056040 0.0581419676
1.399296 55 0.57954545 0.56818182 0.023800450 0.50949411 0.0700513452 0.0586877088
5.363331 26 0.59090909 0.57954545 0.091224254 0.53634280 0.0545662924 0.0432026561
6.700640 53 0.60227273 0.59090909 0.113970383 0.54536936 0.0569033628 0.0455397265
7.386314 80 0.61363636 0.60227273 0.125632935 0.54998875 0.0636476093 0.0522839730
9.099900 41 0.62500000 0.61363636 0.154779103 0.56150227 0.0634977329 0.0521340965
12.433611 46 0.63636364 0.62500000 0.211481796 0.58374433 0.0526193043 0.0412556680
16.718018 62 0.64772727 0.63636364 0.284354766 0.61193074 0.0357965328 0.0244328965
18.093192 5 0.65909091 0.64772727 0.307744934 0.62086179 0.0382291219 0.0268654856
18.801816 38 0.67045455 0.65909091 0.319797835 0.62543921 0.0450153400 0.0336517036
19.168108 33 0.68181818 0.67045455 0.326028052 0.62779843 0.0540197476 0.0426561112
19.219211 72 0.69318182 0.68181818 0.326897255 0.62812720 0.0650546167 0.0536909803
20.334434 59 0.70454545 0.69318182 0.345865960 0.63527827 0.0692671805 0.0579035442
24.909926 78 0.71590909 0.70454545 0.423689939 0.66410402 0.0518050676 0.0404414312
26.236229 40 0.72727273 0.71590909 0.446248874 0.67229126 0.0549814685 0.0436178321
30.924022 25 0.73863636 0.72727273 0.525982978 0.70054998 0.0380863808 0.0267227444
32.253952 45 0.75000000 0.73863636 0.548603608 0.70836125 0.0416387548 0.0302751184
32.529367 49 0.76136364 0.75000000 0.553288104 0.70996693 0.0513967091 0.0400330727
32.675968 18 0.77272727 0.76136364 0.555781630 0.71081993 0.0619073452 0.0505437088
33.275839 20 0.78409091 0.77272727 0.565984762 0.71429793 0.0697929786 0.0584293423
36.031430 52 0.79545455 0.78409091 0.612854281 0.73001365 0.0654408934 0.0540772571
37.147186 84 0.80681818 0.79545455 0.631832029 0.73625168 0.0705665028 0.0592028664
40.320875 7 0.81818182 0.80681818 0.685812928 0.75358446 0.0645973596 0.0532337232
44.334467 30 0.82954545 0.81818182 0.754079634 0.77459930 0.0549461574 0.0435825211
46.907165 28 0.84090909 0.82954545 0.797838357 0.78751785 0.0533912405 0.0420276041
54.418366 87 0.85227273 0.84090909 0.925595465 0.82267187 0.0296008528 0.0182372164
55.091131 35 0.86363636 0.85227273 0.937038450 0.82563061 0.0380057535 0.0266421172
55.470305 44 0.87500000 0.86363636 0.943487765 0.82728426 0.0477157353 0.0363520989
62.939597 6 0.88636364 0.87500000 1.070532059 0.85781006 0.0285535797 0.0171899433
66.478628 50 0.89772727 0.88636364 1.130727018 0.87091500 0.0268122757 0.0154486394
67.426518 63 0.90909091 0.89772727 1.146849569 0.87427810 0.0348128083 0.0234491719
67.603959 19 0.92045455 0.90909091 1.149867648 0.87490081 0.0455537393 0.0341901029
69.707122 64 0.93181818 0.92045455 1.185640095 0.88211777 0.0497004123 0.0383367759
69.843246 8 0.94318182 0.93181818 1.187955411 0.88257451 0.0606073068 0.0492436705
74.848732 2 0.95454545 0.94318182 1.273093116 0.89850750 0.0560379553 0.0446743189
112.729191 66 0.96590909 0.95454545 1.917397313 0.97240626 0.0064971714 0.0178608078
163.795081 73 0.97727273 0.96590909 2.785970904 0.99733162 0.0200588896 0.0314225260
198.660139 42 0.98863636 0.97727273 3.378986513 0.99963623 0.0109998685 0.0223635048
209.375830 76 1.00000000 0.98863636 3.561248407 0.99981545 0.0001845478 0.0111790885
Fuente: Elaboración propia

Cálculo del estadístico D:

D<-max(max(tabla_KS$dif1),max(tabla_KS$dif2))
print(D)
## [1] 0.0754392

Valor crítico de la tabla de Lilliefors

Conclusión

En este caso dado que 0.0754392 > 0.009953375 se rechaza la hipótesis nula: ε ≁ N 0, σε, por lo que los residuos no siguen una distribución normal

library(nortest)
prueba_KS<-lillie.test(modelo_estimado$residuals)
prueba_KS
## 
##  Lilliefors (Kolmogorov-Smirnov) normality test
## 
## data:  modelo_estimado$residuals
## D = 0.075439, p-value = 0.2496
p.value<-prueba_KS$p.value
  1. La prueba SW
library(dplyr)
library(gt)
residuos<-modelo_estimado$residuals
residuos %>%  
  as_tibble() %>%
  rename(residuales=value) %>%
  arrange(residuales) %>%
  mutate(pi=(row_number()-0.375)/(n()+0.25)) %>%
  mutate(mi=qnorm(pi,lower.tail = TRUE)) %>% 
  mutate(ai=0)->tabla_SW
salida_SW<-shapiro.test(modelo_estimado$residuals)
print(salida_SW)
## 
##  Shapiro-Wilk normality test
## 
## data:  modelo_estimado$residuals
## W = 0.94132, p-value = 0.0005937
Wn_salida<-qnorm(salida_SW$p.value,lower.tail = FALSE)
print(Wn_salida)
## [1] 3.241867
library(fastGraph)
shadeDist(Wn_salida,ddist = "dnorm",lower.tail = FALSE)