Terceira prova

Introdução

A revista Forbes cria anualmente uma lista com as maiores empresas do mundo, de acordo com valores de vendas, lucros e valor de mercado. Em 2004, esta lista correspondeu a 2000 empresas de todo o mundo e de diversas categorias.

Dados

Os dados da lista das 2000 maiores empresas de 2004 estão no arquivo. As colunas são:

  • rank: a posição geral da empresa no ranking
  • nome: nome da empresa
  • pais: país sede da empresa
  • categoria: a área de atuação (ramo) da empresa
  • vendas: volume de vendas, em bilhões de dólares
  • lucros: lucro da empresa, em bilhões de dólares
  • valor.mercado: valor de mercado da empresa, em bilhões de dólares

Com isso:

  • Faça a importação dos dados, e verifique sua estrutura.
dados <- read.table("dados_Forbes2000.csv", header = TRUE,
                    sep = ",", dec = ".")
str(dados)
## 'data.frame':    2000 obs. of  7 variables:
##  $ rank         : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ nome         : Factor w/ 2000 levels "Aareal Bank",..: 438 747 100 659 311 219 870 1827 663 1921 ...
##  $ pais         : Factor w/ 61 levels "Africa","Australia",..: 60 60 60 60 56 60 56 28 60 60 ...
##  $ categoria    : Factor w/ 27 levels "Aeroespacial e defesa",..: 3 6 19 15 15 3 3 5 18 27 ...
##  $ vendas       : num  94.7 134.2 76.7 222.9 232.6 ...
##  $ lucros       : num  17.85 15.59 6.46 20.96 10.27 ...
##  $ valor.mercado: num  255 329 195 277 174 ...
summary(dados)
##       rank                              nome                  pais    
##  Min.   :   1.0   Aareal Bank             :   1   United States :751  
##  1st Qu.: 500.8   ABB Group               :   1   Japan         :316  
##  Median :1000.5   Abbey National          :   1   United Kingdom:137  
##  Mean   :1000.5   Abbott Laboratories     :   1   Germany       : 65  
##  3rd Qu.:1500.2   Abercrombie & Fitch     :   1   France        : 63  
##  Max.   :2000.0   Abertis Infraestructuras:   1   Canada        : 56  
##                   (Other)                 :1994   (Other)       :612  
##                    categoria        vendas            lucros        
##  Bancário               : 313   Min.   :  0.010   Min.   :-25.8300  
##  Recursos diversificados: 158   1st Qu.:  2.018   1st Qu.:  0.0800  
##  Seguro                 : 112   Median :  4.365   Median :  0.2000  
##  Utilidades             : 110   Mean   :  9.697   Mean   :  0.3811  
##  Materiais              :  97   3rd Qu.:  9.547   3rd Qu.:  0.4400  
##  Óleo e gás             :  90   Max.   :256.330   Max.   : 20.9600  
##  (Other)                :1120                     NA's   :5         
##  valor.mercado   
##  Min.   :  0.02  
##  1st Qu.:  2.72  
##  Median :  5.15  
##  Mean   : 11.88  
##  3rd Qu.: 10.60  
##  Max.   :328.54  
## 

Análise exploratória

  • Faça um sumário estatístico dos dados.
summary(dados)
##       rank                              nome                  pais    
##  Min.   :   1.0   Aareal Bank             :   1   United States :751  
##  1st Qu.: 500.8   ABB Group               :   1   Japan         :316  
##  Median :1000.5   Abbey National          :   1   United Kingdom:137  
##  Mean   :1000.5   Abbott Laboratories     :   1   Germany       : 65  
##  3rd Qu.:1500.2   Abercrombie & Fitch     :   1   France        : 63  
##  Max.   :2000.0   Abertis Infraestructuras:   1   Canada        : 56  
##                   (Other)                 :1994   (Other)       :612  
##                    categoria        vendas            lucros        
##  Bancário               : 313   Min.   :  0.010   Min.   :-25.8300  
##  Recursos diversificados: 158   1st Qu.:  2.018   1st Qu.:  0.0800  
##  Seguro                 : 112   Median :  4.365   Median :  0.2000  
##  Utilidades             : 110   Mean   :  9.697   Mean   :  0.3811  
##  Materiais              :  97   3rd Qu.:  9.547   3rd Qu.:  0.4400  
##  Óleo e gás             :  90   Max.   :256.330   Max.   : 20.9600  
##  (Other)                :1120                     NA's   :5         
##  valor.mercado   
##  Min.   :  0.02  
##  1st Qu.:  2.72  
##  Median :  5.15  
##  Mean   : 11.88  
##  3rd Qu.: 10.60  
##  Max.   :328.54  
## 
  • Verifique quantos países e quantas categorias diferentes estão na tabela.
