rm(list=ls())
download.file("http://www.apradie.com/ec2004/salesbrands3.xlsx", "salesbrands3.xlsx", mode="wb")
trying URL 'http://www.apradie.com/ec2004/salesbrands3.xlsx'
Content type 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' length 18194 bytes (17 KB)
==================================================
downloaded 17 KB
library(readxl)
sales_brands <- read_excel("salesbrands3.xlsx", sheet = "Resultado")

# Always familiarize with the data
head(sales_brands, 5)
# Load library xts. Install the package if you haven't already.
library(xts)

# We save the date column in a new dataset:
month <- sales_brands$date

# We delete the date column from the sales data. The date is the column 1 of the dataset: 
sales_brands <- sales_brands[,c(-1)]
# As you see, when you specify c(-1) in the column index that means that you do not want column 1! 

# Now we create an xts dataset using the previous datasets: 
sales.xts <- xts(x = sales_brands, order.by = month)

head(sales.xts, 5)
Warning: object timezone ('UTC') is different from system timezone ('')
           qbrand1tons salesbrand1 qbrand2tons salesbrand2 qbrand3tons salesbrand3
2015-01-01      106.62    60780.72      195.46    60700.51      293.10    75196.35
2015-02-01      105.82    60411.47      216.09    68289.15      494.46   105010.90
2015-03-01       88.82    53174.89      220.15    62529.54      356.88    90902.84
2015-04-01       86.69    50861.69      170.74    50575.68      291.07    72853.34
2015-05-01       87.23    51014.23      177.17    54327.48      318.09    75277.10
           qbrand4tons salesbrand4 qbrand5tons salesbrand5 qbrand6tons salesbrand6
2015-01-01      185.91    48228.51       28.94     2295.50      338.38    55561.26
2015-02-01      149.30    39922.14       24.66     1973.43      284.52    51469.74
2015-03-01      144.65    39788.22       23.75     1903.24      251.34    50395.48
2015-04-01      161.43    42692.59       21.00     1684.28      230.29    49124.61
2015-05-01      141.09    37167.52       23.44     1883.41      250.45    46906.63
           tonstotal salestotal
2015-01-01   1148.41   302762.8
2015-02-01   1274.85   327076.8
2015-03-01   1085.59   298694.2
2015-04-01    961.22   267792.2
2015-05-01    997.47   266576.4
# Do you notice any difference between data frames and xts objects?

#delete month variable
rm(month)
plot(sales.xts$qbrand2tons)

plot(sales.xts$qbrand6tons)

ln_sales <- log(sales.xts)
sales_monthly_growth_q2 = diff(ln_sales$qbrand2tons)
sales_monthly_growth_q6 = diff(ln_sales$qbrand6tons)

plot(sales_monthly_growth_q2, type = "l", col = "blue")

lines(sales_monthly_growth_q6, type = "l", col = "red")

sales_annual_growth_q2 = diff(ln_sales$qbrand2tons,lag = 12)
sales_annual_growth_q6 = diff(ln_sales$qbrand6tons,lag = 12)

plot(sales_annual_growth_q2, type = "l", col = "black")

lines(sales_annual_growth_q6, type = "l", col = "blue")

library(tseries)

adf.test(na.omit(sales_annual_growth_q2), alternative = "stationary")

    Augmented Dickey-Fuller Test

data:  na.omit(sales_annual_growth_q2)
Dickey-Fuller = -3.574, Lag order = 3, p-value = 0.04701
alternative hypothesis: stationary

#3 CHALLENGE 1 #RUN AND INTERPRET A DICKY-FULLER TEST FOR THE ANNUAL % DIFFERENCE OF BRAND 6, AND PROVIDE AN INTERPRETATION

# Load necessary library
library(tseries)

# Perform the ADF test on the annual growth rate of Brand 6
adf_test_q6 <- adf.test(na.omit(sales_annual_growth_q6), alternative = "stationary")

# Print the test result
print(adf_test_q6)

    Augmented Dickey-Fuller Test

data:  na.omit(sales_annual_growth_q6)
Dickey-Fuller = -2.3423, Lag order = 3, p-value = 0.4387
alternative hypothesis: stationary

#Con el valor de -2.3423 podemos decir que no es estacionarionaria (tiene una única raíz unitaria) y con este p-value we accept the nule hypothesis que está dentro del 95% de confianza.

library(wbstats)
# Mexico - Infant mortality
infantm<-wb_data(indicator = c("SP.DYN.IMRT.IN"), 
      country="MEX", start_date = 1980, end_date = 2020)

