______________________________________________________________________________________________________________________
ResumoEste relatório apresenta os resultados da análise exploratória dos dados da Pesquisa Origem e Destino (Pesquisa O/D) de 2007 na Região Metropolitana de São Paulo (RMSP); a análise foi realizado com auxílio do software de cálculos estatísticos R Project. A base de dados está disponível no site do Metrô-SP, nos formatos Dbase e SPSS, sendo utilizado neste trabalho a versão no formato do SPSS (.sav). A base possui 196.698 registros de 123 variáveis. Foram realizados analises univariadas, bivariadas e multivariadas na base de dados da pesquisa, de forma a obter informações ocultas em sua estrutura, e descobrir variáveis importantes e suas correlações. Um dos principais achados foi que trabalho e educação são os principais fatores geradores de demanda de viagens na RMSP.
library(ggplot2)
library(haven)
library(ggmap)
library(scales)
library(dplyr)
library(tidyr)
library(gridExtra)
library(GGally)
library(psych)
library(grid)
library(memisc)
library(ggthemes)
library(grid)
library(foreign)
library(RColorBrewer)
library(descr)
library(plyr)
OD_2007_v2d <- read.spss("OD_2007_v2d.sav", to.data.frame = TRUE)
Segundo METRÔ (2008), a Pesquisa O/D é realizada desde 1967 na RMSP, com periodicidade de dez anos, e tem por objetivo o levantamento de informações atualizadas sobre as viagens realizadas pela população desta região em dia útil típico. Constitui-se no principal instrumento de coleta de informações sobre viagens, servindo de base para os estudos de planejamento de transporte. A pesquisa de 2007 ocorreu no período de agosto a novembro deste ano, e fevereiro a abril de 2008, envolvendo cerca de 370 pesquisadores; foram visitados 54.500 domicílios, resultando em aproximadamente 30.000 domicílios com entrevistas consideradas válidas para a pesquisa; isto nos 39 municípios da RMSP, que foram subdivididos em 460 zonas de pesquisa.
A amostra de 30.000 domicílios permitiu conferir a pesquisa margens de erro inferiores a 5% e nível de confiança de 95%.
Neste ano acontecerá a quinta edição da pesquisa - completando assim 50 anos - que agora abordará 517 zonas de pesquisa e 32 mil domicílios de amostra. (Revista Engenharia, nº 632/2017
A descrição completa de todas as variáveis da pesquisa de 2007 pode ser acessada aqui.
A base de dados apresenta as seguintes dimensões: (registros - variáveis):
dim(OD_2007_v2d)
## [1] 196698 123
Abaixo tem-se a estrutura destas variáveis:
str(OD_2007_v2d)
## 'data.frame': 196698 obs. of 123 variables:
## $ zona : num 1 1 1 1 1 1 1 1 1 1 ...
## $ muni_dom : Factor w/ 39 levels "Arujá","Barueri",..: 36 36 36 36 36 36 36 36 36 36 ...
## $ co_dom_x : num 333729 333729 333858 333858 333858 ...
## $ co_dom_y : num 7394430 7394430 7394484 7394484 7394484 ...
## $ id_dom : Factor w/ 29957 levels "0010001","0010018",..: 1 1 2 2 2 3 3 3 3 3 ...
## $ f_dom : Factor w/ 2 levels "Demais registros",..: 2 1 2 1 1 2 1 1 1 1 ...
## $ fe_dom : num 18 18 17.7 17.7 17.7 ...
## $ dom : num 1 1 18 18 18 19 19 19 19 19 ...
## $ cd_entre : Factor w/ 2 levels "Completo sem viagem",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ data : num 1.34e+10 1.34e+10 1.34e+10 1.34e+10 1.34e+10 ...
## $ tipo_dom : Factor w/ 3 levels "Particular","Coletivo",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ no_morad : num 1 1 2 2 2 3 3 3 3 3 ...
## $ tot_fam : num 1 1 1 1 1 1 1 1 1 1 ...
## $ id_fam : Factor w/ 30855 levels "001000101","001001801",..: 1 1 2 2 2 3 3 3 3 3 ...
## $ f_fam : Factor w/ 2 levels "Demais registros",..: 2 1 2 1 1 2 1 1 1 1 ...
## $ fe_fam : num 18 18 17.7 17.7 17.7 ...
## $ familia : num 1 1 1 1 1 1 1 1 1 1 ...
## $ no_moraf : num 1 1 2 2 2 3 3 3 3 3 ...
## $ condmora : Factor w/ 5 levels "Alugada","Própria",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ qt_radio : num 1 1 6 6 6 1 1 1 1 1 ...
## $ qt_gel1 : num 1 1 0 0 0 1 1 1 1 1 ...
## $ qt_gel2 : num 0 0 0 0 0 0 0 0 0 0 ...
## $ qt_tvcor : num 1 1 1 1 1 1 1 1 1 1 ...
## $ qt_freez : num 0 0 1 1 1 0 0 0 0 0 ...
## $ qt_video : num 1 1 1 1 1 1 1 1 1 1 ...
## $ qt_banho : num 1 1 1 1 1 1 1 1 1 1 ...
## $ qt_moto : num 0 0 0 0 0 0 0 0 0 0 ...
## $ qt_auto : num 1 1 1 1 1 0 0 0 0 0 ...
## $ qt_aspir : num 0 0 0 0 0 0 0 0 0 0 ...
## $ qt_mlava : num 0 0 1 1 1 0 0 0 0 0 ...
## $ qt_empre : num 0 0 0 0 0 0 0 0 0 0 ...
## $ qt_micro : num 0 0 0 0 0 0 0 0 0 0 ...
## $ qt_bicicle: num 0 0 1 1 1 1 1 1 1 1 ...
## $ nao_dcl_it: Factor w/ 2 levels "F","T": 2 2 2 2 2 2 2 2 2 2 ...
## $ criterio_b: Factor w/ 8 levels "A1","A2","B1",..: 5 5 4 4 4 7 7 7 7 7 ...
## $ ano_auto1 : num 1998 1998 1989 1989 1989 ...
## $ ano_auto2 : num NA NA NA NA NA NA NA NA NA NA ...
## $ ano_auto3 : num NA NA NA NA NA NA NA NA NA NA ...
## $ renda_fa : num 850 850 2600 2600 2600 ...
## $ cd_renfa : Factor w/ 4 levels "Renda Familiar Declarada e maior que zero",..: 1 1 1 1 1 3 3 3 3 3 ...
## $ id_pess : Factor w/ 91405 levels "00100010101 ",..: 1 1 2 2 3 4 4 4 4 5 ...
## $ f_pess : Factor w/ 2 levels "Demais registros",..: 2 1 2 1 2 2 1 1 1 2 ...
## $ fe_pess : num 21.8 21.8 21.4 21.4 21.4 ...
## $ pessoa : num 1 1 1 1 2 1 1 1 1 2 ...
## $ sit_fam : Factor w/ 7 levels "Pessoa responsável",..: 1 1 1 1 2 1 1 1 1 2 ...
## $ idade : num 29 29 51 51 52 42 42 42 42 40 ...
## $ sexo : Factor w/ 2 levels "Masculino","Feminino": 1 1 1 1 2 1 1 1 1 2 ...
## $ estuda : Factor w/ 6 levels "Não","Creche / Pré-escola",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ grau_ins : Factor w/ 5 levels "Não alfabetizado / primário incompleto",..: 4 4 4 4 1 1 1 1 1 1 ...
## $ cd_ativi : Factor w/ 8 levels "Tem Trabalho",..: 1 1 1 1 7 1 1 1 1 7 ...
## $ co_ren_i : Factor w/ 3 levels "Tem renda","Não tem renda",..: 1 1 1 1 1 3 3 3 3 3 ...
## $ vl_ren_i : num 850 850 2000 2000 600 NA NA NA NA NA ...
## $ zona_esc : num NA NA NA NA NA NA NA NA NA NA ...
## $ muniesc : atomic NA NA NA NA NA NA NA NA NA NA ...
## ..- attr(*, "value.labels")= Named chr "39" "38" "37" "36" ...
## .. ..- attr(*, "names")= chr "Vargem Grande Paulista" "Taboão da Serra" "Suzano" "São Paulo" ...
## $ co_esc_x : num NA NA NA NA NA NA NA NA NA NA ...
## $ co_esc_y : num NA NA NA NA NA NA NA NA NA NA ...
## $ tipo_esc : Factor w/ 2 levels "Pública","Particular": NA NA NA NA NA NA NA NA NA NA ...
## $ zonatra1 : num 3 3 327 327 NA 24 24 24 24 NA ...
## $ munitra1 : atomic 36 36 13 13 NA 36 36 36 36 NA ...
## ..- attr(*, "value.labels")= Named chr "39" "38" "37" "36" ...
## .. ..- attr(*, "names")= chr "Vargem Grande Paulista" "Taboão da Serra" "Suzano" "São Paulo" ...
## $ co_tr1_x : num 333221 333221 323572 323572 NA ...
## $ co_tr1_y : num 7394103 7394103 7418658 7418658 NA ...
## $ trab1_re : Factor w/ 3 levels "Sim","Não","Sem enderço fixo": 2 2 2 2 NA 2 2 2 2 NA ...
## $ trabext1 : Factor w/ 2 levels "Sim","Não": 2 2 2 2 NA 2 2 2 2 NA ...
## $ ocup1 : num 906 906 803 803 NA 513 513 513 513 NA ...
## $ setor1 : Factor w/ 14 levels "Agrícola","Construção Civil",..: 12 12 10 10 NA 9 9 9 9 NA ...
## $ vinc1 : Factor w/ 8 levels "Assalariado com carteira",..: 1 1 1 1 NA 1 1 1 1 NA ...
## $ zonatra2 : num NA NA NA NA NA NA NA NA NA NA ...
## $ munitra2 : Factor w/ 39 levels "Arujá","Barueri",..: NA NA NA NA NA NA NA NA NA NA ...
## $ co_tr2_x : num NA NA NA NA NA NA NA NA NA NA ...
## $ co_tr2_y : num NA NA NA NA NA NA NA NA NA NA ...
## $ trab2_re : Factor w/ 3 levels "Sim","Não","Sem enderço fixo": NA NA NA NA NA NA NA NA NA NA ...
## $ trabext2 : Factor w/ 2 levels "Sim","Não": NA NA NA NA NA NA NA NA NA NA ...
## $ ocup2 : num NA NA NA NA NA NA NA NA NA NA ...
## $ setor2 : Factor w/ 14 levels "Agrícola","Construção Civil",..: NA NA NA NA NA NA NA NA NA NA ...
## $ vinc2 : Factor w/ 8 levels "Assalariado com carteira",..: NA NA NA NA NA NA NA NA NA NA ...
## $ n_viag : num 1 2 1 2 NA 1 2 3 4 NA ...
## $ fe_via : num 25.3 25.3 20.1 20.1 NA ...
## $ dia_sem : atomic 6 6 5 5 NA 5 5 5 5 NA ...
## ..- attr(*, "value.labels")= Named chr "6" "5" "4" "3" ...
## .. ..- attr(*, "names")= chr "Sexta-feira" "Quinta-feira" "Quarta-feira" "Terça-feira" ...
## $ tot_viag : num 2 2 2 2 0 4 4 4 4 0 ...
## $ zona_o : num 1 3 1 327 NA 1 24 1 24 NA ...
## $ muni_o : Factor w/ 39 levels "Arujá","Barueri",..: 36 36 36 13 NA 36 36 36 36 NA ...
## $ co_o_x : num 333729 333221 333858 323572 NA ...
## $ co_o_y : num 7394430 7394103 7394484 7418658 NA ...
## $ zona_d : num 3 1 327 1 NA 24 1 24 1 NA ...
## $ muni_d : Factor w/ 39 levels "Arujá","Barueri",..: 36 36 13 36 NA 36 36 36 36 NA ...
## $ co_d_x : num 333221 333729 323572 333858 NA ...
## $ co_d_y : num 7394103 7394430 7418658 7394484 NA ...
## $ zona_t1 : num NA NA 91 6 NA NA NA NA NA NA ...
## $ muni_t1 : Factor w/ 39 levels "Arujá","Barueri",..: NA NA 36 36 NA NA NA NA NA NA ...
## $ co_t1_x : num NA NA 330062 333246 NA ...
## $ co_t1_y : num NA NA 7397397 7396047 NA ...
## $ zona_t2 : num NA NA NA NA NA NA NA NA NA NA ...
## $ muni_t2 : Factor w/ 39 levels "Arujá","Barueri",..: NA NA NA NA NA NA NA NA NA NA ...
## $ co_t2_x : num NA NA NA NA NA NA NA NA NA NA ...
## $ co_t2_y : num NA NA NA NA NA NA NA NA NA NA ...
## $ zona_t3 : num NA NA NA NA NA NA NA NA NA NA ...
## $ muni_t3 : Factor w/ 39 levels "Arujá","Barueri",..: NA NA NA NA NA NA NA NA NA NA ...
## $ co_t3_x : num NA NA NA NA NA NA NA NA NA NA ...
## $ co_t3_y : num NA NA NA NA NA NA NA NA NA NA ...
## [list output truncated]
## - attr(*, "variable.labels")= Named chr "Zona de Domicílio" "Município do Domicílio" "Coordenada X Domicílio" "Coordenada Y Domicílio" ...
## ..- attr(*, "names")= chr "zona" "muni_dom" "co_dom_x" "co_dom_y" ...
## - attr(*, "codepage")= int 1252
Conforme saída do comando acima, as 123 variáveis da base são de um dos 3 tipos a saber: numéricas (num), ex.: zona; Factor, ex.: muni_dom; ou vetores atomic, ex.: muniesc.
Segundo Fávaro et al. (2009) as variáveis podem ser classificadas em: variáveis não métricas (qualitativas, categóricas): permitem apenas a análise de frequências, sem a possibilidade do cálculo de medidas de posição e de dispersão, exceto a moda; e variáveis métricas (quantitativas): são representadas por valores que podem ser tratados com o intuito do cálculo de medidas de posição (ex. média) ou dispersão (ex. desvio padrão). Podem ser discretas (ex. número de filhos) ou contínuas (ex. salário).
Ao contrário das variáveis qualitativas, as métricas suportam um número bem maior de representações gráficas, tais como: gráficos de dispersão, de linha, etc; bem como o cálculo de correlações entre variáveis deste tipo.
Com isto, temos na base em análise variáveis qualitativas, ex.: muni_dom e quantitativas, ex.: zona. Para as variáveis do tipo atomic, é necessário verificar qual o tipo primitivo dos dados do vetor para classificá-lo.
Quais são as variáveis qualitativas (factor)?
Var_quali <- Filter(is.factor, OD_2007_v2d)
names(Var_quali)
## [1] "muni_dom" "id_dom" "f_dom" "cd_entre" "tipo_dom"
## [6] "id_fam" "f_fam" "condmora" "nao_dcl_it" "criterio_b"
## [11] "cd_renfa" "id_pess" "f_pess" "sit_fam" "sexo"
## [16] "estuda" "grau_ins" "cd_ativi" "co_ren_i" "tipo_esc"
## [21] "trab1_re" "trabext1" "setor1" "vinc1" "munitra2"
## [26] "trab2_re" "trabext2" "setor2" "vinc2" "muni_o"
## [31] "muni_d" "muni_t1" "muni_t2" "muni_t3" "motivo_o"
## [36] "motivo_d" "servir_o" "servir_d" "modo1" "modo2"
## [41] "modo3" "modo4" "modoprin" "tipovg" "pag_viag"
## [46] "tp_esauto" "pe_bici" "tp_esbici"
Quais são as variáveis numéricas (num)?
Var_num <- Filter(is.numeric, OD_2007_v2d)
names(Var_num)
## [1] "zona" "co_dom_x" "co_dom_y" "fe_dom" "dom"
## [6] "data" "no_morad" "tot_fam" "fe_fam" "familia"
## [11] "no_moraf" "qt_radio" "qt_gel1" "qt_gel2" "qt_tvcor"
## [16] "qt_freez" "qt_video" "qt_banho" "qt_moto" "qt_auto"
## [21] "qt_aspir" "qt_mlava" "qt_empre" "qt_micro" "qt_bicicle"
## [26] "ano_auto1" "ano_auto2" "ano_auto3" "renda_fa" "fe_pess"
## [31] "pessoa" "idade" "vl_ren_i" "zona_esc" "muniesc"
## [36] "co_esc_x" "co_esc_y" "zonatra1" "munitra1" "co_tr1_x"
## [41] "co_tr1_y" "ocup1" "zonatra2" "co_tr2_x" "co_tr2_y"
## [46] "ocup2" "n_viag" "fe_via" "dia_sem" "tot_viag"
## [51] "zona_o" "co_o_x" "co_o_y" "zona_d" "co_d_x"
## [56] "co_d_y" "zona_t1" "co_t1_x" "co_t1_y" "zona_t2"
## [61] "co_t2_x" "co_t2_y" "zona_t3" "co_t3_x" "co_t3_y"
## [66] "h_saida" "min_saida" "anda_o" "h_cheg" "min_cheg"
## [71] "anda_d" "duracao" "vl_est" "id_ordem" "distancia"
Na sequência tem-se um sumário de algumas estatísticas básicas das variáveis numéricas:
summary(Var_num)
## zona co_dom_x co_dom_y fe_dom
## Min. : 1.0 Min. :281749 Min. :7344733 Min. : 2.549
## 1st Qu.: 89.0 1st Qu.:326271 1st Qu.:7387965 1st Qu.: 41.732
## Median :205.0 Median :332202 Median :7393435 Median : 89.587
## Mean :210.1 Mean :334720 Mean :7392526 Mean : 186.559
## 3rd Qu.:311.0 3rd Qu.:341135 3rd Qu.:7397372 3rd Qu.: 239.217
## Max. :460.0 Max. :413791 Max. :7427007 Max. :2256.407
##
## dom data no_morad tot_fam
## Min. : 1.0 Min. :4.520e+06 Min. : 1.000 Min. : 1.00
## 1st Qu.: 34.0 1st Qu.:1.341e+10 1st Qu.: 3.000 1st Qu.: 1.00
## Median : 101.0 Median :1.342e+10 Median : 4.000 Median : 1.00
## Mean : 628.2 Mean :1.342e+10 Mean : 3.864 Mean : 1.07
## 3rd Qu.:1127.0 3rd Qu.:1.342e+10 3rd Qu.: 5.000 3rd Qu.: 1.00
## Max. :8000.0 Max. :1.343e+10 Max. :24.000 Max. :10.00
## NA's :175
## fe_fam familia no_moraf qt_radio
## Min. : 2.549 Min. : 1.000 Min. : 1.000 Min. :0.000
## 1st Qu.: 41.732 1st Qu.: 1.000 1st Qu.: 3.000 1st Qu.:1.000
## Median : 89.587 Median : 1.000 Median : 4.000 Median :1.000
## Mean : 186.559 Mean : 1.033 Mean : 3.671 Mean :1.696
## 3rd Qu.: 239.217 3rd Qu.: 1.000 3rd Qu.: 4.000 3rd Qu.:2.000
## Max. :2256.407 Max. :10.000 Max. :14.000 Max. :9.000
## NA's :3154
## qt_gel1 qt_gel2 qt_tvcor qt_freez
## Min. :0.0000 Min. :0.0000 Min. :0.00 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:1.00 1st Qu.:0.0000
## Median :1.0000 Median :0.0000 Median :2.00 Median :0.0000
## Mean :0.5669 Mean :0.5376 Mean :2.08 Mean :0.2253
## 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:3.00 3rd Qu.:0.0000
## Max. :9.0000 Max. :8.0000 Max. :9.00 Max. :9.0000
## NA's :3154 NA's :3154 NA's :3152 NA's :3146
## qt_video qt_banho qt_moto qt_auto
## Min. :0.000 Min. :0.000 Min. :0.0000 Min. :0.0000
## 1st Qu.:1.000 1st Qu.:1.000 1st Qu.:0.0000 1st Qu.:0.0000
## Median :1.000 Median :2.000 Median :0.0000 Median :1.0000
## Mean :1.203 Mean :1.899 Mean :0.0911 Mean :0.9567
## 3rd Qu.:2.000 3rd Qu.:2.000 3rd Qu.:0.0000 3rd Qu.:1.0000
## Max. :9.000 Max. :9.000 Max. :9.0000 Max. :8.0000
## NA's :3154 NA's :3148 NA's :3141 NA's :2986
## qt_aspir qt_mlava qt_empre qt_micro
## Min. :0.0000 Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.:1.0000 1st Qu.:0.0000 1st Qu.:0.0000
## Median :0.0000 Median :1.0000 Median :0.0000 Median :1.0000
## Mean :0.5109 Mean :0.8912 Mean :0.1987 Mean :0.7827
## 3rd Qu.:1.0000 3rd Qu.:1.0000 3rd Qu.:0.0000 3rd Qu.:1.0000
## Max. :6.0000 Max. :5.0000 Max. :7.0000 Max. :9.0000
## NA's :3154 NA's :3154 NA's :3125 NA's :3154
## qt_bicicle ano_auto1 ano_auto2 ano_auto3
## Min. :0.0000 Min. :1955 Min. :1929 Min. :1941
## 1st Qu.:0.0000 1st Qu.:1997 1st Qu.:1997 1st Qu.:1996
## Median :0.0000 Median :2002 Median :2001 Median :2000
## Mean :0.6288 Mean :2000 Mean :1999 Mean :1998
## 3rd Qu.:1.0000 3rd Qu.:2006 3rd Qu.:2005 3rd Qu.:2004
## Max. :9.0000 Max. :2008 Max. :2008 Max. :2008
## NA's :3154 NA's :73349 NA's :150281 NA's :184882
## renda_fa fe_pess pessoa idade
## Min. : 0 Min. : 2.924 Min. : 1.000 Min. : 1.00
## 1st Qu.: 1362 1st Qu.: 45.751 1st Qu.: 1.000 1st Qu.:21.00
## Median : 2500 Median : 97.983 Median : 2.000 Median :34.00
## Mean : 3729 Mean : 200.696 Mean : 2.267 Mean :36.22
## 3rd Qu.: 4713 3rd Qu.: 263.526 3rd Qu.: 3.000 3rd Qu.:50.00
## Max. :46000 Max. :2723.050 Max. :14.000 Max. :99.00
##
## vl_ren_i zona_esc muniesc co_esc_x
## Min. : 0 Min. : 0.0 Min. : 1.00 Min. :281677
## 1st Qu.: 0 1st Qu.: 81.0 1st Qu.:36.00 1st Qu.:326520
## Median : 412 Median :197.0 Median :36.00 Median :332692
## Mean : 1047 Mean :209.1 Mean :32.59 Mean :334879
## 3rd Qu.: 1200 3rd Qu.:325.0 3rd Qu.:36.00 3rd Qu.:340910
## Max. :40000 Max. :460.0 Max. :99.00 Max. :413944
## NA's :54119 NA's :140088 NA's :140088 NA's :140201
## co_esc_y zonatra1 munitra1 co_tr1_x
## Min. :7345675 Min. : 0.0 Min. : 1.0 Min. :281743
## 1st Qu.:7388271 1st Qu.: 62.0 1st Qu.:36.0 1st Qu.:327298
## Median :7394071 Median :135.0 Median :36.0 Median :331759
## Mean :7392650 Mean :178.2 Mean :33.3 Mean :333450
## 3rd Qu.:7397252 3rd Qu.:296.0 3rd Qu.:36.0 3rd Qu.:337215
## Max. :7429365 Max. :460.0 Max. :99.0 Max. :414300
## NA's :140201 NA's :84330 NA's :84330 NA's :84771
## co_tr1_y ocup1 zonatra2 co_tr2_x
## Min. :7344733 Min. : 1.0 Min. : 0.0 Min. :289390
## 1st Qu.:7389059 1st Qu.:507.0 1st Qu.: 61.0 1st Qu.:328182
## Median :7393644 Median :706.0 Median :132.0 Median :332053
## Mean :7392735 Mean :659.8 Mean :173.3 Mean :333593
## 3rd Qu.:7396817 3rd Qu.:903.0 3rd Qu.:283.0 3rd Qu.:337427
## Max. :7429607 Max. :925.0 Max. :460.0 Max. :394538
## NA's :84771 NA's :84330 NA's :193095 NA's :193121
## co_tr2_y ocup2 n_viag fe_via
## Min. :7351611 Min. : 1.0 Min. : 1.000 Min. : 2.743
## 1st Qu.:7388468 1st Qu.:507.0 1st Qu.: 1.000 1st Qu.: 51.896
## Median :7393105 Median :513.0 Median : 2.000 Median : 111.211
## Mean :7392278 Mean :628.7 Mean : 2.131 Mean : 224.527
## 3rd Qu.:7396076 3rd Qu.:707.0 3rd Qu.: 2.000 3rd Qu.: 291.584
## Max. :7426840 Max. :925.0 Max. :18.000 Max. :3164.922
## NA's :193121 NA's :193095 NA's :27033 NA's :27033
## dia_sem tot_viag zona_o co_o_x
## Min. :0.000 Min. : 0.000 Min. : 1.0 Min. :281677
## 1st Qu.:3.000 1st Qu.: 2.000 1st Qu.: 73.0 1st Qu.:326946
## Median :5.000 Median : 2.000 Median :178.0 Median :332258
## Mean :4.501 Mean : 2.813 Mean :195.6 Mean :334349
## 3rd Qu.:6.000 3rd Qu.: 4.000 3rd Qu.:306.0 3rd Qu.:339602
## Max. :6.000 Max. :18.000 Max. :460.0 Max. :422922
## NA's :27033 NA's :27033 NA's :27032
## co_o_y zona_d co_d_x co_d_y
## Min. :7344733 Min. : 1.0 Min. :281677 Min. :7344733
## 1st Qu.:7388444 1st Qu.: 73.0 1st Qu.:326952 1st Qu.:7388447
## Median :7393612 Median :178.0 Median :332258 Median :7393612
## Mean :7392608 Mean :195.5 Mean :334352 Mean :7392605
## 3rd Qu.:7397090 3rd Qu.:306.0 3rd Qu.:339600 3rd Qu.:7397088
## Max. :7429607 Max. :460.0 Max. :422922 Max. :7429607
## NA's :27032 NA's :27033 NA's :27032 NA's :27032
## zona_t1 co_t1_x co_t1_y zona_t2
## Min. : 1.0 Min. :294065 Min. :7358038 Min. : 1.0
## 1st Qu.: 65.0 1st Qu.:328762 1st Qu.:7389141 1st Qu.: 43.0
## Median :151.0 Median :333248 Median :7395071 Median :127.0
## Mean :166.4 Mean :334928 Mean :7392992 Mean :154.1
## 3rd Qu.:258.0 3rd Qu.:339072 3rd Qu.:7397110 3rd Qu.:257.0
## Max. :459.0 Max. :393750 Max. :7424588 Max. :458.0
## NA's :179317 NA's :179317 NA's :179317 NA's :193051
## co_t2_x co_t2_y zona_t3 co_t3_x
## Min. :294065 Min. :7360024 Min. : 1.0 Min. :302443
## 1st Qu.:329939 1st Qu.:7389593 1st Qu.: 81.0 1st Qu.:327114
## Median :333273 Median :7395159 Median :193.0 Median :333248
## Mean :335184 Mean :7393068 Mean :196.3 Mean :335953
## 3rd Qu.:339072 3rd Qu.:7396971 3rd Qu.:291.0 3rd Qu.:344150
## Max. :379225 Max. :7424588 Max. :458.0 Max. :379148
## NA's :193051 NA's :193051 NA's :196333 NA's :196333
## co_t3_y h_saida min_saida anda_o
## Min. :7363727 Min. : 0.00 Min. : 0.00 Min. : 0.000
## 1st Qu.:7388820 1st Qu.: 8.00 1st Qu.: 0.00 1st Qu.: 0.000
## Median :7395159 Median :13.00 Median :15.00 Median : 1.000
## Mean :7393268 Mean :12.98 Mean :18.27 Mean : 2.185
## 3rd Qu.:7397397 3rd Qu.:17.00 3rd Qu.:30.00 3rd Qu.: 2.000
## Max. :7424588 Max. :23.00 Max. :59.00 Max. :60.000
## NA's :196333 NA's :27033 NA's :27033 NA's :27048
## h_cheg min_cheg anda_d duracao
## Min. : 0.00 Min. : 0.00 Min. : 0.000 Min. : 1.00
## 1st Qu.: 9.00 1st Qu.: 5.00 1st Qu.: 0.000 1st Qu.: 14.00
## Median :13.00 Median :20.00 Median : 1.000 Median : 25.00
## Mean :13.37 Mean :22.07 Mean : 2.145 Mean : 35.88
## 3rd Qu.:18.00 3rd Qu.:40.00 3rd Qu.: 2.000 3rd Qu.: 50.00
## Max. :23.00 Max. :59.00 Max. :50.000 Max. :300.00
## NA's :27033 NA's :27033 NA's :27048 NA's :27033
## vl_est id_ordem distancia
## Min. : 0.00 Min. : 1 Min. : 1.28
## 1st Qu.: 6.00 1st Qu.: 49175 1st Qu.: 845.94
## Median : 50.00 Median : 98350 Median : 2590.43
## Mean : 60.57 Mean : 98350 Mean : 5229.64
## 3rd Qu.:100.00 3rd Qu.:147524 3rd Qu.: 6941.57
## Max. :800.00 Max. :196698 Max. :84099.56
## NA's :194025 NA's :27984
Não necessariamente uma variável numérica é uma variável quantitativa, ex.: a variável “zona” apesar de numérica é uma variável qualitativa, uma vez que cada número de 1 a 460 representa uma zona do domicílio.
Como exemplo de variável quantitativa temos a variável “distancia”, cujo valor mínimo foi 1,28m e máximo pouco mais de 84Km, sendo a média cerca de 5,2Km.
Qual o comportamento da distância percorrida diariamente pelos entrevistados?
ggplot(aes(x = distancia),
data = OD_2007_v2d) +
geom_histogram()+
labs(title = "Fig. 1: Distância total percorrida por dia, em [m]")
A distância parece ser uma variável do tipo “cauda longa”, como em uma distribuição exponencial negativa.
Será que aplicando a função logarítmica poderíamos entender melhor essa variável?
ggplot(OD_2007_v2d, aes(x = distancia)) +
geom_histogram() +
scale_x_log10() +
labs(title =
"Fig. 2: Logaritmo da Distância total percorrida por dia, em [m]")
Com essa transformação, a variável distância parece ser uma distribuição assimétrica negativa, com o pico da ordem de 8Km.
Como é a distribuição das viagens?
ggplot(aes(x = n_viag),
data = subset(OD_2007_v2d, !is.na(n_viag)))+
geom_bar()+
labs(title = "Fig. 3: Número de viagens realizadas por dia")
A grande maioria utiliza uma ou duas viagens diariamente.
Qual a classe social dos respondentes?
ggplot(aes(x = criterio_b),
data= OD_2007_v2d)+
geom_bar()+
labs(title = "Fig. 4: Classe social dos respondentes")
Essa variável parece ter uma distribuição normal, sendo a Classe B2 a moda.
Quais seriam os motivos das viagens?
ggplot(aes(x = motivo_o),
data = OD_2007_v2d)+
geom_bar()+
labs(title = "Fig. 5: Motivos da Viagem")+
theme(axis.text.x = element_text(angle = 30, hjust = 0.3))
O motivo Trabalho foi desmembrado pelo tipo de atividade econômica (Indústria, Comércio e Serviço), os valores comprovam a força do setor de serviços em São Paulo; um número considerável - da mesma ordem da Educação - não informou o motivo (NA).
Parece que Trabalho e Educação são os principais fatores geradores de demanda de transporte na RMSP.
Na Fig. 2 temos a distância percorrida, mas quanto será os gastos de tempo (duração) nestas viagens?
ggplot(OD_2007_v2d, aes(duracao))+
geom_freqpoly()+
scale_x_continuous(limits = c(0,max(OD_2007_v2d$duracao)))+
labs(title = "Fig. 6: Duração da viagem, em [m]")
A curva é tem um pico (moda da duração) por volta de 20 minutos, depois sempre cai, mas também sempre com um repique (aproximadamente 35, 60, 90, 125, 160), muito interessante esse fenômeno, como explicá-lo?
Qual o modal de transporte utilizado para fazer as viagens?
ggplot(aes(x = modoprin),
data = OD_2007_v2d)+
geom_bar()+
labs(title = "Fig. 7: Principal Modo de Viagem")+
theme(axis.text.x = element_text(angle = 90, hjust = 0.3))
Os modos principais mais utilizados são: a pé; automóvel; ônibus em várias modalidades, com destaque para os municipais de SP; carona; Metrô e Trem. Também há um grande número que não informaram.
A quantidade de pessoas a pé chama a atenção, havia uma questão interessante no questionário: Por que viajou a pé ou de bike?
ggplot(aes(x = pe_bici),
data = OD_2007_v2d)+
geom_bar()+
labs(title = "Fig. 8: Por que viajou a pé ou de bike")+
theme(axis.text.x = element_text(angle = 90, hjust = 0.3))
A grande maioria não respondeu (NA), vamos exclui-los para melhorar a visualização.
ggplot(aes(x = pe_bici),
data = subset(OD_2007_v2d, !is.na(pe_bici)))+
geom_bar()+
labs(title = "Fig. 9: Por que viajou a pé ou de bike, sem os NAs")+
theme(axis.text.x = element_text(angle = 30, hjust = 0.3))
A grande maioria optou por ir a pé devido a pequena distância da viagem.
Como a pesquisa foi distribuída na RMSP em relação as zonas do domicílio, do trabalho e da escola?
Todas as Zonas do domicílio e municípios podem ser acessados aqui.
p1 <- ggplot(OD_2007_v2d, aes(zona))+
geom_freqpoly()+
labs(title = "Zonas do Domicílio")
p2 <- ggplot(OD_2007_v2d, aes(zonatra1))+
geom_freqpoly()+
labs(title = "Zonas do Primeiro Trabalho")
p3 <- ggplot(OD_2007_v2d, aes(zonatra2))+
geom_freqpoly()+
labs(title = "Zonas do Segundo Trabalho")
p4 <- ggplot(OD_2007_v2d, aes(zona_esc))+
geom_freqpoly()+
labs(title = "Zonas da Escola")
grid.arrange(p1,p2,p3,p4, ncol = 2,
top = textGrob("Fig. 10: Amostras por zonas",
gp = gpar(fontsize=15,font=8),
just = "right"))
As regiões com maior número de amostras por zona do domicílio ocorreu por volta da zona 80 (Jardim Paulistano, Jardim Europa e Pinheiros) e zona 300 (Paraisópolis, Vila Suzana e Parque Arariba), todas na Cidade de São Paulo; já as zonas com menores amostragem foram as imediações da 460 (cidades de: Santana de Parnaíba e Pirapora do Bom Jesus) e 350 (Arujazinho, Arujá e Fazenda Velha), no município de Arujá. Seria interessante ver essas amostras num mapa, seria possível?
A região que mais gera empregos (primeiro trabalho) fica no entorno da zona 80 (Jardim Paulistano, Jardim Europa e Pinheiros); do lado oposto a que gera menos oportunidades é a 350 (Arujazinho, Arujá e Fazenda Velha), no município de Arujá).
O gráfico do Segundo Trabalho é bem parecido com o do Primeiro, contudo, agora tem-se por volta da região 60 até 80 como as que mais geram empregos; do lado oposto continua a região 350.
Com relação a educação, o destaque positivo é para o entorno da região 30 (Masp, Higienópolis e Vila Buarque); já os destaques negativos são as zonas 350 (Arujá), e 450 a 460, envolvendo os municípios de Jandira, Cotia, Vargem Grande Paulista, Itapevi, Santana do Parnaíba e Pirapora do Bom Jesus. Especialmente com relação a geração de oportunidades de trabalho, é possível notar um grande desequilíbrio tendendo favoravelmente para as zonas entre 70 e 90; para a educação isso também acontece, contudo, a predominância não é tão grande. Conforme a Fig. 5, trabalho e educação são os principais motivos de viagens, assim, é de se esperar que as zonas no entorno da 80 (Clínicas, Oscar Freire, Trianon, Jardim Paulistano, Jardim Europa, Pinheiros, Vila Madalena, PUC, Cardoso de Almeida, Zequinha de Abreu) sejam as que mais demandam viagens.
Para entender melhor como os principais fatores geradores de demanda de viagens (trabalho e educação) se comportam nas 460 zonas do domicílio foram selecionadas inicialmente 9 variáveis, sendo elas:
OD_subset <- subset(OD_2007_v2d, select = c(zona, zona_esc, zonatra1,
zonatra2, n_viag,
duracao, modoprin,
distancia, criterio_b))
names(OD_subset)
## [1] "zona" "zona_esc" "zonatra1" "zonatra2" "n_viag"
## [6] "duracao" "modoprin" "distancia" "criterio_b"
Lembrando que a descrição completa de todas as variáveis pode ser acessada aqui.
Com isto, podemos classificar as 9 variáveis selecionadas, sendo as qualitativas:
OD_subset_NMetrica <- subset(OD_2007_v2d, select = c(zona, zona_esc, zonatra1,
zonatra2, modoprin,
criterio_b))
names(OD_subset_NMetrica)
## [1] "zona" "zona_esc" "zonatra1" "zonatra2" "modoprin"
## [6] "criterio_b"
E as quantitativas:
OD_subset_Metrica <- subset(OD_2007_v2d, select = c(n_viag,
duracao, distancia))
names(OD_subset_Metrica)
## [1] "n_viag" "duracao" "distancia"
Conforme abordado anteriormente, para as variáveis não métricas só é possível determinar a sua moda. Abaixo tem-se as frequências ordenadas na ordem decrescente - apresentando as 3 primeiras e as 3 últimas - sendo, a primeira - isto é, a maior de frequência a moda da variável.
Para a variável zona:
Freq_zona <- as.data.frame(table(OD_subset_NMetrica$zona))
names(Freq_zona) <- c("zona", "Freq")
moda_zona <- subset(Freq_zona$zona, Freq_zona$Freq == max(Freq_zona$Freq))
moda_zona <- arrange(Freq_zona, desc(Freq), zona)
head(moda_zona, 3)
## zona Freq
## 1 95 1559
## 2 33 1336
## 3 63 1280
tail(moda_zona, 3)
## zona Freq
## 421 413 220
## 422 278 192
## 423 450 187
Portando, para a variável “zona”, a moda é a zona de número 95 (Alto de Pinheiros) com 1559 registros; já a zona 450 (Ribeirão das Pombas) obteve o menor número de registros, sendo 187.
Para a variável zona escolar(zona_esc):
Freq_zona_esc <- as.data.frame(table(OD_subset_NMetrica$zona_esc))
names(Freq_zona_esc) <- c("zona_esc", "Freq")
moda_zona_esc <- subset(Freq_zona_esc$Zona_esc,
Freq_zona_esc$Freq == max(Freq_zona_esc$Freq))
moda_zona_esc <- arrange(Freq_zona_esc, desc(Freq), zona_esc)
head(moda_zona_esc, 3)
## zona_esc Freq
## 1 31 1151
## 2 317 1128
## 3 92 727
tail(moda_zona_esc, 3)
## zona_esc Freq
## 436 417 2
## 437 105 1
## 438 343 1
Portando, para a variável zona escolar, a moda é a zona de número 31 (Vila Buarque) com 1151 registros.
Para a variável zona de trabalho 1(zonatra1):
Freq_zonatra1 <- as.data.frame(table(OD_subset_NMetrica$zonatra1))
names(Freq_zonatra1) <- c("zonatra1", "Freq")
moda_zonatra1 <- subset(Freq_zonatra1$zonatra1,
Freq_zonatra1$Freq == max(Freq_zonatra1$Freq))
moda_zonatra1 <- arrange(Freq_zonatra1, desc(Freq), zonatra1)
head(moda_zonatra1,3)
## zonatra1 Freq
## 1 5 1768
## 2 1 1714
## 3 67 1584
tail(moda_zonatra1,3)
## zonatra1 Freq
## 447 321 2
## 448 323 2
## 449 422 2
Portando, para a variável zona de trabalho 1, a moda é a zona de número 5 (República) com 1768 registros.
Para a variável zona de trabalho 2 (zonatra2):
Freq_zonatra2 <- as.data.frame(table(OD_subset_NMetrica$zonatra2))
names(Freq_zonatra2) <- c("zonatra2", "Freq")
moda_zonatra2 <- subset(Freq_zonatra2$zonatra2,
Freq_zonatra2$Freq == max(Freq_zonatra2$Freq))
moda_zonatra2 <- arrange(Freq_zonatra2, desc(Freq), zonatra2)
head(moda_zonatra2,3)
## zonatra2 Freq
## 1 76 54
## 2 54 52
## 3 383 51
tail(moda_zonatra2,3)
## zonatra2 Freq
## 314 378 1
## 315 423 1
## 316 455 1
Portando, para a variável zona de trabalho 2, a moda é a zona de número 76 (Clínicas) com 54 registros.
Para a variável modo principal (modoprin):
Freq_modoprin <- as.data.frame(table(OD_subset_NMetrica$modoprin))
names(Freq_modoprin) <- c("modoprin", "Freq")
moda_modoprin <- subset(Freq_modoprin$modoprin,
Freq_modoprin$Freq == max(Freq_modoprin$Freq))
arrange(Freq_modoprin, desc(Freq), modoprin)
## modoprin Freq
## 1 A pé 49715
## 2 Dirigindo Automóvel 44584
## 3 Ônibus do Municipio de São Paulo 21943
## 4 Passageiro de Automóvel 16804
## 5 Metrô 12753
## 6 Escolar 5098
## 7 Ônibus outros municípios 4730
## 8 Ônibus Metropolitano 2645
## 9 Moto 2582
## 10 Trem 2471
## 11 Microônibus/van do Município de São Paulo 1865
## 12 Ônibus Fretado 1484
## 13 Bicicleta 1354
## 14 Táxi 1149
## 15 Microônibus de outros municípios 207
## 16 Outros 196
## 17 Microônibus/van metropolitano 85
Portando, para a variável “modoprin”, a moda é o modal de transporte “A pé” com 49715 registros.
Para a variável Critério de Classificação Econômica Brasil (criterio_b):
Freq_criterio_b <- as.data.frame(table(OD_subset_NMetrica$criterio_b))
names(Freq_criterio_b) <- c("criterio_b", "Freq")
moda_criterio_b <- subset(Freq_criterio_b$mcriterio_b,
Freq_criterio_b$Freq == max(Freq_criterio_b$Freq))
arrange(Freq_criterio_b, desc(Freq), criterio_b)
## criterio_b Freq
## 1 B2 46313
## 2 C1 43647
## 3 B1 33217
## 4 C2 28110
## 5 A2 24475
## 6 D 12854
## 7 A1 7044
## 8 E 1038
Portando, para a variável criterio_b, a moda é a classe social B2 com 46313 registros.
Já para as variáveis métricas podemos calcular várias outras estatísticas, tais como:
describe(OD_subset_Metrica)
## vars n mean sd median trimmed mad min
## n_viag 1 169665 2.13 1.40 2.00 1.88 1.48 1.00
## duracao 2 169665 35.88 33.33 25.00 29.95 22.24 1.00
## distancia 3 168714 5229.64 6740.01 2590.43 3834.11 3108.44 1.28
## max range skew kurtosis se
## n_viag 18.00 17.00 2.27 8.44 0.00
## duracao 300.00 299.00 1.93 4.67 0.08
## distancia 84099.56 84098.28 2.54 9.19 16.41
E ainda verificar suas correlações, conforme abaixo:
corr.test(OD_subset_Metrica, use = "pairwise.complete.obs")
## Call:corr.test(x = OD_subset_Metrica, use = "pairwise.complete.obs")
## Correlation matrix
## n_viag duracao distancia
## n_viag 1.00 -0.12 -0.10
## duracao -0.12 1.00 0.65
## distancia -0.10 0.65 1.00
## Sample Size
## n_viag duracao distancia
## n_viag 169665 169665 168713
## duracao 169665 169665 168713
## distancia 168713 168713 168714
## Probability values (Entries above the diagonal are adjusted for multiple tests.)
## n_viag duracao distancia
## n_viag 0 0 0
## duracao 0 0 0
## distancia 0 0 0
##
## To see confidence intervals of the correlations, print with the short=FALSE option
Conforme saída acima, a correlação mais significante é entre as variáveis “duração” e “distancia”, com valor de 0,65.
A base possui 196.698 registros de 123 variáveis socioeconômicas de moradores da RMSP, sendo que uma descrição completa de todas elas pode ser acessada aqui.
Os principais motivos das viagens são o trabalho ou a educação, sendo os principais modais das viagens o a pé, automóvel, ônibus, metrô e trem, nesta ordem.
Notou-se um grande desequilíbrio na oferta de oportunidades de trabalho e educação, sendo a região no entorno da zona 80 o destaque positivo.
Como trabalho e educação parecem ser os principais fatores geradores de demanda de viagens, quero entender melhor como essas variáveis se comportam nas 460 zonas do domicílio
As distâncias, tempo e número de viagens realizadas, bem como a categorização social dos passageiros.
Não.
Sim, por exemplo, foi verificado que a variável “distancia” possuía cauda longa, com isso, foi realizado transformação logarítmica no eixo x para melhorar a sua visualização.
Como as classes sociais estão distribuídas nas zonas tráfego?
ggplot(data = OD_2007_v2d, aes(x = zona))+
geom_density(aes(fill = criterio_b), position = "stack")+
labs(title = "Fig. 11: KDE zona de domicílio por classe social")
Conforme ilustrado no gráfico de KDE - kernel density estimate acima, as classes mais abastadas (A1 e A2) possuem picos bem caracterizados ao redor das zonas 75 e 290.
Como as classes sociais estão distribuídas nas zonas escolares?
ggplot(data = OD_2007_v2d, aes(x = zona_esc))+
geom_density(aes(fill = criterio_b), position = "stack")+
labs(title = "Fig. 12: KDE zona escolar por classe social")
Novamente nota-se o desequilíbrio do lado esquerdo do gráfico, com pico no entorno da zona 45; e ainda mais 3 picos menos nos entornos das zonas 175, 300 e 380.
Como as classes sociais estão distribuídas nas zonas de trabalho?
ggplot(data = OD_2007_v2d, aes(x = zonatra1))+
geom_density(aes(fill = criterio_b), position = "stack")+
labs(title = "Fig. 13: KDE zona de trabalho por classe social")
Gráfico bastante parecido com o da Fig. 11 - KDE da zona de domicílio por classe social.
Como é o deslocamento das pessoas para trabalhar?
ggplot(aes(x = zona, y = zonatra1), data = OD_2007_v2d) +
geom_point()+
labs(title =
"Fig. 14: Diagramas de dispersão zona domicílio x zona de trabalho")
A visualização não está muito boa, vamos tentar melhorá-la aplicando um alpha = 1/10.
ggplot(aes(x = zona, y = zonatra1), data = OD_2007_v2d) +
geom_jitter(alpha = 1/10)+
geom_smooth(method ='lm', color ='red')+
geom_abline(xintercept = 460, yintercept = 460, color ='green',size = 1)+
labs(title =
"Fig. 15: Diag. disper. zonas do domicílio x de trabalho c/ filtro")
A curva verde seria o ideal, todos trabalhando na mesma zona de domicílio, minimizando a necessidade de transporte (viagens). A curva vermelha é um modelo linear que representa o fenômeno.
Como é o descolamento das pessoas para trabalhar, agora em função da classe social?
ggplot(aes(x = zona, y = zonatra1), data = OD_2007_v2d) +
geom_jitter(alpha = 1/5)+
facet_wrap(~ criterio_b)+
geom_abline(xintercept = 460, yintercept = 460, color ='green', size = 1)+
geom_smooth(method ='lm', color ='red')+
labs(title=
"Fig. 16: Diagr. de dispersão zona x zona de trab. por classe social")
Observando o desalinhamento das curvas (verde e vermelha) quanto maior a classe social, estas estão mais desalinhadas, o que indica que as classes mais abastadas se deslocam mais de zonas para trabalhar. Isto parece ir contra ao senso comum, necessário mais investigações.
Como é o descolamento das pessoas para estudar?
ggplot(aes(x = zona, y = zona_esc), data = OD_2007_v2d) +
geom_point()+
labs(title = "Fig. 17: Diagramas de dispersão zona x zona de escolar")
É possível verificar neste gráfico uma concentração de pontos formando uma reta a 45º, seria a curva ideal. Vamos plotar a curva ideal, o modelo de regressão e incluir o grau de instrução (“estuda”) para tentar melhorar a visualização.
ggplot(aes(x = zona, y = zona_esc), data = OD_2007_v2d) +
geom_jitter(aes(color = estuda))+
geom_smooth(method ='lm', color ='red')+
geom_abline(xintercept = 460, yintercept = 460, color ='pink', size = 1)+
labs(title =
"Fig. 18: Diag. de dispersão zona x zona de trab.por classe social com filtro")
Comparado com a Fig. 15, que trata da variável zona de trabalho, para estudar observa-se um desequilíbrio menor em relação aos deslocamentos necessários. Contudo, observa-se no entorno da curva ideal as escolaridades mais baixas, já o 3ºgrau/Superior está mais afastado do ideal, isto é, este grupo se desloca mais para estudar. Vamos observar as curvas de dispersão para trabalhar e para estudar lado a lado.
p1 <- ggplot(aes(x = zona, y = zonatra1), data = OD_2007_v2d) +
geom_jitter(alpha = 1/10)+
geom_smooth(method ='lm', color ='red')+
geom_abline(xintercept = 460, yintercept = 460, color ='green',size = 1)
p2 <- ggplot(aes(x = zona, y = zona_esc), data = OD_2007_v2d) +
geom_jitter(alpha = 1/10)+
geom_smooth(method ='lm', color ='red')+
geom_abline(xintercept = 460, yintercept = 460, color ='green',size = 1)
grid.arrange(p1, p2, ncol=2,
top=textGrob("Fig. 19: Diag. de dispersão Zonas Trab. e Escola",
gp = gpar(fontsize = 15,font = 8), just = "center"))
Fica evidente o desalinhamento maior para a variável zona de trabalho “zonatra1”.
Como é o descolamento das pessoas para estudar, agora em função da classe social?
ggplot(aes(x = zona, y = zona_esc), data = OD_2007_v2d) +
geom_jitter(alpha = 1/5)+
facet_wrap(~ criterio_b)+
geom_abline(xintercept = 460, yintercept = 460, color ='green',size = 1)+
geom_smooth(method ='lm', color ='red')+
labs(title =
"Fig. 20: Diag. de dispersão zona x zona de escolar por classe social")
Interessante, o desvio (curva vermelha) em relação ao ideal (curva verde) é menor para variável “zona_esc” do que para a variável “zonatra1” - Fig. 16, isto principalmente para as classes sociais mais baixas. Quer dizer, as classes sociais menos favorecidas se deslocam menos para estudar. Como explicar isso?
Apesar de não termos escolhido a variável “estuda” na fase de análise univariada, vamos observá-la agora para tentar entender o achado acima.
Como as classes sociais estudam?
ggplot(data = subset(OD_2007_v2d, OD_2007_v2d$estuda !="Não") , aes(estuda))+
geom_bar()+
facet_wrap(~ criterio_b, scales = "free")+
theme(axis.text.x = element_text(angle = 15, hjust = 0.3))+
labs(title = "Fig. 21: Histograma Estudo por classe social")
Para as classes mais altas (A1, A2 e B1) a moda é 3º grau/Superior; já para as demais a moda é 1º grau/Fundamental. Aparentemente isso explica na Fig. 20 que quanto menor a classe social menos os moradores precisam sair da sua zona de domicílio para estudar; acontece que nestas classes a escola é predominantemente (moda) o 1º grau/Fundamental que normalmente fica no próprio bairro; já as classes mais rica a moda da escola é 3º grau/Superior que costumam ser mais afastadas.
Com relação aos modais, como cada uma das zonas os utilizam?
ggplot(data = subset(OD_2007_v2d, !is.na(modoprin)), aes(x = zona))+
geom_histogram()+
facet_wrap(~ modoprin, scales = "free")+
labs(title = "Fig. 22: zona por modal de transporte")+
theme(axis.text.x = element_text(angle = 30, hjust = 0.3))
Interessante notar: i) a utilização do Metrô mais distribuída na cidade de São Paulo e o Trem na Região Metropolitana; ii) O Táxi na região de maior poder aquisitivo, bem como o automóvel, contudo este tem outro pico por volta da zona 300; e iii) Os dois picos de Bicicleta.
Podemos ver isso em detalhes, por exemplo, para a zona 1?
detach("package:plyr", unload = TRUE)
OD_2007_v2d %>% group_by(zona, modoprin) %>%
summarise(total_zona = n())
## Source: local data frame [4,994 x 3]
## Groups: zona [?]
##
## zona modoprin total_zona
## <dbl> <fctr> <int>
## 1 1 Ônibus do Municipio de São Paulo 50
## 2 1 Ônibus outros municípios 1
## 3 1 Ônibus Fretado 1
## 4 1 Escolar 6
## 5 1 Dirigindo Automóvel 16
## 6 1 Passageiro de Automóvel 11
## 7 1 Táxi 2
## 8 1 Metrô 51
## 9 1 Bicicleta 4
## 10 1 A pé 117
## # ... with 4,984 more rows
Desconsiderando o modo “a p锓, a zona 1 utiliza predominantemente os modais Metrô (51) e Ônibus Mun. SP (50).
Quais os valores máximos e mínimos para os modais?
a <- table(OD_2007_v2d$zona, OD_2007_v2d$modoprin)
apply(a, 2, max)
## Ônibus do Municipio de São Paulo
## 169
## Ônibus outros municípios
## 172
## Ônibus Metropolitano
## 66
## Ônibus Fretado
## 24
## Escolar
## 108
## Dirigindo Automóvel
## 797
## Passageiro de Automóvel
## 258
## Táxi
## 43
## Microônibus/van do Município de São Paulo
## 39
## Microônibus de outros municípios
## 22
## Microônibus/van metropolitano
## 12
## Metrô
## 148
## Trem
## 58
## Moto
## 31
## Bicicleta
## 47
## A pé
## 380
## Outros
## 10
O valor máximo obtido para o modal Automóvel foi 797.
apply(a, 2, min)
## Ônibus do Municipio de São Paulo
## 0
## Ônibus outros municípios
## 0
## Ônibus Metropolitano
## 0
## Ônibus Fretado
## 0
## Escolar
## 0
## Dirigindo Automóvel
## 5
## Passageiro de Automóvel
## 1
## Táxi
## 0
## Microônibus/van do Município de São Paulo
## 0
## Microônibus de outros municípios
## 0
## Microônibus/van metropolitano
## 0
## Metrô
## 0
## Trem
## 0
## Moto
## 0
## Bicicleta
## 0
## A pé
## 5
## Outros
## 0
Já o mínimo foi 5.
A que zonas pertencem esses valores?
b.data <- data.frame(a)
Zmax_carro <- b.data$Var1[b.data$Freq == 797 &
b.data$Var2 == "Dirigindo Automóvel"]
Zmax_carro
## [1] 95
## 423 Levels: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ... 460
A zona 95(Alto de Pinheiros) foi a zona que mais utilizou automóvel.
Zmin_carro <- b.data$Var1[b.data$Freq == 5 &
b.data$Var2 == "Dirigindo Automóvel"]
Zmin_carro
## [1] 3
## 423 Levels: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ... 460
A Zona 3 (Praça João Mendes) foi a zona que menos utilizou automóvel.
Vamos agora explorar as variáveis métricas.
pairs.panels(OD_subset_Metrica, main = "Fig. 23: Variáveis métricas")
Conforme Fig. 23, das três variáveis quantitativas escolhidas, somente há correlação considerável entre as variáveis “duracao” e “distancia”, sendo esta igual a 0,65.
Como será as distâncias em cada uma das classes sociais?
ggplot(OD_2007_v2d) +
geom_boxplot(aes(x = criterio_b, y = distancia, fill = criterio_b))+
labs(title=
"Fig. 24: Dist. total percorrida por dia, em [m], por classe social")
As classes C1 até E possuem outliers mais afastados; sendo que as classes C1 e D possuem os respondentes que percorrem mais de 80Km por dia.
As classes menos abastadas (C1 ~ E) possuem mediana menor que as mais afortunadas, isso parece ir de encontro com o senso comum!
Como a duração se relaciona com a distância?
ggplot(aes(x = duracao, y = log(distancia)), data = OD_2007_v2d) +
geom_jitter(alpha = 1/20)+
geom_smooth(method = 'auto', color = 'red')+
labs(title = "Fig. 25: Diagramas de dispersão duração x distância")
Foi aplicado transformação logarítmica no eixo y, com isto, a relação entre essas variáveis parece respeitar uma relação logarítmica.
Como seria está equação?
- Variável independente (explicativa) é a duração ;
- Variável dependente é a distância.
Aplicando um modelo de regressão linear:
modelo_dur_dis <- lm(duracao ~ log(distancia), data = OD_2007_v2d)
summary(modelo_dur_dis)
##
## Call:
## lm(formula = duracao ~ log(distancia), data = OD_2007_v2d)
##
## Residuals:
## Min 1Q Median 3Q Max
## -78.727 -16.049 -3.943 9.528 246.174
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -78.47568 0.34915 -224.8 <2e-16 ***
## log(distancia) 14.76847 0.04431 333.3 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 25.89 on 168711 degrees of freedom
## (27985 observations deleted due to missingness)
## Multiple R-squared: 0.3971, Adjusted R-squared: 0.3971
## F-statistic: 1.111e+05 on 1 and 168711 DF, p-value: < 2.2e-16
Conforme saída acima (Multiple R-squared: 0.3971), apenas 39,7% da variação da duração pode ser explicada pelo logarítmico da distância.
Para todas as 6 variáveis qualitativas de interesse foi determinado sua moda, sendo a zona do domicílio com maior número de amostras o Alto de Pinheiros (95); das amostras pesquisadas que estudam a maior parte o fez na Vila Buarque (31); dos que trabalham em um só emprego a maioria acontece na República (5); a classe social da maioria é a B2; sendo o automóvel o principal meio de transporte.
O diagrama de dispersão entre as zonas do domicílio (onde os entrevistados vivem) e as zonas de trabalho evidenciam um desequilíbrio, o que faz com que as pessoas tenham que deixar suas regiões para trabalharem em outras, gerando assim necessidade de viagens. O mesmo diagrama, mas agora em relação a zona de estudo, também evidencia um desiquilíbrio, mas em uma amplitude menor.
Foi possível identificar quais os modais de transporte cada uma das zonas utilizam, propiciando achados tais como os padrões de utilização do automóvel, táxi e bicicleta.
O modelo de regressão linear utilizado apresentou r² = 39,7% , isto é, 39,7% da variação duração pode ser explicada pelo logarítmico da variável distância.
Sim , a variável “estuda” foi utilizada para tentar entender porque as classes mais altas (A1, A2 e B1) se deslocam mais para estudas dos que as classes mais baixas. Para as classes mais altas a moda é 3º grau/Superior, enquanto para as demais a moda é 1º grau/Fundamental. Considerando que normalmente as escolas do 1º grau/Fundamental ficam no próprio bairro, isso pode explicar na Fig. 20: quanto menor a classe social menos os moradores precisam sair da sua zona para estudar.
Para as 3 variáveis quantitativas estudas, as únicas que apresentaram correção considerável foram “duracao” e “distancia”, sendo essa correção classificada como moderada (0,65).
Quero ver as variáveis duração x distância em função da classe social.
ggplot(aes(x = duracao, y = distancia), data = OD_2007_v2d) +
geom_point(aes(color = criterio_b))+
scale_color_brewer(type = 'qual')+
scale_y_log10()+
labs(title = "Fig. 26: Duração x Distância, por classe social")
Conforme já observado na Fig. 25, está relação parece com uma curva logarítmica.
Vamos tentar melhorar a visualização separando por classe social e modal de transporte.
ggplot(aes(x = duracao, y = distancia), data = OD_2007_v2d) +
geom_point(aes(color = modoprin))+
scale_fill_manual(values = getPalette(colourCount))+
facet_wrap(~criterio_b)+
scale_y_log10()+
labs(title = "Fig. 27: Duração x Distância, por modal")
A forma da curva (logarítmica) parece ser similar para todas as classes sociais; contudo, é nítido a maior utilização do modal automóvel nas 3 classes mais altas.
E se invertermos a ordem, filtrando por modal e classe social?
ggplot(aes(x = duracao, y = distancia), data = OD_2007_v2d) +
geom_point(aes(color = criterio_b))+
scale_color_brewer(type = 'qual')+
facet_wrap(~modoprin)+
labs(title =
"Fig. 28: Duração x Distância, por classe social e modal de transp.")
Estranho para o modal “a pé”, os dois pontos da classe D de 80Km.
Vamos verificar com relação a velocidade (distância/duração).
ggplot(aes(x = zona, y = (distancia/1000)/(duracao/60)), data = OD_2007_v2d) +
geom_point(aes(color = criterio_b))+
scale_y_continuous(limits = c(0,120), breaks = seq(0, 120, 25))+
facet_wrap(~ modoprin)+
theme(axis.text.x = element_text(angle = 30, hjust = 0.1))+
labs(title =
"Fig. 29: Zona x velocidade[Km/h], por classe social e modal de transp.")
Como no eixo y temos a razão de duas variáveis “distancia” e “duracao”, essas foram transformadas para obtenção da velocidades em Km/h. Observa-se que para o automóvel, tanto dirigindo como passageiro, uma alta velocidade. O modo a pé também se destaca, mas lembrando que os próprios respondentes afirmaram que utilizam esse modal para pequenas distâncias. Estranho a velocidade do Táxi, esperaria algo parecido com o automóvel.
Aplicando um modelo regressão não linear para as variáveis quantitativas “duracao” e“distancia”.
modelo_dur_dis_nl <- nls(duracao ~ SSlogis(distancia,
Asym, xmid, scal),
data = OD_2007_v2d)
summary(modelo_dur_dis_nl)
##
## Formula: duracao ~ SSlogis(distancia, Asym, xmid, scal)
##
## Parameters:
## Estimate Std. Error t value Pr(>|t|)
## Asym 89.3375 0.2478 360.6 <2e-16 ***
## xmid 6291.8580 34.5669 182.0 <2e-16 ***
## scal 4103.6530 23.6117 173.8 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 24.36 on 168710 degrees of freedom
##
## Number of iterations to convergence: 5
## Achieved convergence tolerance: 6.578e-06
## (27985 observations deleted due to missingness)
Conforme saída, esse modelo apresentou um erro residual padrão (Residual standard error) de 24.36.
Apesar da forma da curva das classes sociais serem parecidas no gráfico de “duracao” x “distancia” por modal (Fig. 27), fica evidente uma maciça utilização do automóvel nas 3 classes sociais mais altas.
Sim, na Fig. 28, para o modal “a pé”, os pontos da ordem de 80Km, me pareceram estranhos.
Sim, foi proposto um modelo não linear utilizando a função logística, conforme Pérez, (2016).
ClasseSocial <- OD_2007_v2d$criterio_b
ggplot(data = OD_2007_v2d, aes(x = zonatra1))+
geom_density(aes(fill = ClasseSocial), position = "stack")+
labs(y = "Densidade", x = "Zona de Trabalho")+
ggtitle("KDE da Zona de Trabalho por Classe Social")+
scale_y_continuous(breaks = seq(0, 0.04, 0.002))+
scale_x_continuous(breaks = seq(0, 460, 20))+
theme(plot.title = element_text(family = "calibri", color ="#346332",
face = "bold", size = 14, hjust = 0.5)) +
theme(axis.title = element_text(family = "calibri", color = "#346332",
face = "bold", size = 16)) +
theme(axis.title.y = element_text(angle = 90, hjust = 0.5))+
theme(axis.text.x = element_text(angle = 30, hjust = 0.5))+
theme(axis.text.y = element_text(angle = 30, hjust = 0.5))
Esse gráfico explicita o desequilibrio na oferta de oportunidades de trabalho na RMSP, que está fortemente concentrado entre as zonas de trabalho de 20 a 100.
Vamos calcular o percentual de empregos nestas zonas:
library(plyr)
freq_zonatra1 <- data.frame(count(OD_2007_v2d$zonatra1))
freq_total_zonatra1 <- sum(freq_zonatra1$freq[2:449])
freq_zonatra1_20_100 <- sum(freq_zonatra1$freq[21:101])
Percent_zonatra1_20_100 = (freq_zonatra1_20_100 / freq_total_zonatra1) * 100
Percent_zonatra1_20_100
## [1] 34.10973
Isto é, as zonas de trabalho 20 a 100, que correspondem a 17,38% das 460 zonas de trabalho, concentram 34,11% das ofertas de emprego na RMSP.
Para uma análise mais apurada, seria intessante levantar qual a população total em cada uma das zonas e verificar quanto da população total representam essas zonas. Contudo, a concentração é evidente, agora quais os efeitos essa concentração provoca?
ggplot(aes(x = zona, y = zonatra1), data = OD_2007_v2d) +
geom_jitter(alpha = 1/10)+
labs(y = "Zona de Trabalho", x = "Zona do Domicílio")+
scale_y_continuous(breaks = seq(0, 460, 20))+
scale_x_continuous(breaks = seq(0, 460, 20))+
geom_smooth(method = 'lm', color = 'red')+
geom_smooth(method = "auto", se = TRUE, fullrange = FALSE, level = 0.95)+
geom_abline(xintercept = 460,
yintercept = 460,
color = 'green',
size = 1)+
ggtitle(" Diagrama de dispersão Zonas do Domicílio x Trabalho")+
theme(plot.title = element_text(family = "calibri", color = "#346332",
face ="bold", size = 14, hjust = 0.5)) +
theme(axis.title = element_text(family = "calibri", color="#346332",
face="bold", size=16)) +
theme(axis.title.y = element_text(angle = 90, hjust = 0.5))+
theme(axis.text.x = element_text(angle = 30, hjust = 0.5))+
theme(axis.text.y = element_text(angle = 30, hjust = 0.5))
Um dos efeitos provocados pela concentração das oportunidades de trabalho apresentadas no Primeiro Gráfico pode ser observado neste segundo. Num sistema ideal todos os pontos estariam sobre a curva verde, isto é, nenhum trabalhador teria que sair da sua zona de domicílio para trabalhar; isto simplificaria muito os sistemas de transporte e consequentemente o investimento do governamental, sem contar com as economias de combustível, tempo, número de acidentes, etc. A curva em vermelho é um modelo de regressão linear ajustando os pontos, ela nos ajuda a visualizar os desvios da situação ideal (verde). A curva azul é um outro modelo de ajuste de curva, somente mais elaborado, mas com a mesma finalidade da vermelha. Como essa necessidade de viagens provocada pelo desequilíbrio impacta as distância percorridas nas diversas classes sociais?
ggplot(OD_2007_v2d) +
geom_boxplot(aes(x = criterio_b, y = distancia, fill = ClasseSocial),
outlier.colour = NA)+
labs(y = "Distância por viagem [m]", x = "Classe Social")+
ggtitle("BoxPlot da Distância por Classe Social")+
theme_economist()+
scale_y_continuous(breaks = seq(0, 15000, 5000))+
coord_cartesian(ylim = c(0,15000))+
theme(plot.title = element_text(family = "calibri", color = "#346332",
face ="bold", size = 14, hjust = 0.5)) +
theme(axis.title = element_text(family = "calibri", color = "#346332",
face = "bold", size = 16)) +
theme(axis.title.y = element_text(angle = 90, hjust = 0.5))+
theme(axis.text.x = element_text(angle = 30, hjust = 0.5))+
theme(axis.text.y = element_text(angle = 30, hjust = 0.5))
Neste gráfico é apresentado a distância percorrida nas viagens segmentado nas diversas classes sociais. Observa-se que a mediana da distância para as classes A1 até B2 são muito próximas, bem como para as classes C1 até a E.
Vamos ver mais detalhes do comportamento da distância em função das classes sociais:
detach("package:plyr", unload = TRUE)
distanciasyClasseSocial <- OD_2007_v2d %>%
group_by(criterio_b) %>%
summarise(mediana = median (as.numeric (distancia), na.rm = TRUE),
media = mean (as.numeric (distancia), na.rm = TRUE),
DesvPad = sd(distancia, na.rm = TRUE),
CV = (DesvPad / media),
min = min(as.numeric (distancia), na.rm = TRUE),
max = max(as.numeric (distancia), na.rm = TRUE),
n = n()) %>%
arrange(-mediana)
head(distanciasyClasseSocial, n = 8)
## # A tibble: 8 × 8
## criterio_b mediana media DesvPad CV min max n
## <fctr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int>
## 1 A1 3245.490 4846.450 5399.300 1.114073 7.232379 58576.33 7044
## 2 A2 3199.099 4972.629 5596.401 1.125441 7.256032 65500.30 24475
## 3 B1 3118.785 5258.955 6178.149 1.174786 2.889239 60964.45 33217
## 4 B2 2788.177 5404.384 6735.399 1.246284 1.282264 66769.74 46313
## 5 C1 2198.575 5385.446 7283.095 1.352366 4.429503 84099.56 43647
## 6 C2 1727.882 5259.763 7520.252 1.429770 6.151829 73514.37 28110
## 7 E 1553.434 4974.937 7673.537 1.542439 22.415218 57589.59 1038
## 8 D 1368.958 4621.459 7351.207 1.590668 10.154211 82674.14 12854
Conforme dados acima, em média, a classe B2 (5,4Km) é a que mais se desloca, já no outro oposto a classe D (4,6Km) é a que menos se locomove; contudo, a distância mínima percorrida pela classe D é de 10,1Km e a máxima chega a 82,7Km; isto ilustra a grande quantidade de pontos fora da curva (outliers), em todas as classes sociais. Esses outliers impactam os valores dos coeficientes de variação - CV - todos são maiores que 1 - demonstrando grande variabilidade nos dados, isto porque para todas as classes sociais o desvio padrão é maior que as médias. Quando isso acontece, a mediana é uma medida de dispersão mais indicada que a média. Na Tabela acima, temos que a menor mediana foi obtida para a classe D (1,4Km) e a maior para a classe A1 (3,2Km).
Neste trabalho foi realizado a Análise Exploratória dos Dados da Pesquisa O/D com o software R.
Inicialmente buscou-se entender as variáveis da base de dados, verificando seus tipos e entendendo seus significados (dicionário dos dados).
Partiu-se de análises univaridas de forma a entender melhor as variáveis de forma isolada, na sequência foram selecionadas algumas variáveis da base (6 qualitativas e 3 quantitativas), com o intuito de entender melhor como as variáveis trabalho e educação se comportam nas 460 zonas do domicílio. O interesse por essas variáveis foi do achado que elas são os principais fatores geradores de demanda de transporte na RMSP. Depois foram realizados análises bivariadas e multivariadas, sempre buscando responder a questão inicial: entender melhor como as variáveis trabalho e educação se comportam nas 460 zonas do domicílio. Outros achados foram: a região que mais gera empregos fica no entorno da zona 80; com relação a educação, o destaque positivo é para o entorno da região 30; os principais modais das viagens são: a pé, automóvel, ônibus, metrô e trem; a zona 95 foi a zona que mais utilizou automóvel e a zona 3 foi a zona que menos utilizou; somente há correlação considerável entre as variáveis “duracao” e “distancia”, sendo esta igual a 0,65 com r² = 39,7%; a zona do domicílio com maior número de amostras foi a 95; das amostras pesquisadas que estudam a maior parte o fez na zona 31; a zona que mais gera empregos é a 5; a classe social da maioria dos respondentes é a B2; o automóvel é o principal meio de transporte utilizado.
A análise permitiu ainda formar uma ideia da complexidade e dos desafios de tentar corrigir os problemas de planejamento urbano na RMSP. A falta de políticas públicas de uso e ocupação do solo causou um grande desequilíbrio demandando altos investimentos em sistemas de transporte. A questão agora seria: gastar os recursos em sistemas de transporte; e/ou investi-los no estimulo da geração de oportunidades de empregos e escolas nas regiões mais carentes?
Do ponto de vista do software R, este se mostrou muito promissor respondendo a todas as necessidades de cruzamento de dados, e ainda fornecendo gráficos muito elegantes. Mesmo trabalhando com uma base de dados relativamente grande - como os da Pesquisa O/D - em um computador simples, o desempenho foi muito bom.
Como sugestão de trabalhos futuros, temos a utilização do pacote ggmap para visualização geográfica das coordenadas UTM empregadas na pesquisa para a localização do domicílio (variáveis co_dom_x e co_dom_y), trabalho (co_tr1_x e co_tr1_y) e escola (co_esc_x e co_esc_y).