length(unique(dados$pais))
## [1] 61
length(unique(dados$categoria))
## [1] 27
  • Faça uma tabela de frequência absoluta para as categorias, e ordene essa tabela em ordem decrescente, ou seja, da categoria com o maior número de empresas para a menor. (Dica: veja a função sort()).
tab.cat <- sort(table(dados$categoria), decreasing = TRUE)
tab.cat
## 
##                          Bancário           Recursos diversificados 
##                               313                               158 
##                            Seguro                        Utilidades 
##                               112                               110 
##                         Materiais                        Óleo e gás 
##                                97                                90 
##                            Varejo       Alimentos, bebidas e tabaco 
##                                88                                83 
##                       Transportes                        Construção 
##                                80                                79 
##                     Bens duráveis Serviços e material para empresas 
##                                74                                70 
##       Serviços de telecomunicação  Equipamentos e serviços de saúde 
##                                67                                65 
##                             Mídia         Tecnologia e equipamentos 
##                                61                                59 
##                   Bens de capital                          Químicos 
##                                53                                50 
##            Drogas e biotecnologia    Produtos domésticos e pessoais 
##                                45                                44 
##      Hotéis, restaurantes e lazer             Mercados de alimentos 
##                                37                                33 
##                     Conglomerados               Software e serviços 
##                                31                                31 
##                    Semicondutores               Empresas comerciais 
##                                26                                25 
##             Aeroespacial e defesa 
##                                19
  • De acordo com essa ordenação, mostre quais são as 5 maiores categorias (em frequência de ocorrência).
head(tab.cat, 5)
## OU
# tab.cat[1:5]
## 
##                Bancário Recursos diversificados                  Seguro 
##                     313                     158                     112 
##              Utilidades               Materiais 
##                     110                      97
  • Faça o mesmo para os países: crie uma tabela de frequência absoluta ordenada em ordem crescente e depois identifique os 5 países com maior número de empresas da lista.
tab.pais <- sort(table(dados$pais), decreasing = FALSE)
tab.pais
## 
##                      Bahamas       France/ United Kingdom 
##                            1                            1 
##                      Islands                       Jordan 
##                            1                            1 
##                      Liberia                  New Zealand 
##                            1                            1 
##                     Pakistan       Panama/ United Kingdom 
##                            1                            1 
##                         Peru                       Poland 
##                            1                            1 
##    United Kingdom/ Australia  United Kingdom/ Netherlands 
##                            1                            1 
## United Kingdom/ South Africa                    Venezuela 
##                            1                            1 
##                       Africa    Australia/ United Kingdom 
##                            2                            2 
##               Czech Republic                      Hungary 
##                            2                            2 
##                   Luxembourg  Netherlands/ United Kingdom 
##                            2                            2 
##                  Philippines                        Chile 
##                            2                            4 
##                   Kong/China                        Korea 
##                            4                            4 
##               Cayman Islands                    Indonesia 
##                            5                            7 
##                     Portugal                      Austria 
##                            7                            8 
##                      Ireland                       Israel 
##                            8                            8 
##                       Norway                      Belgium 
##                            8                            9 
##                     Thailand                      Denmark 
##                            9                           10 
##                      Finland                       Greece 
##                           11                           12 
##                       Russia                       Turkey 
##                           12                           12 
##                       Brazil                 South Africa 
##                           15                           15 
##                     Malaysia                    Singapore 
##                           16                           16 
##                       Mexico                      Bermuda 
##                           17                           20 
##              Hong Kong/China                        China 
##                           20                           25 
##                       Sweden                        India 
##                           26                           27 
##                  Netherlands                        Spain 
##                           28                           29 
##                  Switzerland                       Taiwan 
##                           34                           35 
##                    Australia                        Italy 
##                           37                           41 
##                  South Korea                       Canada 
##                           45                           56 
##                       France                      Germany 
##                           63                           65 
##               United Kingdom                        Japan 
##                          137                          316 
##                United States 
##                          751
tail(tab.pais, 5)
## 
##         France        Germany United Kingdom          Japan  United States 
##             63             65            137            316            751
  • Identifique quais são as empresas brasileiras presentes nessa lista.