# Mexico - Export value
exports<-wb_data(indicator = c("TX.VAL.MRCH.XD.WD"), 
      country="MEX", start_date = 1980, end_date = 2020)
plot.ts(infantm$SP.DYN.IMRT.IN)

plot.ts(exports$TX.VAL.MRCH.XD.WD)

m1 <- lm(exports$TX.VAL.MRCH.XD.WD ~ infantm$SP.DYN.IMRT.IN)
summary(m1)

Call:
lm(formula = exports$TX.VAL.MRCH.XD.WD ~ infantm$SP.DYN.IMRT.IN)

Residuals:
    Min      1Q  Median      3Q     Max 
-21.942 -18.107  -2.227  16.959  32.253 

Coefficients:
                       Estimate Std. Error t value Pr(>|t|)    
(Intercept)            122.4937     6.8165   17.97  < 2e-16 ***
infantm$SP.DYN.IMRT.IN  -2.7632     0.2286  -12.09 9.25e-15 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 18.19 on 39 degrees of freedom
Multiple R-squared:  0.7892,    Adjusted R-squared:  0.7838 
F-statistic:   146 on 1 and 39 DF,  p-value: 9.245e-15

#4.1 CHALLENGE 2 - QUESTION: #RESEARCH ABOUT SPURIOUS REGRESSION. With your words briefly explain in which cases you can end up with a spurious regression

When the regression model shows a high R-squared value, suggesting a good fit, which is misleading.

#When the residuals of the regression are non-stationary, indicating that the model does not properly capture the dynamics of the data. #This type of cases can ed up with a spuria regression. #When the t-statistics for the regression coefficients are significant, even though there is no true relationship between the variables.

library(tseries)
# The errors/residual of the regression are stored in the residuals
#   attribute of the m1 model:
adf.test(m1$residuals, alternative = "stationary")

    Augmented Dickey-Fuller Test

data:  m1$residuals
Dickey-Fuller = -2.5852, Lag order = 3, p-value = 0.3434
alternative hypothesis: stationary
library(quantmod)
getSymbols(Symbols=c("^MXX","^GSPC"), peridiocity = "daily",
                     from="2015-01-01", to="2017-10-02")
[1] "MXX"  "GSPC"
#Putting the adjusted prices into one dataset:
data = Ad(merge(MXX,GSPC))
data = na.omit(data)
firstmxx = as.numeric(MXX$MXX.Adjusted[1])
firstus = as.numeric(GSPC$GSPC.Adjusted[1])
invmxx = data$MXX.Adjusted / firstmxx
invus = data$GSPC.Adjusted / firstus 
inv <- merge(invus,invmxx)
plot(inv)

library(quantmod)
getSymbols(Symbols=c("^MXX","^GSPC"), peridiocity = "daily",
                     from="2017-10-03", to="2018-02-28")
[1] "MXX"  "GSPC"
#Putting the adjusted prices into one dataset:
data = Ad(merge(MXX,GSPC))
data = na.omit(data)
secondmxx = as.numeric(MXX$MXX.Adjusted[1])
secondstus = as.numeric(GSPC$GSPC.Adjusted[1])
invmxx = data$MXX.Adjusted / secondmxx
invus = data$GSPC.Adjusted / secondstus 
inv <- merge(invus,invmxx)
plot(inv)