dados$nome[dados$pais == "Brazil"]
##  [1] Petrobras-Petrsleo Brasil Banco Bradesco Group     
##  [3] Banco do Brasil           Itazsa                   
##  [5] Eletrobras                Vale do Rio Doce         
##  [7] Unibanco Group            AmBev                    
##  [9] Metalurgica Gerdau        Embraer                  
## [11] Tele Norte Leste          Aracruz Celulose         
## [13] CBD-Brasil Distribuieco   Brasil Telecom           
## [15] CSN-Cia Siderurgica      
## 2000 Levels: Aareal Bank ABB Group Abbey National ... Zurich Financial Services
  • Identifique o nome das empresas que possuem os maiores valores de: vendas, lucros e valor de mercado, respectivamente.
dados$nome[which.max(dados$vendas)]
## [1] Wal-Mart Stores
## 2000 Levels: Aareal Bank ABB Group Abbey National ... Zurich Financial Services
dados$nome[which.max(dados$lucros)]
## [1] ExxonMobil
## 2000 Levels: Aareal Bank ABB Group Abbey National ... Zurich Financial Services
dados$nome[which.max(dados$valor.mercado)]
## [1] General Electric
## 2000 Levels: Aareal Bank ABB Group Abbey National ... Zurich Financial Services
  • Crie uma tabela que ordene (em ordem decrescente) as empresas de acordo com as vendas (mantendo todas as outras colunas da tabela). Mostre as 5 primeiras linhas dessa tabela, ou seja, as 5 maiores empresas de acordo com as vendas. (Dica: veja a função order()).
head(dados[order(dados$vendas, decreasing = TRUE), ], 5)
##    rank            nome           pais     categoria vendas lucros
## 10   10 Wal-Mart Stores  United States        Varejo 256.33   9.05
## 5     5              BP United Kingdom    Óleo e gás 232.57  10.27
## 4     4      ExxonMobil  United States    Óleo e gás 222.88  20.96
## 29   29  General Motors  United States Bens duráveis 185.52   3.82
## 75   75      Ford Motor  United States Bens duráveis 164.20   0.76
##    valor.mercado
## 10        243.74
## 5         173.54
## 4         277.02
## 29         27.47
## 75         26.29
  • Faça um histograma dos lucros de todas as empresas.
hist(dados$lucros)

  • Calcule a mediana dos lucros para cada categoria, e mostre quais são as 5 categorias que apresentaram maiores lucros.
tab.lucro <- with(dados, tapply(lucros, categoria,
                                median, na.rm = TRUE))
head(sort(tab.lucro, decreasing = TRUE), 5)
## OU
# sort(tab.lucro, decreasing = TRUE)[1:5]
##         Drogas e biotecnologia                     Óleo e gás 
##                          0.350                          0.350 
## Produtos domésticos e pessoais    Serviços de telecomunicação 
##                          0.310                          0.275 
##    Alimentos, bebidas e tabaco 
##                          0.270
  • Faça um histograma do valor de mercado e das vendas (na mesma janela gráfica, lado a lado).
par(mfrow = c(1,2))
hist(dados$valor.mercado)
hist(dados$vendas)
par(mfrow = c(1,1))

  • Crie duas novas colunas no seu objeto de dados: log.valor.mercado e log.vendas, com o logaritmo do valor de mercado e das vendas, respectivamente. Faça novamente os histogramas com estas duas novas variáveis.
dados$log.valor.mercado <- log(dados$valor.mercado)
dados$log.vendas <- log(dados$vendas)
par(mfrow = c(1,2))
hist(dados$log.valor.mercado)
hist(dados$log.vendas)
par(mfrow = c(1,1))

  • O valor de mercado de uma empresa depende do valor das vendas, ou seja, quanto maiores forem as vendas, maior será o valor de mercado. Faça um gráfico de dispersão entre o logaritmo do valor de mercado e o logaritmo do valor de vendas para analisar esta afirmação.
plot(log.valor.mercado ~ log.vendas, data = dados)

Inferência sobre a média de lucros

De acordo com o histograma dos lucros (acima), nota-se que existe uma grande variação ao redor do zero (ou seja, algumas empresas tiveram lucro positivo, enquanto que outras tiveram prejuízo). Para verificar isso, será construído um intervalo de confiança e um teste de hipótese.

Sabemos que o intervalo de confiança para média de uma distribuição normal com variância desconhecida, para uma amostra de tamanho \(n\) é dado por:

\[ \left(\bar{x} - t_t \sqrt{\frac{s^2}{n}} \quad, \quad \bar{x} + t_t \sqrt{\frac{s^2}{n}} \right) \]

onde \(t_t\) é o quantil de ordem \(1-\alpha/2\) da distribuição \(t\) de Student, com \(n-1\) graus de liberdade.

Considerando que estamos interessados em obter um intervalo de confiança para a média dos lucros, faça o que se pede:

  • Calcule o tamanho da amostra, a média e a variância amostral dos lucros.
n <- length(dados$lucros)
n
## [1] 2000
t.m <- mean(dados$lucros, na.rm = TRUE)
t.m
## [1] 0.3811328
t.v <- var(dados$lucros, na.rm = TRUE)
t.v
## [1] 3.116828
  • Monte o intervalo de confiança utilizando os quantis da distribuição \(t\), para obter um IC de 95% de confiança.
t.ic <- t.m + qt(c(0.025, 0.975), df = n - 1) * sqrt(t.v/n)
t.ic
## [1] 0.3037129 0.4585527

Além do intervalo de confiança, podemos realizar um teste de hipótese para testar se a média dos lucros é igual a determinado valor. Os procedimentos gerais para este teste de hipótese são:

  1. Definir a hipótese nula (\(H_0\)) e a alternativa (\(H_1\))
  2. Definir um nível de significância \(\alpha\) (ex.: \(\alpha = 0,05\)), que irá determinar o nível de confiança \(100(1-\alpha)\%\) do teste
  3. Determinar a região de rejeição com base no nível de significância \(\rightarrow\) valor crítico
  4. Calcular a estatística de teste, sob a hipótese nula \[ t_{calc} = \frac{\bar{x} - \mu_0}{s/\sqrt{n}} \]
  5. Rejeitar a hipótese nula se a estatística de teste calculada estiver dentro da região de rejeição (\(|t_{calc}| > |t_{crit}|\))

Portanto, se desejamos testar a hipótese de que o lucro médio das empresas é zero, temos as seguintes hipóteses:

\[ \begin{align} \text{H}_0: \mu = 0 \\ \text{H}_1: \mu \neq 0 \\ \end{align} \]

Usando um nível de significância \(\alpha = 0,05\), realize este teste de hipótese usando a função t.test().

t.test(dados$lucros)
## 
##  One Sample t-test
## 
## data:  dados$lucros
## t = 9.6425, df = 1994, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  0.3036159 0.4586498
## sample estimates:
## mean of x 
## 0.3811328

Qual a sua conclusão a respeito do teste de hipótese?

Resposta: como o p-valor do teste de hipótese foi menor do que o nível de significância (0,05), então rejeitamos a hipótese nula, ou seja, existem evidências que a média dos lucros destas empresas é diferente de zero.

Ajustando um modelo linear

Para avaliar a relação entre vendas e valor de mercado, podemos ajustar um modelo de regressão linear simples, que irá indicar se esta relação é significativa.

Um modelo linear entre duas variáveis \(X\) e \(Y\), é definido matematicamente como uma equação com dois parâmetros desconhecidos,

\[ Y = \beta_0 + \beta_1 X \]

Onde \(\beta_0\) é o intercepto do modelo (valor de \(Y\) quando \(X=0\)), e \(\beta_1\) é o coeficiente angular ou inclinação da reta.

Assim, dados \(n\) pares de valores, \((X_1, Y_1), (X_2, Y_2), \ldots, (X_n, Y_n)\), se for admitido que \(Y\) é função linear de \(X\), pode-se estabelecer uma regressão linear simples, cujo modelo estatístico é

\[ Y_i = \beta_0 + \beta_1 X_i + e_i, \quad i = 1, 2, \ldots, n \]

Como através de uma amostra obtemos uma estimativa da verdadeira equação de regressão, denominamos

\[ \hat{Y}_i = \hat{\beta}_0 + \hat{\beta}_1 X_i \]

ou seja, \(\hat{Y}_i\) é o valor estimado de \(Y_i\), através das estimativas de \(\beta_0\) e \(\beta_1\), que chamaremos de \(\hat{\beta}_0\) e \(\hat{\beta}_1\). Para cada valor de \(Y_i\), temos um valor \(\hat{Y}_i\) estimado pela equação de regressão,

\[ Y_i = \hat{Y}_i + e_i \]

Portanto, o erro (ou desvio) de cada observação em relação ao modelo adotado será

\[ \begin{align} e_i &= Y_i - \hat{Y}_i \\ e_i &= Y_i - (\beta_0 + \beta_1 X_i) \end{align} \]