#For both time periods, run a cointegration test and INTERPRET your results.

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CnJtKGxpc3Q9bHMoKSkKYGBgCgpgYGB7cn0KZG93bmxvYWQuZmlsZSgiaHR0cDovL3d3dy5hcHJhZGllLmNvbS9lYzIwMDQvc2FsZXNicmFuZHMzLnhsc3giLCAic2FsZXNicmFuZHMzLnhsc3giLCBtb2RlPSJ3YiIpCmBgYApgYGB7cn0KbGlicmFyeShyZWFkeGwpCmBgYAoKYGBge3J9CnNhbGVzX2JyYW5kcyA8LSByZWFkX2V4Y2VsKCJzYWxlc2JyYW5kczMueGxzeCIsIHNoZWV0ID0gIlJlc3VsdGFkbyIpCgojIEFsd2F5cyBmYW1pbGlhcml6ZSB3aXRoIHRoZSBkYXRhCmhlYWQoc2FsZXNfYnJhbmRzLCA1KQpgYGAKYGBge3J9CiMgTG9hZCBsaWJyYXJ5IHh0cy4gSW5zdGFsbCB0aGUgcGFja2FnZSBpZiB5b3UgaGF2ZW4ndCBhbHJlYWR5LgpsaWJyYXJ5KHh0cykKCiMgV2Ugc2F2ZSB0aGUgZGF0ZSBjb2x1bW4gaW4gYSBuZXcgZGF0YXNldDoKbW9udGggPC0gc2FsZXNfYnJhbmRzJGRhdGUKCiMgV2UgZGVsZXRlIHRoZSBkYXRlIGNvbHVtbiBmcm9tIHRoZSBzYWxlcyBkYXRhLiBUaGUgZGF0ZSBpcyB0aGUgY29sdW1uIDEgb2YgdGhlIGRhdGFzZXQ6IApzYWxlc19icmFuZHMgPC0gc2FsZXNfYnJhbmRzWyxjKC0xKV0KIyBBcyB5b3Ugc2VlLCB3aGVuIHlvdSBzcGVjaWZ5IGMoLTEpIGluIHRoZSBjb2x1bW4gaW5kZXggdGhhdCBtZWFucyB0aGF0IHlvdSBkbyBub3Qgd2FudCBjb2x1bW4gMSEgCgojIE5vdyB3ZSBjcmVhdGUgYW4geHRzIGRhdGFzZXQgdXNpbmcgdGhlIHByZXZpb3VzIGRhdGFzZXRzOiAKc2FsZXMueHRzIDwtIHh0cyh4ID0gc2FsZXNfYnJhbmRzLCBvcmRlci5ieSA9IG1vbnRoKQoKaGVhZChzYWxlcy54dHMsIDUpCmBgYApgYGB7cn0KIyBEbyB5b3Ugbm90aWNlIGFueSBkaWZmZXJlbmNlIGJldHdlZW4gZGF0YSBmcmFtZXMgYW5kIHh0cyBvYmplY3RzPwoKI2RlbGV0ZSBtb250aCB2YXJpYWJsZQpybShtb250aCkKYGBgCgpgYGB7cn0KcGxvdChzYWxlcy54dHMkcWJyYW5kMnRvbnMpCmBgYAoKYGBge3J9CnBsb3Qoc2FsZXMueHRzJHFicmFuZDZ0b25zKQpgYGAKYGBge3J9CmxuX3NhbGVzIDwtIGxvZyhzYWxlcy54dHMpCmBgYAoKYGBge3J9CnNhbGVzX21vbnRobHlfZ3Jvd3RoX3EyID0gZGlmZihsbl9zYWxlcyRxYnJhbmQydG9ucykKc2FsZXNfbW9udGhseV9ncm93dGhfcTYgPSBkaWZmKGxuX3NhbGVzJHFicmFuZDZ0b25zKQoKcGxvdChzYWxlc19tb250aGx5X2dyb3d0aF9xMiwgdHlwZSA9ICJsIiwgY29sID0gImJsdWUiKQpgYGAKYGBge3J9CmxpbmVzKHNhbGVzX21vbnRobHlfZ3Jvd3RoX3E2LCB0eXBlID0gImwiLCBjb2wgPSAicmVkIikKYGBgCgpgYGB7cn0Kc2FsZXNfYW5udWFsX2dyb3d0aF9xMiA9IGRpZmYobG5fc2FsZXMkcWJyYW5kMnRvbnMsbGFnID0gMTIpCnNhbGVzX2FubnVhbF9ncm93dGhfcTYgPSBkaWZmKGxuX3NhbGVzJHFicmFuZDZ0b25zLGxhZyA9IDEyKQoKcGxvdChzYWxlc19hbm51YWxfZ3Jvd3RoX3EyLCB0eXBlID0gImwiLCBjb2wgPSAiYmxhY2siKQpgYGAKCmBgYHtyfQpsaW5lcyhzYWxlc19hbm51YWxfZ3Jvd3RoX3E2LCB0eXBlID0gImwiLCBjb2wgPSAiYmx1ZSIpCmBgYApgYGB7cn0KbGlicmFyeSh0c2VyaWVzKQoKYWRmLnRlc3QobmEub21pdChzYWxlc19hbm51YWxfZ3Jvd3RoX3EyKSwgYWx0ZXJuYXRpdmUgPSAic3RhdGlvbmFyeSIpCmBgYAojMyBDSEFMTEVOR0UgMQojUlVOIEFORCBJTlRFUlBSRVQgQSBESUNLWS1GVUxMRVIgVEVTVCBGT1IgVEhFIEFOTlVBTCAlIERJRkZFUkVOQ0UgT0YgQlJBTkQgNiwgQU5EIFBST1ZJREUgQU4gSU5URVJQUkVUQVRJT04KCmBgYHtyfQojIExvYWQgbmVjZXNzYXJ5IGxpYnJhcnkKbGlicmFyeSh0c2VyaWVzKQoKIyBQZXJmb3JtIHRoZSBBREYgdGVzdCBvbiB0aGUgYW5udWFsIGdyb3d0aCByYXRlIG9mIEJyYW5kIDYKYWRmX3Rlc3RfcTYgPC0gYWRmLnRlc3QobmEub21pdChzYWxlc19hbm51YWxfZ3Jvd3RoX3E2KSwgYWx0ZXJuYXRpdmUgPSAic3RhdGlvbmFyeSIpCgojIFByaW50IHRoZSB0ZXN0IHJlc3VsdApwcmludChhZGZfdGVzdF9xNikKCmBgYAojQ29uIGVsIHZhbG9yIGRlIC0yLjM0MjMgcG9kZW1vcyBkZWNpciBxdWUgbm8gZXMgZXN0YWNpb25hcmlvbmFyaWEgKHRpZW5lIHVuYSDDum5pY2EgcmHDrXogdW5pdGFyaWEpIHkgY29uIGVzdGUgcC12YWx1ZSB3ZSBhY2NlcHQgdGhlIG51bGUgaHlwb3RoZXNpcyBxdWUgZXN0w6EgZGVudHJvIGRlbCA5NSUgZGUgY29uZmlhbnphLgoKYGBge3J9CmxpYnJhcnkod2JzdGF0cykKYGBgCgpgYGB7cn0KIyBNZXhpY28gLSBJbmZhbnQgbW9ydGFsaXR5CmluZmFudG08LXdiX2RhdGEoaW5kaWNhdG9yID0gYygiU1AuRFlOLklNUlQuSU4iKSwgCiAgICAgIGNvdW50cnk9Ik1FWCIsIHN0YXJ0X2RhdGUgPSAxOTgwLCBlbmRfZGF0ZSA9IDIwMjApCgojIE1leGljbyAtIEV4cG9ydCB2YWx1ZQpleHBvcnRzPC13Yl9kYXRhKGluZGljYXRvciA9IGMoIlRYLlZBTC5NUkNILlhELldEIiksIAogICAgICBjb3VudHJ5PSJNRVgiLCBzdGFydF9kYXRlID0gMTk4MCwgZW5kX2RhdGUgPSAyMDIwKQpgYGAKCmBgYHtyfQpwbG90LnRzKGluZmFudG0kU1AuRFlOLklNUlQuSU4pCmBgYAoKYGBge3J9CnBsb3QudHMoZXhwb3J0cyRUWC5WQUwuTVJDSC5YRC5XRCkKYGBgCgpgYGB7cn0KbTEgPC0gbG0oZXhwb3J0cyRUWC5WQUwuTVJDSC5YRC5XRCB+IGluZmFudG0kU1AuRFlOLklNUlQuSU4pCnN1bW1hcnkobTEpCmBgYAojNC4xIENIQUxMRU5HRSAyIC0gUVVFU1RJT046CiNSRVNFQVJDSCBBQk9VVCBTUFVSSU9VUyBSRUdSRVNTSU9OLiBXaXRoIHlvdXIgd29yZHMgYnJpZWZseSBleHBsYWluIGluIHdoaWNoIGNhc2VzIHlvdSBjYW4gZW5kIHVwIHdpdGggYSBzcHVyaW91cyByZWdyZXNzaW9uCgojIFdoZW4gdGhlIHJlZ3Jlc3Npb24gbW9kZWwgc2hvd3MgYSBoaWdoIFItc3F1YXJlZCB2YWx1ZSwgc3VnZ2VzdGluZyBhIGdvb2QgZml0LCB3aGljaCBpcyBtaXNsZWFkaW5nLgojV2hlbiB0aGUgcmVzaWR1YWxzIG9mIHRoZSByZWdyZXNzaW9uIGFyZSBub24tc3RhdGlvbmFyeSwgaW5kaWNhdGluZyB0aGF0IHRoZSBtb2RlbCBkb2VzIG5vdCBwcm9wZXJseSBjYXB0dXJlIHRoZSBkeW5hbWljcyBvZiB0aGUgZGF0YS4KI1RoaXMgdHlwZSBvZiBjYXNlcyBjYW4gZWQgdXAgd2l0aCBhIHNwdXJpYSByZWdyZXNzaW9uLgojV2hlbiB0aGUgdC1zdGF0aXN0aWNzIGZvciB0aGUgcmVncmVzc2lvbiBjb2VmZmljaWVudHMgYXJlIHNpZ25pZmljYW50LCBldmVuIHRob3VnaCB0aGVyZSBpcyBubyB0cnVlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB2YXJpYWJsZXMuCgpgYGB7cn0KbGlicmFyeSh0c2VyaWVzKQojIFRoZSBlcnJvcnMvcmVzaWR1YWwgb2YgdGhlIHJlZ3Jlc3Npb24gYXJlIHN0b3JlZCBpbiB0aGUgcmVzaWR1YWxzCiMgICBhdHRyaWJ1dGUgb2YgdGhlIG0xIG1vZGVsOgphZGYudGVzdChtMSRyZXNpZHVhbHMsIGFsdGVybmF0aXZlID0gInN0YXRpb25hcnkiKQpgYGAKYGBge3J9CmxpYnJhcnkocXVhbnRtb2QpCmdldFN5bWJvbHMoU3ltYm9scz1jKCJeTVhYIiwiXkdTUEMiKSwgcGVyaWRpb2NpdHkgPSAiZGFpbHkiLAogICAgICAgICAgICAgICAgICAgICBmcm9tPSIyMDE1LTAxLTAxIiwgdG89IjIwMTctMTAtMDIiKQpgYGAKCgpgYGB7cn0KI1B1dHRpbmcgdGhlIGFkanVzdGVkIHByaWNlcyBpbnRvIG9uZSBkYXRhc2V0OgpkYXRhID0gQWQobWVyZ2UoTVhYLEdTUEMpKQpkYXRhID0gbmEub21pdChkYXRhKQpgYGAKCmBgYHtyfQpmaXJzdG14eCA9IGFzLm51bWVyaWMoTVhYJE1YWC5BZGp1c3RlZFsxXSkKZmlyc3R1cyA9IGFzLm51bWVyaWMoR1NQQyRHU1BDLkFkanVzdGVkWzFdKQpgYGAKCgpgYGB7cn0KaW52bXh4ID0gZGF0YSRNWFguQWRqdXN0ZWQgLyBmaXJzdG14eAppbnZ1cyA9IGRhdGEkR1NQQy5BZGp1c3RlZCAvIGZpcnN0dXMgCmBgYAoKYGBge3J9CmludiA8LSBtZXJnZShpbnZ1cyxpbnZteHgpCnBsb3QoaW52KQpgYGAKCmBgYHtyfQoKIzJuZCBwZXJpb2QKbGlicmFyeShxdWFudG1vZCkKZ2V0U3ltYm9scyhTeW1ib2xzPWMoIl5NWFgiLCJeR1NQQyIpLCBwZXJpZGlvY2l0eSA9ICJkYWlseSIsCiAgICAgICAgICAgICAgICAgICAgIGZyb209IjIwMTctMTAtMDMiLCB0bz0iMjAxOC0wMi0yOCIpCmBgYAoKYGBge3J9CiNQdXR0aW5nIHRoZSBhZGp1c3RlZCBwcmljZXMgaW50byBvbmUgZGF0YXNldDoKZGF0YSA9IEFkKG1lcmdlKE1YWCxHU1BDKSkKZGF0YSA9IG5hLm9taXQoZGF0YSkKYGBgCgpgYGB7cn0Kc2Vjb25kbXh4ID0gYXMubnVtZXJpYyhNWFgkTVhYLkFkanVzdGVkWzFdKQpzZWNvbmRzdHVzID0gYXMubnVtZXJpYyhHU1BDJEdTUEMuQWRqdXN0ZWRbMV0pCmBgYAoKYGBge3J9Cmludm14eCA9IGRhdGEkTVhYLkFkanVzdGVkIC8gc2Vjb25kbXh4CmludnVzID0gZGF0YSRHU1BDLkFkanVzdGVkIC8gc2Vjb25kc3R1cyAKYGBgCgpgYGB7cn0KaW52IDwtIG1lcmdlKGludnVzLGludm14eCkKcGxvdChpbnYpCmBgYAoKCgojRm9yIGJvdGggdGltZSBwZXJpb2RzLCBydW4gYSBjb2ludGVncmF0aW9uIHRlc3QgYW5kIElOVEVSUFJFVCB5b3VyIHJlc3VsdHMuCgo=