Comumente se assume que os erros possuem uma distribuição normal com média zero e variância constante, ou seja, \(e_i \sim \text{N}(0, \sigma^2)\).

Através da solução de mínimos quadrados, obtemos as expressões para estimar os parâmetros \(\beta_0\) e \(\beta_1\):

\[ \begin{align} \hat{\beta}_1 &= \frac{\sum_{i=1}^{n} (Y_i - \bar{Y})(X_i - \bar{X})}{ \sum_{i=1}^{n} (X_i - \bar{X})^2} \\ & \\ \hat{\beta_0} &= \bar{Y} - \hat{\beta}_1 \bar{X} \end{align} \]

onde \(\bar{X}\) e \(\bar{Y}\) são as médias amostrais de \(X\) e \(Y\), respectivamente.

Como vimos pelas soluções acima, primeiro calculamos \(\hat{\beta_1}\), e depois \(\hat{\beta_0}\). Para facilitar as contas, vamos criar objetos X e Y com as colunas log.vendas e log.valor.mercado (saber quem é X e quem é Y faz parte da interpretação do problema), e n que é o tamanho da amostra.

X <- dados$log.vendas
Y <- dados$log.valor.mercado
n <- length(X)

Agora calculamos \(\hat{\beta_1}\) com

## Crie um objeto chamado beta1
beta1 <- sum((Y - mean(Y))*(X - mean(X)))/sum((X - mean(X))^2)
beta1
## [1] 0.5450448

E \(\hat{\beta_0}\) é calculado com

## Crie um objeto chamado beta0
beta0 <- mean(Y) - beta1 * mean(X)
beta0
## [1] 0.8779514

Para conferir os seus cálculos e prosseguir com a análise, ajuste um modelo linear entre as duas variáveis consideradas, usando a função lm(), e verifique se os coeficientes estimados pela função são os mesmos que você calculou à mão.

## Crie um objeto chamado mod com o modelo ajustado
mod <- lm(Y ~ X, data = dados)
mod
## 
## Call:
## lm(formula = Y ~ X, data = dados)
## 
## Coefficients:
## (Intercept)            X  
##       0.878        0.545

Para avaliar a significância do modelo, podemos realizar uma Análise de Variância (ANOVA) para a regressão. Como vimos na estimação dos parâmetros, o objetivo é encontrar parâmetros que façam com que a soma de quadrados dos resíduos seja mínima. Podemos particionar a soma de quadrados da seguinte forma:

\[ SQTot = SQMod + SQRes \]

Portanto, se um modelo é bem ajustado, esperamos que a soma de quadrados do modelo \(SQMod\) seja grande, e a \(SQRes\) sejá mínima. Um quadro de ANOVA para o modelo irá testar, através de um teste F, se a soma de quadrados do modelo é significativamente diferente de zero. Para fazer essa ANOVA, usamos a função anova()

## Quadro de Análise de Variância
anova(mod)
## Analysis of Variance Table
## 
## Response: Y
##             Df  Sum Sq Mean Sq F value    Pr(>F)    
## X            1  899.01  899.01  920.92 < 2.2e-16 ***
## Residuals 1998 1950.46    0.98                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Uma parte importante em uma análise de regressão linear é a verificação dos resíduos do modelo, ou seja, os desvios de cada valor observado \(Y\) em relação aos valores preditos pelo modelo, \(\hat{Y}\).

Como vimos que a suposição do modelo é de que os resíduos possuam uma distribuição normal com média 0 e variância constante, \(e_i \sim \text{N}(0, \sigma^2)\), então podemos verificar essa suposição fazendo um histograma destes resíduos. Para isso, podemos extrair os resíduos diretamente do objeto mod com a função residuals(), e fazer o histograma destes resíduos

## Faça um histograma dos resíduos do modelo
hist(residuals(mod))

Ainda com o objeto mod, podemos ajustar o modelo graficamente ao gráfico da relação entre log.vendas e log.valor.mercado. Para isso, usamos a função abline(), utilizada para inserir linhas em gráficos.

## Faça o gráfico da relação entre Taxa e Vendas, e insira a linha do
## modelo com abline()
plot(Y ~ X, data = dados)
abline(mod)

Qual a sua conclusão sobre o modelo linear ajustado? Pode-se dizer que existe uma relação significativa entre as duas variáveis?

Resposta: o modelo linear ajustado mostra que a relação entre as duas variáveis é positiva e significativamente diferente de zero, ou seja, existem evidências de que o valor de mercado de uma empresa aumenta conforme aumentam os volumes de venda.